Was ist der Unterschied zwischen Abhängigkeiten und Vorabhängigkeiten?

12

Was ist mit "abhängig" und "vorabhängig" gemeint und wie unterscheiden sich diese beiden Arten von Paketanforderungen, wenn ich etwas in Ubuntu installiere?

Bruno Pereira
quelle

Antworten:

20

Wie aus diesem Link entnommen: https://www.debian.org/doc/debian-policy/#document-ch-relationships

Es gibt 5 Arten von Abhängigkeiten:

Die fünf Abhängigkeitsfelder haben folgende Bedeutung:

Hängt davon ab

  • Dies erklärt eine absolute Abhängigkeit. Ein Paket wird nur konfiguriert, wenn alle in seinem Feld Abhängigkeiten aufgeführten Pakete korrekt konfiguriert wurden. Das Feld Depends sollte verwendet werden, wenn das abhängige Paket für das abhängige Paket erforderlich ist, um einen erheblichen Funktionsumfang bereitzustellen. Das Feld Depends sollte auch verwendet werden, wenn das abhängige Paket für die Ausführung des Skripts postinst oder prerm entpackt oder konfiguriert werden muss. Bei postinst configure werden die abhängigen Pakete zuerst entpackt und konfiguriert.

  • Bei Prerm- oder anderen Postinst-Aktionen werden die Paketabhängigkeiten normalerweise mindestens entpackt, sie sind jedoch möglicherweise nur zur Hälfte installiert, wenn ein vorheriges Upgrade der Abhängigkeit fehlgeschlagen ist. Schließlich sollte das Feld Depends verwendet werden, wenn das PostRM-Skript das Depended-On-Paket benötigt, um nach dem Entfernen des Pakets eine vollständige Bereinigung durchzuführen. Es gibt keine Garantie dafür, dass Paketabhängigkeiten verfügbar sind, wenn postrm ausgeführt wird. Es ist jedoch wahrscheinlicher, dass das abhängige Paket verfügbar ist, wenn das Paket eine Abhängigkeit deklariert (insbesondere im Fall von postrm remove). Das postrm-Skript muss Aktionen, die eine Abhängigkeit erfordern, ordnungsgemäß überspringen, wenn diese Abhängigkeit nicht verfügbar ist.

Empfiehlt

  • Dies erklärt eine starke, aber nicht absolute Abhängigkeit. Das Feld Empfiehlt sollte Pakete auflisten, die zusammen mit diesem in allen außer ungewöhnlichen Installationen gefunden würden.

Schlägt vor

  • Dies wird verwendet, um zu deklarieren, dass ein Paket für ein oder mehrere andere Pakete nützlicher sein kann. Wenn Sie dieses Feld verwenden, werden das Paketsystem und der Benutzer darüber informiert, dass die aufgelisteten Pakete mit diesen verwandt sind und möglicherweise deren Nützlichkeit verbessern können. Eine Installation ohne diese Pakete ist jedoch durchaus sinnvoll.

Verbessert

  • Dieses Feld ähnelt Suggests, funktioniert jedoch in umgekehrter Richtung. Es wird verwendet, um zu deklarieren, dass ein Paket die Funktionalität eines anderen Pakets verbessern kann.

