Es sollte nicht von Paketbetreuern verwendet werden, die verstehen wollen, wie dpkg ihr Paket installieren wird. Die Beschreibung der Aktionen von dpkg beim Installieren und Entfernen von Paketen ist besonders unzulänglich.
dpkg kann auch als Oberfläche für dpkg-deb(1) und dpkg-query(1) verwendet werden. Die Liste der unterstützten Aktionen kann im Abschnitt AKTIONEN gefunden werden. Falls so eine Aktion angetroffen wird, führt dpkg einfach dpkg-deb oder dpkg-query mit den übergebenen Parametern aus, allerdings werden derzeit keine spezifischen Optionen an diese übergeben. Um solche Optionen zu verwenden, müssen die Backends direkt aufgerufen werden.
Die Installation besteht aus folgenden Schritten:
1. Die Steuerdateien aus dem neuen Paket wird entnommen.
2. Falls eine andere Version des gleichen Pakets vor der neuen Installation installiert war, dann wird das prerm-Skript des alten Paketes ausgeführt.
3. Das preinst-Skript wird ausgeführt, falls dies vom Paket bereitgestellt wird.
4. Die neuen Dateien werden entpackt und gleichzeitig die alten Dateien gesichert, so dass diese, falls etwas schief geht, wiederhergestellt werden können.
5. Falls eine andere Version des gleichen Pakets vor der neuen Installation installiert war, dann wird das postrm-Skript des alten Paketes ausgeführt. Beachten Sie, dass dieses Skript nach dem preinst-Skript des neuen Pakets ausgeführt wird, da neue Dateien zeitgleich zu der Entfernung alter Dateien geschrieben werden.
6. Das Paket wird konfiguriert. Lesen Sie --configure für detaillierte Informationen, wie dies geschieht.
Verarbeitet Trigger für Pre-Depends, außer --no-triggers wurde angegeben.
Um ein Paket zu rekonfigurieren, das bereits konfiguriert wurde, verwenden Sie stattdessen den Befehl dpkg-reconfigure(8).
Die Konfiguration besteht aus folgenden Schritten:
1. Die Conffiles werden entpackt und gleichzeitig die alten Conffiles gesichert, so dass diese, falls etwas schief geht, wiederhergestellt werden können.
2. Das postinst-Skript wird ausgeführt, falls dies vom Paket bereitgestellt wird.
Verarbeitet Trigger, außer --no-triggers wurde angegeben.
Entfernung eines Paketes besteht aus den folgenden Schritten:
1. Das prerm-Skript wird ausgeführt
2. Die installierten Dateien werden entfernt
3. Das postrm-Skript wird ausgeführt
Verarbeitet Trigger, außer --no-triggers wurde angegeben.
Hinweis: Einige Konfigurationsdateien können dpkg nicht bekannt sein, da sie separat durch die Konfigurationsskripte angelegt und verwaltet werden. In diesem Fall wird dpkg sie nicht selbst entfernen, sondern das Skript postrm (das von dpkg aufgerufen wird) des Pakets muss sich während des vollständigen Löschens um das Entfernen kümmern. Natürlich betrifft dies nur Dateien in den Systemverzeichnissen, nicht Konfigurationsdateien, die in die Home-Verzeichnisse der individuellen Benutzer geschrieben werden.
Endgültiges Löschen eines Paketes besteht aus den folgenden Schritten:
1. Das Paket wird entfernt, falls es noch nicht entfernt ist. Lesen Sie --remove für detaillierte Informationen, wie dies erfolgt.
2. Das postrm-Skript wird ausgeführt.
Verarbeitet Trigger, außer --no-triggers wurde angegeben.
Derzeit ist die einzige funktionale Prüfung eine Md5sum-Überprüfung der Dateiinhalte mit dem gespeicherten Wert in der Datei-Datenbank. Er wird nur geprüft, falls die Datenbank die Md5sum der Datei enthält. Um auf fehlende Metadaten in der Datenbank zu prüfen, kann der Befehl --audit verwandt werden.
Das Ausgabeformat kann mit der Option --verify-format ausgewählt werden. Standardmäßig wird das Format rpm verwandt. Das kann sich in der Zukunft aber ändern und daher sollten Programme, die die Ausgabe dieses Befehls auswerten, explizit das Format angeben, das sie erwarten.
Ein einfacher Befehl, um die Datei available in einem Rutsch zu holen und zu aktualisieren, ist dselect update. Beachten Sie, dass diese Datei nahezu nutzlos ist, falls Sie nicht dselect sondern eine APT-basierte Oberfläche verwenden: APT verfügt über sein eigenes System, die verfügbaren Pakete zu überwachen.
Die Datei available muss für diesen Befehl aktuell sein, damit dies von Nutzen ist, andernfalls werden unbekannte Pakete mit einer Warnung ignoriert. Siehe die Befehle --update-avail und --merge-avail für weitere Informationen.
Beachten Sie: Dieser Befehl verwendet sowohl die Datei Bqavailable" als auch die Paketauswahlen.
Falls ein solches Paket vorhanden ist, wird es als Dateieintrag für BqPackages" ausgegeben, der passend weiterverarbeitet werden kann.
Beachten Sie: Dieser Befehl verwendet sowohl die Datei Bqavailable" als auch die Paketauswahlen.
Liefert 0 zurück, wenn ein Paket ausgegeben wird und 1, wenn kein passendes Paket verfügbar ist und 2 im Fehlerfall.
Bei der Verwendung mit --robot wird die Ausgabe der Programmversionsnummer in einem numerischen, durch Punkte getrennten Format erfolgen, ohne Zeilenumbrüche.
Nummer Beschreibung 1 Allgemein hilfreiche Fortschrittsinformationen 2 Aufruf und Status der Betreuerskripte 10 Ausgabe für jede verarbeitete Datei 100 Umfangreiche Ausgabe für jede verarbeitete Datei 20 Ausgabe für jede Konfigurationsdatei 200 Umfangreiche Ausgabe für jede Konfigurationsdatei 40 Abhängigkeiten und Konflikte 400 Umfangreiche Abhängigkeiten/Konflikte-Ausgabe 10000 Trigger-Aktivierung und -Verarbeitung 20000 Umfangreiche Ausgabe bezüglich Trigger 40000 Alberne Menge an Ausgabe bezüglich Trigger 1000 Umfangreiches Gelaber beispielsweise über das dpkg/info-Verzeichnis 2000 Verrückte Mengen an Gelaber
Warnung: Diese Optionen sind hauptsächlich für den Einsatz durch Experten gedacht. Der Einsatz ohne komplettes Verständnis der Effekte kann Ihr gesamtes System zerstören.
all: Schaltet alle Bqforce"-Optionen ein (oder aus).
downgrade(*): Installiert ein Paket, selbst wenn eine neuere Version davon bereits installiert ist.
Warnung: Derzeit führt dpkg keine Abhängigkeitsüberprüfung bei der Installation älterer Versionen (als bereits installiert) durch (sog. Downgrade) und wird Sie daher nicht warnen, falls dadurch die Abhängigkeit eines anderen Pakets nicht mehr erfüllt ist. Dies kann ernsthafte Nebeneffekte haben, ein Downgrade einer essenziellen Systemkomponente kann Ihr gesamtes System unbrauchbar machen. Verwenden Sie diese Option mit Vorsicht.
configure-any: Konfiguriert auch jedes entpackte, aber unkonfigurierte Paket, von dem das aktuelle Paket abhängt.
hold: Erlaubt automatische Installationen, Upgrades und Entfernungen von Paketen, selbst wenn sie mit Bqhalten" markiert sind. Beachten Sie: Wenn diese Aktionen explizit angefordert werden, wird der Paketauswahlzustand Bqhalten" immer ignoriert.
remove-reinstreq: Entfernt ein Paket, selbst falls es defekt ist und zur Neuinstallation markiert ist. Dies kann beispielsweise dazu führen, dass Teile des Pakets auf dem System bleiben und von dpkg vergessen werden.
remove-protected: Entfernt, selbst falls das Paket als geschützt betrachtet wird (seit Dpkg 1.20.1). Geschützte Pakete enthalten hauptsächlich wichtige Teile der Systemstartinfrastruktur oder werden für angepasste systemlokale Metapakete verwandt. Diese zu entfernen kann dazu führen, dass das gesamte System nicht mehr starten oder benötigte Funktionalität zu Betrieb verlieren kann - verwenden Sie diese Option daher mit Vorsicht.
remove-essential: Entfernt, selbst falls das Paket als essenziell betrachtet wird. Essenzielle Pakete enthalten hauptsächlich sehr grundlegende Unix-Befehle. Diese werden für das Paketierungssystem, für den Betrieb des Systems im Allgemeinen oder während des Systemstarts benötigt (allerdings sollten Letztere stattdessen in geschützte Pakete umgewandelt werden). Diese zu entfernen kann dazu führen, dass das gesamte System nicht mehr arbeitet - verwenden Sie diese Option daher mit Vorsicht.
depends: Verwandelt alle Abhängigkeitsprobleme in Warnungen. Dies betrifft die Felder Pre-Depends und Depends.
depends-version: Ignoriert Versionen bei der Prüfung von Abhängigkeiten. Dies betrifft die Felder Pre-Depends und Depends.
breaks: Installiert, selbst falls dies ein anderes Paket beschädigt (seit Dpkg 1.14.6). Dies betrifft das Feld Breaks.
conflicts: Installiert, selbst wenn es mit einem anderen Paket in Konflikt steht. Dies ist gefährlich, da dies gewöhnlich dazu führt, dass einige Dateien überschrieben werden. Dies betrifft das Feld Conflicts.
confmiss: Installiert die fehlende Conffile immer ohne Rückfrage. Dies ist gefährlich, da es bedeutet, dass eine Änderung (die Entfernung) an der Datei nicht erhalten wird.
confnew: Falls eine Conffile modifiziert wurde und sich die Version im Paket geändert hat, wird immer die neue Version ohne Rückfrage installiert, es sei denn, --force-confdef ist ebenfalls angegeben, in welchem Falle die Standardaktion bevorzugt wird.
confold: Falls eine Conffile modifiziert wurde und sich die Version im Paket geändert hat, wird immer die alte Version ohne Rückfrage behalten, es sei denn, --force-confdef ist ebenfalls angegeben, in welchem Falle die Standardaktion bevorzugt wird.
confdef: Falls eine Conffile verändert wurde und sich die Version im Paket geändert hat, wird immer die Standardaktion ohne Rückfrage gewählt. Falls es keine Standardaktion gibt, wird angehalten, um den Benutzer zu fragen, es sei denn, --force-confnew oder --force-confold sind ebenfalls angegeben, in welchem Falle dies verwendet wird, um die letztendliche Aktion zu bestimmen.
confask: Falls eine Conffile verändert wurde, wird immer angeboten, sie durch die Version aus dem Paket zu ersetzen, selbst falls sich die Version in dem Paket nicht geändert hat (seit Dpkg 1.15.8). Falls auch einer von --force-confnew, --force-confold oder --force-confdef angegeben wird, wird sie dazu verwandt, die letztendliche Aktion zu ermitteln.
overwrite: Überschreibt die Datei aus einem Paket mit einer Datei aus einem anderen Paket.
overwrite-dir: Überschreibt das Verzeichnis aus einem Paket mit einer Datei aus einem anderen Paket.
overwrite-diverted: Überschreibt eine umgeleitete (Bqdiverted") Datei mit einer nicht umgeleiteten.
statoverride-add: Überschreibt eine existierende Status-Hinwegsetzung beim Hinzufügen (seit Dpkg 1.19.5).
statoverride-remove: Ignoriert eine fehlende Status-Hinwegsetzung beim Entfernen (seit Dpkg 1.19.5).
security-mac(*): Verwendet plattformspezifische BqMandatory Access Control (MAC)"-basierende Sicherheit bei der Installation von Dateien in das Dateisystem (seit Dpkg 1.19.5). Auf Linux-Systemen verwendet die Implementierung SELinux.
unsafe-io: Führt beim Entpacken keine sicheren E/A-Aktionen durch (seit Dpkg 1.15.8.6). Derzeit impliziert dies, dass vor Dateiumbenennungen kein Systemsync durchgeführt wird. Dieser Sync führt bei einigen Dateisystemen zu erheblichen Leistungseinbußen, unglücklicherweise bei solchen, die überhaupt sichere E/A aufgrund ihres unzuverlässigen Verhaltens benötigen, auf denen bei abrupten Systemabstürzen Dateien der Länge Null entstehen können.
Hinweis: Für den Hauptmissetäter Ext4 sollten Sie stattdessen die Einhängeoption nodelalloc verwenden, die sowohl die Leistungseinbuße verhindert als auch Datensicherheitsprobleme vermeidet. Letzteres bedeutet, dass bei abrupten Systemabstürzen bei jeder Software, die keine Syncs vor atomaren Umbenennungen durchführt, keine Dateien der Länge Null generiert werden.
Warnung: Die Verwendung dieser Option kann die Leistung erhöhen, allerdings können dabei Daten verloren gehen. Verwenden Sie die Option vorsichtig.
script-chrootless: Führt Skripte aus, ohne per chroot(2) in das instdir zu wechseln, selbst falls das Paket diese Vorgehensweise nicht unterstützt (seit Dpkg 1.18.5).
Warnung: Dies kann Ihr Wirtsystem beschädigen, passen Sie sehr gut auf!
architecture: Verarbeitet sogar Pakete mit der falschen oder keiner Architektur.
bad-version: Verarbeitet sogar Pakete mit falschen Versionen (seit Dpkg 1.16.1).
bad-path: Im PATH fehlen wichtige Programme, daher sind Probleme wahrscheinlich.
not-root: Versucht Sachen zu (de)installieren, selbst falls nicht root.
bad-verify: Installiert ein Paket, selbst wenn die Authentizitätsprüfung fehlschlägt.
Stellen Sie sicher, dass --no-act vor dem Aktions-Parameter steht, andernfalls könnte dies zu unerwünschten Ergebnissen führen. (Beispielsweise wird dpkg --purge foo --no-act zuerst das Paket Bqfoo" endgültig löschen und dann versuchen, das Paket Bq--no-act" endgültig zu löschen, obwohl Sie wahrscheinlich davon ausgingen, dass tatsächlich gar nichts passieren sollte).
Seit Dpkg 1.21.10 wird auch die Architektur berücksichtigt. Dadurch ist es möglich, Pakete über cross zu aktualisieren oder zusätzliche ko-installierbare Instanzen mit der gleichen Version aber einer anderen Architektur zu installieren.
Hinweis: Oberflächen könnten dpkg mehrere Male pro Ausführung aufrufen, wodurch die Hooks öfter als erwartet ausgeführt werden könnten.
Warnung: Beachten Sie, dass abhängig von den ausgeschlossenen Pfaden Sie Ihr System komplett beschädigen könnten. Verwenden Sie dies daher vorsichtig.
Das Glob-Muster kann die gleichen Platzhalter wie in der Shell verwenden, wobei bq*' auf eine beliebige Folge von Zeichen, auch dem Leerzeichen und bq/', passt. Beispielsweise passt Bq/usr/*/READ*" auf Bq/usr/share/doc/package/README". Wie gewöhnlich passt bq?' auf ein einzelnes Zeichen (wieder auch auf bq/'). Und bq[' beginnt eine Zeichenklasse, die eine Liste von Zeichen, Bereiche und Komplemente enthalten kann. Lesen Sie glob(7) für detaillierte Informationen über das Globben. Hinweis: Die aktuelle Implementierung könnte mehr Verzeichnisse und symbolische Links als benötigt wieder einschließen, insbesondere wenn es eine genauere Wiedereinschließung gibt. Um auf der sicheren Seite zu sein und in der Zukunft mögliche Entpackfehler zu vermeiden, könnte dies durch zukünftige Arbeiten behoben werden.
Dies kann dazu verwandt werden, alle Pfade außer bestimmten zu entfernen, ein typischer Fall lautet:
--path-exclude=/usr/share/doc/* --path-include=/usr/share/doc/*/copyright
Hiermit werden alle Dokumentationsdateien (außer den Copyright-Dateien) entfernt.
Diese zwei Optionen können mehrfach angegeben und miteinander verschachtelt werden. Beide werden in der angegebenen Reihenfolge ausgewertet, wobei die letzte Regel, die auf eine Datei passt, die Entscheidung fällt.
Die Filter werden beim Entpacken des Binärpakets angewandt und haben daher nur Wissen über den Typ des derzeit gefilterten Objekts (d.h. eine normale Datei oder ein Verzeichnis) und sehen daher nicht, welche Objekte als nächstes kommen. Da diese Filter Nebeneffekte haben (im Gegensatz zu find(1)-Filtern) wird das Ausschließen eines genauen Pfadnamens, der ein Verzeichnisobjekt wie /usr/share/doc ist, nicht den gewünschten Effekt haben und nur der Pfadname wird ausgeschlossen (der automatisch wieder eingeschlossen werden könnte, falls der Code eine Notwendigkeit hierfür sieht). Alle folgenden Dateien innerhalb des Verzeichnisses werden beim Entpacken fehlschlagen.
Tipp: Stellen Sie sicher, dass die Metazeichen nicht durch Ihre Shell expandiert werden.
Derzeit wird nur das Ausgabeformat rpm unterstützt. Es besteht aus einer Zeile für jeden Pfad, der bei der Prüfung fehlschlug. Diese Zeilen haben das folgende Format:
missing [c] Pfadname [(Fehlermeldung)]
??5?????? [c] Pfadname
Die ersten 9 Zeichen werden zum Berichten des Überprüfungsergebnisses verwandt, entweder ein wörtliches missing, wenn die Datei nicht vorhanden ist oder seine Metadaten nicht abgerufen werden können, oder eines der folgenden besonderen Zeichen, das das Ergebnis für jede Überprüfung berichtet:
Dieser Zeile folgt ein Leerzeichen und ein Attributszeichen. Das folgende Attributszeichen wird unterstützt:
Schließlich folgt ein weiteres Leerzeichen und der Pfadname.
Falls der Eintrag vom Typ missing und die Datei nicht wirklich auf dem Dateisystem vorhanden war, dann folgt der Zeile ein Leerzeichen und die in Klammern eingeschlossene Fehlermeldung.
Der einzige derzeit unterstützte Befehl ist --version.
Die anderen, nachfolgend aufgeführten Dateien sind in ihren Standardverzeichnissen, lesen Sie den Text zur Option --admindir, um zu sehen, wie Sie den Ort dieser Dateien ändern können.
Die Statusdatei wird täglich nach /var/backups gesichert. Dies kann hilfreich sein, falls sie aufgrund von Problemen mit dem Dateisystem verloren gegangen oder beschädigt worden ist.
Das Format und die Inhalte eines Binärpakets sind in deb(5) beschrieben.
dpkg -l '*vi*'
Um die Einträge von zwei Paketen in /var/lib/dpkg/available zu sehen:
dpkg --print-avail elvis vim | less
Wenn Sie die Liste der Pakete selbst durchsuchen wollen:
less /var/lib/dpkg/available
Um ein installiertes Elvis-Paket zu entfernen:
dpkg -r elvis
Um ein Paket zu installieren, müssen Sie es erst in einem Archiv oder auf einer CD-ROM finden. Die Datei available zeigt, dass das vim-Paket in der Sektion editors ist:
cd /media/cdrom/pool/main/v/vim dpkg -i vim_4.5-3.deb
Um eine lokale Kopie der Paketauswahl-Zustände zu erstellen:
dpkg --get-selections> meine_auswahl
Sie könnten diese Datei auf einen anderen Rechner übertragen und dann die Datei available dort mit dem Paketverwalter Ihrer Wahl (siehe <https://wiki.debian.org/Teams/Dpkg/FAQ#set-selections> für weitere Details) aktualisieren, zum Beispiel:
apt-cache dumpavail | dpkg --merge-avail
Oder mit Dpkg 1.17.6 oder älter:
avail=$(mktemp) apt-cache dumpavail> "$avail" dpkg --merge-avail "$avail" rm "$avail"
Sie können sie dann wie folgt installieren:
dpkg --clear-selections dpkg --set-selections <meine_auswahl
Beachten Sie, dass dies nichts wirklich installiert oder entfernt, sondern lediglich den Auswahlzustand der angeforderten Pakete setzt. Sie werden eine andere Anwendung benötigen, um die angeforderten Pakete tatsächlich herunterzuladen und zu installieren. Führen Sie beispielsweise apt-get dselect-upgrade aus.
Gewöhnlich werden Sie feststellen, dass dselect(1) eine bequemere Art ist, den Paketauswahlzustand zu ändern.