Apt-get'in neden bir paket yükleyeceğini nasıl belirleyebilirim?


18

Bu soru benzer Bir paketin neden kurulduğunu nasıl öğrenebilirim? , ancak benim durumumda , bir paketi yüklemeden önce , neden belirli bir bağımlılık yükleyeceğini bilmek istiyorum .

Mesela koşabilirim

sudo apt-get install superfoo

ve çıktı şöyle bir şey söyleyecektir:

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

Ve bu gerçekten çok büyük bir liste olabilir. Bazı durumlarda, yükleyeceğim şey göz önüne alındığında, bana gerçekten mantıklı gelmeyecek bir şey yüklenecek bir şey göreceğim, bu yüzden bu bağımlılığın neden yükleneceğini bilmek istiyorum .

Yukarıdaki örnekte neden libderpyükleneceğini anlamak istediğimi varsayalım. Bir şekilde arasındaki bağımlılıkları bir zincir olduğunu biliyoruz superfoove libderpancak paketlerin büyük liste zor bu zincir ne olduğunu görmek için yapar kurulacak.

Bağımlılık zincirini öğrendikten sonra, orijinal paketi gerçekten yüklemek isteyip istemediğime ve / veya orada bu bağımlılıklara gerçekten ihtiyaç duyup duymadıklarını görmek için o paketin bakımcısıyla iletişime geçip geçmememe karar verebilirim .


Birinin cevabı size yardımcı olduysa, lütfen cevapları kabul edilen cevap olarak işaretleyin, böylece diğerleri gelecekte daha kolay bulabilir. Bu, size yardımcı olduğu için sorunuzu cevaplayan kişiye teşekkür etmek için de kibar bir yoldur.
Danatela

Yanıtlar:


14

Gerçekten sormayı düşündüğünüz şey "Bağımlılıkları nasıl çizerim?" hangi paketlerin hangi bağımlılıkları çektiğini görebilirsiniz.

Hem metin hem de diyagramlı bağımlılıkları apt-cachekomuttan alırsınız (apt paketine dahil edilir, varsayılan yüklemenin bir parçasıdır).

Aşağıda, 'merhaba' paketinin bağımlılıklarını metin biçiminde listelemek için apt-cache örneği verilmiştir. Metin çıktısı her zaman yalnızca bir düzey olacaktır.

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

Diyagramı, dotty(graphviz paketine dahil, ayrıca varsayılan kurulumun bir parçası) gibi herhangi bir nokta dosyası görüntüleyicisini kullanarak okuyabilirsiniz.

İşte tam bağımlılık ağacını grafik biçiminde almanın ve sonra görüntülemenin bir örneği. Grafiksel çıktı her zaman tam ağaç olacaktır.

$ apt-cache dotty hello > dotfile
$ dotty dotfile

Buna baktığınızda, 'merhaba' paketinin bir ton Perl paketini çektiğini ve hangi bağımlılığın yaptığını görebilirsiniz.


Bu işe yarayacak olsa da, eğer paket bir bağımlılığa bağımlıysa, belirli bir pakette neyin çekildiğini görmek için bunu yapmak ciddi bir iş olurdu.
tgm4883

Bir şey değil. Sadece dotfile resmine bakın.
user535733

1
apt-cache depends --recursesize tam resmi verecektir, ancak apt-rdepends daha iyidir, çünkü sadece gerçek bağımlılıkları takip eder, tavsiye edilmez veya önerilmez.
mhsmith

Apt-get, --no-install-recommendsbayrağı kullanmadığınız sürece önerilen bağımlılıkları yükleyecektir .
mhsmith

2
Bu çubuk ne anlama geliyor? |
CMCDragonkai

9

apt-rdependsBu does olmadan gibi cruft 50+ kütüphane yüklemeden 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)

Temiz ubuntu sunucu kurulumumda, apt-rdependsyalnızca libapt-pkg-perlkurulum için gereklidir . O zaman çok daha hafif ubuntu-dev-toolsve yine de özyinelemeli, bu nedenle , geri dönüşler gibi sadece birinci dereceden bağımlılıklardan ziyade tüm bağımlılıkları elde edersiniz apt-cache depends.


Yanlış anladıysam özür dilerim, ama bence apt-rdepends tersine bağımlı değildir. apt-rdepends bir paketin özyinelemeli bağımlılıklarını listeler, tersine bağımlı ise verilen pakete bağlı olan paketleri listeler.
rsuarez

apt-rdepends -r ters bağımlılıkları listeler.
Keith

8

Bunu yapmanın daha kolay bir yolu olabilir, ancak tersine bağlı kullanırsanız yapılabilir. Ubuntu-dev-tools paketini kurarak kurmanız gerekecek.

apt-get install ubuntu-dev-tools

Veya bu düğmeyi tıklayarak:

Yazılım merkezi üzerinden yükleme

Yüklendikten sonra, belirli bir pakete neyin bağlı olduğunu görmek için tersine-bağlı kullanabilirsiniz. Örneğin, bir sürü ekstra paket yüklemek isteyen bir şey yüklemeye çalışırsanız ve "libsmpeg0" ın neden yüklendiğini görmek istiyorsanız,

reverse-depends libsmpeg0

Aşağıdaki çıktı.

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

Bir göz atın ve yüklemek istediğiniz paketin bu listede olup olmadığını görün. Değilse, bu ilk yükleme sırasında çekilmekte olan paketlerden bir diğeri bu listede görünecek ve bu pakete bağlı olarak ters çalıştırmanız gerekecektir. Sonunda bu listede yüklemek istediğiniz ilk paketi göreceksiniz. Bu noktada, paketin neden kurulduğunu gösteren bir zinciriniz olmalıdır.

Ek bir not olarak, varsayılan olarak açık olduğuna inanıyorum, bu yüzden bir şey tavsiye olarak ayarlanmışsa içeri çekilecek. Kapalı olup olmadığını önerir, ancak tersine bağlı olarak bu bilgiler de gösterilebilir.


2
Bu cevabın işe yarayacağından eminim, ancak OP'nin kaçınmaya çalıştığı sorunu kişileştiriyor. ubuntu-dev-toolsaşağıdaki paketlerin yüklenmesiyle sonuçlanır. 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
Sahte Adı

2
[devam] 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 (Not: Yukarıda belirtilenler, oldukça temiz bir ubuntu sunucusu örneğinde yalnızca gerekli paketlerdi sudo apt-get install ubuntu-dev-tools). Çok miktarda rijitlik kurmaktan kaçınmaya çalışıyorsanız , bu muhtemelen en kötü çözümdür.
Sahte Adı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.