To pytanie jest podobne do Jak dowiedzieć się, dlaczego pakiet został zainstalowany? , ale w moim przypadku chciałbym wiedzieć przed zainstalowaniem pakietu, dlaczego zainstaluje on określoną zależność.
Na przykład mogę uruchomić
sudo apt-get install superfoo
a wynik powie coś takiego:
The following extra packages will be installed:
foo bar baz ... libderp libjunk
To może być naprawdę ogromna lista. W niektórych przypadkach zobaczę coś, co zostanie zainstalowane, co nie ma dla mnie sensu, biorąc pod uwagę to, co instaluję, więc chcę wiedzieć, dlaczego ta konkretna zależność zostanie zainstalowana.
W powyższym przykładzie powiedzmy, że chciałbym zrozumieć, dlaczego libderp
zostałby zainstalowany. Wiem, że jakoś tam to sieć zależności między superfoo
a libderp
jednak ogromna lista pakietów do zainstalowania sprawia, że trudno zrozumieć, co to jest łańcuch.
Gdy poznam łańcuch zależności, mogę zdecydować, czy naprawdę chcę zainstalować oryginalny pakiet, czy nie i / lub czy powinienem skontaktować się z opiekunem tego pakietu, aby sprawdzić, czy naprawdę muszą mieć te zależności.
źródło
Odpowiedzi:
Naprawdę pytasz: „Jak wykreślić zależności?” dzięki czemu można zobaczyć, które pakiety ściągają zależności.
Zależności tekstowe i diagramowe otrzymujesz z
apt-cache
polecenia (zawarte w pakiecie apt, część domyślnej instalacji).Oto przykład apt-cache do wyświetlania zależności pakietu „hello” w formacie tekstowym. Tekst zawsze będzie miał tylko jeden poziom.
Możesz odczytać diagram za pomocą dowolnej przeglądarki plików kropkowych, takiej jak
dotty
(zawarta w pakiecie graphviz, również stanowiąca część instalacji domyślnej)Oto przykład uzyskania pełnego drzewa zależności w formacie graficznym, a następnie jego wyświetlenie. Wyjściem graficznym zawsze będzie pełne drzewo.
Przeglądając to, możesz zobaczyć, że pakiet „hello” ściąga tonę pakietów Perla ... i która to zależność.
źródło
apt-cache depends --recurse
da ci pełny obraz, ale apt-rdepends poniżej jest lepszy, ponieważ śledzi tylko rzeczywiste zależności, niezalecane ani sugerowane.--no-install-recommends
flagi.|
apt-rdepends
robi to bez instalowania ponad 50 bibliotek cruft likeubuntu-dev-tools
.Na mojej czystej instalacji serwera Ubuntu jest
apt-rdepends
wymagana tylkolibapt-pkg-perl
do instalacji. Jest wtedy znacznie lżejszyubuntu-dev-tools
, a jednak wciąż rekurencyjny, więc otrzymujesz wszystkie zależności, a nie tylko zależności pierwszego rzędu, takie jakapt-cache depends
zwroty.źródło
Może to być łatwiejszy sposób, ale można to zrobić, jeśli używasz odwrotnego polecenia. W tym celu musisz zainstalować pakiet ubuntu-dev-tools
apt-get install ubuntu-dev-tools
Lub klikając ten przycisk:
Po zainstalowaniu możesz użyć odwrotnego polecenia, aby zobaczyć, co zależy od konkretnego pakietu. Na przykład, jeśli próbujesz zainstalować coś, co chce zainstalować kilka dodatkowych pakietów i chcesz zobaczyć, dlaczego instalowane jest „libsmpeg0”, uruchom
Co wygeneruje następujące.
Zobacz, czy pakiet, który chcesz zainstalować, znajduje się na tej liście. Jeśli nie, to na liście pojawi się kolejny pakiet, który jest pobierany podczas tej pierwszej instalacji, i będziesz musiał uruchomić odwrotnie, zależnie od tego pakietu. W końcu zobaczysz na liście początkowy pakiet, który chcesz zainstalować. W tym momencie powinieneś mieć łańcuch pokazujący dokładnie, dlaczego ten pakiet został zainstalowany.
Jako dodatkową notatkę, uważam, że zalecane są domyślnie włączone, więc jeśli coś zostanie ustawione jako rekomendacje, zostanie wciągnięte do. Sugeruje, że jest wyłączone, ale funkcja odwrotnego wyświetlania może również wyświetlać te informacje.
źródło
ubuntu-dev-tools
powoduje zainstalowanie następujących pakietów.bzr bzr-builddeb dctrl-tools debian-archive-keyring debian-keyring debootstrap devscripts diffstat distro-info distro-info-data dput genisoimage gettext hardening-includes intltool-debian libapt-pkg-perl libarchive-zip-perl libasprintf-dev libassuan0 libauthen-sasl-perl libautodie-perl libclone-perl libcommon-sense-perl libcroco3 libdigest-hmac-perl libdistro-info-perl libemail-valid-perl libencode-locale-perl liberror-perl
python-launchpadlib python-lazr.restfulclient python-lazr.uri python-oauth python-paramiko python-reportbug python-secretstorage python-simplejson python-soappy python-support python-wadllib python3-debian python3-magic quilt reportbug t1utils unzip wdiff xdelta
(Uwaga: powyższe były tylko wymagane pakiety zsudo apt-get install ubuntu-dev-tools
dość czystej instancji serwera ubuntu). Jeśli próbujesz uniknąć instalowania dużych ilości cruft, jest to prawdopodobnie najgorsze możliwe rozwiązanie.