Dpkg: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 3: Zeile 3:
== Bezeichnung ==
== Bezeichnung ==
''dpkg'' (Debian Package) dient zum Installieren einzelner deb-Pakete
''dpkg'' (Debian Package) dient zum Installieren einzelner deb-Pakete
* Es stellt die Funktionen zur Verfügung (Backend), die von den Programmen apt install benutzt werden.
* Es stellt die Funktionen zur Verfügung (Backend), die von den Programmen apt install benutzt werden
* Für die meisten Operationen sind Root-Rechte nötig.
* Für die meisten Operationen sind Root-Rechte nötig


== Beschreibung ==
== Beschreibung ==
dpkg ist ein Werkzeug, um Debian-Pakete zu installieren, zu bauen, zu entfernen und zu verwalten.
dpkg ist ein Werkzeug, um Debian-Pakete zu installieren, zu bauen, zu entfernen und zu verwalten
* Die primäre und benutzerfreundlichere Oberfläche für dpkg ist aptitude(8).
* Die primäre und benutzerfreundlichere Oberfläche für dpkg ist aptitude(8)
* dpkg selbst wird komplett über Befehlszeilenoptionen gesteuert, die aus genau einer Aktion und Null oder mehreren Optionen bestehen.
* dpkg selbst wird komplett über Befehlszeilenoptionen gesteuert, die aus genau einer Aktion und Null oder mehreren Optionen bestehen
* Der Aktionsparameter teilt dpkg mit, was zu tun ist, und die Optionen steuern die Aktionen in irgendeiner Weise.
* Der Aktionsparameter teilt dpkg mit, was zu tun ist, und die Optionen steuern die Aktionen in irgendeiner Weise
* dpkg kann auch als Oberfläche für dpkg-deb(1) und dpkg-query(1) verwendet werden.
* 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.
* 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.
* 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.
* Um solche Optionen zu verwenden, müssen die Backends direkt aufgerufen werden


== Anwendung ==
== Anwendung ==
Zeile 24: Zeile 24:


=== Debian package manager (dpkg) ===
=== Debian package manager (dpkg) ===
  # <tt>dpkg</tt> ([http://wiki.debian.org/dpkg http://wiki.debian.org/dpkg]) ist die Basis der Debian Paketverwaltung. <tt>dpkg</tt> steht für „Debian GNU/Linux package manager“.
  # dpkg ([http://wiki.debian.org/dpkg http://wiki.debian.org/dpkg]) ist die Basis der Debian Paketverwaltung. dpkg steht für „Debian GNU/Linux package manager“
* Da <tt>dpkg</tt> mittlerweile auch von anderen Distributionen wie Novell/SuSE und RedHat/Fedora eingesetzt wird, ist die Bezeichnung nicht mehr ganz korrekt.
* 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 <tt>dpkg</tt> besteht darin, das System in einem stabilen Zustand zu halten.
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 <tt>dpkg</tt> entworfen.
* 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.
* 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.
* 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.
* 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 <tt>apt-get</tt> oder <tt>aptitude</tt> benutzen.
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 <tt>dpkg</tt> eingesetzt werden kann.
* Hier folgen trotzdem einige nützliche Beispiele, wie dpkg eingesetzt werden kann


<tt>'''--help'''</tt>
'''--help'''


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


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


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


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


  Use `dselect' for user-friendly package management.
  Use `dselect' for user-friendly package management


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


=== -c, --contents ===
=== -c, --contents ===
Diese Option zeigt den Inhalt eines Debian Paketes an, hierzu muss das Paket nicht zwingend installiert sein
* Als weiterer Parameter ist der Dateiname des Debian Paketes anzugeben


Diese Option zeigt den Inhalt eines Debian Paketes an, hierzu muss das Paket nicht zwingend installiert sein.
=== -i, --install ===
* Als weiterer Parameter ist der Dateiname des Debian Paketes anzugeben.
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


=== -i, --install ===
=== --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


Mit dieser Option können Pakete installiert werden, die lokal im Dateisystem, also auch auf einer gemounteten CD-ROM, vorliegen.
Sollen nicht nur bestimmte, sondern alle bereits entpackten Pakete dieser Prozedur unterzogen werden, so müssen Sie die Option -a oder --pending verwenden
* Hierzu ist neben der Option <tt>-i</tt> 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 <tt>-R</tt> anzugeben.
* Mit dieser wird das Verzeichnis rekursiv nach Debian Paketen durchsucht.


=== --pending, --configure ===
=== -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


Mit <tt>--pending</tt> können bereits entpackte, aber noch nicht konfigurierte Pakete endgültig konfiguriert werden.
=== -P, --purge ===
* Es kann zu einem solchen Zustand kommen, wenn das System bei der Installation von Paketen auf einen Fehler trifft und abbricht.
Die Option „purge“ entfernt ein Paket komplett, inklusive aller Konfigurationsdateien, aus dem System
* 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 <tt>-a</tt> oder <tt>--pending</tt> verwenden.
=== -l, --list ===
Mit der Option -l können die tatsächlichen Paketnamen ermittelt werden
* Diese weichen häufig von den eigentlichen Befehlen ab


=== -r, --remove ===
  $ dpkg -l mozilla*
 
Mit der Option <tt>-r</tt>, 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.
 
===  -P, --purge ===
 
Die Option „purge“ entfernt ein Paket komplett, inklusive aller Konfigurationsdateien, aus dem System.
 
===  -l, --list ===
 
Mit der Option <tt>-l</tt> 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
  Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Säubern/Halten
  | Status=Nicht/Installiert/Config/U=Entpackt/Fehlgeschl.
  | Status=Nicht/Installiert/Config/U=Entpackt/Fehlgeschl
* Konf./Halb install.
* Konf./Halb install
  |/Fehler?=(keiner)/Halten/R=Neuinst.notw/X=beides (Status,Fehler: GROSS=schlecht)
  |/Fehler?=(keiner)/Halten/R=Neuinst.notw/X=beides (Status,Fehler: GROSS=schlecht)
  ||/ Name           Version       Beschreibung
  ||/ Name Version Beschreibung
  +++-==============-==============-===========================================
  +++-==============-==============-===========================================
  ii mozilla       1.0.0-1       Mozilla Web Browser - dummy package
  ii mozilla 1.0.0-1 Mozilla Web Browser - dummy package
  ii mozilla-browse 1.0.0-1       Mozilla Web Browser - core and browser
  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
  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-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
  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-chatzi <keine>       (keine Beschreibung vorhanden)
  pn mozilla-chatzi <keine> (keine Beschreibung vorhanden)
  pn mozilla-cvs   <keine>       (keine Beschreibung vorhanden)
  pn mozilla-cvs <keine> (keine Beschreibung vorhanden)
  pn mozilla-cvs-de <keine>       (keine Beschreibung vorhanden)
  pn mozilla-cvs-de <keine> (keine Beschreibung vorhanden)
  ii mozilla-dev   1.0.0-1       Mozilla Web Browser - development files
  ii mozilla-dev 1.0.0-1 Mozilla Web Browser - development files
  un mozilla-dmotif <keine>       (keine Beschreibung vorhanden)
  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 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-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
  ii mozilla-js-deb 1.0.0-1 JavaScript debugger for use with Mozilla
  pn mozilla-js-deb <keine>       (keine Beschreibung vorhanden)
  pn mozilla-js-deb <keine> (keine Beschreibung vorhanden)
  rc mozilla-locale 0.9.9-3       Mozilla German Language/Region Package.
  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)
  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
  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)
  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
  ii mozilla-psm 1.0.0-1 Mozilla Web Browser - Personal Security Mana
  pn mozilla-psm-cv <keine>       (keine Beschreibung vorhanden)
  pn mozilla-psm-cv <keine> (keine Beschreibung vorhanden)
  ii mozilla-psm-sn 0.0.20020610.0 PSM - Personal Security Manager for Mozilla
  ii mozilla-psm-sn 0.0.20020610.0 PSM - Personal Security Manager for Mozilla
  un mozilla-smotif <keine>       (keine Beschreibung vorhanden)
  un mozilla-smotif <keine> (keine Beschreibung vorhanden)
  pn mozilla-snapsh <keine>       (keine Beschreibung vorhanden)
  pn mozilla-snapsh <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
  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)
  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 <tt>COLUMNS</tt> ändern: <tt>COLUMNS=132 dpkg -l mozilla*</tt>.


