Как я могу определить, почему apt-get установит пакет?

Этот вопрос похож на Как узнать, почему был установлен пакет? , но в моем случае я хотел бы знать до фактической установки пакета, почему он установит определенную зависимость.

Так, например, я мог бы запустить

sudo apt-get install superfoo

, и вывод скажет что-то вроде:

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

И это может быть действительно огромный список. В некоторых случаях я увижу что-то, что будет установлено, что не имеет смысла для меня, учитывая то, что я устанавливаю, поэтому я хочу знать , почему эта конкретная зависимость будет установлена . [+1112]

В приведенном выше примере, скажем, я хотел бы понять, почему libderp будет установлен. Я знаю, что каким-то образом существует цепочка зависимостей между superfoo и libderp, но огромный список устанавливаемых пакетов затрудняет понимание того, что это за цепочка.

Когда я знаю цепочку зависимостей, я могу решить, действительно ли я хочу установить оригинальный пакет или нет, и / или мне следует связаться с сопровождающим этого пакета, чтобы узнать, действительно ли они ] там должны быть эти зависимости.

18
задан 13 April 2017 в 15:24

4 ответа

apt-rdepends делает это, без установка 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)

На моей чистой установке сервера человечности, apt-rdepends только потребовал libapt-pkg-perl для установки. Это намного легче затем ubuntu-dev-tools и все же все еще рекурсивно, таким образом, Вы добираетесь весь зависимости, скорее затем просто зависимости первого порядка, как apt-cache depends возвраты.

9
ответ дан 13 April 2017 в 15:24

То, что Вы действительно, кажется, спрашиваете, "Как я схематически изображаю зависимости?" таким образом, Вы видите, который пакеты вытягивают в который зависимости.

Вы получаете и текст и схематически изображенные зависимости от apt-cache команда (включенный в способный пакет, часть установки по умолчанию).

Вот пример способного кэша для списка зависимостей 'привет' пакет в текстовом формате. Текстовый вывод всегда будет только одним уровнем.

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

можно прочитать схему с помощью любого dotfile средства просмотра, такой, как dotty (включенный в graphviz пакет, также часть установки по умолчанию)

Вот пример получения полного дерева зависимостей в графическом формате, затем отображая его. Вывод графических данных всегда будет полным деревом.

$ apt-cache dotty hello > dotfile
$ dotty dotfile

Просмотр его, Вы видите, что 'привет' пакет вытягивает в тонне пакетов Perl... и какая зависимость делает это.

14
ответ дан 13 April 2017 в 15:24

Может быть более легкий способ сделать это, но он может быть сделан при использовании реверса - зависит. Необходимо будет установить ubuntu-dev-tools пакет путем выполнения

apt-get install ubuntu-dev-tools

Или путем нажатия этой кнопки:

Install via the software center

Когда-то установленный, можно затем использовать реверс - зависит для наблюдения то, что зависит от определенного пакета. Например, при попытке установить что-то, что хочет установить набор дополнительных пакетов, и Вы хотите видеть, почему "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

Смотрят и видят, находится ли пакет, который Вы хотите установить, в том списке. В противном случае затем другой пакетов, который втягивается во время той начальной установки, обнаружится в том списке, и необходимо будет работать, реверс - зависит от того пакета. В конечном счете Вы будете видеть начальный пакет, который Вы хотите установить в том списке. В той точке у Вас должна быть цепочка, показывающая точно, почему тот пакет был установлен.

, Поскольку добавленное примечание, которому я верю, рекомендует, идет по умолчанию, поэтому если что-то будет установлено как рекомендование, то оно будет втянуто к. Предлагает, если выключенный, но реверс - зависит, может показать ту информацию также.

8
ответ дан 13 April 2017 в 15:24

Можно использовать встроенные параметры отладки APT, чтобы получить представление о лежащем в основе дереве зависимостей от преобразователя.

Из apt.conf (5)

Debug :: pkgDepCache :: AutoInstall

Создавать отладочные сообщения, описывающие, какие пакеты устанавливаются автоматически для разрешения зависимостей. Это соответствует первоначальному этапу автоматической установки, выполняемому, например, в apt-get install, а не полному преобразователю зависимостей apt; см. Debug :: pkgProblemResolver для этого.

$ apt install -s -o Debug::pkgDepCache::AutoInstall=true mercurial
Reading package lists... Done
Building dependency tree       
Reading state information... Done
  Installing mercurial-common as Depends of mercurial
    Installing python2 as Depends of mercurial-common
      Installing python2-minimal as PreDepends of python2
        Installing python2.7-minimal as Depends of python2-minimal
          Installing libpython2.7-minimal as Depends of python2.7-minimal
      Installing python2.7 as Depends of python2
        Installing libpython2.7-stdlib as Depends of python2.7
      Installing libpython2-stdlib as Depends of python2
The following additional packages will be installed:
  libpython2-stdlib libpython2.7-minimal libpython2.7-stdlib mercurial-common python2 python2-minimal python2.7 python2.7-minimal
7
ответ дан 19 April 2020 в 19:47

Другие вопросы по тегам:

Похожие вопросы: