Jaka jest różnica między zależnościami a warunkami wstępnymi?

12

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?

Bruno Pereira
źródło

Odpowiedzi:

20

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:

Zależy

  • 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.

Poleca

  • To deklaruje silną, ale nie absolutną zależność. Pole Zalecenia powinno zawierać listę pakietów, które można znaleźć razem z tym pakietem we wszystkich instalacjach oprócz nietypowych.

Wskazuje

  • Służy do deklarowania, że ​​jeden pakiet może być bardziej przydatny w przypadku jednego lub więcej innych. Użycie tego pola informuje system pakowania i użytkownika, że ​​wymienione pakiety są powiązane z tym i może być może zwiększyć jego użyteczność, ale instalacja tego pakietu bez nich jest całkowicie rozsądna.

Ulepsza

  • To pole jest podobne do sugestii, ale działa w przeciwnym kierunku. Służy do deklarowania, że ​​pakiet może zwiększyć funkcjonalność innego pakietu.

Pre-Depends

  • 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:

  • Zarówno zależy, jak i wstępniewspomnieć o zależnościach, których potrzebuje pakiet przed instalacją, ale wstępnie zależy od niego, aby wymusiło instalację i konfigurację pakietów zależności, nawet zanim rozpocznie się od pakietu, który wymaga tych zależności. dpkg nie rozpakuje nawet głównego pakietu, dopóki nie zostaną obsłużone wszystkie pakiety wstępne. Z zależy, kolejność pakietów zależności i główny nie jest ważny. W przypadku wstępnych zależności bierze to pod uwagę, a także weryfikację, czy pakiety wstępne są konfigurowane i instalowane, czy nie. Bez tego pakiet główny nie zostanie nawet rozpakowany, skonfigurowany ani zainstalowany. Musisz albo zainstalować zależności przed rozpoczęciem pracy z pakietem głównym. Jeśli nie, należy je najpierw pobrać / skonfigurować / zainstalować przed kontynuowaniem.
Luis Alvarado
źródło
2
Zauważ, że istnieją również przeciwzależności, takie jak Konflikty i Przerwy. I buduj zależności, takie jak Build-Depends.
Alexis Wilke,
3

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 wwwużytkownik o odpowiednich umiejętnościach i /var/wwwkatalogu 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 Dependspolu zostaną poprawnie skonfigurowane (chyba że istnieje zależność cykliczna, jak opisano powyżej).

To Dependspole powinno być używane, jeśli pakiet zależny jest wymagany, aby pakiet zależny zapewniał znaczną ilość funkcjonalności.

Tego Dependspola należy również użyć, jeśli skrypty postinstlub prermwymagają 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 przypadku prermlub innych postinstdział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, Dependspole powinno zostać użyte, jeśli postrmskrypt zależny jest potrzebny do pełnego wyczyszczenia po usunięciu pakietu. Nie ma gwarancji, że zależności pakietu będą dostępne po postrmuruchomieniu, ale pakiet zależny jest bardziej dostępny, jeśli pakiet zadeklaruje zależność (szczególnie w przypadku postrm remove). postrmSkrypt 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że dpkgukoń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-Dependsterenie.

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 do Depends, Pre-Dependsnie zezwala okrężne zależności zostać złamane. Jeśli podczas próby honorowania Pre-Dependswystąpi zależność cykliczna , instalacja zostanie przerwana.

Pre-Dependssą również wymagane, jeśli preinstskrypt 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-Dependspozycji dla pakietu, zanim nie zostanie to omówione na debian-develliście mailingowej i osiągnięty zostanie konsensus co do tego, że zostanie to zrobione. Zobacz Zależności, Rozdział 3.5 .

Eliah Kagan
źródło