===  -s, --status ===
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*


Hiermit kann der Status eines Pakets ermittelt werden.
=== -s, --status ===
* Es werden u.a.
Hiermit kann der Status eines Pakets ermittelt werden
* Informationen zum Status der Installation, der Version, der Größe, der Section und der Abhängigkeiten ausgegeben.
* Es werden u.a
* So können sehr schnell die Ursachen für eventuelle Probleme bei der Installation von weiteren Paketen ermittelt werden.
* 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
  # Package: bash
Zeile 167: Zeile 160:
  Conflicts: bash-completion
  Conflicts: bash-completion
  Conffiles:
  Conffiles:
  /etc/skel/.bashrc c5f1155761187900cbb3b6554c2b2533
/etc/skel/.bashrc c5f1155761187900cbb3b6554c2b2533
  /etc/skel/.bash_profile ee190fd94cb7bfe8a663447386c065e8
/etc/skel/.bash_profile ee190fd94cb7bfe8a663447386c065e8
  /etc/bash.bashrc e218a2979b01db4e9c3ae19c94294a57
/etc/bash.bashrc e218a2979b01db4e9c3ae19c94294a57
  /etc/bash_completion 14dde46ca4fb4af4d1f22f0f0fc2ef8c
/etc/bash_completion 14dde46ca4fb4af4d1f22f0f0fc2ef8c
  Description: The GNU Bourne Again Shell
  Description: The GNU Bourne Again Shell
  Bash is an sh-compatible command language interpreter that executes
Bash is an sh-compatible command language interpreter that executes
  commands read from the standard input or from a file. Bash also
commands read from the standard input or from a file. Bash also
  incorporates useful features from the Korn and C shells (ksh and csh).
incorporates useful features from the Korn and C shells (ksh and csh)
  .
  Bash is ultimately intended to be a conformant implementation of the
Bash is ultimately intended to be a conformant implementation of the
  IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).
IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2)
  .
  Included in the bash package is the Programmable Completion Code, by
Included in the bash package is the Programmable Completion Code, by
  Ian Macdonald.
Ian Macdonald
  .
  Statically linked.
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 ===
Für den fortgeschrittenen Systemadministrator ist an dieser Stelle interessant, dass hier auch die MD5-Checksummen der Konfigurationsdateien ausgegeben werden


Um die Checksumme eines gesamten Pakets zu ermitteln, benutzt der Administrator das Programm <tt>debsums</tt>
=== Ermitteln von Checksummen ===
Um die Checksumme eines gesamten Pakets zu ermitteln, benutzt der Administrator das Programm debsums


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


Mit der Option <tt>-S</tt> kann ermittelt werden, zu welchem Paket eine Datei gehört.
=== -S, --search ===
* Dies trifft lediglich auf bereits installierte Pakete zu.
Mit der Option -S kann ermittelt werden, zu welchem Paket eine Datei gehört
* Eine Suche in nicht installierten Paketen ist auf diesem Wege nicht möglich.
* 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
  # fr@surimi:~$ dpkg -S gdm.conf
Zeile 221: Zeile 212:
  gdm: /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.
Hierbei kann das Weglassen oder Hinzufügen des Pfades zu der gesuchten Datei zu unterschiedlichen Ergebnissen führen
 
===  -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.
=== -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


=== -L, --listfiles ===
=== -L, --listfiles ===
 
Zeigt alle Dateien an, die zum angegebenen Paket gehören
Zeigt alle Dateien an, die zum angegebenen Paket gehören.


  # $ dpkg -L bash
  # $ dpkg -L bash
  /.
  /
  /bin
  /bin
  /bin/bash
  /bin/bash
Zeile 250: Zeile 239:
  /usr/share/doc/bash/completion-contrib/bitkeeper
  /usr/share/doc/bash/completion-contrib/bitkeeper


  ...
   


  /usr/share/man/man7
  /usr/share/man/man7
Zeile 260: Zeile 249:
  /usr/share/man/man1/sh.1.gz
  /usr/share/man/man1/sh.1.gz


=== --get-selections ===
=== --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


Gibt, ohne weitere Parameter, eine Liste aller installierten Pakete aus.
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
* Wird zusätzlich ein „*“ angegeben, so werden alle Pakete mit dem aktuellen Zustand ausgegeben.
* Somit können einzelne Systeme sehr leicht dupliziert werden
* Dies zeigt also auch zu löschende und nicht installierte Pakete an.
* Auch kann auf diesem Wege ein System nach einem Hardware-Ausfall wiederhergestellt werden
 
