Was ist mit "abhängig" und "vorabhängig" gemeint und wie unterscheiden sich diese beiden Arten von Paketanforderungen, wenn ich etwas in Ubuntu installiere?
Was ist mit "abhängig" und "vorabhängig" gemeint und wie unterscheiden sich diese beiden Arten von Paketanforderungen, wenn ich etwas in Ubuntu installiere?
Antworten:
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:
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.
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:
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 www
Benutzer mit den erforderlichen Fähigkeiten und ein /var/www
Verzeichnis 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
Depends
Feld aufgelisteten Pakete korrekt konfiguriert wurden (es sei denn, es besteht eine zirkuläre Abhängigkeit wie oben beschrieben).Das
Depends
Feld 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
Depends
Feld sollte auch verwendet werden, wenn für die Skriptepostinst
oderprerm
das 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.prerm
Weiterepostinst
Informationen 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
Depends
Feld verwendet werden, wenn daspostrm
Skript 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 siepostrm
ausgeführt werden. Es ist jedoch wahrscheinlicher, dass das abhängige Paket verfügbar ist, wenn das Paket eine Abhängigkeit deklariert (insbesondere im Fall vonpostrm remove
). Daspostrm
Skript 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
, erzwingtdpkg
jedoch 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-Depends
Feld 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 mitDepends
,Pre-Depends
ermöglicht nicht zirkuläre Abhängigkeiten zu brechen. Wenn eine zirkuläre Abhängigkeit auftritt, während versucht wird, diese zu berücksichtigenPre-Depends
, wird die Installation abgebrochen.
Pre-Depends
sind auch erforderlich, wenn daspreinst
Skript 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-Depends
Eintrag für ein Paket angeben , bevor dies in derdebian-devel
Mailingliste besprochen und ein Konsens darüber erzielt wurde. Siehe Abhängigkeiten, Abschnitt 3.5 .