Pre-Depends

  • Dieses Feld ist wie Depends, mit der Ausnahme, dass es dpkg auch zwingt, die Installation der genannten Pakete abzuschließen, bevor es die Installation des Pakets startet, das die Vorabhängigkeit deklariert. Es funktioniert so, wenn ein Paket, das eine Vorabhängigkeit deklariert, im Begriff ist, zu sein entpackt werden, kann die Vorabhängigkeit erfüllt sein, wenn das abhängige Paket entweder vollständig konfiguriert ist oder wenn das / die abhängige (n) Paket (e) nur entpackt sind oder sich im Status "Halbkonfiguriert" befinden, sofern sie konfiguriert wurden Irgendwann in der Vergangenheit richtig (und seitdem nicht oder nur teilweise entfernt).

  • In diesem Fall müssen sowohl die zuvor konfigurierten als auch die derzeit entpackten oder "halbkonfigurierten" Versionen einer Versionsklausel im Feld "Pre-Depends" entsprechen. Wenn das Paket, das eine Vorabhängigkeit deklariert, konfiguriert werden soll, wird die Vorabhängigkeit als normale Abhängigkeit behandelt. Es wird nur dann als zufrieden angesehen, wenn das abhängige Paket korrekt konfiguriert wurde. Im Gegensatz zu Depends können in Pre-Depends jedoch keine zirkulären Abhängigkeiten aufgehoben werden. Wenn beim Versuch, Pre-Depends zu berücksichtigen, eine zirkuläre Abhängigkeit auftritt, wird die Installation abgebrochen.

  • Pre-Depends sind auch erforderlich, wenn das Preinst-Skript vom angegebenen Paket abhängt. Es ist am besten, diese Situation zu vermeiden, wenn möglich. Pre-Depends sollten sparsam verwendet werden, vorzugsweise nur von Paketen, deren vorzeitiges Upgrade oder Installation die Möglichkeit des Systems einschränken würde, ein eventuell laufendes Upgrade fortzusetzen.

Kleinere Version:

  • Beides ist abhängig und hängt davon abErwähnen Sie die Abhängigkeiten, die ein Paket vor der Installation benötigt, aber erzwingen Sie vorab die Installation und Konfiguration der Abhängigkeitspakete, bevor Sie mit dem Paket beginnen, das die Abhängigkeiten benötigt. dpkg wird das Hauptpaket nicht einmal entpacken, bis alle vorabhängigen Pakete behandelt wurden. Bei depend ist die Reihenfolge der Abhängigkeitspakete und des Hauptpakets nicht wichtig. Bei Pre-Depends wird dies und auch die Überprüfung berücksichtigt, ob die Pre-Depends-Pakete konfiguriert und installiert sind oder nicht. Ohne dies wird das Hauptpaket nicht einmal entpackt, konfiguriert oder installiert. Sie müssen entweder die Abhängigkeiten installiert haben, bevor Sie mit dem Hauptpaket arbeiten können. Wenn nicht, müssen sie zuerst heruntergeladen / konfiguriert / installiert werden, bevor Sie fortfahren können.
Luis Alvarado
quelle
2
Beachten Sie, dass es auch Anti-Abhängigkeiten wie Konflikte und Brüche gibt. Und bauen Sie Abhängigkeiten wie Build-Depends.
Alexis Wilke
3

Der Begriff "Abhängigkeit" kann allgemein verwendet werden, um "Abhängigkeiten" - und "Vorabhängigkeiten" -Beziehungen (und manchmal sogar andere, schwächere Beziehungen) zu umfassen, oder er kann eng als Synonym für "Abhängigkeiten" verwendet werden.

