Co należy rozumieć przez „zależy” i „wstępnie zależy” oraz różnicę między tymi 2 typami wymagań dotyczących pakietów, gdy instaluję coś w Ubuntu?
Co należy rozumieć przez „zależy” i „wstępnie zależy” oraz różnicę między tymi 2 typami wymagań dotyczących pakietów, gdy instaluję coś w Ubuntu?
Odpowiedzi:
Zgodnie z tym linkiem: https://www.debian.org/doc/debian-policy/#document-ch-relationships
Istnieje 5 rodzajów zależności:
Znaczenie pięciu pól zależności jest następujące:
To deklaruje absolutną zależność. Pakiet nie zostanie skonfigurowany, chyba że wszystkie pakiety wymienione w jego polu Zależności zostaną poprawnie skonfigurowane. Pola Zależy należy użyć, jeśli pakiet zależny jest wymagany, aby pakiet zależny zapewniał znaczną ilość funkcjonalności. Pola Depends należy również użyć, jeśli skrypty postinst lub prerm wymagają rozpakowania lub skonfigurowania pakietu zależnego od komputera w celu uruchomienia. W przypadku konfiguracji postinst pakiety zależne zostaną najpierw rozpakowane i skonfigurowane.
W przypadku działań prerm lub innych akcji postinst zależności pakietu będą zwykle co najmniej rozpakowywane, ale mogą być tylko częściowo zainstalowane, jeśli poprzednie uaktualnienie zależności nie powiedzie się. Na koniec należy użyć pola Depends, jeśli skrypt zależny jest potrzebny skryptowi postrm do pełnego wyczyszczenia po usunięciu pakietu. Nie ma gwarancji, że zależności pakietu będą dostępne po uruchomieniu postrm, ale pakiet zależny jest bardziej dostępny, jeśli pakiet deklaruje zależność (szczególnie w przypadku usunięcia postrm). Skrypt postrm musi z wdziękiem pomijać działania wymagające zależności, jeśli ta zależność nie jest dostępna.
To pole jest podobne do Depends, z tą różnicą, że zmusza także dpkg do ukończenia instalacji nazwanych pakietów jeszcze przed rozpoczęciem instalacji pakietu deklarującego wcześniejszą zależność. Działa to tak, gdy pakiet deklarujący wcześniejszą zależność ma zamiar być rozpakowanym, zależność wstępna może być spełniona, jeśli pakiet zależny jest albo w pełni skonfigurowany, albo nawet jeśli pakiety zależne są tylko rozpakowane lub w stanie „Half-Configured”, pod warunkiem, że zostały skonfigurowane poprawnie w pewnym momencie w przeszłości (i nie został usunięty lub częściowo usunięty od tego czasu).
W takim przypadku zarówno poprzednio skonfigurowane, jak i obecnie rozpakowane lub w połowie skonfigurowane wersje muszą spełniać warunki dowolnej klauzuli wersji w polu Pre-Depends. Kiedy pakiet deklarujący wcześniejszą zależność ma zostać skonfigurowany, taka zależność będzie traktowana jak normalna Zależność. Zostanie uznany za spełniony tylko wtedy, gdy pakiet zależny został poprawnie skonfigurowany. Jednak w przeciwieństwie do Depends, Pre-Depends nie pozwala na zerwanie zależności cyklicznych. W przypadku napotkania zależności cyklicznej podczas próby uwzględnienia opcji Zależności wstępne instalacja zostanie przerwana.
Pre-Depends są również wymagane, jeśli skrypt preinst zależy od nazwanego pakietu. Najlepiej unikać tej sytuacji, jeśli to możliwe. Zależności wstępne powinny być używane oszczędnie, najlepiej tylko w pakietach, których przedwczesna aktualizacja lub instalacja utrudniłaby systemowi kontynuowanie aktualizacji, które mogą być w toku.
Mniejsza wersja:
Termin „zależność” może być szeroko stosowany w celu uwzględnienia relacji „Zależy” i „Zależności wcześniejszych” (a czasem nawet innych, słabszych relacji) lub może być wąsko używany jako synonim „Zależności”.
Różnica między relacjami pakietu „Zależy” i „Zależności wstępne” polega na tym, że jeśli X zależy od Y, to Y musi zostać w pełni skonfigurowane, zanim X zostanie skonfigurowany. (Konfiguracja to etap instalacji, w którym pakiet, po rozpakowaniu plików do odpowiednich lokalizacji - tj. Po „zainstalowaniu” - wprowadza wszelkie inne niezbędne zmiany, aby można było faktycznie korzystać z dostarczonego oprogramowania. Na przykład , konfiguracja serwera HTTP może wymagać upewnienia się, że istnieje www
użytkownik o odpowiednich umiejętnościach i /var/www
katalogu z odpowiednimi uprawnieniami.) Natomiast jeśli X wstępnie zależy od Y, to Y musi zostać zainstalowany i (zazwyczaj) w pełni skonfigurowany, zanim X wyrówna zainstalowany .
Więcej informacji znajduje się w Sekcji 7.2 Podręcznika Polityki Debiana . Cytuję tutaj dwie najbardziej odpowiednie sekcje, ale w tej sekcji (i bardziej ogólnie w rozdziale 7) są inne informacje, które pomagają wyjaśnić, jak działają zależności.
Depends
To deklaruje absolutną zależność. Pakiet nie zostanie skonfigurowany, chyba że wszystkie pakiety wymienione w jego
Depends
polu zostaną poprawnie skonfigurowane (chyba że istnieje zależność cykliczna, jak opisano powyżej).To
Depends
pole powinno być używane, jeśli pakiet zależny jest wymagany, aby pakiet zależny zapewniał znaczną ilość funkcjonalności.Tego
Depends
pola należy również użyć, jeśli skryptypostinst
lubprerm
wymagają rozpakowania lub skonfigurowania zależnego pakietu w celu uruchomienia. W przypadku konfiguracji postinst pakiety zależne zostaną najpierw rozpakowane i skonfigurowane. (Jeśli oba pakiety są zaangażowane w pętlę zależności, może to nie działać zgodnie z oczekiwaniami; zobacz wyjaśnienie kilka akapitów wstecz.) W przypadkuprerm
lub innychpostinst
działań, zależności pakietu będą zwykle co najmniej rozpakowane, ale mogą być tylko „W połowie zainstalowany”, jeśli poprzednie uaktualnienie zależności nie powiodło się.Wreszcie,
Depends
pole powinno zostać użyte, jeślipostrm
skrypt zależny jest potrzebny do pełnego wyczyszczenia po usunięciu pakietu. Nie ma gwarancji, że zależności pakietu będą dostępne popostrm
uruchomieniu, ale pakiet zależny jest bardziej dostępny, jeśli pakiet zadeklaruje zależność (szczególnie w przypadkupostrm remove
).postrm
Skrypt musi bezpiecznie pominąć czynności, które wymagają zależność jeżeli zależność nie jest dostępna.
Pre-Depends
To pole jest podobne
Depends
, z tym wyjątkiem, że wymusza takżedpkg
ukończenie instalacji nazwanych pakietów przed rozpoczęciem instalacji pakietu, który deklaruje wcześniejszą zależność, w następujący sposób:Gdy pakiet deklarujący zależność wstępną ma zostać rozpakowany, zależność wstępna może być spełniona, jeśli pakiet zależny jest albo w pełni skonfigurowany, albo nawet jeśli pakiety zależne są tylko rozpakowane lub w „Połowie -Skonfigurowany ”, pod warunkiem, że zostały one poprawnie skonfigurowane w pewnym momencie w przeszłości (i od tego czasu nie zostały usunięte ani częściowo usunięte). W takim przypadku zarówno poprzednio skonfigurowane, jak i obecnie rozpakowane lub „na wpół skonfigurowane” wersje muszą spełniać dowolną klauzulę wersji w
Pre-Depends
terenie.Kiedy pakiet deklarujący wcześniejszą zależność ma zostać skonfigurowany , taka zależność będzie traktowana jak normalna
Depends
. Zostanie uznany za spełniony tylko, jeśli pakiet zależny został poprawnie skonfigurowany. Jednak, w przeciwieństwie doDepends
,Pre-Depends
nie zezwala okrężne zależności zostać złamane. Jeśli podczas próby honorowaniaPre-Depends
wystąpi zależność cykliczna , instalacja zostanie przerwana.
Pre-Depends
są również wymagane, jeślipreinst
skrypt zależy od nazwanego pakietu. Najlepiej unikać tej sytuacji, jeśli to możliwe.
Pre-Depends
powinien być używany oszczędnie, najlepiej tylko w pakietach, których przedwczesna aktualizacja lub instalacja utrudniłaby systemowi kontynuowanie aktualizacji, które mogą być w toku.Nie powinieneś określać
Pre-Depends
pozycji dla pakietu, zanim nie zostanie to omówione nadebian-devel
liście mailingowej i osiągnięty zostanie konsensus co do tego, że zostanie to zrobione. Zobacz Zależności, Rozdział 3.5 .