(To pytanie jest bardzo podobne do 10458. Sugerowano, że Fedora i Ubuntu / Debian są na tyle różne, że uzasadniają różne odpowiedzi).
Podczas korzystania z dowolnej konfiguracji Ubuntu stopniowo instaluję wiele pakietów ponad instalacją podstawową. Jeśli przeprowadzam ponowną instalację lub muszę zainstalować nową maszynę, zwykle chcę ponownie zainstalować te konkretne pakiety i chcę to zrobić szybko, aby wrócić do pracy przy minimalnym wysiłku. O ile widziałem wszystkich menedżerów pakietów ( apt-get
, aptitude
i synaptic
) może mi które są zainstalowane pakiety powiedzieć, a wszystkie one mają różne dzienniki (choć te dla każdego narzędzia, które jest uciążliwe). Ale żaden z nich nie może mi powiedzieć, które pakiety mamzainstalowane, w przeciwieństwie do ich zależności lub aktualizacji systemu. Nawet dzienniki są trudne, ponieważ nie jestem do końca pewien, co powinienem z nich wyciągać lub jak je zintegrować (w przypadku różnych narzędzi rodziny apt). Oznacza to, że za każdym razem, gdy ponownie instaluję, a nawet po prostu wykonuję kopię zapasową, nie jestem pewien, jak ponownie utworzyć tę listę.
Niekoniecznie oczekuję, że którekolwiek z narzędzi to dla mnie zrobi, ale jeśli nie, szukam obejścia. Przydałyby się nawet wzorce, za którymi należy się posługiwać, dobre ogólne zasady lub jasne wyobrażenie o tym, co dokładnie jest rejestrowane. Być może nie ma tutaj „najlepszej odpowiedzi”, ale dobre byłyby bardzo pomocne.
Większość poniższych odpowiedzi stanowi przybliżenie tego, czego szukam, i są do pewnego stopnia przydatne. Wybrany to ten, który zbliża się do rozsądnie automatycznego sposobu ponownej instalacji moich narzędzi w nowym systemie, nawet ze wszystkimi jego zastrzeżeniami.
źródło
Odpowiedzi:
Na dowolnej maszynie opartej na Debianie jest to jeden z powszechnych sposobów powielania zestawu pakietów. Na starej maszynie:
Skopiuj plik
my_favorite_packages
na nową maszynę (pamięć USB jest dobrą opcją, alescp
działa również dobrze). Następnie uruchom następującą sekwencję (z uprawnieniami administratora):Nie dostaniesz tylko zainstalowanych pakietów. Dostaje również ich zależności itp. Ponadto, jeśli repozytoria między dwoma maszynami są różne, wszystkie zakłady są wyłączone.
Jeśli chodzi o dzienniki,
apt-get
prowadzi dziennik na/var/log/apt/history.log
(dzięki Tshepang za aktualizację tego w komentarzu);dpkg
robi (at/var/log/dpkg.log
), ale słynie, że trudno go analizować i można go czytać tylko z uprawnieniami roota;aptitude
ma jeden na/var/log/aptitude
i możesz przeglądać go z regularnymi uprawnieniami użytkownika.O ile mogę stwierdzić, masz rację, że żaden z tych dzienników nie śledzi dokładnie tego, co zainstalowałeś, w przeciwieństwie do automatycznie instalowanych zależności. Możesz jednak uzyskać te informacje z
aptitude
wyszukiwania. Wyszukaj wszystkie zainstalowane pakiety, które również zostały zainstalowane automatycznie:Jeśli chcesz tylko te, które zainstalowałeś (a nie automatyczne zależności), zaneguj
~M
:Jeśli chcesz to sformatować tak, aby mieć tylko nazwy pakietów i słowo „zainstaluj”,
aptitude
możesz to zrobić. To daje listę gotową do karmienia dodpkg --get-selections
:(Mam nic na systemach RedHat opartych lub RedHat. Przepraszam. Naprawdę nie ma jednej odpowiedzi na Linuksie per se od zarządzania pakietami jest duża część tego, co sprawia, że różne dystrybucje inny ).
źródło
apt-get
,synaptic
iaptitude
(o ile widziałem). Dzieje się tak od początku 2010 roku.dpkg.log
oświadczenia nie wydają się być prawdziwe w Ubuntu 14.04 jako dowolny użytkownik mogę dostać pozycje łatwo, nie jest trywialne, ale nie jest zbyt trudne.awk '$3 != "install" { next } ; { gsub(/:.+/, "", $4) ; print $4 }' /var/log/dpkg.log | sort | uniq
awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u
robi.Służy
dpkg -l '*' > jaunty.original
do zapamiętywania wszystkich zainstalowanych pakietów w świeżo zainstalowanym systemie.Po zainstalowaniu wykonaj wszystkie dodatkowe pakiety
dpkg -l '*' > mysystem.2009017
.Dodatkowe pakiety to tylko różnica:
diff jaunty.original mysystem.2009017
źródło
Aptitude jest w tym całkiem niezła. Aptitude wie, kiedy coś zostało zainstalowane ręcznie lub zależnie, i możesz to powiedzieć, aby usunąć rzeczy, które nie są już potrzebne i zostały zainstalowane tylko dlatego, że coś innego zależało od tego, zawsze utrzymując twój system tak mały, jak to możliwe.
Istnieje garść pakietów, które składają się na instalację Ubuntu, ubuntu-minimal, ubuntu-desktop, ubuntu-server i tak dalej. Jeśli powiesz Aptitude, aby oznaczyło je jako zainstalowane ręcznie i usunęło wszystko inne, to otrzymujesz minimalną możliwą liczbę pakietów.
Wyjaśniam, jak to wszystko zrobić w dwóch postach na moim blogu: Czyszczenie Debiana GNU / Linux i Czyszczenie Debiana GNU / Linux (lub Ubuntu), powtórz . Krótko mówiąc, odpowiedź, której szukasz, to:
Ostatnim razem, gdy nad tym pracowałem, jeśli użyłeś apt-get, to nie działało. Dlatego zawsze polecam aptitude i, o ile mi wiadomo, Debian nie stosuje apt-get na korzyść aptitude.
Nie wiem, jak to zrobić na Fedorze i prawdopodobnie powinieneś się rozdzielić niż na inne pytanie. Fedora i Ubuntu to różne systemy operacyjne i powinny być traktowane jako takie (nawet jeśli współużytkują jądro i inne rzeczy).
źródło
grep
:aptitude search '~i !~M'
należy załatwić sprawę .apt-get
nie jest przestarzałe. Debian zalecaaptitude
zarządzanie pakietami w wierszu poleceń, ale jest to dalekie od przestarzałychapt-get
.Na debian apt-show-wersje pokazuje wersje zainstalowanych pakietów.
źródło
W systemach opartych na apt spójrz na /var/log/apt/term.log. Dla mnie jest dość wyraźna linia do narysowania, gdzie zakończyła się instalacja i gdzie zaczęły się moje instalacje.
źródło
Od
man aptitude-create-state-bundle
:Pozwoli to zachować te same informacje, które
aptitude
dotyczą ręcznego instalowania pakietów.Jest przeznaczony do użytku z
aptitude-run-state-bundle
:źródło
Podczas korzystania
dpkg
nie wiesz, czy pakiet został ręcznie zainstalowany przez użytkownika, czy automatycznie (jako zależność lub podczas pierwszej instalacji systemu operacyjnego). Jeśli chcesz zachować te informacje, musisz uzyskać listę tylko tych pakietów, które zostały faktycznie zainstalowane ręcznie.W tym celu możesz użyć jednej z tych dwóch linijek. Oba dają dokładnie taką samą wydajność na moim komputerze i są bardziej precyzyjne niż wszystkie rozwiązania proponowane do tej pory w tym pytaniu. Są kombinacją dwóch odpowiedzi (1) i (2) . Pamiętaj, że pierwotnie opublikowałem tę odpowiedź tutaj .
Używanie
apt-mark
:Używanie
aptitude
:Bardzo niewiele pakietów wciąż przechodzi przez pęknięcia, chociaż podejrzewam, że są one faktycznie instalowane przez użytkownika, albo bezpośrednio po instalacji poprzez konfigurację lokalizacji języka lub np. Przez instalator kodeków Totem. Wydaje się, że również wersje nagłówka linuxa kumulują się, mimo że zainstalowałem tylko niespecyficzny dla metapakietu pakiet. Przykłady:
Jak to działa
sed
usuwa pozostałe białe znaki na końcu linii.Inne możliwości również nie działają:
ubuntu-14.04-desktop-amd64.manifest
pliku ( tutaj dla Ubuntu 14.04) zamiast/var/log/installer/initial-status.gz
. Więcej pakietów jest wyświetlanych jako zainstalowane ręcznie, nawet jeśli nie są.apt-mark showauto
zamiast/var/log/installer/initial-status.gz
.apt-mark
na przykład nie zawiera pakietu xserver-xorg, podczas gdy drugi plik tak.Oba wyświetlają więcej pakietów niż powyższe rozwiązanie.
źródło
Jestem stronniczy, a przedstawione przeze mnie rozwiązanie nie zawsze jest możliwe, ale mam już dość tej sytuacji. W rezultacie nic nie instaluję już za pomocą narzędzi do aktualizacji / zarządzania pakietami.
Wybrałem jednak dość trudną trasę (miałem surowe wymagania dotyczące wersji). Stworzyłem ogromny plik makefile, który pobiera, kompiluje i instaluje w moim katalogu domowym każdą potrzebną paczkę (program, bibliotekę, cokolwiek). Rozwijałem go krok po kroku, kawałek po kawałku. Makefile pobiera i kompiluje wszystko, nawet kompilatory.
Kiedy przeprowadzam się do nowego systemu lub instaluję ponownie, po prostu kopiuję plik makefile (plus kilka dodatkowych elementów), uruchamiam make world i wracam następnego dnia.
W przypadku niektórych programów, które rozwijam (więc mam kontrolę), używam zaprogramowanego narzędzia, menedżera pakietów kasztanów . Coś w rodzaju folderów .app na MacOSX. Wszystko jest w pakiecie, więc wiem, co jest instalowane w dowolnym momencie, i wiem, że jest samowystarczalny i samowystarczalny (z wyjątkiem bibliotek systemowych)
źródło