Kapitel 5. Paketmanagement
Zurück | 5.36 `dpkg` | Weiter

## 5.36 `dpkg`

`dpkg` (http://www.dpkg.org) ist die Basis der Debian-Paketverwaltung. `dpkg` steht für „Debian GNU/Linux package manager“. Da `dpkg` mittlerweile auch von anderen Distributionen wie Novell/SuSE und RedHat/Fedora eingesetzt wird, ist die Bezeichnung nicht mehr ganz korrekt.

Die wichtigste Funktion von `dpkg` besteht darin, das System in einem stabilen Zustand zu halten. Da die Werkzeuge zur Paketverwaltung in anderen Disrtibutionen nicht den Anforderungen der Debian-Entwickler genügten, wurde `dpkg` entworfen. Das Paketformat RPM, das u.a. von RedHat/Fedora- und Novell/SuSE-Distributionen verwendet wird, prüft lediglich, ob eine benötigte Datei vorhanden ist. Ob diese Datei in der gewünschten oder gar benötigten Version vorliegt, wird nicht geprüft.

Mit diesem Programm kommen Sie nur in seltenen Fällen in Berührung; meist werden Sie Frontends wie `apt-get` oder `aptitude` benutzen. Hier folgen trotzdem einige nützliche Beispiele, wie `dpkg` eingesetzt werden kann.

### 5.36.1 `--help`

Natürlich bringt auch `dpkg`, wie alle guten Unix-Werkzeuge, eine eingebaute Hilfefunktion mit. Mit der Option `--help` kann man sich einen ersten Überblick über die beachtliche Vielzahl von Optionen verschaffen.

    Usage:
      dpkg -i|--install      <deb file name> ... | -R|--recursive <dir> ...
      dpkg --unpack          <deb file name> ... | -R|--recursive <dir> ...
      dpkg -A|--record-avail <deb file name> ... | -R|--recursive <dir> ...
      dpkg --configure              <package name> ... | -a|--pending
      dpkg -r|--remove | -P|--purge <package name> ... | -a|--pending
      dpkg --get-selections [<pattern> ...]    get list of selections to stdout
      dpkg --set-selections                    set package selections from stdin
      dpkg --update-avail <Packages-file>      replace available packages info
      dpkg --merge-avail <Packages-file>       merge with info from file

    ...

      --no-force-...|--refuse-...    Stop when problems encountered
      --abort-after <n>              Abort after encountering <n> errors

    Comparison operators for --compare-versions are:
     lt le eq ne ge gt       (treat no version as earlier than any version);
     lt-nl le-nl ge-nl gt-nl (treat no version as later than any version);
     < << <= = => >> >       (only for compatibility with control file syntax).

    Use `dselect' for user-friendly package management.

Die meisten Optionen haben eine kurze und eine lange Schreibweise, zum Beispiel `-i` oder alternativ `--install`; der Einfachheit halber wird im Folgenden immer die Kurzform erwähnt. Einige wenige Optionen sind ausschließlich in der ausführlichen Version verfügbar.

### 5.36.2 `-i`, `--install`

Mit dieser Option können Pakete installiert werden, die lokal im Dateisystem, also auch auf einer gemounteten CD-ROM, vorliegen. Hierzu ist neben der Option `-i` lediglich der Dateiname (ggf. inklusive Pfad) anzugeben. Wenn eine Reihe Pakete installiert werden soll, so können Sie auch ein Verzeichnis statt eines Dateinamens angeben; zusätzlich ist die Option `-R` anzugeben. Mit dieser wird das Verzeichnis rekursiv nach Debian-Paketen durchsucht.

### 5.36.3 `--pending`, `--configure`

Mit `--pending` können bereits entpackte, aber noch nicht konfigurierte Pakete endgültig konfiguriert werden. Es kann zu einem solchen Zustand kommen, wenn das System bei der Installation von Paketen auf einen Fehler trifft und abbricht. Zu diesem Zeitpunkt können aber bereits andere (eventuell wichtige) Pakete im aktuellen Installationsdurchlauf entpackt worden sein. Diese können durch Angabe des Paketnamens gezielt konfiguriert und damit abschließend installiert werden.

Sollen nicht nur bestimmte, sondern alle bereits entpackten Pakete dieser Prozedur unterzogen werden, so müssen Sie die Option `-a` oder `--pending` verwenden.

### 5.36.4 `-r`, `--remove`

Mit der Option `-r`, für „remove“, können Pakete entfernt werden. Dazu geben Sie lediglich den Namen des Pakets oder die Namen der Pakete (durch Leerzeichen getrennt) an, das/die gelöscht werden soll(en). Diese Option löscht lediglich die Programmdateien eines Pakets. Die eigentlichen Konfigurationsdateien (die nur sehr wenig Platz auf dem Datenträger einnehmen) werden nicht gelöscht. Wird ein Paket einige Zeit später erneut installiert, so liegt die alte Konfiguration noch vor und kann weiterhin genutzt werden.

### 5.36.5 `-P`, `--purge`

Die Option „purge“ entfernt ein Paket komplett, inklusive aller Konfigurationsdateien, aus dem System.

### 5.36.6 `-l`, `--list`

Mit der Option `-l` können die tatsächlichen Paketnamen ermittelt werden. Diese weichen häufig von den eigentlichen Befehlen ab.

    surimi:~$ dpkg -l mozilla*
    Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Säubern/Halten
    | Status=Nicht/Installiert/Config/U=Entpackt/Fehlgeschl. Konf./Halb install.
    |/Fehler?=(keiner)/Halten/R=Neuinst.notw/X=beides (Status,Fehler: GROSS=schlecht)
    ||/ Name           Version        Beschreibung
    +++-==============-==============-============================================
    ii  mozilla        1.0.0-1        Mozilla Web Browser - dummy package
    ii  mozilla-browse 1.0.0-1        Mozilla Web Browser - core and browser
    rc  mozilla-browse 0.0.20020226.1 An Open Source WWW browser for X and GTK+ (C
    ii  mozilla-browse 0.0.20020610.0 An Open Source WWW browser for X and GTK+ (C
    ii  mozilla-chatzi 1.0.0-1        Mozilla Web Browser - irc client
    pn  mozilla-chatzi <keine>        (keine Beschreibung vorhanden)
    pn  mozilla-chatzi <keine>        (keine Beschreibung vorhanden)
    pn  mozilla-cvs    <keine>        (keine Beschreibung vorhanden)
    pn  mozilla-cvs-de <keine>        (keine Beschreibung vorhanden)
    ii  mozilla-dev    1.0.0-1        Mozilla Web Browser - development files
    un  mozilla-dmotif <keine>        (keine Beschreibung vorhanden)
    ii  mozilla-dom-in 1.0.0-1        A tool for inspecting the DOM of pages in Mo
    ii  mozilla-dom-in 0.0.20020610.0 A tool for inspecting the DOM of pages in Mo
    ii  mozilla-js-deb 1.0.0-1        JavaScript debugger for use with Mozilla
    pn  mozilla-js-deb <keine>        (keine Beschreibung vorhanden)
    rc  mozilla-locale 0.9.9-3        Mozilla German Language/Region Package.
    pn  mozilla-locale <keine>        (keine Beschreibung vorhanden)
    pn  mozilla-locale <keine>        (keine Beschreibung vorhanden)
    ii  mozilla-mailne 1.0.0-1        Mozilla Web Browser - mail and news support
    pn  mozilla-mailne <keine>        (keine Beschreibung vorhanden)
    pn  mozilla-mailne <keine>        (keine Beschreibung vorhanden)
    ii  mozilla-psm    1.0.0-1        Mozilla Web Browser - Personal Security Mana
    pn  mozilla-psm-cv <keine>        (keine Beschreibung vorhanden)
    ii  mozilla-psm-sn 0.0.20020610.0 PSM - Personal Security Manager for Mozilla
    un  mozilla-smotif <keine>        (keine Beschreibung vorhanden)
    pn  mozilla-snapsh <keine>        (keine Beschreibung vorhanden)
    pn  mozilla-snapsh <keine>        (keine Beschreibung vorhanden)
    ii  mozilla-xmlter 1.0.0-1        Mozilla Web Browser - XML enabled
    pn  mozilla-xmlter <keine>        (keine Beschreibung vorhanden)
    pn  mozilla-xmlter <keine>        (keine Beschreibung vorhanden)

Problematisch ist hierbei, dass der Name des Pakets abgeschnitten wird; dies können Sie durch Setzen der Variablen `COLUMNS` ändern: `COLUMNS=132 dpkg -l mozilla*`.

### 5.36.7 `-s`, `--status`

Hiermit kann der Status eines Pakets ermittelt werden. Es werden u.a. Informationen zum Status der Installation, der Version, der Größe, der Section und der Abhängigkeiten ausgegeben. So können sehr schnell die Ursachen für eventuelle Probleme bei der Installation von weiteren Paketen ermittelt werden.

    Package: bash
    Essential: yes
    Status: install ok installed
    Priority: required
    Section: base
    Installed-Size: 1288
    Maintainer: Matthias Klose <doko@debian.org>
    Source: bash (2.05b-2-8.1)
    Version: 2.05b-8.1
    Replaces: bash-doc (< 2.05-1), bash-completion
    Depends: base-files (> 2.1.12)
    Pre-Depends: libc6 (> 2.3.1-1), libncurses5 (> 5.3.20021109-1)
    Suggests: bash-doc
    Conflicts: bash-completion
    Conffiles:
     /etc/skel/.bashrc c5f1155761187900cbb3b6554c2b2533
     /etc/skel/.bash_profile ee190fd94cb7bfe8a663447386c065e8
     /etc/bash.bashrc e218a2979b01db4e9c3ae19c94294a57
     /etc/bash_completion 14dde46ca4fb4af4d1f22f0f0fc2ef8c
    Description: The GNU Bourne Again SHell
     Bash is an sh-compatible command language interpreter that executes
     commands read from the standard input or from a file.  Bash also
     incorporates useful features from the Korn and C shells (ksh and csh).
     .
     Bash is ultimately intended to be a conformant implementation of the
     IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).
     .
     Included in the bash package is the Programmable Completion Code, by
     Ian Macdonald.
     .
     Statically linked.

Für den fortgeschrittenen Systemadministrator ist an dieser Stelle interessant, dass hier auch die MD5-Checksummen der Konfigurationsdateien ausgegeben werden.

### Ermitteln von Checksummen

Um die Checksumme eines gesamten Pakets zu ermitteln, benutzt der Administrator das Programm `debsums`(siehe auch `debsums` ).

    fr@sushi:~$ debsums ssh
    usr/bin/ssh                         OK
    usr/bin/scp                         OK
    usr/bin/ssh-add                     OK
    usr/bin/ssh-agent                   OK
    usr/bin/ssh-keygen                  OK
    usr/bin/ssh-keyscan                 OK
    usr/bin/sftp                        OK
    usr/bin/ssh-copy-id                 OK
    usr/bin/ssh-argv0                   OK
    usr/sbin/sshd                       OK
    usr/lib/ssh-keysign                 OK
    usr/lib/sftp-server                 OK
    usr/share/man/man1/scp.1.gz         OK
    usr/share/man/man1/ssh-agent.1.gz   OK
    usr/share/man/man1/ssh-keygen.1.gz  OK
    ...

### 5.36.8 `-S`, `--search`

Mit der Option `-S` kann ermittelt werden, zu welchem Paket eine Datei gehört. Dies trifft lediglich auf bereits installierte Pakete zu. Eine Suche in nicht installierten Paketen ist auf diesem Wege nicht möglich.

    fr@surimi:~$ dpkg -S gdm.conf
    gdm: /etc/gdm/factory-gdm.conf
    gdm: /etc/gdm/gdm.conf

    fr@surimi:~$ dpkg -S /etc/gdm/gdm.conf
    gdm: /etc/gdm/gdm.conf

Hierbei kann das Weglassen oder Hinzufügen des Pfades zu der gesuchten Datei zu unterschiedlichen Ergebnissen führen.

### 5.36.9 `-C`, `--audit`

Durchsucht das System nach unvollständig installierten Paketen und versucht, sinnvolle Vorschläge zu unterbreiten, welche Schritte notwendig sind, um diese Pakete in einen funktionsfähigen Zustand zu versetzen.

### 5.36.10 `-L`, `--listfiles`

Zeigt alle Dateien an, die zum angegebenen Paket gehören.

    $ dpkg -L bash
    /.
    /bin
    /bin/bash
    /etc
    /etc/skel
    /etc/skel/.bashrc
    /etc/skel/.bash_profile
    /etc/bash_completion.d
    /etc/bash.bashrc
    /etc/bash_completion
    /usr
    /usr/share
    /usr/share/doc
    /usr/share/doc/bash
    /usr/share/doc/bash/completion-contrib
    /usr/share/doc/bash/completion-contrib/gnatmake
    /usr/share/doc/bash/completion-contrib/bitkeeper

    ...

    /usr/share/man/man7
    /usr/share/man/man7/bash-builtins.7.gz
    /usr/bin
    /usr/bin/bashbug
    /bin/rbash
    /bin/sh
    /usr/share/man/man1/sh.1.gz

### 5.36.11 `--get-selections`

Gibt, ohne weitere Parameter, eine Liste aller installierten Pakete aus. Wird zusätzlich ein „*“ angegeben, so werden alle Pakete mit dem aktuellen Zustand ausgegeben. Dies zeigt also auch zu löschende und nicht installierte Pakete an.

Diese Ausgabe kann in eine Datei geschrieben werden und mittels der Option `--set-selections` (beispielsweise auf einem anderen System oder aus einem Backup) wieder eingelesen werden. Somit können einzelne Systeme sehr leicht dupliziert werden. Auch kann auf diesem Wege ein System nach einen Hardwareausfall wiederhergestellt werden.

Beispiel:

    dpkg --get-selections \* > /tmp/PAKETLISTE

### 5.36.12 `--set-selections`

Liest eine zuvor mit `--get-selections` erzeugte Paketliste wieder ein.

Beispiel:

    dpkg --set-selections < /tmp/PAKETLISTE

Abhängig von den Informationen in der Datei `PAKETLISTE` werden so alle Pakete aus dieser Datei in der Paketdatenbank mit einem Status gekennzeichnet. Ein darauf folgendes `apt-get dselect-upgrade` wird die gewünschten Aktionen durchführen.

### 5.36.13 `--force-confnew`

Sollte einmal aus Versehen eine der Konfigurationsdateien verschwunden sein oder eine andere wichtige Datei fehlen, so kann ein komplettes Paket einfach erneut installiert werden. Hierzu müssen Sie sich zunächst das betroffene Paket besorgen, beispielsweise mit `apt-get -d install paket`. Nun kann das Paket installiert werden. Die Option `--force-confnew` überschreibt dabei alle Konfigurationsdateien:

    dpkg -i --force-confnew /var/cache/apt/archives/paket.deb

### 5.36.14 `--force-depends`

Diese Option kann zusammen mit jeder anderen Option von `dpkg` eingesetzt werden, führt jedoch im Allgemeinen zu einem Versionschaos. Hiermit werden alle Abhängigkeiten eines Pakets ignoriert und wird die gewünschte Aktion (beispielsweise „install“) ausgeführt. Alle Warnungen des Paketmanagements werden ignoriert.

Wird `dpkg` mit dieser Option eingesetzt, so ist es kaum mehr möglich, danach `apt-get` sinnvoll zu benutzen, da `apt-get` feststellen wird, dass bestimmte Abhängigkeiten nicht erfüllt werden können. In einem solchen Fall können Sie versuchen, mit `apt-get -f install` die Situation zu bereinigen. Dies wird aber das zuvor mit `--force-depends` behandelte Paket in einen unbrauchbaren Zustand versetzen bzw. löschen.

### 5.36.15 `hold`

Pakete können im Debian-Paketmanagement unterschiedliche Zustände haben; einer davon ist „hold“. Pakete mit diesem Zustand werden bei einem Update nicht aktualisiert. Um eine neue Version dieses Pakets zu installieren, muss das Paket gezielt installiert werden. Ein einzelnes Paket kann mit dem Kommando

    echo <paketname> "hold" | dpkg --set-selections

auf „hold“ gesetzt werden.

Sollen mehrere Pakete auf einmal in den Zustand „hold“ gesetzt werden, so kann dies wie folgt geschehen:

    dpkg --set-selections << EOF
    <paketname1> hold
    <paketname2> hold
    <paketname3> hold
    <paketname4> hold
    EOF

### „hold“ mit Aptitude

`dpkg` und Aptitude nutzen unterschiedliche Informationen zu den Paketen. Dies führt dazu, dass ein mit Aptitude auf „hold“ gesetztes Paket mit `apt-get upgrade` dennoch aktualisiert wird. Werden also Pakete mittels Aptitude auf „hold“ gesetzt, so müssen auch Funktionen wie „upgrade“ und „dist-upgrade“ mittels Aptitude durchgeführt werden.

Zurück | Nach oben | Weiter
5.35 Synaptic | Zum Anfang | 5.37 `dpkg-reconfigure`

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).