Gdybym miał uruchomiony system Debian, można by wydać następującą komendę, aby uzyskać listę zainstalowanych pakietów:
dpkg --get-selections > packages.lst
Ale teraz mam tylko pełną kopię zapasową partycji root (pełna kopia zapasowa systemu) działającego systemu i nic więcej. Jak mogę wygenerować listę zainstalowanych pakietów z tych plików?
debian
package-management
ceremcem
źródło
źródło
Odpowiedzi:
zrootować do niego i uruchomić dpkg byłoby najłatwiejszą rzeczą. Zobacz https://superuser.com/a/417004/20798 na jak dostać pracę
/proc
,/sys
i/dev
wewnątrz chroot.Ponieważ masz działający system debianowy poza kopią zapasową, prawdopodobnie możesz po prostu użyć
W
dir
domyślnie/var/lib/dpkg
, więc umieścić ścieżkę do tworzenia kopii zapasowych/var/lib/dpkg
.Nie zapominaj, że
dpkg --get-selections
nie pokazuje, które pakiety zostały zainstalowane ręcznie, a które zostały zainstalowane tylko w celu spełnienia zależności (i dlatego powinny być automatycznie usuwane, gdy nie są już potrzebne, ponieważ nowsze wersje pakietów, których tak naprawdę chcesz, mają różne zależności lub ponieważ usuwasz ręcznie zainstalowany pakiet).Używam aptitude, który ułatwia oznaczenie wszystkiego jako automatycznie zainstalowanego, a następnie przejrzenie i oznaczenie niektórych pakietów jako zainstalowanych ręcznie, dopóki nic, co chcesz zachować, nie zostanie automatycznie usunięte. Start z dużymi meta-pakietów, takich jak
build-essential
, ekwiwalenty Debiana zubuntu-standard
iubuntu-desktop
i takie tam. W aptitude, naciśnij,r
aby zobaczyć odwrotną zależność pakietu (pkgs, które zależą od niego).źródło
apt-mark
lub (znacznie wygodniej, ale nie instalować domyślnie),apt-clone
aby sklonować zestaw zainstalowanych pakietów, w tym flagę automatyczną / ręczną.dpkg --admindir=dir --get-selections
zawiera również listę odinstalowanych pakietów i innych niezainstalowanych. Musisz go przeanalizować, aby uzyskać tylko zainstalowane pakiety.dpkg --set-selections
. W takim przypadku uruchomaptitude
przed zezwoleniem dpkg na działanie na te wybory i zaznacz wszystkie pakiety, które mają zostać odinstalowane, jako niezmienione. Lub przejrzyj listę i zobacz, który cruft chcesz wyczyścić (i zmień go z deinstall na purge).Podejście Piotra jest lepsze, ale możesz też po prostu przeanalizować,
/var/lib/dpkg/status
co nie wymagachroot
:Na moim komputerze, który zwrócił tę samą listę pakietów co
dpkg --get-selections | awk '$NF=="install"{print $1}'
(awk
parsowanie jest potrzebne, ponieważ w przeciwnym razie pokazuje również odinstalowane pakiety).źródło
dpkg --get-selections
, 3925 paczek zgodnie z twoją linią pojedynczą i 1473 paczek brakuje w jednej linijce.dpkg --get-selections
że nie wyświetla tylko zainstalowanych pakietów. Wyświetli także te odinstalowane. Porównaj wyniki mojego jednowierszowego z tymdpkg --get-selections | awk '$NF=="install"{print $1}'
zamiast. Alternatywnie, po prostu uruchom,dpkg --get-selections | grep deinstall
aby zobaczyć na liście różne pakiety, których nie chcesz.dpkg_installed
Polecenie zwraca 193 mniej niż pakietydpkg --get-selections
commad. twój liniowiec ma 1204 dodatkowe, 1473 brakujące pakiety w porównaniu dodpkg --get-selections
komendy i 1204 dodatkowe, 1280 brakujących pakietów w porównaniu dodpkg_installed
komendy.dpkg_installed
? Gdzie mogę go znaleźć, to brzmi użytecznie i chciałbym to sprawdzić na moim komputerze. Mogę ci to powiedzieć tutaj,dpkg --get-selections | awk '$NF=="install"{print $1}'
a linijka Perla zwraca tę samą listę. W każdym razie nie ma sensu porównywać tego,dpkg --get-selections
ponieważ drukuje różne rzeczy, których nie chcesz.dpkg_installed
zamiastdpkg --get-selections | awk '$NF=="install"{print $1}'
. Nawiasem mówiąc, przeprowadzam kilka testów i wydaje się, że coś jest nie tak z moją bieżącą instalacją, ponieważ nie mogę znaleźć niektórych moich zainstalowanych aplikacji nadpkg --get-selections
liście. Przełączam moją opinię, dopóki nie uruchomię tych poleceń w niektórych innych instalacjach.Możesz mieć listę korzystającą z twoich pakietów, używając:
awk '/Package:/ {print $2}' /var/lib/dpkg/status
źródło