Wie kann ich feststellen, warum apt-get ein Paket installiert?

18

Diese Frage ähnelt der Frage Wie kann ich herausfinden, warum ein Paket installiert wurde? , aber in meinem Fall möchte ich vor der eigentlichen Installation eines Pakets wissen , warum es eine bestimmte Abhängigkeit installiert.

So könnte ich zum Beispiel rennen

sudo apt-get install superfoo

und die Ausgabe sagt etwas wie:

The following extra packages will be installed:
  foo bar baz ... libderp libjunk

Und das könnte eine wirklich große Liste sein. In einigen Fällen wird etwas installiert, das für mich bei der Installation keinen Sinn ergibt. Daher möchte ich wissen, warum diese bestimmte Abhängigkeit installiert wird.

Nehmen wir im obigen Beispiel an, ich würde gerne verstehen, warum libderpes installiert wird. Ich weiß, dass es irgendwie eine Kette von Abhängigkeiten zwischen superfoound gibt, libderpaber die riesige Liste der zu installierenden Pakete macht es schwierig zu erkennen, was diese Kette ist.

Sobald ich die Abhängigkeitskette kenne, kann ich entscheiden, ob ich das Originalpaket wirklich installieren möchte oder nicht, und / oder ob ich mich mit dem Betreuer des Pakets in Verbindung setzen soll, um zu sehen, ob diese Abhängigkeiten dort wirklich benötigt werden.

pbouf77
quelle
Wenn die Antwort von jemandem hilfreich für Sie war, sollten Sie sie als akzeptierte Antwort markieren, damit andere sie in Zukunft leichter finden können. Dies ist auch eine höfliche Art und Weise, der Person, die Ihre Frage beantwortet, für ihre Hilfe zu danken.
Danatela

Antworten:

14

Sie scheinen wirklich zu fragen: "Wie kann ich Abhängigkeiten grafisch darstellen?" So können Sie sehen, welche Pakete in welchen Abhängigkeiten abgelegt werden.

Sie erhalten vom apt-cacheBefehl sowohl Text- als auch Diagrammabhängigkeiten (im apt-Paket enthalten, Teil der Standardinstallation).

Hier ist ein Beispiel für apt-cache zum Auflisten von Abhängigkeiten des 'Hallo'-Pakets im Textformat. Die Textausgabe erfolgt immer nur auf einer Ebene.

$ apt-cache depends hello
hello
  Depends: libc6
 |Depends: dpkg
  Depends: install-info

Sie können das Diagramm mit einem beliebigen Dotfile-Viewer lesen, z. B. dotty(im graphviz-Paket enthalten, ebenfalls Teil der Standardinstallation).

Im folgenden Beispiel wird der vollständige Abhängigkeitsbaum grafisch dargestellt und anschließend angezeigt. Die grafische Ausgabe ist immer der vollständige Baum.

$ apt-cache dotty hello > dotfile
$ dotty dotfile

Wenn Sie es sich ansehen, können Sie sehen, dass das 'Hallo'-Paket eine Menge Perl-Pakete einpackt ... und welche Abhängigkeit dies bewirkt.

user535733
quelle
Während das funktionieren würde, wäre es eine ernste Arbeit, dies auf diese Weise zu tun, um zu sehen, was in einem bestimmten Paket gezogen wurde, wenn das Paket eine Abhängigkeit von einer Abhängigkeit war.
tgm4883
Keineswegs. Schauen Sie sich nur das DotFile-Bild an.
user535733
1
apt-cache depends --recurseSie erhalten ein vollständiges Bild, aber apt-rdepends unten ist besser, weil es nur den tatsächlichen Abhängigkeiten folgt, nicht den empfohlenen oder vorgeschlagenen.
Mhsmith
Obwohl apt-get die empfohlenen Abhängigkeiten installiert, sofern Sie nicht das --no-install-recommendsFlag verwenden.
Mhsmith
2
Was bedeutet dieser Balken? |
CMCDragonkai
9

apt-rdependstut dies, ohne mehr als 50 Bibliotheken von Cruft-like zu installieren ubuntu-dev-tools.

