staging.inyokaproject.org

Von „dpkg-divert“ weitergeleitet.

dpkg

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png dpkg (Debian Package) dient zum Installieren einzelner .deb-Pakete. Es stellt die Funktionen zur Verfügung (Backend), die von den Programmen apt-get und aptitude benutzt werden.

Für die meisten Operationen sind Root-Rechte[1] nötig.

Installation

dpkg ist integraler Bestandteil jeder Ubuntuinstallation und somit immer installiert. Das Programm ist im gleichnamigen Paket dpkg enthalten.

Optionen

Normale Optionen

dpkg benötigt die Angabe der Option, die die auszuführende Operation angibt, sowie abhängig von der Option die Angabe eines Paketnamens oder des Pfades zu einem .deb-Paket.

Kommandozeilenoptionen zu dpkg
kurze Option lange Option Beschreibung
-i --install Installiert das als Argument übergebene .deb-Paket (Dateiname oder mit Option -R Ordnername).
--configure Versucht die Installation von noch nicht fertig konfigurierten Paketen zu beenden. Entweder können die Paketnamen als Argumente übergeben werden oder es wird die Option -a bzw. --pending angegeben, um alle noch zu konfigurierenden Pakete zu verarbeiten.
Soll ein bereits korrekt installiertes Paket erneut konfiguriert werden, muss dpkg-reconfigure genutzt werden.
-r --remove Entfernt das als Argument übergebene genannte Paket. Wichtig: Der Name des Pakets, nicht der Dateiname muss angegeben werden. Eventuell vom Programm angelegte Konfigurationsdateien bleiben erhalten.
-l --list Ruft dpkg-query auf und gibt eine Liste mit Status, Version und einer Kurzbeschreibung des Pakets aus. Statt des Namens kann auch ein regulärer Ausdruck angegeben werden. Wird kein Argument übergeben, werden alle installierten Pakete aufgelistet. Diese Option ist auch für unprivilegierte Nutzer verfügbar. (Ab 20.04 wird ein Pager verwendet; verlassen mit Q .)
-P --purge Entfernt das genannte Paket inklusive der Konfigurationsdateien.
-R --recursive Statt eines Pfades zu einer .deb kann mit -R auch ein Verzeichnis angegeben werden, die gewählte Operation wird dann auf alle Pakete im Verzeichnis angewandt.
-L --listfiles Ruft dpkg-query auf und gibt eine Liste der im Paket enthaltenen Dateien aus.
-S --search Ruft dpkg-query auf, um auszugeben in welchen Paketen sich Dateien befinden, die zum angegebenen Suchmuster passen.
--no-pager Deaktiviert die Verwendung jeglichen Pagers bei der Anzeige von Informationen (ab 20.04).

Eine vollständige Liste der Optionen findet sich in der Manpage im Abschnitt ACTIONS bzw. AKTIONEN (Onlineversion: dpkg 🇩🇪).

Multiarch-Optionen

Das Multiarch-System ermöglicht die Installation von Paketen anderer Architekturen auf dem System. Der häufigste Anwendungsfall ist die Installation eines 32-bit- Pakets (i386) auf einem 64-bit-System (amd64).

Kommandozeilenoptinen für Multiarch
lange Option Beschreibung
--add-architecture i386 Fügt die Architektur i386 zu einem amd64 System hinzu.
--remove-architecture i386 Entfernt die Architektur i386 von dem System
--print-architecture Gibt die Architektur aus, die dpkg installiert hat (z.B. amd64).
--print-foreing-architectures Gibt eine durch Zeilenumbrüche getrennte Liste von zusätzlichen Architekturen aus, für die dpkg konfiguriert ist, Paketinstallationen für zu erlauben

Nach dem Hinzufügen ist die Aktualisierung der Paketquellen notwendig. Siehe dazu APT. Sofern das Paket in zwei Architekturen vorliegt kann manuell eine spezifische Version gewählt werden [2]:

sudo apt-get install PAKETNAME:i386 

force-Optionen

Achtung!

Diese Optionen können die Paketverwaltung und das System irreparabel beschädigen. Deswegen sollten diese Optionen nur mit äußerster Vorsicht und ausreichendem Verständnis angewandt werden.

In Ausnahmefällen kann es nötig sein, die Fehler zu übergehen, die dpkg zum Anhalten zwingen. Force-Optionen lassen sich mit den gewöhnlichen Optionen kombinieren, wo es sinnvoll ist.

Kommandozeilenoptionen mit force
Lange Option Beschreibung
--force-help Gibt eine Liste der force-Optionen mit einer Kurzbeschreibung aus.
--force-depends Ändert Abhängigkeitsfehler zu Warnungen. Ein Paket kann so trotz fehlender Abhängigkeiten installiert werden. apt-get -f wird eventuell zur Korrektur benötigt.
--force-architecture Erlaubt die Installation eines Pakets, das nicht zur Architektur passt. Nützlich, um reine 32-Bit-Pakete auf einem 64-Bit-System zu installieren. Allerdings ist meist die Multiarch-Integration des Paketes fehlerhaft und die für das Paket Verantwortlichen sollten darüber informiert werden.
--force-remove-reinstreq Erlaubt das Entfernen eines Pakets, dessen Reinstallation nötig ist. Teile des Paketes können nach dem Entfernen auf dem System verbleiben.

Eine vollständige Liste der force-Optionen findet sich in der Manpage im Abschnitt OPTIONS bzw. OPTIONEN.

Hilfsprogramme

dpkg-query

dpkg-query erlaubt Zugriff auf die Paketverwaltungsdatenbank, also auf Metainformationen (Paketstatus, Kontrollfelder, ...). Die Abfrage von Informationen über Paketdateien wird stattdessen über dpkg-deb geregelt. Einige Optionen können auch direkt mit dem dpkg-Befehl angesteuert werden.

dpkg-query OPTION PAKET/SUCHMUSTER 
Kommandozeilenoptionen zu dpkg-query
kurze Option lange Option Beschreibung
-l --list Gibt eine Liste der zum Suchmuster passenden Pakete und deren Informationen aus.
-S --search Gibt aus, in welchen Paketen sich Dateien befinden, die zum angegebenen Suchmuster (z.B. Pfad) passen.
-L --listfiles Gibt die im Paket enthaltenen Dateien aus. Das Paket wird über den Paketnamen als Argument übergeben und muss installiert (oder nicht vollständig entfernt) sein.

Eine vollständige Liste der Optionen findet sich in der Manpage im Abschnitt COMMANDS bzw. BEFEHLE (Onlineversion: dpkg-query 🇩🇪).

Paketstatus

Zusätzlich zur Kurzbeschreibung des Pakets gibt --list/-l eine Statusangabe zum jeweiligen Paket aus. Diese besteht aus drei Stellen:

  1. Gewünschter Paketstatus

    • u für unbekannt

    • i für installieren

    • h für halten

    • r für entfernen (Konfigurationsdateien behalten)

    • p für vollständig (inkl. Konfigurationsdateien) entfernen

  2. Aktueller Paketstatus

    • n für nicht installiert

    • c für Konfigurationsdateien verbleibend

    • H für nicht vollständig installiert (nicht alle Dateien konnten installiert werden)

    • U für entpackt (vor dem eigentlichen Installieren)

    • F für nicht vollständig konfiguriert (Fehler in Konfigurationsskripten)

    • W für Trigger-Verarbeitung (durch anderes Paket) wird erwartet (Trigger sind z.B. das Aktualisieren des Manpageindexes oder das Aktualisieren der durch .desktop Dateien bereitgestellten MIME-Typen, also Vorgänge, die für mehrere Pakete interessant sind. Anstatt diese Vorgänge nach der Installation jedes einzelnen Paketes auszuführen, wird der Vorgang erst am Ende der Installation aller Pakete ausgeführt.)

    • t für Trigger-Verabeitung steht bevor

    • i für installiert

  3. Fehler (Leerzeichen für keine Fehler)

    • R für Reinstallation erforderlich

So bezeichnet ii ein vollständig installiertes Paket, rc ein entferntes Paket von dem noch Konfigurationsdateien vorliegen und un ein nicht (mehr) installiertes Paket.

Eine vollständige Liste der Statusangaben findet sich in der Manpage im Abschnitt PACKAGE STATES bzw. PAKETZUSTÄNDE.

dpkg-deb

dpkg-deb stellt grundlegende Möglichkeiten zum Packen und Entpacken, sowie die Abfrage von Metainformationen (enthaltene Dateien, Kontrollfelder, ...) von .deb-Paketen bereit. Einige Optionen können auch direkt mit dem dpkg-Befehl angesteuert werden.

dpkg-deb OPTION VERZEICHNIS/PAKET 
Kommandozeilenoptionen zu dpkg-deb
kurze Option lange Option Beschreibung
-I --info Zeigt Informationen zu den als Argument übergebenen .deb-Paketen an. Als optionales zweites Argument kann der Name einer (vorhandenen) Kontrolldatei übergeben werden, deren Inhalt dann in der Standardausgabe angezeigt wird.
-b --build Erstellt ein .deb-Paket aus einem angegebenen Verzeichnis.
-c --contents Zeigt den Inhalt eines .deb-Pakets an.
-x --extract Entpackt das angegebene .deb-Paket in das angegebene Zielverzeichnis.

Eine vollständige Liste der Optionen findet sich in der Manpage im Abschnitt COMMANDS bzw. BEFEHLE (Onlineversion: dpkg-deb 🇩🇪).

dpkg-divert

Mit dpkg-divert können Umleitungen eingerichtet werden, sodass z.B. Dateien, die von einem Paket bereitgestellt werden, beim Paketupgrade nicht verändert werden. So kann man nicht nur lokale Änderungen (ohne Verlust) vornehmen, sondern auch Pakete, die Dateien an exakt der selben Stelle installieren, trotzdem parallel installieren (vorausgesetzt die Pakete sind nicht explizit als gegenseitiger Konflikt markiert).

dpkg-divert (OPTION) BEFEHL DATEI/MUSTER 
Kommandozeilenoptionen zu dpkg-divert
Befehl Beschreibung
--add Fügt eine Umleitung für die als Argument übergebene Datei hinzu. Die Angabe von --add als Kommando ist optional. Wenn kein Kommando angegeben wurde, wird immer dieses Kommando gewählt.
--remove Entfernt die Umleitung für die als Argument übergebene Datei. Wenn bei der Umleitung umbenannt wurde, muss trotzdem die ursprüngliche Name übergeben werden.
--list Listet alle aktuell eingerichteten Umleitungen, die auf das als Argument übergebene Suchmuster passen, auf. Ohne Argument werden alle Umleitungen aufgelistet.
Option Beschreibung
--local Richtet die Umleitung so ein, dass die Datei durch kein Paketupgrade und durch keine Paketinstallation verändert wird.
--package Das als Argument übergebene Paket ist als einziges Paket nicht von der Umleitung betroffen.
--rename Beim Einrichten (bzw. Entfernen) wird die Datei umbenannt. Standardmäßig wird die Endung .distrib hinzugefügt (bzw. entfernt). Existierende Dateien werden nicht überschrieben, eher bricht die Umbenennung ab.
--test Es werden keine Änderungen vorgenommen.

Eine vollständige Liste der Befehle und Optionen findet sich in der Manpage im Abschnitt COMMANDS und OPTIONS bzw. BEFEHLE und OPTIONEN (Onlineversion: dpkg-divert).

dpkg-repack

Mit dpkg-repack kann man schon installierte Programme wieder in ein .deb-Paket packen. Die genaue Vorgehensweise wird im Artikel dpkg-repack erläutert.

Beispiele

Installation

Installiert das PAKET im genannten Pfad:

sudo dpkg -i /PFAD/ZUM/PAKET/PAKET.deb 

Wenn Pakete gegenseitige Abhängigkeiten haben oder wenn alle Pakete in einem Ordner installiert werden sollen, ist folgender Befehl hilfreich:

sudo dpkg -i /ORDNER/*.deb 

Hinweis:

dpkg löst Abhängigkeiten der zu installierenden Pakete nicht automatisch auf. Installiert man also ein Paket, das von anderen abhängt, so kommt es zu Fehlermeldungen im Stil von

sudo dpkg -i foo_1.0-0ubuntu1_all.deb 
Wähle vormals abgewähltes Paket foo.
(Lese Datenbank ... 42000 Dateien und Verzeichnisse sind derzeit installiert.)
Entpacke foo (aus foo_1.0-0ubuntu1_all) ...
dpkg: Abhängigkeitsprobleme verhindern Konfiguration von foo:
 foo hängt ab von bare (>= 0.6.1); aber:
  Paket bar ist nicht installiert.
dpkg: Fehler beim Bearbeiten von foo (--install):
 Abhängigkeitsprobleme - lasse es unkonfiguriert
Fehler traten auf beim Bearbeiten von:
 foo 

Das Paket wird zwar installiert, ist aber aufgrund fehlender Abhängigkeiten noch nicht benutzbar. Mittels

sudo apt-get -f install 

lassen sich die fehlenden Abhängigkeiten automatisch nachinstallieren.

Sperren

Um ein bestimmtes Paket nicht automatisch zu aktualisieren, wird der Paketstatus auf "hold" gesetzt:

echo PAKETNAME hold | sudo dpkg --set-selections 

Möchte man die Sperre wieder aufheben, setzt man den Status wieder auf "install":

echo PAKETNAME install | sudo dpkg --set-selections 

Als PAKETNAME ist der "reine" Paketname (ohne Versionsnummer) zu verwenden.

Entfernen

Entfernt das Paket vim:

sudo dpkg -r vim 

Entfernt alle Pakete, deren Name mit vim beginnt. Die beiden Hochkomma sind nötig, da die Shell sonst versucht, Dateinamen im aktuellen Verzeichnis mit dem Stern zu komplettieren:

sudo dpkg -r 'vim*' 

Anzeige

Gibt die Informationen zum allen Paketen aus, deren Name mit vim beginnt. Die beiden Hochkomma sind nötig, da die Shell sonst versucht, Dateinamen im aktuellen Verzeichnis mit dem Stern zu komplettieren. Oft macht es Sinn, die Ausgaben z.B. mit grep nach dem Paketstatus zu filtern.

dpkg -l 'vim*' 

Manchmal kann es nützlich sein, den Inhalt bzw. die komplette Dateiliste eines Paket auszugeben:

dpkg -L PAKETNAME 

Möchte man dagegen alle Pakete einer bestimmten Komponente (wie z.B. universe) anzeigen, wird der Befehl deutlich länger (Ubuntu-Version/Komponente am Ende bitte anpassen):

dpkg -l | awk '/^.i/ {print $2}' | xargs apt-cache policy | awk '/^[a-z0-9.\-]+:/ {pkg=$1}; /\*\*\*/ {OFS="\t"; getline; print pkg,$2,$3}' | grep trusty/universe 

Konfiguration beenden

Alle noch ausstehenden Konfigurationsskripte ausführen und einen abgebrochenen Installationsvorgang fortsetzen:

sudo dpkg --configure -a 

Konfiguration erneut durchführen

Die debconf-Konfigurationsskripte des Pakets locales erneut ausführen (und damit die Sprachpakete neu generieren).

sudo dpkg-reconfigure locales 

Umleitung einrichten

Die Datei /usr/bin/apt-build wird ohne Ausnahme für alle Pakete auf die Datei /usr/bin/apt-build.distrib umgeleitet. Beim Erstellen der Umleitung wird die Datei direkt umbenannt.

sudo dpkg-divert --local --rename /usr/bin/apt-build 

Umleitung entfernen

Die im vorherigen Beispiel angelegte Umleitung wird wieder entfernt. Das --rename stellt sicher, dass die Datei wieder zurückbenannt wird. Vergisst man dies, kann man die Datei einfach manuell, z.B. mit mv, umbenennen.

sudo dpkg-divert --rename --remove /usr/bin/apt-build 

Diese Revision wurde am 30. Dezember 2020 12:30 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Paketverwaltung, Installation, Server, Shell, System