Der Unterschied zwischen den Paketbeziehungen "Depends" und "Pre-Depends" besteht darin, dass, wenn X von Y abhängt , Y vollständig konfiguriert werden muss, bevor X konfiguriert wird. (Konfiguration ist der Installationsschritt, bei dem ein Paket nach dem Entpacken seiner Dateien an den richtigen Speicherorten, dh nach der "Installation", alle anderen erforderlichen Änderungen vornimmt, damit die von ihm bereitgestellte Software tatsächlich verwendet werden kann. Zum Beispiel Bei der Konfiguration eines HTTP-Servers muss möglicherweise sichergestellt werden, dass ein wwwBenutzer mit den erforderlichen Fähigkeiten und ein /var/wwwVerzeichnis mit den erforderlichen Berechtigungen vorhanden sind. Wenn X jedoch von Y abhängt, muss Y installiert und (normalerweise) vollständig konfiguriert sein, bevor X gerade ist installiert .

Weitere Informationen finden Sie in Abschnitt 7.2 des Debian-Richtlinienhandbuchs . Ich zitiere hier die beiden relevantesten Abschnitte, aber in diesem Abschnitt (und in Kapitel 7 allgemeiner) gibt es andere Informationen, die dazu beitragen, die Funktionsweise von Abhängigkeiten zu veranschaulichen.


Depends

Dies erklärt eine absolute Abhängigkeit. Ein Paket wird nur konfiguriert, wenn alle in seinem DependsFeld aufgelisteten Pakete korrekt konfiguriert wurden (es sei denn, es besteht eine zirkuläre Abhängigkeit wie oben beschrieben).

Das DependsFeld sollte verwendet werden, wenn das abhängige Paket für das abhängige Paket erforderlich ist, um ein erhebliches Maß an Funktionalität bereitzustellen.

Das DependsFeld sollte auch verwendet werden, wenn für die Skripte postinstoder prermdas abhängige Paket entpackt oder konfiguriert werden muss, damit es ausgeführt werden kann. Bei postinst configure werden die abhängigen Pakete zuerst entpackt und konfiguriert. (Wenn beide Pakete an einer Abhängigkeitsschleife beteiligt sind, funktioniert dies möglicherweise nicht wie erwartet. prermWeitere postinstInformationen hierzu finden Sie in der Erläuterung vor einigen Absätzen.) Bei oder anderen Aktionen werden die Paketabhängigkeiten normalerweise zumindest entpackt, möglicherweise jedoch nur "Half-Installed", wenn ein vorheriges Upgrade der Abhängigkeit fehlgeschlagen ist.

Schließlich sollte das DependsFeld verwendet werden, wenn das postrmSkript das abhängige Paket benötigt, um nach dem Entfernen des Pakets eine vollständige Bereinigung durchzuführen. Es gibt keine Garantie dafür, dass Paketabhängigkeiten verfügbar sind, wenn sie postrmausgeführt werden. Es ist jedoch wahrscheinlicher, dass das abhängige Paket verfügbar ist, wenn das Paket eine Abhängigkeit deklariert (insbesondere im Fall von postrm remove). Das postrmSkript muss Aktionen, die eine Abhängigkeit erfordern, ordnungsgemäß überspringen, wenn diese Abhängigkeit nicht verfügbar ist.


Pre-Depends

Dieses Feld entspricht dem Feld Depends, erzwingt dpkgjedoch auch die vollständige Installation der genannten Pakete, bevor die Installation des Pakets gestartet wird, das die Vorabhängigkeit deklariert, und zwar wie folgt:

Wenn ein Paket, das eine Vorab-Abhängigkeit deklariert, entpackt werden soll, kann die Vorab-Abhängigkeit erfüllt werden, wenn das abhängige Paket entweder vollständig konfiguriert ist oder selbst wenn das (die) abhängige (n) Paket (e) nur entpackt sind oder sich in der Hälfte befinden -Configured ", vorausgesetzt, sie wurden zu irgendeinem Zeitpunkt in der Vergangenheit korrekt konfiguriert (und seitdem nicht oder nur teilweise entfernt). In diesem Fall müssen sowohl die zuvor konfigurierten als auch die derzeit entpackten oder "halbkonfigurierten" Versionen eine Versionsklausel im Pre-DependsFeld erfüllen .

Wenn das Paket, das eine Vorabhängigkeit deklariert, konfiguriert werden soll , wird die Vorabhängigkeit als normal behandelt Depends. Es wird nur dann als zufrieden angesehen, wenn das abhängige Paket korrekt konfiguriert wurde. Doch im Gegensatz zu mit Depends, Pre-Dependsermöglicht nicht zirkuläre Abhängigkeiten zu brechen. Wenn eine zirkuläre Abhängigkeit auftritt, während versucht wird, diese zu berücksichtigen Pre-Depends, wird die Installation abgebrochen.

Pre-Dependssind auch erforderlich, wenn das preinstSkript vom benannten Paket abhängt. Es ist am besten, diese Situation zu vermeiden, wenn möglich.

Pre-Depends sollten sparsam verwendet werden, vorzugsweise nur von Paketen, deren vorzeitige Aktualisierung oder Installation die Fähigkeit des Systems beeinträchtigen würde, mit einer laufenden Aktualisierung fortzufahren.

Sie sollten keinen Pre-DependsEintrag für ein Paket angeben , bevor dies in der debian-develMailingliste besprochen und ein Konsens darüber erzielt wurde. Siehe Abhängigkeiten, Abschnitt 3.5 .

Eliah Kagan
quelle