durr@scraper:~$ apt-rdepends mercurial
Reading package lists... Done
Building dependency tree
Reading state information... Done
mercurial
  Depends: libc6 (>= 2.14)
  Depends: mercurial-common (= 2.8.2-1ubuntu1)
  Depends: python (<< 2.8)
  Depends: ucf (>= 2.0020)
libc6
  Depends: libgcc1
libgcc1
  Depends: gcc-4.9-base (= 4.9-20140406-0ubuntu1)
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
gcc-4.9-base
multiarch-support
  Depends: libc6 (>= 2.3.6-2)
mercurial-common
  Depends: python (<< 2.8)
  Depends: python:any (>= 2.7.1-0ubuntu2)
python
  Depends: libpython-stdlib (= 2.7.5-5ubuntu3)
  Depends: python-minimal (= 2.7.5-5ubuntu3)
  Depends: python2.7 (>= 2.7.5-1~)
libpython-stdlib
  Depends: libpython2.7-stdlib (>= 2.7.5-1~)
libpython2.7-stdlib
  Depends: libbz2-1.0
  Depends: libc6 (>= 2.15)
  Depends: libdb5.3
  Depends: libexpat1 (>= 2.1~beta3)
  Depends: libffi6 (>= 3.0.4)
  Depends: libncursesw5 (>= 5.6+20070908)
  Depends: libpython2.7-minimal (= 2.7.6-8)
  Depends: libreadline6 (>= 6.0)
  Depends: libsqlite3-0 (>= 3.5.9)
  Depends: libssl1.0.0 (>= 1.0.0)
  Depends: libtinfo5
  Depends: mime-support
libbz2-1.0
  Depends: libc6 (>= 2.4)
  PreDepends: multiarch-support
libdb5.3
  Depends: libc6 (>= 2.17)
  PreDepends: multiarch-support
libexpat1
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
libffi6
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
libncursesw5
  Depends: libc6 (>= 2.15)
  Depends: libtinfo5 (= 5.9+20140118-1ubuntu1)
  PreDepends: multiarch-support
libtinfo5
  Depends: libc6 (>= 2.15)
  PreDepends: multiarch-support
libpython2.7-minimal
libreadline6
  Depends: libc6 (>= 2.15)
  Depends: libtinfo5
  Depends: readline-common
  PreDepends: multiarch-support
readline-common
  Depends: dpkg (>= 1.15.4)
  Depends: install-info
dpkg
  PreDepends: libbz2-1.0
  PreDepends: libc6 (>= 2.14)
  PreDepends: liblzma5 (>= 5.1.1alpha+20120614)
  PreDepends: libselinux1 (>= 2.1.0)
  PreDepends: tar (>= 1.23)
  PreDepends: zlib1g (>= 1:1.1.4)
liblzma5
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
libselinux1
  Depends: libc6 (>= 2.14)
  Depends: libpcre3
  PreDepends: multiarch-support
libpcre3
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
tar
  PreDepends: libacl1 (>= 2.2.51-8)
  PreDepends: libc6 (>= 2.17)
  PreDepends: libselinux1 (>= 1.32)
libacl1
  Depends: libattr1 (>= 1:2.4.46-8)
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
libattr1
  Depends: libc6 (>= 2.4)
  PreDepends: multiarch-support
zlib1g
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
install-info
  Depends: libc6 (>= 2.14)
  PreDepends: dpkg (>= 1.16.1)
libsqlite3-0
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
libssl1.0.0
  Depends: debconf (>= 0.5)
  Depends: debconf-2.0
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
debconf
  PreDepends: perl-base (>= 5.6.1-4)
perl-base
  PreDepends: dpkg (>= 1.14.20)
  PreDepends: libc6 (>= 2.14)
debconf-2.0
mime-support
python-minimal
  Depends: dpkg (>= 1.13.20)
  Depends: python2.7-minimal (>= 2.7.5-1~)
python2.7-minimal
  Depends: libpython2.7-minimal (= 2.7.6-8)
  Depends: zlib1g (>= 1:1.2.0)
  PreDepends: libc6 (>= 2.15)
python2.7
  Depends: libpython2.7-stdlib (= 2.7.6-8)
  Depends: mime-support
  Depends: python2.7-minimal (= 2.7.6-8)
