Pertanyaan ini mirip dengan Bagaimana saya bisa mengetahui mengapa suatu paket diinstal? , tetapi dalam kasus saya, saya ingin tahu sebelum menginstal sebuah paket, mengapa ia akan menginstal dependensi tertentu.
Jadi misalnya saya mungkin lari
sudo apt-get install superfoo
dan output akan mengatakan sesuatu seperti:
The following extra packages will be installed:
foo bar baz ... libderp libjunk
Dan ini mungkin daftar yang sangat besar. Dalam beberapa kasus saya akan melihat sesuatu yang akan diinstal yang tidak benar-benar masuk akal bagi saya mengingat apa yang saya instal, jadi saya ingin tahu mengapa ketergantungan khusus itu akan diinstal.
Dalam contoh di atas katakanlah saya ingin memahami mengapa libderp
harus diinstal. Saya tahu bahwa entah bagaimana ada rantai ketergantungan di antara superfoo
dan libderp
tetapi daftar besar paket yang akan diinstal membuatnya sulit untuk melihat apa rantai ini.
Setelah saya tahu rantai ketergantungan, saya dapat memutuskan apakah saya benar-benar ingin menginstal paket asli atau tidak, dan / atau apakah saya harus menghubungi pengelola paket itu untuk melihat apakah mereka benar - benar perlu memiliki dependensi tersebut di sana.
sumber
Jawaban:
Apa yang sebenarnya Anda tanyakan adalah "Bagaimana cara saya membuat diagram ketergantungan?" sehingga Anda dapat melihat paket mana yang menarik dependensi mana.
Anda mendapatkan dependensi teks dan diagram dari
apt-cache
perintah (termasuk dalam paket apt, bagian dari instalasi default).Berikut adalah contoh apt-cache untuk daftar dependensi dari paket 'halo' dalam format teks. Output teks akan selalu hanya satu level.
Anda dapat membaca diagram menggunakan dotfile viewer, seperti
dotty
(termasuk dalam paket graphviz, juga bagian dari pemasangan default)Berikut adalah contoh untuk mendapatkan pohon ketergantungan penuh dalam format grafis, lalu menampilkannya. Output grafis akan selalu menjadi pohon lengkap.
Melihat itu, Anda dapat melihat bahwa paket 'halo' menarik banyak paket Perl ... dan ketergantungan mana yang melakukannya.
sumber
apt-cache depends --recurse
akan memberi Anda gambaran lengkap, tetapi apt-rdepends di bawah ini lebih baik karena hanya mengikuti dependensi yang sebenarnya, yang tidak disarankan atau yang disarankan.--no-install-recommends
flag.|
apt-rdepends
melakukan ini, tanpa menginstal 50+ perpustakaan cruft likeubuntu-dev-tools
.Di instal server ubuntu saya yang bersih,
apt-rdepends
hanya diperlukanlibapt-pkg-perl
untuk instalasi. Ini jauh lebih ringanubuntu-dev-tools
, namun masih bersifat rekursif, jadi Anda mendapatkan semua dependensi, alih-alih hanya dependensi orde pertama, sepertiapt-cache depends
pengembalian.sumber
Mungkin ada cara yang lebih mudah untuk melakukan ini, tetapi itu bisa dilakukan jika Anda menggunakan reverse-depend. Anda harus menginstal paket ubuntu-dev-tools dengan melakukan
apt-get install ubuntu-dev-tools
Atau dengan mengklik tombol ini:
Setelah diinstal, Anda dapat menggunakan reverse-depend untuk melihat apa yang tergantung pada paket tertentu. Misalnya, jika Anda mencoba menginstal sesuatu yang ingin menginstal banyak paket tambahan dan Anda ingin melihat mengapa "libsmpeg0" sedang diinstal, Anda menjalankan
Yang akan menampilkan berikut ini.
Lihatlah dan lihat apakah paket yang ingin Anda instal ada dalam daftar itu. Jika tidak, maka salah satu paket yang ditarik saat instalasi awal akan muncul di daftar itu, dan Anda perlu menjalankan mundur-tergantung pada paket itu. Akhirnya Anda akan melihat paket awal yang ingin Anda instal dalam daftar itu. Pada titik itu, Anda harus memiliki rantai yang menunjukkan dengan tepat mengapa paket itu diinstal.
Sebagai catatan tambahan, saya percaya rekomendasi aktif secara default, jadi jika sesuatu ditetapkan sebagai rekomendasi maka akan ditarik ke. Menyarankan jika mati, tetapi ketergantungan-terbalik dapat menunjukkan info itu juga.
sumber
ubuntu-dev-tools
hasil dalam paket-paket berikut sedang diinstal.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
(Catatan: Di atas hanyalah paket-paket yang diperlukan darisudo apt-get install ubuntu-dev-tools
contoh server ubuntu yang cukup bersih). Jika Anda berusaha menghindari memasang cruft dalam jumlah besar, ini mungkin solusi terburuk yang mungkin.