apt-getがパッケージをインストールする理由を判断するにはどうすればよいですか?


18

この質問は、パッケージがインストールされた理由を知るにはどうすればよいですか?、しかし、私の場合、実際にパッケージをインストールするに、なぜ特定の依存関係をインストールするのかを知りたいと思います。

例えば、私は実行するかもしれません

sudo apt-get install superfoo

出力は次のようになります:

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

そして、これは本当に巨大なリストかもしれません。場合によっては、インストールしようとしているものを考えると、意味をなさないものがインストールされるのでその特定の依存関係がインストールされる理由を知りたいと思います。

上記の例で、なぜlibderpインストールされるのか理解したいとしましょう。私は何とか間の依存関係の連鎖があることを知っているsuperfoolibderp、それは難しいこのチェーンがあるかを確認することができますが、インストールするパッケージの膨大なリストが、が。

依存関係のチェーンがわかれば、元のパッケージを本当にインストールするかどうか、および/またはそのパッケージのメンテナーに連絡して、それらの依存関係が本当に必要かどうかを確認するかどうかを決定できます。


誰かの回答があなたにとって有益だった場合、他の人が将来より簡単に見つけられるように、受け入れられた回答としてマークすることを検討してください。これは、あなたの質問に答えてくれた人があなたを助けてくれたことに感謝する丁寧な方法でもあります。
ダナテラ14

回答:


14

あなたが本当に求めているように見えるのは、「依存関係を図にするにはどうすればいいですか?」です そのため、どのパッケージがどの依存関係を取り込むかを確認できます。

apt-cacheコマンドからテキストと図の両方の依存関係を取得します(デフォルトのインストールの一部であるaptパッケージに含まれています)。

「hello」パッケージの依存関係をテキスト形式で一覧表示するapt-cacheの例を次に示します。テキスト出力は常に1レベルのみです。

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

dotty(graphvizパッケージに含まれ、デフォルトのインストールの一部でもある)などのドットファイルビューアを使用してダイアグラムを読むことができます。

依存関係ツリー全体をグラフィカル形式で取得して表示する例を次に示します。グラフィカル出力は常に完全なツリーになります。

$ apt-cache dotty hello > dotfile
$ dotty dotfile

よく見ると、「hello」パッケージが大量のPerlパッケージを取り込み、どの依存関係がそれを行うかがわかります。


これは機能しますが、パッケージが依存関係の依存関係である場合、特定のパッケージを何がプルしているかを確認するために、この方法で行うのは大変な作業です。
tgm4883

どういたしまして。ドットファイルの画像だけを見てください。
user535733

1
apt-cache depends --recurse全体像が得られますが、以下のapt-rdependsは、推奨または推奨されていない実際の依存関係のみに従うため、より適切です。
mhsmith

ただし、--no-install-recommendsフラグを使用しない限り、apt-getは実際に推奨される依存関係をインストールします。
mhsmith

2
そのバーはどういう意味ですか?|
CMCDragonkai

9

apt-rdependsこれを行うには、のようなcruftの50以上のライブラリインストールしません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)

クリーンなubuntuサーバーのインストールでは、インストールにapt-rdependsのみ必要libapt-pkg-perlです。それよりもはるかに軽量ubuntu-dev-toolsであり、まだ再帰的であるため、returnsのような1次の依存関係だけでなく、すべての依存関係を取得できapt-cache dependsます。


誤解して申し訳ありませんが、apt-rdependsはreverse-dependsと同じではないと思います。apt-rdependsはパッケージの再帰的な依存関係を一覧表示しますが、reverse-dependsは指定されたパッケージに依存するパッケージを一覧表示します。
rsuarez

apt-rdepends -rは、逆の依存関係をリストします。
キース

8

これを行う簡単な方法があるかもしれませんが、逆依存を使用する場合は行うことができます。以下を実行して、ubuntu-dev-toolsパッケージをインストールする必要があります。

apt-get install ubuntu-dev-tools

または、このボタンをクリックして:

ソフトウェアセンターからインストールする

インストールしたら、reverse-dependsを使用して、特定のパッケージに依存するものを確認できます。たとえば、追加のパッケージをインストールしたいものをインストールしようとし、「libsmpeg0」がインストールされている理由を確認したい場合は、次を実行します。

reverse-depends libsmpeg0

次のように出力されます。

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

見て、インストールするパッケージがそのリストにあるかどうかを確認してください。そうでない場合は、その最初のインストール中に取り込まれた別のパッケージがそのリストに表示され、そのパッケージに応じて逆方向に実行する必要があります。最終的に、そのリストにインストールする初期パッケージが表示されます。その時点で、そのパッケージがインストールされた正確な理由を示すチェーンが必要です。

追加のメモとして、私はお勧めがデフォルトでオンになっていると思うので、何かがお勧めとして設定されている場合、それは引き込まれるでしょう。オフの場合は提案しますが、逆依存でもその情報を表示できます。


2
この答えはうまくいくと確信していますが、OPが回避しようとしている問題を具体化しています。ubuntu-dev-tools次のパッケージがインストールされます。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
偽の名前14

2
[続き] 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 (注:上記は、かなりきれいなubuntuサーバーインスタンスからの必要なパッケージにすぎませsudo apt-get install ubuntu-dev-tools)。大量の粗悪品のインストールを避けようとしている場合、これはおそらく最悪の解決策です。
偽の名前14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.