Pracuję nad niektórymi instrukcjami konfiguracji komputera i byłem zaskoczony, gdy dowiedziałem się, że apt-get install A B
może zachowywać się inaczej niż apt-get install A && apt-get install B
.
Moim konkretnym przykładem jest A == openjdk-7-jdk
i B == ant
.
openjdk-7-jdk
Zależy więc od tego openjdk-7-jre-headless
, co spełnia ant
zależność java6-runtime-headless
. Ale jeśli zainstalujesz je jako apt-get install openjdk-7-jdk ant
, APT nie wydaje się tego rozgryzać i instaluje default-jre-headless
. Ale jeśli zainstalujesz openjdk-7-jdk
przed instalacją ant
, jego zależność jest spełniona i wszystko jest w porządku.
APT jest zwykle wystarczająco inteligentny, aby coś takiego wymyślić, więc dlaczego nie może tego zrobić w tym przypadku? Chciałbym lepiej zrozumieć, dlaczego to działa w ten sposób, więc tego rodzaju rzeczy już mnie nie potkną w przyszłości.
źródło
apt-get install -o Debug::pkgProblemResolver=true package1 package2...
. To może dać ci wskazówkę, dlaczego tak działa.Odpowiedzi:
Wygląda na to, że istnieje tutaj jakiś system „wagi”:
Jak widać,
ant
zależy to odopenjdk-7-jdk
skomplikowanej i skomplikowanej ilości sugestii, zaleceń i zależności, podczas gdy korzystanieopenjdk-6-jdk
z zależności jest bardziej bezpośrednie:Oczywiście
aptitude
metody rozwiązywania zależności mogą być inneapt-get
. BTW, uruchamianie symulacji mrówki bez zainstalowanego openjdk-7-jdk nie pociągnęło za sobą openjdk-6-jdk:Może jeśli użyjesz tych samych metod, co ja, możesz dowiedzieć się więcej, ponieważ używam teraz testów Debiana, a repozytoria mogły się w międzyczasie zmienić.
źródło
AFAIK, ma wartości domyślne dla spełnienia zależności, więc jeśli ta zależność nie została spełniona przed zainstalowaniem pakietu, instaluje zależność, a następnie instaluje żądany pakiet.
Może to jednak być po prostu duży błąd.
Tak czy inaczej, mam nadzieję, że to pomoże.
źródło