GNU/Linux >> Znalost Linux >  >> Ubuntu

Proč si Apt myslí, že potřebuje tuto zvláštní závislost?

Pracuji na některých pokynech k nastavení stroje a překvapilo mě, když jsem zjistil, že apt-get install A B se může chovat jinak než apt-get install A && apt-get install B .

Můj konkrétní příklad je A == openjdk-7-jdk a B == ant .

Takže openjdk-7-jdk závisí na openjdk-7-jre-headless , který splňuje ant závislost java6-runtime-headless . Ale pokud je nainstalujete jako apt-get install openjdk-7-jdk ant , nezdá se, že APT na to přišel a nainstaluje default-jre-headless . Ale pokud si nainstalujete openjdk-7-jdk před instalací ant , jeho závislost je spokojená a vše je v pořádku.

APT je obvykle dost chytrý, aby na to přišel, tak proč by to nemohl udělat v tomto případě? Rád bych lépe porozuměl tomu, proč to takto funguje, aby mě podobné věci v budoucnu znovu nepodrazily.

Přijatá odpověď:

Zdá se, že zde hraje nějaký systém „váhy“:

$ 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

Jak můžete vidět ant závisí na openjdk-7-jdk kvůli komplikovanému a složitému množství návrhů, doporučení a závislosti, zatímco při použití openjdk-6-jdk závislost je přímější:

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

Samozřejmě aptitude metody rozlišení závislostí se mohou lišit od apt-get „s. BTW, spuštění simulace mravence bez nainstalovaného openjdk-7-jdk nevytáhnou 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]? 

Možná, že pokud použijete stejné metody jako já, mohli byste zjistit více, protože právě teď používám testování Debianu a repozitáře se mezitím mohly změnit.

Související:Jak přidat položku pro Ubuntu do spouštěcí nabídky Windows 7 v Ubuntu?
Ubuntu
  1. Proč se zdá, že tento skript spuštěný Su nikdy neukončí, pokud ve skriptu změním uživatele?

  2. Proč tento kód selhává při zapnuté randomizaci adres?

  3. Proč tento regulární výraz nefunguje na linuxu?

  1. Linux – Proč Apt Autoremove neodstraní všechny staré balíčky jádra najednou?

  2. Proč přidání tlustého střeva naruší tento vzor Grep?

  3. Proč se tento příkaz ldapadd ukončí s chybou Neplatná syntaxe?

  1. Proč „ukončit &“ nefunguje?

  2. Proč Apt již neaktualizuje jádro?

  3. Co se stalo s /etc/apt/apt.conf?