Mengapa menurutnya dibutuhkan ketergantungan ekstra ini?

9

Saya sedang mengerjakan beberapa instruksi pengaturan mesin, dan saya terkejut mengetahui bahwa itu apt-get install A Bdapat berperilaku berbeda dari apt-get install A && apt-get install B.

Contoh spesifik saya adalah A == openjdk-7-jdkdan B == ant.

Jadi, openjdk-7-jdktergantung pada openjdk-7-jre-headless, yang memuaskan antketergantungan itu java6-runtime-headless. Tetapi jika Anda menginstalnya sebagai apt-get install openjdk-7-jdk ant, APT tampaknya tidak mencari tahu dan menginstal ini default-jre-headless. Tetapi jika Anda menginstal openjdk-7-jdksebelum menginstal ant, ketergantungannya sudah puas dan semuanya baik-baik saja.

APT biasanya cukup pintar untuk memikirkan hal semacam ini, jadi mengapa tidak bisa melakukannya dalam kasus ini? Saya ingin memiliki pemahaman yang lebih baik tentang mengapa itu bekerja seperti ini, jadi hal semacam ini tidak membuat saya tersandung lagi di masa depan.

leedm777
sumber
Melihat cache apt saya, saya melihat bahwa openjdk-7-jdk 7 ~ u3-2.1.1 ~ pre1-1ubuntu2 tergantung pada openjdk-7-jre, yang pada gilirannya tergantung pada openjdk-7-jre-headless, jadi ketergantungan ini tidak langsung . semut tergantung langsung pada default-jre-headless. Saya menggunakan Precise. Saya hanya menebak tetapi apt-get bisa secara sewenang-wenang mulai dengan semut, atau mulai dengan dependensi level 1 dan kemudian pergi ke dependensi level 2. Bagaimanapun, jika Anda peduli tentang konfigurasi akhir paket (ingin openjdk-7-jre-headless daripada default -..- ..) menetapkannya secara spesifik dan individual mungkin merupakan cara terbaik untuk mengendalikannya.
John S Gruber
Apakah Anda masih tertarik dengan pertanyaan itu?
guntbert
@ Guntbert Tentu, meskipun saya telah mengundurkan diri untuk percaya bahwa tidak ada alasan; hanya seperti itu adanya.
leedm777
5
Untuk melihat cara kerja resolver APT, lihat apt-get install -o Debug::pkgProblemResolver=true package1 package2.... Itu mungkin memberi Anda petunjuk mengapa itu bekerja seperti itu.
Lasall

Jawaban:

2

Tampaknya ada semacam sistem "berat" yang dimainkan di sini:

$ aptitude why ant openjdk-7-jdk
p   ant                 Recommends ant-optional       
p   ant-optional        Suggests   libgnumail-java    
p   libgnumail-java     Suggests   libgnumail-java-doc
p   libgnumail-java-doc Recommends default-jdk-doc    
p   default-jdk-doc     Depends    openjdk-7-doc      
p   openjdk-7-doc       Suggests   openjdk-7-jdk

Seperti yang Anda lihat anttergantung dari openjdk-7-jdkjumlah saran, rekomendasi, dan ketergantungan yang rumit dan rumit, sementara ketika menggunakan openjdk-6-jdkdependensi lebih langsung:

$ aptitude why ant openjdk-6-jdk
p   ant           Suggests default-jdk | java-compiler | java-sdk
p   openjdk-6-jdk Provides java-sdk

Tentu saja aptitudemetode resolusi ketergantungan, bisa berbeda dari apt-getitu. BTW, menjalankan simulasi semut tanpa openjdk-7-jdk diinstal tidak menarik openjdk-6-jdk:

$ sudo apt-get install ant
[sudo] password for braiam: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  ant-optional
Suggested packages:
  default-jdk java-compiler java-sdk ant-gcj ant-doc liboro-java junit
  libregexp-java jython antlr libbcel-java libjdepend-java libgnumail-java
  libcommons-net-java libjsch-java javacc ant-optional-gcj
The following NEW packages will be installed:
  ant ant-optional
0 upgraded, 2 newly installed, 0 to remove and 9 not upgraded.
Need to get 2,234 kB of archives.
After this operation, 3,041 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

Mungkin jika Anda menggunakan metode yang sama seperti yang saya lakukan, Anda bisa mencari tahu lebih banyak, karena saya menggunakan pengujian Debian sekarang dan repositori bisa berubah sementara itu.

Braiam
sumber
0

AFAIK, ini memiliki standar untuk memenuhi dependensi, jadi jika dependensi itu belum terpenuhi sebelum menginstal paket, itu menginstal dependensi dan kemudian menginstal paket yang diminta.

Ini juga bisa menjadi bug besar.

Bagaimanapun, harapan itu membantu.

haneefmubarak
sumber