Zainstalowałem zwykły Ubuntu 10.10 na swoim komputerze i zainstalowałem trochę oprogramowania przez apt-get. W zeszłym tygodniu udało mi się wszystko zepsuć i zacząłem od zera i muszę ponownie zainstalować oprogramowanie. Czy jest jakiś sposób na utworzenie listy ze wszystkimi pakietami, które zainstalowałem ręcznie?
Czyli da mi listę podobną texlive, ...
do tej, texlive, texlive-dep1, textlive-dep2, ...
a wszystkie standardowe pakiety zostały usunięte?
Gdybym mógł jakoś dowiedzieć się, które programy ze zwykłej instalacji usunąłem, byłoby to również niesamowite!
Aktualizacja 2015-05-23: Teraz używam Ansible jako zarządzania konfiguracją w moich systemach. Tam określam pakiety do zainstalowania. Służy to celowi, jeszcze bardziej instalując wszystkie programy w świeżym systemie. Więc to pytanie może być wstępem do lekkiego zarządzania konfiguracją.
something
i niesomething-common
tak dobrze.Ten wątek z superuser.com daje to rozwiązanie:
źródło
apt-get
, a także ich zależności. Na przykład, jeśli zainstalowałeśaptitude
, wyświetli się równieżapt-xapian-index aptitude-common libboost-iostreams1.54.0 libclass-accessor-perl libcwidget3 libept1.4.12 libio-string-perl libparse-debianchangelog-perl libsigc++-2.0-0c2a libsub-name-perl libtimedate-perl libxapian22 python-chardet python-debian python-six python-xapian
Jeśli twoje dzienniki apt znajdują się w / var / log / apt, coś takiego powinno działać:
Lub jeśli chcesz pozbyć się powtarzających się śmieci w danych wyjściowych:
źródło
Możesz użyć apt-mark , ale polecam debfoster :
Spowoduje to sprawdzenie wszystkich zainstalowanych pakietów i ustalenie, które z nich utrzymują pozostałe:
Kiedy odpowiesz „y” na każde pytanie (po prostu wciśnij Enter, aby przejść szybko), debfoster zbierze listę pakietów i zapisze je wiersz po wierszu do pliku. Domyślnie jest to
/var/lib/debfoster/keepers
. To wygląda tak:Konfiguruję debfoster poprzez,
/etc/debfoster.conf
aby umieścić tę listę/etc/debfoster-keepers
i śledzić plik za pomocą etckeeper, aby zachować historię i kopie zapasowe. Odpowiedź tutaj pokazuje jak zainstalować listę pakietów z pliku tekstowego nowej linii oddzielonych:Zwróć uwagę na ograniczenie w tym, że pakiety, które zostały usunięte, mają przed sobą znak „-”. Więc chcesz usunąć te linie przed wywołaniem apt-mark.
Chociaż strona internetowa debfostera mówi, że debfoster jest przestarzały na korzyść aptitude, wolę szybką i prostą konfigurację debfostera. Umieszcza cię w środku bazy danych pakietów i pozwala ci posprzątać, dzięki czemu pakiety automatyczne i ręczne stają się bardziej oczywiste.
Wpisz „h” w wierszu debfoster, aby wyjaśnić opcje. Rodzaj "?" aby zobaczyć opis pakietu. How-to tutaj może być przydatna.
źródło
Daje wszystkie ręcznie zainstalowane pakiety (nie pakiety systemowe, nie zależności). Na przykład pokazuje,
build-essential
ale niegcc
.źródło
Dla tych, którzy wolą używać narzędzi apt- *, jest narzędzie apt-mark, które pozwala zarówno na zapytania, jak i modyfikowanie stanu ręcznego / automatycznego.
Możesz także określić wzór dla pakietów, które Cię interesują:
źródło
W końcu mam to teraz:
źródło
/var/log/apt/history.log(.N.gz)
.zgrep
zamiastgunzip
lubzcat
do potokugrep
. Wierzę, że jest to skrypt otoki dostarczany z gzip. Akceptuje również pliki nieskompresowane, dzięki czemu można uprościć skryptzgrep -E '(\[INSTALLIEREN\]|\[INSTALL\])' /var/log/aptitude* | awk '{ print $2 }'
Jestem w stanie wyciągnąć wszystko, otwierając pliki dziennika w / var / log / apt /
Następnie wchodzę i ręcznie odfiltrowuję pakiety instalacyjne apt-get. Może istnieć sposób na zrobienie tego programowo, ale nie jestem tego świadomy.
źródło
w ten sposób zobaczysz listę poleceń wykonanych w przeszłości.
Usuń kod grep, jeśli potrzebujesz więcej informacji:
jeśli dziennik jest skompresowany (tzn. kończy się na gz)
aby go ponownie skompresować po zakończeniu, możesz:
źródło
zcat
? To jest tak proste jakzcat filename.gz
. Można go użyć zamiast skompresowanych plików gzipcat
. Równieżgrep
można zastąpićzgrep
npzgrep Commandline history.log.1.gz
.(grep "Commandline" history.log ; zgrep "Commandline" history.log.*.gz ) | grep " install " | grep -v -- "--yes" | sed -r "s/^.*install //"
. Ma wady, ponieważ usunięte pakiety są również wymienione, a jeśli pakiet został zainstalowany więcej niż raz, jest wymieniony wiele razy.Nie widziałem, żeby jakieś rozwiązania działały dla mnie, zainstalowałem sporo pakietów deb z dpkg i brakowało kilku elementów, których szczególnie szukałem.
Dość długa jedna wkładka, ale wygodna do skopiowania i wklejenia to:
Powyższe polecenie zapisuje listę pakietów do pliku w bieżącym katalogu roboczym o nazwie
my-packages
.Wyjaśnienie
Najpierw zbudowałem listę pakietów, które stanowiły linię bazową pakietów wybranych podczas instalacji.
Następnie znajduje się długa lista elementów zainstalowanych ogólnie.
Następnie porównałem oba pliki
initial
iinstalled
wymieniłem tylko te elementy, które nie były zainstalowane.Stamtąd chciałem odfiltrować zależności, tutaj ta metoda może ominąć niektóre pożądane pakiety, nie jest świadoma zależności, które są również jawnie zainstalowane.
Napisałem funkcję szybkiego bashu, aby skrócić te kroki w przetwarzaniu tych elementów.
Następnie przekazałem każdą linię z mojego pliku
custom
do tej funkcji za pomocąxargs
.Kiedy miałem długą listę wszystkich możliwych zależności (nie jestem pewien co do każdej możliwej instrukcji), ponownie otrzymałem wiersze, które były unikalne dla jednego pliku.
A moja skończona lista pakietów znajduje się teraz w pliku o nazwie
manual
dostępnej do przejrzenia.źródło
Ktoś powiązany z https://unix.stackexchange.com/questions/3595/ubuntu-list-explicitly-installed-packages/3624#3624, który ma dobre rozwiązanie, ale nie zachowuje się poprawnie jak wyjście z aptitude zmienił się. Oto zaktualizowana wersja oparta na porównaniu aktualnie zainstalowanych pakietów w porównaniu do 12,04 LTS. Będziesz musiał
aptitude
zainstalować, to jedyny wymóg.Aby rozbić powyższe polecenie na części, ten bit wyprowadza jeden pakiet na linię wszystkiego zainstalowanego w systemie
Spowoduje to pobranie domyślnej listy pakietów i wycięcie zbędnych informacji.
i
comm
porównuje dwa pliki i wyprowadza pakiety, których nie ma na domyślnej liście.źródło
Użyj pliku manifestu dystrybucji jako podstawowego zestawu pakietów. Sortuj ręcznie zainstalowane wyniki według grup pakietów według architektury i sekcji, dzięki czemu łatwiej jest skupić się na grupach pakietów (być może nie obchodzą Cię niektóre sekcje).
https://gist.github.com/darrenleeweber/8cc570ff402f19af7fa4
źródło
apt-get install -y
a plik jest skryptem bash. Wówczas wszystkie pliki pakietu mogłyby zostać włączone do błędnej pętli udostępniania.źródło
Nie znalazłem takiego, który byłby dla mnie odpowiedni, więc napisałem scenariusz. Analizując zawartość /var/log/apt/history.log* i / var / log / aptitude, a następnie sortuj według datetime, w wyniku czego powstają dwie listy, jedna jest ręcznie instalowana pkgs, druga jest instalowana, ale usunięta pkgs. Skrypt z weryfikacją „apt list”. małe odchylenie, ponieważ użycie zainstalowanego i zmodyfikowanego źródła PPA dpkg.
Tutaj umieszczam https://github.com/eexpress/eexp-bin/blob/master/self-installed-pkg.pl .
jeśli ktoś potrzebuje go przetestować, może potrzebuję zmodyfikować kod, ponieważ moje pliki dziennika są mieszane w języku chińskim i angielskim (szczególnie w formacie datetime RFC2822), muszę się z tym pogodzić.
źródło
Myślę, że chcesz użyć
/var/log/apt/history.log
i jego przyjaciół, aby wprowadzić zmiany, które zostały wprowadzone:(Zmodyfikowane ze źródła )
Daje ci wszystkie pakiety, które zostały zainstalowane w wierszu poleceń za pomocą odmiany
apt-get install
.Pobiera spakowane pliki ze starego
history.log
s dodaje je z bieżącymhistory.log
i przechodzi przez grep, wyodrębniając wiersze za pomocą apt [-get] zainstaluj [i / lub zainstaluj ponownie] i pokazując resztę linii (flaga -o), co stanowi nazwy pakietów.Będzie to wymagać trochę modyfikacji (np. Za pomocą
sed
), jeśli chcesz tylko nazwy pakietów w osobnych wierszach; ćwiczenie dla czytelnika!Warto zauważyć, że menedżer pakietów synaptycznych (
gksu synaptic
lubkdesudo synaptic
) w sekcji „status” ma listę „zainstalowanych (ręcznie)”. Jeśli zaznaczysz całą listę do usunięcia [nie stosuj jej !!], powinieneś być w stanie zapisać zaznaczone zmiany i uzyskać listę pakietów w ten sposób. Uwaga: tosynaptic
dla mnie zablokowane (prawdopodobnie obliczanie usunięć zależności).źródło