Diese Ausgabe kann in eine Datei geschrieben werden und mittels der Option <tt>--set-selections</tt> (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 einem Hardware-Ausfall wiederhergestellt werden.


Beispiel
Beispiel
Zeile 274: Zeile 262:
  # dpkg --get-selections \* > /tmp/PAKETLISTE
  # dpkg --get-selections \* > /tmp/PAKETLISTE


=== --set-selections ===
=== --set-selections ===
 
Liest eine zuvor mit --get-selections erzeugte Paketliste wieder ein
Liest eine zuvor mit <tt>--get-selections</tt> erzeugte Paketliste wieder ein.


Beispiel:
Beispiel:
Zeile 282: Zeile 269:
  # dpkg --set-selections < /tmp/PAKETLISTE
  # dpkg --set-selections < /tmp/PAKETLISTE


Abhängig von den Informationen in der Datei <tt>PAKETLISTE</tt> werden so alle Pakete aus dieser Datei in der Paketdatenbank mit einem Status gekennzeichnet.
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 <tt>apt-get dselect-upgrade</tt> wird die gewünschten Aktionen durchführen.
* Ein darauf folgendes apt-get dselect-upgrade wird die gewünschten Aktionen durchführen
 
===  --update-avail ===
 
Aktualisiert die Informationen über verfügbare Pakete.
* Mit der Aktion <tt>--merge-avail</tt> werden die bestehenden Informationen mit den Informationen aus der angegebenen Packages-Datei zusammengeführt.
* Mit der Aktion <tt>--update-avail</tt> wird die alte Information durch die Information aus der Packages-Datei ersetzt. <tt>dpkg</tt> speichert alle Aufzeichnungen über die verfügbaren Pakete in <tt>/var/lib/dpkg/available</tt>.


Ein einfacheres Kommando, um die <tt>available</tt>-Datei in einem Aufruf abzurufen und zu aktualisieren, ist <tt>dselect update</tt>.
=== --update-avail ===
Aktualisiert die Informationen über verfügbare Pakete
* Mit der Aktion --merge-avail werden die bestehenden Informationen mit den Informationen aus der angegebenen Packages-Datei zusammengeführt
* Mit der Aktion --update-avail wird die alte Information durch die Information aus der Packages-Datei ersetzt. dpkg speichert alle Aufzeichnungen über die verfügbaren Pakete in /var/lib/dpkg/available


===  --force-confnew ===
Ein einfacheres Kommando, um die available-Datei in einem Aufruf abzurufen und zu aktualisieren, ist dselect update


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


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


=== --force-depends ===
=== --force-depends ===
 
Diese Option kann zusammen mit jeder anderen Option von dpkg eingesetzt werden, führt jedoch im Allgemeinen zu einem Versionschaos
Diese Option kann zusammen mit jeder anderen Option von <tt>dpkg</tt> eingesetzt werden, führt jedoch im Allgemeinen zu einem Versionschaos.
* Hiermit werden alle Abhängigkeiten eines Pakets ignoriert und die gewünschte Aktion (beispielsweise „install“) ausgeführt
* Hiermit werden alle Abhängigkeiten eines Pakets ignoriert und die gewünschte Aktion (beispielsweise „install“) ausgeführt.
* Alle Warnungen des Paketmanagements werden ignoriert
* Alle Warnungen des Paketmanagements werden ignoriert.
 
Wird <tt>dpkg</tt> mit dieser Option eingesetzt, so ist es kaum mehr möglich, danach <tt>apt-get</tt> sinnvoll zu benutzen, da <tt>apt-get</tt> feststellen wird, dass bestimmte Abhängigkeiten nicht erfüllt werden können.
* In einem solchen Fall können Sie versuchen, mit <tt>apt-get -f install</tt> die Situation zu bereinigen.
* Dies wird aber das zuvor mit <tt>--force-depends</tt> behandelte Paket in einen unbrauchbaren Zustand versetzen bzw.&nbsp;
* löschen.


===  hold ===
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.&nbsp;
* löschen


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


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


auf „hold“ gesetzt werden.
auf „hold“ gesetzt werden


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


=== „hold“ mit Aptitude ===
=== „hold“ mit Aptitude ===
 
dpkg und Aptitude nutzen unterschiedliche Informationen zu den Paketen
<tt>dpkg</tt> 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
* Dies führt dazu, dass ein mit Aptitude auf „hold“ gesetztes Paket mit <tt>apt-get upgrade</tt> dennoch aktualisiert wird.
* Werden also Pakete mittels Aptitude auf „hold“ gesetzt, so müssen auch Funktionen wie „upgrade“ und „dist-upgrade“ mittels Aptitude
* Werden also Pakete mittels Aptitude auf „hold“ gesetzt, so müssen auch Funktionen wie „upgrade“ und „dist-upgrade“ mittels Aptitude


=== dpkg-reconfigure ===
=== dpkg-reconfigure ===
Mit diesem Kommando können Pakete neu konfiguriert werden, die „debconf“ (siehe [http://debconf.html/ debconf] ) zur Verwaltung der Konfigurationsdateien nutzen (dies sollte mittlerweile für den Großteil der Pakete der Fall sein)
* Hierzu ist neben dem Aufruf des Programmes nur noch der Paketname anzugeben


Mit diesem Kommando können Pakete neu konfiguriert werden, die „debconf“ (siehe [http://debconf.html/ debconf] ) zur Verwaltung der Konfigurationsdateien nutzen (dies sollte mittlerweile für den Großteil der Pakete der Fall sein).
Ein dpkg-reconfigure debconf konfiguriert debconf selbst neu
* Hierzu ist neben dem Aufruf des Programmes nur noch der Paketname anzugeben.
* Hierbei kann zwischen verschiedenen interaktiven und vollautomatischen Modi gewählt werden
 
Ein <tt>dpkg-reconfigure debconf</tt> konfiguriert <tt>debconf</tt> selbst neu.
* Hierbei kann zwischen verschiedenen interaktiven und vollautomatischen Modi gewählt werden.


Welche bereits installierten Pakete sich mit diesem Kommando neu konfigurieren lassen, ermittelt das Programm [http://configure-debian.html/ configure-debian ]
Welche bereits installierten Pakete sich mit diesem Kommando neu konfigurieren lassen, ermittelt das Programm [http://configure-debian.html/ configure-debian ]


=== dpkg-preconfigure ===
=== dpkg-preconfigure ===
 
dpkg-preconfigure kann Pakete vor der Installation auf einem System konfigurieren. dpkg-preconfigure konfiguriert eine Anzahl von Paketen und führt dazu die debconf-Skripte dieser Pakete aus. dpkg-preconfigure kennt dabei zwei Möglichkeiten der Parameterübergabe:
<tt>dpkg-preconfigure</tt> kann Pakete vor der Installation auf einem System konfigurieren. <tt>dpkg-preconfigure</tt> konfiguriert eine Anzahl von Paketen und führt dazu die <tt>debconf</tt>-Skripte dieser Pakete aus. <tt>dpkg-preconfigure</tt> kennt dabei zwei Möglichkeiten der Parameterübergabe:


  # dpkg-preconfigure [options] package.deb
  # dpkg-preconfigure [options] package.deb
Zeile 357: Zeile 337:
  dpkg-preconfigure –apt
  dpkg-preconfigure –apt


=== Optionen ===
=== Optionen ===
 
{|| class="wikitable sortable"
{|| class="wikitable sortable"
|-
|-
|| <tt>'''-ftype</tt>, <tt>--frontend=type'''</tt>
|| '''-ftype, --frontend=type'''
|| Setzt das zu verwendende <tt>debconf</tt>-Frontend.
|| Setzt das zu verwendende debconf-Frontend
|-
|-
|| <tt>'''-pvalue</tt>, <tt>priority=value'''</tt>
|| '''-pvalue, priority=value'''
|| Gibt die minimale Priorität der <tt>debconf</tt>-Fragen an, die noch angezeigt werden sollen.
|| Gibt die minimale Priorität der debconf-Fragen an, die noch angezeigt werden sollen
|-
|-
|| <tt>'''--apt</tt> '''
|| '''--apt '''
|| Aktiviert den „APT“-Modus.
|| Aktiviert den „APT“-Modus
* Dabei wird eine Liste von Paketen auf der Standard-Eingabe gelesen, statt diese auf der Kommandozeile zu übergeben.
* Dabei wird eine Liste von Paketen auf der Standard-Eingabe gelesen, statt diese auf der Kommandozeile zu übergeben
* Normalerweise wird dies genutzt, um <tt>dpkg-preconfigure</tt> auf alle Pakete anzuwenden, bevor diese installiert werden.
* Normalerweise wird dies genutzt, um dpkg-preconfigure auf alle Pakete anzuwenden, bevor diese installiert werden
* Hierzu ist Folgendes der Datei <tt>/etc/apt/apt.conf</tt> hinzuzufügen, falls es nicht schon vorhanden ist:
* Hierzu ist Folgendes der Datei /etc/apt/apt.conf hinzuzufügen, falls es nicht schon vorhanden ist:


// Pre-configure all packages before
// Pre-configure all packages before
  // they are installed.
  // they are installed
  DPkg::Pre-Install-Pkgs {
  DPkg::Pre-Install-Pkgs {
        "dpkg-preconfigure --apt –priority=low";
"dpkg-preconfigure --apt –priority=low";
  };
  };
|-
|-
|| <tt>-h</tt>, <tt>--help</tt>
|| -h, --help
|| Zeigt eine Hilfe zum Programm <tt>dpkg-preconfigure</tt> an.
|| Zeigt eine Hilfe zum Programm dpkg-preconfigure an
|-
|-
|}
|}
=== dpkg-divert ===
=== dpkg-divert ===
 
Datei-„diversions“ - im Deutschen in etwa „Umleitungen“, „Ablenkungen“ oder auch „Diversifikationen“ - erlauben es dem Debian Paketmanagement, Dateien nicht an der vorgesehenen, sondern an einer „umgeleiteten“ Stelle im Dateisystem abzulegen. dpkg-divert kann innerhalb von Debian Paket-Skripten eingesetzt werden, um eine Datei aus einem anderen Paket zu überschreiben
Datei-„diversions“ - im Deutschen in etwa „Umleitungen“, „Ablenkungen“ oder auch „Diversifikationen“ - erlauben es dem Debian Paketmanagement, Dateien nicht an der vorgesehenen, sondern an einer „umgeleiteten“ Stelle im Dateisystem abzulegen. <tt>dpkg-divert</tt> kann innerhalb von Debian Paket-Skripten eingesetzt werden, um eine Datei aus einem anderen Paket zu überschreiben.
* Dabei wird, wie gleich noch gezeigt wird, die Datei nicht tatsächlich überschrieben, sondern nur umbenannt
* Dabei wird, wie gleich noch gezeigt wird, die Datei nicht tatsächlich überschrieben, sondern nur umbenannt.


Während der Installation eines Pakets können so einzelne Dateien, beispielsweise Programme oder Manpages, durch andere Versionen ersetzt werden.
Während der Installation eines Pakets können so einzelne Dateien, beispielsweise Programme oder Manpages, durch andere Versionen ersetzt werden
* Konfigurationsdateien sind von dieser Funktionalität ausgenommen.
* Konfigurationsdateien sind von dieser Funktionalität ausgenommen
* Um Konfigurationsdateien zu managen, ist entweder ein Paket zu erstellen, das das Ursprungspaket ersetzt oder mit diesem in Konflikt steht, oder aber es ist ein Paket zu erstellen, das Teile der Konfiguration enthält und diese mit dem Hauptpaket teilt (durch entsprechende Abhängigkeiten).
* Um Konfigurationsdateien zu managen, ist entweder ein Paket zu erstellen, das das Ursprungspaket ersetzt oder mit diesem in Konflikt steht, oder aber es ist ein Paket zu erstellen, das Teile der Konfiguration enthält und diese mit dem Hauptpaket teilt (durch entsprechende Abhängigkeiten)


Beispielsweise kann ein Paket während der Installation ein Programm durch eine angepasste Version ersetzen.
Beispielsweise kann ein Paket während der Installation ein Programm durch eine angepasste Version ersetzen
* Hierzu ist sinngemäß Folgendes in das <tt>preinst</tt>-Skript des Pakets einzufügen:
* Hierzu ist sinngemäß Folgendes in das preinst-Skript des Pakets einzufügen:


  # if [ install = "$1" -o upgrade = "$1" ]; then
  # if [ install = "$1" -o upgrade = "$1" ]; then
    dpkg-divert --package smailwrapper --add --rename \
dpkg-divert --package smailwrapper --add --rename \
      --divert /usr/sbin/smail.real /usr/sbin/smail
--divert /usr/sbin/smail.real /usr/sbin/smail
  fi
  fi


In der Datei <tt>postrm</tt> des Pakets muss dieser Vorgang wieder rückgängig gemacht werden:
In der Datei postrm des Pakets muss dieser Vorgang wieder rückgängig gemacht werden:


  # if [ remove = "$1" ]; then
  # if [ remove = "$1" ]; then
    dpkg-divert --package smailwrapper --remove --rename \
dpkg-divert --package smailwrapper --remove --rename \
      --divert /usr/sbin/smail.real /usr/sbin/smail
--divert /usr/sbin/smail.real /usr/sbin/smail
  fi  
  fi


Die Dateien aus dem Debian Paket bleiben unangetastet mit Ausnahme der Umbenennung.
Die Dateien aus dem Debian Paket bleiben unangetastet mit Ausnahme der Umbenennung


Mittels <tt>dpkg-divert</tt> „markierte“ Dateien werden bei einem späteren Update nicht von Dateien aus einem aktuelleren Paket überschrieben.
Mittels dpkg-divert „markierte“ Dateien werden bei einem späteren Update nicht von Dateien aus einem aktuelleren Paket überschrieben


<tt>dpkg-divert</tt> kann ausschließlich auf Dateien und nicht auf Verzeichnisse angewandt werden.
dpkg-divert kann ausschließlich auf Dateien und nicht auf Verzeichnisse angewandt werden


Mit <tt>dpkg-divert</tt> können diese Umleitungen gesetzt, angezeigt oder auch wieder gelöscht werden.
Mit dpkg-divert können diese Umleitungen gesetzt, angezeigt oder auch wieder gelöscht werden
* Weiterhin lassen sich die ursprünglichen Namen der umgeleiteten Dateien ermitteln.
* Weiterhin lassen sich die ursprünglichen Namen der umgeleiteten Dateien ermitteln
* Die Syntax für das Kommando <tt>dpkg-divert</tt> lautet:
* Die Syntax für das Kommando dpkg-divert lautet:


  # dpkg-divert [options] [--add] <file>
  # dpkg-divert [options] [--add] <file>
Zeile 422: Zeile 400:
  dpkg-divert [options] --truename <file>
  dpkg-divert [options] --truename <file>


Die möglichen Optionen von <tt>dpkg-divert</tt> lauten:
Die möglichen Optionen von dpkg-divert lauten:


{|| class="wikitable sortable"
{|| class="wikitable sortable"
|-
|-
|| <tt>'''--add</tt> (Optional)'''
|| '''--add (Optional)'''
|| Wird keine Option angegeben, so wird automatisch <tt>--add</tt> verwendet.
|| Wird keine Option angegeben, so wird automatisch --add verwendet
* Diese Option fügt die angegebene Datei in die Liste der zu diversifizierenden Dateien ein.
* Diese Option fügt die angegebene Datei in die Liste der zu diversifizierenden Dateien ein
|-
|-
|| <tt>'''--admindir <Directory></tt> '''
|| '''--admindir <Directory> '''
|| Setzt das Verzeichnis, in dem sich die Daten für <tt>dpkg</tt> befinden (normalerweise: <tt>/var/lib/dpkg/</tt>).
|| Setzt das Verzeichnis, in dem sich die Daten für dpkg befinden (normalerweise: /var/lib/dpkg/)
|-
|-
|| <tt>'''--divert <Umlenken nach></tt> '''
|| '''--divert <Umlenken nach> '''
|| Bestimmt einen neuen Namen für die Datei.
|| Bestimmt einen neuen Namen für die Datei
|-
|-
|| <tt>'''--help</tt> '''
|| '''--help '''
|| Zeigt eine kurze Anleitung zu <tt>dpkg-divert</tt> an.
|| Zeigt eine kurze Anleitung zu dpkg-divert an
|-
|-
|| <tt>'''--local</tt> '''
|| '''--local '''
|| Bewirkt, dass alle verfügbaren Versionen eines Paketes diversifiziert werden.
|| Bewirkt, dass alle verfügbaren Versionen eines Paketes diversifiziert werden
|-
|-
|| <tt>'''--list [<file>]</tt> '''
|| '''--list [<file>] '''
|| Zeigt die bestehenden Diversifikationen an.
|| Zeigt die bestehenden Diversifikationen an
* Wird ein Dateiname angegeben, so werden nur die entsprechenden Dateien angezeigt.
* Wird ein Dateiname angegeben, so werden nur die entsprechenden Dateien angezeigt
|-
|-
|| <tt>'''--package <Paketname></tt> '''
|| '''--package <Paketname> '''
|| Der Name eines Pakets, in dem die Kopie der Datei <tt><Dateiname></tt> nicht umgeleitet wird.
|| Der Name eines Pakets, in dem die Kopie der Datei <Dateiname> nicht umgeleitet wird
|-
|-
|| <tt>'''--quiet</tt> '''
|| '''--quiet '''
|| Es werden keine Ausgaben auf dem Bildschirm erzeugt.
|| Es werden keine Ausgaben auf dem Bildschirm erzeugt
|-
|-
|| <tt>'''--rename</tt> '''
|| '''--rename '''
|| Verschiebt eine Datei.
|| Verschiebt eine Datei
* Existiert die Zieldatei bereits, so wird die Aktion abgebrochen.
* Existiert die Zieldatei bereits, so wird die Aktion abgebrochen
|-
|-
|| <tt>'''--remove <file></tt> '''
|| '''--remove <file> '''
|| Löscht die angegebene Datei aus der Liste der diversifizierten Dateien und stellt den ursprünglichen Zustand wieder her.
|| Löscht die angegebene Datei aus der Liste der diversifizierten Dateien und stellt den ursprünglichen Zustand wieder her
|-
|-
|| <tt>'''--test</tt> '''
|| '''--test '''
|| Testmodus; es werden keine Veränderungen durchgeführt.
|| Testmodus; es werden keine Veränderungen durchgeführt
|-
|-
|| <tt>'''--version</tt> '''
|| '''--version '''
|| Zeigt die Versionsnummer von <tt>dpkg-divert</tt> an.
|| Zeigt die Versionsnummer von dpkg-divert an
|-
|-
|}
|}
Beim Hinzufügen von Umleitungen werden, wenn nicht anders angegeben, immer die Option <tt>--divert <Ursprungsname>.distrib</tt> und die Option <tt>--local</tt> verwendet.
Beim Hinzufügen von Umleitungen werden, wenn nicht anders angegeben, immer die Option --divert <Ursprungsname>.distrib und die Option --local verwendet
 
Eine Liste der umgeleiteten Dateien wird in der Datei <tt>/var/lib/dpkg/diversions</tt> gespeichert.


===  dpkg-statoverride ===
Eine Liste der umgeleiteten Dateien wird in der Datei /var/lib/dpkg/diversions gespeichert


Mittels <tt>dpkg-statoverride</tt> können einzelne Komponenten eines Pakets mit anderen Rechten, als vorgesehen waren, installiert werden.
=== dpkg-statoverride ===
* Dies kann bei Paketen sinnvoll sein, die Programme mit einem unerwünscht gesetzten <tt>setuid</tt>-Bit installieren oder wenn Programme nur von einer bestimmten Gruppe von Benutzern ausgeführt werden sollen.
Mittels dpkg-statoverride können einzelne Komponenten eines Pakets mit anderen Rechten, als vorgesehen waren, installiert werden
* Eine Komponente kann dabei jedes Objekt im Dateisystem sein, Dateien, Verzeichnisse oder auch Gerätedateien.
* Dies kann bei Paketen sinnvoll sein, die Programme mit einem unerwünscht gesetzten setuid-Bit installieren oder wenn Programme nur von einer bestimmten Gruppe von Benutzern ausgeführt werden sollen
* Eine Komponente kann dabei jedes Objekt im Dateisystem sein, Dateien, Verzeichnisse oder auch Gerätedateien


<tt>dpkg-statoverride</tt> kennt verschiedene Optionen:
dpkg-statoverride kennt verschiedene Optionen:


  # <tt>--add <user> <group> <mode> <file></tt> Überschreibt die Rechte für die Datei <tt><file></tt>.
  # --add <user> <group> <mode> <file> Überschreibt die Rechte für die Datei <file>
* Dabei muss die Datei noch nicht existieren, wenn das Kommando ausgeführt wird.
* Dabei muss die Datei noch nicht existieren, wenn das Kommando ausgeführt wird
* Die Informationen werden gespeichert und später bei der Installation der Datei auf dem System verändert.
* Die Informationen werden gespeichert und später bei der Installation der Datei auf dem System verändert
* Benutzer- und Gruppennamen können sowohl im Klartext (also beispielsweise <tt>root</tt> oder <tt>nobody</tt>) oder auch als Nummern angegeben werden.
* Benutzer- und Gruppennamen können sowohl im Klartext (also beispielsweise root oder nobody) oder auch als Nummern angegeben werden
* Wird die Schreibweise mit Nummern bevorzugt, so ist das Zeichen <tt><nowiki>#</nowiki></tt> voranzustellen, also beispielsweise <tt><nowiki>#0</nowiki></tt> oder <tt><nowiki>#65534</nowiki></tt>.
* Wird die Schreibweise mit Nummern bevorzugt, so ist das Zeichen <nowiki>#</nowiki> voranzustellen, also beispielsweise <nowiki>#0</nowiki> oder <nowiki>#65534</nowiki>


{|| class="wikitable sortable"
{|| class="wikitable sortable"
|-
|-
|| <tt>'''--remove <file></tt> '''
|| '''--remove <file> '''
|| Stellt die ursprünglich im Paket verwendeten Rechte wieder her.
|| Stellt die ursprünglich im Paket verwendeten Rechte wieder her
|-
|-
|| <tt>'''--list [<glob-pattern>]</tt> '''
|| '''--list [<glob-pattern>] '''
|| Zeigt alle veränderten Rechte an.
|| Zeigt alle veränderten Rechte an
* Wird zusätzlich ein Suchbegriff angegeben, so wird die Ausgabe auf die Veränderungen beschränkt, auf die der Suchbegriff passt.
* Wird zusätzlich ein Suchbegriff angegeben, so wird die Ausgabe auf die Veränderungen beschränkt, auf die der Suchbegriff passt
|-
|-
|| <tt>'''--force</tt> '''
|| '''--force '''
|| Führt die gewünschte Aktion auch aus, wenn die internen Überprüfungen die Ausführung sonst nicht zulassen würden.
|| Führt die gewünschte Aktion auch aus, wenn die internen Überprüfungen die Ausführung sonst nicht zulassen würden
* Dies ist immer dann der Fall, wenn bereits Veränderungen an einer Datei vorliegen.
* Dies ist immer dann der Fall, wenn bereits Veränderungen an einer Datei vorliegen
|-
|-
|| <tt>'''--update</tt> '''
|| '''--update '''
|| Aktualisiert die Rechte sofort, wenn eine Datei existiert.
|| Aktualisiert die Rechte sofort, wenn eine Datei existiert
* Wird nur bei Verwendung der Option <tt>--add</tt> ausgeführt.
* Wird nur bei Verwendung der Option --add ausgeführt
|-
|-
|| <tt>'''--quiet</tt> '''
|| '''--quiet '''
|| Gibt weniger Informationen darüber aus, welche Veränderungen vorgenommen werden.
|| Gibt weniger Informationen darüber aus, welche Veränderungen vorgenommen werden
|-
|-
|| <tt>'''--help</tt> '''
|| '''--help '''
|| Gibt einige Informationen zur Benutzung des Programms aus.
|| Gibt einige Informationen zur Benutzung des Programms aus
|-
|-
|| <tt>'''--admindir</tt> '''
|| '''--admindir '''
|| Ändert das Verzeichnis, in dem die Datei <tt>statoverride</tt> gespeichert wird.
|| Ändert das Verzeichnis, in dem die Datei statoverride gespeichert wird
* Dies ist normalerweise das Verzeichnis <tt>/var/lib/dpkg/</tt>.
* Dies ist normalerweise das Verzeichnis /var/lib/dpkg/
|-
|-
|}
|}
=== dpkg-query ===
=== dpkg-query ===
 
Mit dpkg-query lässt sich die Paketdatenbank auf dem System abfragen
Mit <tt>dpkg-query</tt> lässt sich die Paketdatenbank auf dem System abfragen.
* Dabei werden alle Pakete aus der Datei /var/lib/dpkg/available berücksichtigt
* Dabei werden alle Pakete aus der Datei <tt>/var/lib/dpkg/available</tt> berücksichtigt.
* Die Abfrage ersteckt sich also sowohl auf installierte als auch auf nicht-installierte Pakete. dpkg-query kennt die folgenden Optionen:
* Die Abfrage ersteckt sich also sowohl auf installierte als auch auf nicht-installierte Pakete. <tt>dpkg-query</tt> kennt die folgenden Optionen:


  # <tt>-l</tt> oder <tt>--list Suchbegriff</tt> Zeigt alle Pakete an, wenn kein Suchbegriff angegeben wird.
  # -l oder --list Suchbegriff Zeigt alle Pakete an, wenn kein Suchbegriff angegeben wird
* Ansonsten wird die Ausgabe auf die dem Suchbegriff entsprechenden Pakete beschränkt.
* Ansonsten wird die Ausgabe auf die dem Suchbegriff entsprechenden Pakete beschränkt
* Es können in dem Suchbegriff auch Wildcards verwendet werden.
* Es können in dem Suchbegriff auch Wildcards verwendet werden
* Hierbei ist darauf zu achten, dass diese nicht von der Shell interpretiert werden.
* Hierbei ist darauf zu achten, dass diese nicht von der Shell interpretiert werden
* Mit dem Kommando <tt>dpkg-query -l 'apache*'</tt> würden beispielsweise alle Pakete ausgegeben werden, die mit „apache“ beginnen.
* Mit dem Kommando dpkg-query -l 'apache*' würden beispielsweise alle Pakete ausgegeben werden, die mit „apache“ beginnen


{|| class="wikitable sortable"
{|| class="wikitable sortable"
|-
|-
|| <tt>'''-w</tt> oder <tt>--show Suchbegriff</tt> '''
|| '''-w oder --show Suchbegriff '''
|| Wie die Option <tt>--list</tt>, jedoch kann die Ausgabe mit der Option <tt>--showformat</tt> angepasst werden.
|| Wie die Option --list, jedoch kann die Ausgabe mit der Option --showformat angepasst werden
|-
|-
|| <tt>'''-s</tt> oder <tt>--status Paketname</tt> '''
|| '''-s oder --status Paketname '''
|| Zeigt den Status des angegebenen Pakets an.
|| Zeigt den Status des angegebenen Pakets an
* Dabei werden nur installierte Pakete berücksichtigt.
* Dabei werden nur installierte Pakete berücksichtigt
|-
|-
|| <tt>'''-L</tt> oder <tt>--listfiles Paketname</tt> '''
|| '''-L oder --listfiles Paketname '''
|| Zeigt alle installierten Dateien aus einem Paket an.
|| Zeigt alle installierten Dateien aus einem Paket an
* Dateien, die während der Installation durch ein Skript erzeugt werden, sind dabei nicht berücksichtigt, da diese nicht in dem Paket enthalten sind.
* Dateien, die während der Installation durch ein Skript erzeugt werden, sind dabei nicht berücksichtigt, da diese nicht in dem Paket enthalten sind
|-
|-
|| <tt>'''-S</tt> oder <tt>--search Suchbegriff</tt> '''
|| '''-S oder --search Suchbegriff '''
|| Sucht nach einem Dateinamen in den installierten Paketen.
|| Sucht nach einem Dateinamen in den installierten Paketen
* Hierbei können wieder die aus der Shell bekannten Wildcards benutzt werden.
* Hierbei können wieder die aus der Shell bekannten Wildcards benutzt werden
|-
|-
|| <tt>'''-p</tt> oder <tt>--print-avail Paketname</tt> '''
|| '''-p oder --print-avail Paketname '''
|| Zeigt Detailinformationen zu dem Paket an.
|| Zeigt Detailinformationen zu dem Paket an
|-
|-
|| <tt>'''--license</tt> oder <tt>--license</tt> '''
|| '''--license oder --license '''
|| Zeigt die Lizenz- und Copyright-Informationen zu diesem Programm an.
|| Zeigt die Lizenz- und Copyright-Informationen zu diesem Programm an
|-
|-
|| <tt>'''--version</tt> '''
|| '''--version '''
|| Zeigt die Versionsnummer dieses Programms an.
|| Zeigt die Versionsnummer dieses Programms an
|-
|-
|| <tt>'''--admindir=dir</tt> '''
|| '''--admindir=dir '''
|| Hiermit kann das Verzeichnis verändert werden, in dem die '''dpkg'''-Datenbank abgelegt wird.
|| Hiermit kann das Verzeichnis verändert werden, in dem die '''dpkg'''-Datenbank abgelegt wird
* Dies sollte aber immer <tt>/var/lib/dpkg/</tt> sein.
* Dies sollte aber immer /var/lib/dpkg/ sein
|-
|-
|| <tt>'''--showformat=format</tt> '''
|| '''--showformat=format '''
|| Hiermit kann das Format der Ausgabe bei Verwendung von <tt>--show</tt> angepasst werden.
|| Hiermit kann das Format der Ausgabe bei Verwendung von --show angepasst werden
* Die Formatangabe ist eine Zeichenkette, die für jedes gefundene Paket ausgegeben wird.
* Die Formatangabe ist eine Zeichenkette, die für jedes gefundene Paket ausgegeben wird
* Paketinformationen können durch Variablen in der Form <tt>${var[;width]}</tt> angegeben werden.
* Paketinformationen können durch Variablen in der Form ${var[;width]} angegeben werden
* Die Ausgabe ist dabei immer rechtsbündig ausgerichtet, eine linksbündige Ausgabe wird durch einen negativen Wert für die Breite erreicht.Es können weiterhin die Escape-Sequencen <tt>\n</tt> (Newline), <tt>\r</tt> (Carriage Return) und <tt>\\</tt> (Backslash) eingesetzt werden.
* Die Ausgabe ist dabei immer rechtsbündig ausgerichtet, eine linksbündige Ausgabe wird durch einen negativen Wert für die Breite erreicht.Es können weiterhin die Escape-Sequencen \n (Newline), \r (Carriage Return) und \\ (Backslash) eingesetzt werden
|}
|}


== Weitere dpkg-Befehle ==
== Weitere dpkg-Befehle ==
{| class="wikitable sortable"
{| class="wikitable sortable"
|-
|-
! Befehl   !! Funktion
! Befehl !! Funktion
|-  
|-
|dpkg-architecture||
|dpkg-architecture||
|-  
|-
|dpkg-buildflags||
|dpkg-buildflags||
|-  
|-
|dpkg-buildpackage||
|dpkg-buildpackage||
|-  
|-
|dpkg-checkbuilddeps||
|dpkg-checkbuilddeps||
|-  
|-
|dpkg-checkdeps||
|dpkg-checkdeps||
|-  
|-
|dpkg-deb||
|dpkg-deb||
|-  
|-
|dpkg-distaddfile||
|dpkg-distaddfile||
|-  
|-
|dpkg-divert||
|dpkg-divert||
|-  
|-
|dpkg-genbuildinfo||
|dpkg-genbuildinfo||
|-  
|-
|dpkg-genchanges||
|dpkg-genchanges||
|-  
|-
|dpkg-gencontrol||
|dpkg-gencontrol||
|-  
|-
|dpkg-gensymbols||
|dpkg-gensymbols||
|-  
|-
|dpkg-maintscript-helper||
|dpkg-maintscript-helper||
|-  
|-
|dpkg-mergechangelogs||
|dpkg-mergechangelogs||
|-  
|-
|dpkg-name||
|dpkg-name||
|-  
|-
|dpkg-parsechangelog||
|dpkg-parsechangelog||
|-  
|-
|dpkg-preconfigure||
|dpkg-preconfigure||
|-  
|-
|dpkg-query||
|dpkg-query||
|-  
|-
|dpkg-reconfigure||
|dpkg-reconfigure||
|-  
|-
|dpkg-ruby||
|dpkg-ruby||
|-  
|-
|dpkg-scanpackages||
|dpkg-scanpackages||
|-  
|-
|dpkg-scansources||
|dpkg-scansources||
|-  
|-
|dpkg-shlibdeps||
|dpkg-shlibdeps||
|-  
|-
|dpkg-source||
|dpkg-source||
|-  
|-
|dpkg-split||
|dpkg-split||
|-  
|-
|dpkg-statoverride||
|dpkg-statoverride||
|-  
|-
|dpkg-trigger||
|dpkg-trigger||
|-  
|-
|dpkg-vendor||
|dpkg-vendor||
|}
|}


[[Kategorie:Linux/Befehl]]
[[Kategorie:Linux/Befehl]]
[[Kategorie:dpkg]]
[[Kategorie:dpkg]]


{{DEFAULTSORT:dpkg}}
{{DEFAULTSORT:dpkg}}
{{DISPLAYTITLE:dpkg}}
{{DISPLAYTITLE:dpkg}}

Version vom 24. Dezember 2024, 10:38 Uhr

dpkg - Paketverwalter für Debian

Bezeichnung

dpkg (Debian Package) dient zum Installieren einzelner deb-Pakete

  • Es stellt die Funktionen zur Verfügung (Backend), die von den Programmen apt install benutzt werden
  • Für die meisten Operationen sind Root-Rechte nötig

Beschreibung

dpkg ist ein Werkzeug, um Debian-Pakete zu installieren, zu bauen, zu entfernen und zu verwalten

  • Die primäre und benutzerfreundlichere Oberfläche für dpkg ist aptitude(8)
  • dpkg selbst wird komplett über Befehlszeilenoptionen gesteuert, die aus genau einer Aktion und Null oder mehreren Optionen bestehen
  • Der Aktionsparameter teilt dpkg mit, was zu tun ist, und die Optionen steuern die Aktionen in irgendeiner Weise
  • 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

Anwendung

# dpkg -i installationspaket.deb
# dpkg -S dateiname
# dpkg --search dateiname
# dpkg -s installationspaket.deb
# dpkg --status installationspaket.deb

Debian package manager (dpkg)

# dpkg (http://wiki.debian.org/dpkg) 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

--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.

-c, --contents

Diese Option zeigt den Inhalt eines Debian Paketes an, hierzu muss das Paket nicht zwingend installiert sein

  • Als weiterer Parameter ist der Dateiname des Debian Paketes anzugeben

-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

--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

-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

-P, --purge

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

-l, --list

Mit der Option -l können die tatsächlichen Paketnamen ermittelt werden

  • Diese weichen häufig von den eigentlichen Befehlen ab
$ 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*

-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

# 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

-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

-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

-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

--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 einem Hardware-Ausfall wiederhergestellt werden

Beispiel

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

--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

--update-avail

Aktualisiert die Informationen über verfügbare Pakete

  • Mit der Aktion --merge-avail werden die bestehenden Informationen mit den Informationen aus der angegebenen Packages-Datei zusammengeführt
  • Mit der Aktion --update-avail wird die alte Information durch die Information aus der Packages-Datei ersetzt. dpkg speichert alle Aufzeichnungen über die verfügbaren Pakete in /var/lib/dpkg/available

Ein einfacheres Kommando, um die available-Datei in einem Aufruf abzurufen und zu aktualisieren, ist dselect update

--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

--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 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

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

dpkg-reconfigure

Mit diesem Kommando können Pakete neu konfiguriert werden, die „debconf“ (siehe debconf ) zur Verwaltung der Konfigurationsdateien nutzen (dies sollte mittlerweile für den Großteil der Pakete der Fall sein)

  • Hierzu ist neben dem Aufruf des Programmes nur noch der Paketname anzugeben

Ein dpkg-reconfigure debconf konfiguriert debconf selbst neu

  • Hierbei kann zwischen verschiedenen interaktiven und vollautomatischen Modi gewählt werden

Welche bereits installierten Pakete sich mit diesem Kommando neu konfigurieren lassen, ermittelt das Programm configure-debian

dpkg-preconfigure

dpkg-preconfigure kann Pakete vor der Installation auf einem System konfigurieren. dpkg-preconfigure konfiguriert eine Anzahl von Paketen und führt dazu die debconf-Skripte dieser Pakete aus. dpkg-preconfigure kennt dabei zwei Möglichkeiten der Parameterübergabe:

# dpkg-preconfigure [options] package.deb
dpkg-preconfigure –apt

Optionen

-ftype, --frontend=type Setzt das zu verwendende debconf-Frontend
-pvalue, priority=value Gibt die minimale Priorität der debconf-Fragen an, die noch angezeigt werden sollen
--apt Aktiviert den „APT“-Modus
  • Dabei wird eine Liste von Paketen auf der Standard-Eingabe gelesen, statt diese auf der Kommandozeile zu übergeben
  • Normalerweise wird dies genutzt, um dpkg-preconfigure auf alle Pakete anzuwenden, bevor diese installiert werden
  • Hierzu ist Folgendes der Datei /etc/apt/apt.conf hinzuzufügen, falls es nicht schon vorhanden ist:

// Pre-configure all packages before

// they are installed
DPkg::Pre-Install-Pkgs {
"dpkg-preconfigure --apt –priority=low";
};
-h, --help Zeigt eine Hilfe zum Programm dpkg-preconfigure an

dpkg-divert

Datei-„diversions“ - im Deutschen in etwa „Umleitungen“, „Ablenkungen“ oder auch „Diversifikationen“ - erlauben es dem Debian Paketmanagement, Dateien nicht an der vorgesehenen, sondern an einer „umgeleiteten“ Stelle im Dateisystem abzulegen. dpkg-divert kann innerhalb von Debian Paket-Skripten eingesetzt werden, um eine Datei aus einem anderen Paket zu überschreiben

  • Dabei wird, wie gleich noch gezeigt wird, die Datei nicht tatsächlich überschrieben, sondern nur umbenannt

Während der Installation eines Pakets können so einzelne Dateien, beispielsweise Programme oder Manpages, durch andere Versionen ersetzt werden

  • Konfigurationsdateien sind von dieser Funktionalität ausgenommen
  • Um Konfigurationsdateien zu managen, ist entweder ein Paket zu erstellen, das das Ursprungspaket ersetzt oder mit diesem in Konflikt steht, oder aber es ist ein Paket zu erstellen, das Teile der Konfiguration enthält und diese mit dem Hauptpaket teilt (durch entsprechende Abhängigkeiten)

Beispielsweise kann ein Paket während der Installation ein Programm durch eine angepasste Version ersetzen

  • Hierzu ist sinngemäß Folgendes in das preinst-Skript des Pakets einzufügen:
# if [ install = "$1" -o upgrade = "$1" ]; then
dpkg-divert --package smailwrapper --add --rename \
--divert /usr/sbin/smail.real /usr/sbin/smail
fi

In der Datei postrm des Pakets muss dieser Vorgang wieder rückgängig gemacht werden:

# if [ remove = "$1" ]; then
dpkg-divert --package smailwrapper --remove --rename \
--divert /usr/sbin/smail.real /usr/sbin/smail
fi

Die Dateien aus dem Debian Paket bleiben unangetastet mit Ausnahme der Umbenennung

Mittels dpkg-divert „markierte“ Dateien werden bei einem späteren Update nicht von Dateien aus einem aktuelleren Paket überschrieben

dpkg-divert kann ausschließlich auf Dateien und nicht auf Verzeichnisse angewandt werden

Mit dpkg-divert können diese Umleitungen gesetzt, angezeigt oder auch wieder gelöscht werden

  • Weiterhin lassen sich die ursprünglichen Namen der umgeleiteten Dateien ermitteln
  • Die Syntax für das Kommando dpkg-divert lautet:
# dpkg-divert [options] [--add] <file>
dpkg-divert [options] --remove <file>
dpkg-divert [options] --list <glob-pattern>
dpkg-divert [options] --truename <file>

Die möglichen Optionen von dpkg-divert lauten:

--add (Optional) Wird keine Option angegeben, so wird automatisch --add verwendet
  • Diese Option fügt die angegebene Datei in die Liste der zu diversifizierenden Dateien ein
--admindir <Directory> Setzt das Verzeichnis, in dem sich die Daten für dpkg befinden (normalerweise: /var/lib/dpkg/)
--divert <Umlenken nach> Bestimmt einen neuen Namen für die Datei
--help Zeigt eine kurze Anleitung zu dpkg-divert an
--local Bewirkt, dass alle verfügbaren Versionen eines Paketes diversifiziert werden
--list [<file>] Zeigt die bestehenden Diversifikationen an
  • Wird ein Dateiname angegeben, so werden nur die entsprechenden Dateien angezeigt
--package <Paketname> Der Name eines Pakets, in dem die Kopie der Datei <Dateiname> nicht umgeleitet wird
--quiet Es werden keine Ausgaben auf dem Bildschirm erzeugt
--rename Verschiebt eine Datei
  • Existiert die Zieldatei bereits, so wird die Aktion abgebrochen
--remove <file> Löscht die angegebene Datei aus der Liste der diversifizierten Dateien und stellt den ursprünglichen Zustand wieder her
--test Testmodus; es werden keine Veränderungen durchgeführt
--version Zeigt die Versionsnummer von dpkg-divert an

Beim Hinzufügen von Umleitungen werden, wenn nicht anders angegeben, immer die Option --divert <Ursprungsname>.distrib und die Option --local verwendet

Eine Liste der umgeleiteten Dateien wird in der Datei /var/lib/dpkg/diversions gespeichert

dpkg-statoverride

Mittels dpkg-statoverride können einzelne Komponenten eines Pakets mit anderen Rechten, als vorgesehen waren, installiert werden

  • Dies kann bei Paketen sinnvoll sein, die Programme mit einem unerwünscht gesetzten setuid-Bit installieren oder wenn Programme nur von einer bestimmten Gruppe von Benutzern ausgeführt werden sollen
  • Eine Komponente kann dabei jedes Objekt im Dateisystem sein, Dateien, Verzeichnisse oder auch Gerätedateien

dpkg-statoverride kennt verschiedene Optionen:

# --add <user> <group> <mode> <file> Überschreibt die Rechte für die Datei <file>
  • Dabei muss die Datei noch nicht existieren, wenn das Kommando ausgeführt wird
  • Die Informationen werden gespeichert und später bei der Installation der Datei auf dem System verändert
  • Benutzer- und Gruppennamen können sowohl im Klartext (also beispielsweise root oder nobody) oder auch als Nummern angegeben werden
  • Wird die Schreibweise mit Nummern bevorzugt, so ist das Zeichen # voranzustellen, also beispielsweise #0 oder #65534
--remove <file> Stellt die ursprünglich im Paket verwendeten Rechte wieder her
--list [<glob-pattern>] Zeigt alle veränderten Rechte an
  • Wird zusätzlich ein Suchbegriff angegeben, so wird die Ausgabe auf die Veränderungen beschränkt, auf die der Suchbegriff passt
--force Führt die gewünschte Aktion auch aus, wenn die internen Überprüfungen die Ausführung sonst nicht zulassen würden
  • Dies ist immer dann der Fall, wenn bereits Veränderungen an einer Datei vorliegen
--update Aktualisiert die Rechte sofort, wenn eine Datei existiert
  • Wird nur bei Verwendung der Option --add ausgeführt
--quiet Gibt weniger Informationen darüber aus, welche Veränderungen vorgenommen werden
--help Gibt einige Informationen zur Benutzung des Programms aus
--admindir Ändert das Verzeichnis, in dem die Datei statoverride gespeichert wird
  • Dies ist normalerweise das Verzeichnis /var/lib/dpkg/

dpkg-query

Mit dpkg-query lässt sich die Paketdatenbank auf dem System abfragen

  • Dabei werden alle Pakete aus der Datei /var/lib/dpkg/available berücksichtigt
  • Die Abfrage ersteckt sich also sowohl auf installierte als auch auf nicht-installierte Pakete. dpkg-query kennt die folgenden Optionen:
# -l oder --list Suchbegriff Zeigt alle Pakete an, wenn kein Suchbegriff angegeben wird
  • Ansonsten wird die Ausgabe auf die dem Suchbegriff entsprechenden Pakete beschränkt
  • Es können in dem Suchbegriff auch Wildcards verwendet werden
  • Hierbei ist darauf zu achten, dass diese nicht von der Shell interpretiert werden
  • Mit dem Kommando dpkg-query -l 'apache*' würden beispielsweise alle Pakete ausgegeben werden, die mit „apache“ beginnen
-w oder --show Suchbegriff Wie die Option --list, jedoch kann die Ausgabe mit der Option --showformat angepasst werden
-s oder --status Paketname Zeigt den Status des angegebenen Pakets an
  • Dabei werden nur installierte Pakete berücksichtigt
-L oder --listfiles Paketname Zeigt alle installierten Dateien aus einem Paket an
  • Dateien, die während der Installation durch ein Skript erzeugt werden, sind dabei nicht berücksichtigt, da diese nicht in dem Paket enthalten sind
-S oder --search Suchbegriff Sucht nach einem Dateinamen in den installierten Paketen
  • Hierbei können wieder die aus der Shell bekannten Wildcards benutzt werden
-p oder --print-avail Paketname Zeigt Detailinformationen zu dem Paket an
--license oder --license Zeigt die Lizenz- und Copyright-Informationen zu diesem Programm an
--version Zeigt die Versionsnummer dieses Programms an
--admindir=dir Hiermit kann das Verzeichnis verändert werden, in dem die dpkg-Datenbank abgelegt wird
  • Dies sollte aber immer /var/lib/dpkg/ sein
--showformat=format Hiermit kann das Format der Ausgabe bei Verwendung von --show angepasst werden
  • Die Formatangabe ist eine Zeichenkette, die für jedes gefundene Paket ausgegeben wird
  • Paketinformationen können durch Variablen in der Form ${var[;width]} angegeben werden
  • Die Ausgabe ist dabei immer rechtsbündig ausgerichtet, eine linksbündige Ausgabe wird durch einen negativen Wert für die Breite erreicht.Es können weiterhin die Escape-Sequencen \n (Newline), \r (Carriage Return) und \\ (Backslash) eingesetzt werden

Weitere dpkg-Befehle

Befehl Funktion
dpkg-architecture
dpkg-buildflags
dpkg-buildpackage
dpkg-checkbuilddeps
dpkg-checkdeps
dpkg-deb
dpkg-distaddfile
dpkg-divert
dpkg-genbuildinfo
dpkg-genchanges
dpkg-gencontrol
dpkg-gensymbols
dpkg-maintscript-helper
dpkg-mergechangelogs
dpkg-name
dpkg-parsechangelog
dpkg-preconfigure
dpkg-query
dpkg-reconfigure
dpkg-ruby
dpkg-scanpackages
dpkg-scansources
dpkg-shlibdeps
dpkg-source
dpkg-split
dpkg-statoverride
dpkg-trigger
dpkg-vendor