python:any
ucf
  Depends: coreutils (>= 5.91)
  Depends: debconf (>= 1.5.19)
coreutils
  PreDepends: libacl1 (>= 2.2.51-8)
  PreDepends: libattr1 (>= 1:2.4.46-8)
  PreDepends: libc6 (>= 2.17)
  PreDepends: libselinux1 (>= 1.32)

Auf meinem sauberen Ubuntu-Server installieren, apt-rdependsnur libapt-pkg-perlfür die Installation erforderlich . Es ist dann viel leichter ubuntu-dev-toolsund dennoch rekursiv, sodass Sie alle Abhängigkeiten erhalten, anstatt nur die Abhängigkeiten erster Ordnung, wie z apt-cache depends. B. Rückgaben.

Falscher Name
quelle
Sorry, wenn ich falsch verstanden habe, aber ich denke, apt-rdepends ist nicht dasselbe wie reverse-depend. apt-rdepends listet die rekursiven Abhängigkeiten eines Pakets auf, während reverse-depends die Pakete auflistet, die vom angegebenen Paket abhängen.
rsuarez
apt-rdepends -r listet die umgekehrten Abhängigkeiten auf.
Keith
8

Möglicherweise gibt es eine einfachere Möglichkeit, dies zu tun. Sie können jedoch auch die umgekehrte Methode verwenden. Sie müssen dazu das Paket ubuntu-dev-tools installieren

apt-get install ubuntu-dev-tools

Oder durch Klicken auf diese Schaltfläche:

Installation über das Software Center

Nach der Installation können Sie dann mithilfe der umgekehrten Abhängigkeiten feststellen, was von einem bestimmten Paket abhängt. Wenn Sie beispielsweise versuchen, etwas zu installieren, das eine Reihe zusätzlicher Pakete installieren möchte, und Sie möchten sehen, warum "libsmpeg0" installiert wird, führen Sie es aus

reverse-depends libsmpeg0

Welches würde das folgende ausgeben.

Reverse-Recommends
==================
* sandboxgamemaker

Reverse-Depends
===============
* btanks
* fenix-plugin-mpeg [armel armhf i386 powerpc]
* fillets-ng
* gltron [amd64 armel i386 powerpc]
* libalien-sdl-perl
* libsdl-perl [i386]
* libsmpeg-dev
* libtaoframework-sdl1.2-cil
* python-pygame
* ruby-sdl
* sdlbrt
* smpeg-gtv
* smpeg-plaympeg
* tdfsb

Packages without architectures listed are reverse-dependencies in: amd64, armel, armhf, i386, powerpc

Sehen Sie sich an, ob das zu installierende Paket in dieser Liste enthalten ist. Ist dies nicht der Fall, wird in dieser Liste ein anderes Paket angezeigt, das während der Erstinstallation abgerufen wird, und Sie müssen das Paket abhängig von der Ausführung in umgekehrter Reihenfolge ausführen. Schließlich sehen Sie in dieser Liste das ursprüngliche Paket, das Sie installieren möchten. Zu diesem Zeitpunkt sollten Sie eine Kette haben, die genau anzeigt, warum das Paket installiert wurde.

Als zusätzliche Anmerkung glaube ich, dass Recommends standardmäßig aktiviert ist. Wenn also etwas als Recommended festgelegt ist, wird es in die Liste aufgenommen. Schlägt vor, wenn aus, aber in umgekehrter Reihenfolge können diese Informationen auch angezeigt werden.

tgm4883
quelle
2
Obwohl ich sicher bin, dass diese Antwort funktionieren würde, verkörpert sie das Problem, das das OP zu vermeiden versucht. ubuntu-dev-toolsführt dazu, dass die folgenden Pakete installiert werden. 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
Fake Name
2
[Fortsetzung] 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 (Hinweis: Das obige war nur die erforderlichen Pakete von sudo apt-get install ubuntu-dev-toolseiner ziemlich sauberen Ubuntu-Server-Instanz). Wenn Sie versuchen, die Installation großer Mengen Cruft zu vermeiden , ist dies wahrscheinlich die schlechteste Lösung.
Fake Name