dpkg
ist der Grundbefehl zum Umgang mit Debian-Paketen auf dem System. Falls Sie .deb
-Pakete haben, ermöglicht dpkg
es Ihnen, sie zu installieren oder ihren Inhalt zu analysieren. Aber dieses Programm sieht nur einen begrenzten Ausschnitt des Debian-Universums: es weiß, was auf dem System installiert ist und was auch immer in der Befehlszeile eingegeben wird, aber es weiß nichts von den anderen verfügbaren Paketen. Daher wird es scheitern, wenn eine Abhängigkeit nicht erfüllt ist. Dagegen erzeugen Programme wie apt-get
eine Liste von Abhängigkeiten, um alles soweit wie möglich automatisch zu installieren.
dpkg
ist vor allem das Programm zur Installation eines bereits vorhandenen Debian-Pakets (da es nichts herunterlädt). Hierzu verwenden wir seine Option -i
oder --install
.
Beispiel 5.2. Installation eines Pakets mit dpkg
#
dpkg -i man-db_2.6.2-1_amd64.deb
(Reading database ... 96357 files and directories currently installed.) Preparing to replace man-db 2.6.1-3 (using man-db_2.6.2-1_amd64.deb) ... Unpacking replacement man-db ... Setting up man-db (2.6.2-1) ... Building database of manual pages ...
dpkg
durchgeführten Schritte sehen; so wissen wir, an welchem Punkt möglicherweise ein Fehler aufgetreten ist. Die Installation kann in zwei Phasen betroffen sein: erstens beim Entpacken und zweitens bei der Konfigurierung. apt-get
nutzt dies, um die Anzahl der Aufrufe von dpkg
zu begrenzen (weil jeder Aufruf aufwendig ist, da jedes Mal die Datenbank in den Speicher geladen werden muss, vor allem die Liste der bereits installierten Dateien).
Beispiel 5.3. Getrenntes Entpacken und Konfigurieren
#
dpkg --unpack man-db_2.6.2-1_amd64.deb
(Reading database ... 96357 files and directories currently installed.) Preparing to replace man-db 2.6.2-1 (using man-db_2.6.2-1_amd64.deb) ... Unpacking replacement man-db ... #
dpkg --configure man-db
Setting up man-db (2.6.2-1) ... Building database of manual pages ...
dpkg
bei der Installation eines Pakets scheitern und eine Fehlermeldung ausgeben; falls der Nutzer die Anweisung gibt, ihn zu ignorieren, wird es nur eine Warnung anzeigen; aus diesem Grund haben wir die verschiedenen --force-*
-Optionen. Der Befehl dpkg --force-help
oder die Dokumentation dieses Befehls zeigt Ihnen eine vollständige Liste dieser Optionen. Der häufigste Fehler, dem Sie früher oder später mit Sicherheit begegnen werden, ist eine Dateikollision. Wenn ein Paket eine Datei enthält, die bereits mit einem anderen Paket installiert worden ist, wird dpkg
sich weigern, es zu installieren. In diesem Fall wird dann folgende Meldung erscheinen:
Unpacking libgdm (from .../libgdm_3.8.3-2_amd64.deb) ...
dpkg: error processing /var/cache/apt/archives/libgdm_3.8.3-2_amd64.deb (--unpack):
trying to overwrite '/usr/bin/gdmflexiserver', which is also in package gdm3 3.4.1-9
--force-overwrite
benutzen, die dpkg
anweist, diesen Fehler zu ignorieren und die Datei zu überschreiben.
--force-*
-Optionen verfügbar sind, wird wahrscheinlich nur --force-overwrite
häufiger gebraucht werden. Es gibt diese Optionen nur für außergewöhnliche Situationen, und es ist besser, soweit wie möglich die Finger von ihnen zu lassen, um die vom Paketverwaltungsmechanismus vorgegebenen Regeln einzuhalten. Sie sollten nicht vergessen, dass diese Regeln die Konsistenz und Stabilität Ihres Systems sicherstellen.
dpkg
mit der Option -r
oder --remove
, gefolgt von dem Paketnamen, entfernt das Paket. Dieses Entfernen ist jedoch nicht vollständig: alle Konfigurationsdateien, Betreuerskripte, Protokolldateien (Systemprotokolle) und andere vom Paket verarbeitete Nutzerdaten bleiben zurück. Es auf diese Weise zu deinstallieren ist schnell geschehen, andererseits bleibt aber die Möglichkeit bestehen, es schnell und mit derselben Konfiguration wieder zu installieren. Um alles, was mit einem Paket in Zusammenhang steht, vollständig zu entfernen, verwenden Sie die Option -P
oder --purge
, gefolgt von dem Paketnamen.
Beispiel 5.4. Entfernen und vollständiges Löschen des Pakets debian-cd
#
dpkg -r debian-cd
(Reading database ... 97747 files and directories currently installed.) Removing debian-cd ... #
dpkg -P debian-cd
(Reading database ... 97401 files and directories currently installed.) Removing debian-cd ... Purging configuration files for debian-cd ...
dpkg
-Optionen ansehen, welche die interne Datenbank abfragen, um Informationen zu erhalten. Wir führen hierzu folgende Beispiele zunächst in der langen Version und dann der entsprechenden kurzen Version (die natürlich dieselben Parameter haben kann) an: --listfiles paket
(oder -L
), listet die von diesem Paket installierten Dateien auf; --search datei
(oder -S
), liefert das Paket, aus welchem die Datei stammt; --status paket
(oder -s
), zeigt die Kopfzeilen eines installierten Pakets an; --list
(oder -l
), zeigt eine Liste der Pakete an, die dem System bekannt sind, und ihren Installationsstatus; --contents datei.deb
(oder -c
), führt die in dem genannten Debian-Paket enthaltenen Dateien auf; --info datei.deb
(oder -I
), zeigt die Kopfzeilen des Debian-Pakets an.
Beispiel 5.5. Verschiedene Anfragen mit dpkg
$
dpkg -L base-passwd
/. /usr /usr/sbin /usr/sbin/update-passwd /usr/share /usr/share/man /usr/share/man/ru /usr/share/man/ru/man8 /usr/share/man/ru/man8/update-passwd.8.gz /usr/share/man/pl /usr/share/man/pl/man8 /usr/share/man/pl/man8/update-passwd.8.gz /usr/share/man/man8 /usr/share/man/man8/update-passwd.8.gz /usr/share/man/fr /usr/share/man/fr/man8 /usr/share/man/fr/man8/update-passwd.8.gz /usr/share/doc-base /usr/share/doc-base/users-and-groups /usr/share/base-passwd /usr/share/base-passwd/passwd.master /usr/share/base-passwd/group.master /usr/share/lintian /usr/share/lintian/overrides /usr/share/lintian/overrides/base-passwd /usr/share/doc /usr/share/doc/base-passwd /usr/share/doc/base-passwd/copyright /usr/share/doc/base-passwd/users-and-groups.html /usr/share/doc/base-passwd/changelog.gz /usr/share/doc/base-passwd/users-and-groups.txt.gz /usr/share/doc/base-passwd/README $
dpkg -S /bin/date
coreutils: /bin/date $
dpkg -s coreutils
Package: coreutils Essential: yes Status: install ok installed Priority: required Section: utils Installed-Size: 13822 Maintainer: Michael Stone <mstone@debian.org> Architecture: amd64 Multi-Arch: foreign Version: 8.13-3.5 Replaces: mktemp, timeout Depends: dpkg (>= 1.15.4) | install-info Pre-Depends: libacl1 (>= 2.2.51-8), libattr1 (>= 1:2.4.46-8), libc6 (>= 2.7), libselinux1 (>= 1.32) Conflicts: timeout Description: GNU core utilities This package contains the basic file, shell and text manipulation utilities which are expected to exist on every operating system. . Specifically, this package includes: arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir dircolors dirname du echo env expand expr factor false flock fmt fold groups head hostid id install join link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc od paste pathchk pinky pr printenv printf ptx pwd readlink rm rmdir runcon sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test timeout touch tr true truncate tsort tty uname unexpand uniq unlink users vdir wc who whoami yes Homepage: http://gnu.org/software/coreutils $
dpkg -l 'b*'
Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-============-==============-==============-================================ un backupninja <none> (no description available) un base <none> (no description available) un base-config <none> (no description available) ii base-files 7.1 amd64 Debian base system miscellaneous ii base-passwd 3.5.26 amd64 Debian base system master passwo [...] $
dpkg -c /var/cache/apt/archives/gnupg_1.4.12-7_amd64.deb
drwxr-xr-x root/root 0 2013-01-02 19:28 ./ drwxr-xr-x root/root 0 2013-01-02 19:28 ./usr/ drwxr-xr-x root/root 0 2013-01-02 19:28 ./usr/share/ drwxr-xr-x root/root 0 2013-01-02 19:28 ./usr/share/doc/ drwxr-xr-x root/root 0 2013-01-02 19:28 ./usr/share/doc/gnupg/ -rw-r--r-- root/root 3258 2012-01-20 10:51 ./usr/share/doc/gnupg/TODO -rw-r--r-- root/root 308 2011-12-02 18:34 ./usr/share/doc/gnupg/FAQ -rw-r--r-- root/root 3543 2012-02-20 18:41 ./usr/share/doc/gnupg/Upgrading_From_PGP.txt -rw-r--r-- root/root 690 2012-02-20 18:41 ./usr/share/doc/gnupg/README.Debian -rw-r--r-- root/root 1418 2012-02-20 18:41 ./usr/share/doc/gnupg/TODO.Debian [...] $
dpkg -I /var/cache/apt/archives/gnupg_1.4.12-7_amd64.deb
new debian package, version 2.0. size 1952176 bytes: control archive=3312 bytes. 1449 bytes, 30 lines control 4521 bytes, 65 lines md5sums 479 bytes, 13 lines * postinst #!/bin/sh 473 bytes, 13 lines * preinst #!/bin/sh Package: gnupg Version: 1.4.12-7 Architecture: amd64 Maintainer: Debian GnuPG-Maintainers <pkg-gnupg-maint@lists.alioth.debian.org> Installed-Size: 4627 Depends: libbz2-1.0, libc6 (>= 2.4), libreadline6 (>= 6.0), libusb-0.1-4 (>= 2:0.1.12), zlib1g (>= 1:1.1.4), dpkg (>= 1.15.4) | install-info, gpgv Recommends: libldap-2.4-2 (>= 2.4.7), gnupg-curl Suggests: gnupg-doc, xloadimage | imagemagick | eog, libpcsclite1 Section: utils Priority: important Multi-Arch: foreign Homepage: http://www.gnupg.org Description: GNU privacy guard - a free PGP replacement GnuPG is GNU's tool for secure communication and data storage. It can be used to encrypt data and to create digital signatures. It includes an advanced key management facility and is compliant with the proposed OpenPGP Internet standard as described in RFC 4880. [...]
dpkg
speichert ein Protokoll über alle seine Aktivitäten in /var/log/dpkg.log
. Dieses Protokoll ist äußerst umfangreich, da es jeden einzelnen Schritt aufzeichnet, durch den die von dpkg
verarbeiteten Pakete gehen. Zusätzlich zu der Möglichkeit, das Verhalten von dpkg zu verfolgen, hilft es vor allem auch dabei, den Verlauf der Entwicklung des Systems festzuhalten: man kann den genauen Zeitpunkt feststellen, zu dem jedes Paket installiert oder aktualisiert worden ist, und diese Information kann für das Verständnis einer kürzlich aufgetretenen Verhaltensänderung äußerst hilfreich sein. Da alle Versionen aufgezeichnet werden, erleichtert es außerdem eine Gegenprobe mit changelog.Debian.gz
für betroffene Pakete oder sogar mit Online-Fehlerberichten.
Architektur
-Feld in ihren Kontrollinformationen. Dieses Feld kann entweder “all
” (für Pakete, die architekturunabhängig sind) enthalten oder die Bezeichnung der Ziel-Architektur (wie “amd64”, “armhf”, …). Im letzteren Fall wird dpkg
standardmäßig das Paket nur installieren, wenn diese Architekturangabe zu derjenigen des ausführenden Systems passt, wie sie von dpkg --print-architecture
zurückgegeben wird.
dpkg
ermöglicht es Anwendern, "fremde" Architekturen festzulegen, die auf dem aktullen System installiert werden können. Dazu wird einfach der Befehl dpkg --add-architecture
, wie unten gezeigt, aufgerufen. Der korrespondierende Befehl zum Beenden der Unterstützung für die andere Architektur lautet dpkg --remove-architecture
, er funktioniert allerdings nur, wenn keine Pakete für diese Architektur mehr in Benutzung sind.
#
dpkg --print-architecture
amd64 #
dpkg --print-foreign-architectures
#
dpkg -i gcc-4.7-base_4.7.2-5_armhf.deb
dpkg: error processing gcc-4.7-base_4.7.2-5_armhf.deb (--install): package architecture (armhf) does not match system (amd64) Errors were encountered while processing: gcc-4.7-base_4.7.2-5_armhf.deb #
dpkg --add-architecture armhf
#
dpkg --add-architecture armel
#
dpkg --print-foreign-architectures
armhf armel #
dpkg -i gcc-4.7-base_4.7.2-5_armhf.deb
Selecting previously unselected package gcc-4.7-base:armhf. (Reading database ... 97399 files and directories currently installed.) Unpacking gcc-4.7-base:armhf (from gcc-4.7-base_4.7.2-5_armhf.deb) ... Setting up gcc-4.7-base:armhf (4.7.2-5) ... #
dpkg --remove-architecture armhf
dpkg: error: cannot remove architecture 'armhf' currently in use by the database #
dpkg --remove-architecture armel
#
dpkg --print-foreign-architectures
armhf
Multi-Arch: same
”-Kopfzeilen die dem Paketier-System sagen, dass die verschiedenen Architekturen des Pakets problemlos parallel installiert werden können (und zeigen darüber hinaus an, dass diese Pakete nur Abhängigkeiten innerhalb der gleichen Architektur genügen können). Da Multi-Arch seine Geburtsstunde in Wheezy hatte, sind noch nicht alle Bibliotheken umgestellt. (Es sind jedoch alle Bibliotheken in ia32-libs enthalten!)
$dpkg -s gcc-4.7-base
dpkg-query: error: --status needs a valid package name but 'gcc-4.7-base' is not: ambiguous package name 'gcc-4.7-base' with more than one installed instance Use --help for help about querying packages. $dpkg -s gcc-4.7-base:amd64 gcc-4.7-base:armhf | grep ^Multi
Multi-Arch: same Multi-Arch: same $dpkg -L libgcc1:amd64 |grep .so
/lib/x86_64-linux-gnu/libgcc_s.so.1 $dpkg -S /usr/share/doc/gcc-4.7-base/copyright
gcc-4.7-base:armhf, gcc-4.7-base:amd64: /usr/share/doc/gcc-4.7-base/copyright
Multi-Arch: same
Pakete im Namen den Hinweis auf die Architektur enthalten müssen, um eindeutig erkennbar zu sein. Auch können sie Dateien mit anderen Instanzen des gleichen Pakets teilen. Der Befehl dpkg
stellt sicher, dass gemeinsam genutzte Dateien auf Bit-Ebene identisch sind. Und nicht zuletzt, müssen alle Instanzen eines Pakets den gleichen Versionsstand haben. Sie müssen also auch gleichzeitig aktualisiert werden.
Multi-Arch: foreign
” gekennzeichnet sein, oder seine Architektur muss mit derjenigen des Pakets übereinstimmen, das die Anhängigkeit festgelegt hat. Eine Architekturfestlegung kann auch noch dadurch auf alle möglichen Architekturen ausgeweitet werden, wenn package
:any
angegeben wird, aber architekturfremde Pakete können dieser Anforderung nur genügen, wenn sie als “Multi-Arch: allowed
” gekennzeichne sind.