Apt neden bu ekstra bağımlılığa ihtiyacı olduğunu düşünüyor?


9

Bazı makine kurulum talimatları üzerinde çalışıyorum ve bunun apt-get install A Bfarklı davranabileceğini öğrenmek beni şaşırttı apt-get install A && apt-get install B.

Benim özel örneğim A == openjdk-7-jdkve B == ant.

Yani, openjdk-7-jdkbağlı openjdk-7-jre-headlessolduğu tatmin, ant'nin bağımlılık java6-runtime-headless. Ancak bunları şu şekilde yüklerseniz apt-get install openjdk-7-jdk ant, APT bunu anlayamıyor ve kuruyor gibi görünmüyor default-jre-headless. Ancak yüklemeden openjdk-7-jdkönce yüklerseniz ant, bağımlılığı tatmin olur ve her şey iyidir.

APT genellikle bu tür şeyleri anlamaya yetecek kadar akıllıdır, o zaman neden bu durumda bunu yapamıyor? Neden bu şekilde çalıştığına dair daha iyi bir anlayışa sahip olmak istiyorum, bu yüzden bu tür şeyler gelecekte beni tekrar harekete geçirmiyor.


Apt önbelleğime baktığımda, openjdk-7-jdk 7 ~ u3-2.1.1 ~ pre1-1ubuntu2'nin openjdk-7-jre'ye bağlı olduğunu görüyorum, bu da dolaylı olarak açıkjdk-7-jre-headless'a bağlı, bu nedenle bu bağımlılık dolaylı . karınca doğrudan varsayılan-jre-headless bağlıdır. Precise kullanıyorum. Sadece tahmin ediyorum ama apt-get keyfi olarak karınca ile başlayabilir veya seviye 1 bağımlılıkları ile başlayabilir ve sonra seviye 2 bağımlılıklarına gidebilir. Her durumda, paketlerin son yapılandırmasını önemsiyorsanız (varsayılan olarak openjdk-7-jre-headless'ı istemek -..- ..), bunları özel ve ayrı ayrı belirtmek muhtemelen bunu kontrol etmenin en iyi yoludur.
John S Gruber

Hâlâ bu soru ile ilgileniyor musunuz?
guntbert

@guntbert Tabii, kendimi hiçbir sebep olmadığına inandırmak için istifa ettim; Sadece o yol var.
leedm777

5
APT çözümleyicinin nasıl çalıştığını görmek için bkz apt-get install -o Debug::pkgProblemResolver=true package1 package2.... Bu size neden bu şekilde çalıştığına dair bir ipucu verebilir.
Lasall

Yanıtlar:


2

Burada oynayan bir çeşit "ağırlık" sistemi var gibi görünüyor:

$ 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

Gördüğünüz gibi antbağlıdır openjdk-7-jdköneri, tavsiye ve bağımlılık bir karmaşık ve intricated tutarlar kullanırken iken nedeniyle openjdk-6-jdkbağımlılık daha doğrudan geçerli:

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

Tabii ki aptitudebağımlılık çözümleme yöntemleri, apt-get'den farklı olabilir . BTW, openjdk-7-jdk yüklü olmayan bir karınca simülasyonu çalıştırıyor openjdk-6-jdk'yi çekmedi:

$ 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]? 

Belki de benim kullandığım yöntemleri kullanırsanız, şu anda Debian testini kullandığımdan ve depolar bu arada değişebileceğinden, daha fazlasını anlayabilirsiniz.


0

AFAIK, bir bağımlılığı tatmin etmek için varsayılanlara sahiptir, bu nedenle bir paket kurmadan önce bu bağımlılık sağlanamazsa, bağımlılığı yükler ve ardından istenen paketi yükler.

Yine de bu sadece büyük bir hata olabilir.

Her iki durumda da, umarım yardımcı olur.

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.