1.102.5
Verwendung des Debian Paketmanagements
Beschreibung:
Prüfungskandidaten sollten in der Lage sein, mit dem Debian Paketmanagement
umzugehen. Dieses Lernziel beinhaltet das Benutzen von Kommandozeilen- und
interaktiver Werkzeuge zum Installieren, Updaten oder Deinstallieren von
Paketen sowie das Auffinden von Paketen, die spezifische Dateien oder
Software enthalten (installierte bzw. nicht installierte Pakete). Ebenfalls
enthalten ist das Abfragen von Informationen wie Version, Inhalt,
Abhängigkeiten, Paketintegrität und Installationsstatus (ob installiert oder
nicht) von Paketen.
Die wichtigsten Dateien, Bezeichnungen und Anwendungen:
- unpack
- configure
- /etc/dpkg/dpkg.cfg
- /var/lib/dpkg/*
- /etc/apt/apt.conf
- /etc/apt/sources.list
- dpkg
- dselect
- dpkg-reconfigure
- apt-get
- alien
Es gibt im Linux Bereich zwei große Modelle einer Paketverwaltung für zu
installierende Programmpakete. Nachdem sich das alte tgz-Format für
die Verwendung bei binären (vorcompilierten) Paketen als unzulänglich
erwiesen hatte, weil es keinerlei Mechanismen zur Deinstallation aufwies,
begannen zwei verschiedene Distributionen, eigene Paketverwaltungen
aufzubauen. Debian und RedHat.
Inzwischen haben nahezu alle Distributionen das RedHat-Paketmanagement
übernommen, nur Debian beharrt auf sein eigenes Modell. Und das nicht zu
Unrecht, ist es doch gerade die Paketverwaltung von Debian, die schlichtweg
als genial bezeichnet werden muß.
Als distributionsübergreifende Zertifizierung fordert LPI das Wissen um
beide Formate. Beide Formate werden auch tatsächlich abgefragt und das nicht
zu knapp. In diesem Kapitel wird die Debian-Verwaltung besprochen, im
nächsten kommt dann die RedHat-Technik zur Sprache.
Das grundlegende Prinzip der Debian Paketverwaltung
Debian Pakete enden mit der Endung .deb. Sie haben ein
einheitliches Namensschema, das sich folgendermaßen zusammensetzt:
Programmname_Versionsnummer_Architektur.deb
Wobei Programmname der Name des Programmes (oder des Paketes) ist,
unter dem es später dann auch angesprochen werden kann,
Versionsnummer ist die Version des Programms (oder Paketes) und
Architektur bezeichnet die Hardwarearchitektur, für die dieses Paket
gedacht ist, also etwa i386 für die PC-Architektur.
Ein Debian Paket besteht aus einem ar-Archiv, das wiederum zwei
komprimierte tar-Archive und eine Versionsdatei beinhaltet.
Das erste tar-Archiv (data.tar.gz) enthält die zu
installierenden Dateien, das zweite (control.tar.gz) enthält die
Metainformationen über das Paket, die Scripts, die zum Installieren und
Deinstallieren benötigt werden sowie eine Prüfsumme.
Jedes Debian-Paket enthält vier Scripte, je eines das vor und nach der
Installation bzw. vor und nach der Deinstallation abgearbeitet wird.
Wird ein Debian-Paket installiert, so werden die Informationen über dieses
installierte Paket in mehrere Dateien im Verzeichnis /var/lib/dpkg
abgelegt, so daß jederzeit eine Überprüfung der bereits installierten Pakete
und Dateien stattfinden kann. Die Informationen werden folgendermaßen
aufgeteilt:
- In der Datei /var/lib/dpkg/available werden die
Paketinformationen aller zur Verfügung stehender (installierbarer) Pakete abgelegt.
- In der Datei /var/lib/dpkg/status werden die Informationen über
den Status der Installation abgelegt, so daß unterschieden werden kann
zwischen korrekt oder nur teilweise installierten Paketen.
- Im Verzeichnis /var/lib/dpkg/info liegen zu jedem installierten
Paket die vier Scripte (*.preinst, *.postinst, *.prerm, *.postrm),
eine Liste aller enthaltener Dateien (*.list), die
md5-Prüfsummendatei (*.md5sums) und evt. noch andere Informationen
wie die zur Verfügung gestellten Libraries (*.shlibs).
Mit Hilfe dieser Informationen sind sowohl Installation, als auch
Deinstallation von Paketen sehr sicher und umfassend möglich. Man kann das
Verzeichnis /var/lib/dpkg also als Systemdatenbank der
installierten Pakete betrachten. In der Regel sind keine manuellen Zugriffe
auf dieses Verzeichnis notwendig, alle Zugriffe werden mit den
Hilfsprogrammen erledigt, die im Folgenden näher besprochen werden.
Das dpkg-Programm
Das Programm dpkg ist sozusagen das Low-Level
Paketverwaltungsprogramm. Mit ihm ist es möglich, direkt bestimmte Pakete zu
installieren uder zu deinstallieren. Noch eine Stufe weiter unten liegt das
Programm dpkg-deb, das die reine Archivverwaltung (Packen/Entpacken)
erledigt, aber niemals manuell aufgerufen wird.
Das dpkg Programm muß nur dann manuell aufgerufen werden, wenn direkt
vorliegende .deb-Pakete installiert werden sollen. Später werden
wir das Programm apt-get kennenlernen, das sich auch um den Bezug der
Pakete kümmert, dann aber selbstständig dpkg aufruft, um Pakete zu
installieren bzw. zu deinstallieren. Ist jedoch ein Paket manuell z.B. aus
dem Internet besorgt worden, dann benötigen wir dpkg.
Pakete installieren mit dpkg
Um ein Paket mit dpkg zu installieren wird folgender Befehl ausgeführt:
dpkg [Optionen] -i | --install Paketdatei.deb
(-i | --install bedeutet entweder -i oder --install). Wenn als Option
-R oder --recursive angegeben wurde, so steht statt eines
Paketnamens ein Verzeichnisname. Alle Debianpakete des genannten
Verzeichnisses werden dann installiert.
Die Installation besteht aus folgenden Einzelschritten:
- Die Kontrolldateien des neuen Paketes werden entpackt.
- Wenn eine ältere Version des selben Paketes bereits installiert war,
wird das PreRemove-Script der älteren Version ausgeführt.
- Das PreInst-Script des neuen Paketes wird ausgeführt.
- Die Dateien des neuen Paketes werden entpackt und gleichzeitig werden
die Dateien einer eventuell existierenden älteren Version gesichert, so daß
im Falle eines Fehlers die Installation des neuen Paketes rückgängig gemacht
werden kann.
- Wenn eine ältere Version existierte, dann wird das PostRemove-Script der
älteren Version ausgeführt.
- Das neue Paket wird durch das Abarbeiten des PostInstall-Scripts
konfiguriert.
Pakete deinstallieren mit dpkg
Wenn ein installiertes Paket entfernt werden soll. dann werden zwei
Möglichkeiten angeboten. Entweder werden zwar alle Dateien entfernt, aber
die Konfigurationsdateien des Paketes bleiben installiert, oder es werden
wirklich alle Dateien, auch die Konfigurationsdateien entfernt.
Zum normalen Deinstallieren (ohne Entfernung der Konfigurationsdateien) wird
folgender Befehl benutzt:
dpkg [Optionen] -r | --remove Paketname
Um wirklich alles zu entfernen benutzt man
dpkg [Optionen] -P | --purge Paketname
Paketname ist hier der Name des Paketes, nicht der Name der
Paketdatei. Wurde die Datei foo_1.0.23_i386.deb installiert, so ist
der Paketname einfach nur foo.
Das Entfernen der Pakete geht in folgenden Schritten vor sich:
- Das PreRemove-Script des Paketes wird abgearbeitet.
- Die zu entfernenden Dateien werden gelöscht.
- Das PostRemove-Script wird abgearbeitet.
Informationen über installierte Pakete abfragen
Um Informationen über ein bestimmtes installiertes Paket zu erhalten, wird
der Befehl
dpkg -p|--print-avail Paketname
ausgeführt. dpkg liesst daraufhin die Informationen aus der Datei
/var/lib/dpkg/available und gibt sie aus.
Auflisten der installierten Pakete
Um eine Liste aller oder bestimmter installierter Pakete zu bekommen, wird
der Befehl
dpkg -l | --list [Paketnamensmuster]
ausgeführt. Wird kein Namensmuster angegeben, so werden alle installierten
Paketnamen ausgegeben, ansonsten nur die Pakete, deren Namen auf das
angegebene Muster passen. Als Muster werden die üblichen Shell-Wildcards
benutzt. Zu beachten ist, daß die Muster in Anführungszeichen gesetzt werden
sollten, um die Shell daran zu hindern, sie zu interpretieren.
Auflisten der Dateien installierter Pakete
Um alle Dateien eines bestimmten Paketes aufzulisten, existiert der Befehl
dpkg -L | --listfiles Paketname
Die Dateien, die von Installationsscripts angelegt wurden, werden hier nicht
angezeigt.
Abfrage des Installationsstatus
Debian-Pakete, die installiert werden, bekommen einen bestimmten Status, der
angibt, wie weit die Installation fortgeschritten ist. Wenn eine
Installation aus welchen Gründen auch immer, nicht vollständig abgeschlossen
wurde, so kann das später aus dem Status entnommen werden. Folgende Stati
sind gültig:
- installed
- Das Paket ist vollständig installiert
- half-installed
- Die Installation wurde nicht vollständig ausgeführt
- not-installed
- Das Paket ist nicht installiert
- unpacked
- Das Paket ist zwar ausgepackt, aber nicht konfiguriert
- half-configured
- Das Paket ist ausgepackt und die Konfiguration wurde begonnen, aber
nicht korrekt abgeschlossen
- config-files
- Nur die Konfigurationsdateien des Paketes existieren auf dem System
(typischerweise nach einer Deinstallation mit -R)
Um den Status eines Paketes abzufragen wird der Befehl
dpkg -s | --status Paketname
ausgeführt. Die Informationen werden der Datei /var/lib/dpkg/status
entnommen.
Aus welchem Paket stammt eine bestimmte Datei?
Mit dem Befehl
dpkg -S | --search Dateinamesmuster
werden die installierten Dateien aus var/lib/dpkg/info durchsucht
und alle Paketnamen zurückgegeben, die entsprechende Dateien enthalten. Zur
Musterbildung stehen alle Shell-Wildcards zur Verfügung.
Optionen für dpkg
Vor jedem der besprochenen Befehle können verschiedene Optionen gesetzt
werden, die den Ablauf des Befehls modifizieren können. Diese Optionen
beziehen sich z.B. auf den Umgang mit Abhängigkeiten, oder ab wievielen
Fehlern sich dpkg weigert, weiterzuarbeiten. Diese Optionen können
entweder direkt an der Kommandozeile eingegeben werden, oder in die Datei
/etc/dpkg/dpkg.cfg eingetragen werden. In letzterem Fall, werden
die Optionen für jeden dpkg Befehl angewandt. Wichtige Optionen sind:
- --abort-after=Zahl
- Gibt an, nach wievielen Fehlern dpkg beendet werden muß.
Voreingestellt ist 50.
- -B|--auto-deconfigure
- Wenn ein Paket deinstalliert wird, so ist es möglich, daß ein anderes
installiertes Paket dieses Paket gebraucht hätte. Mit dieser Option werden
automatisch alle anderen Pakete auch deinstalliert, die das zu
installierende Paket benötigt hätten.
- --ignore-depends=Paket
- Abhängigkeiten für das angegebene Paket werden ignoriert. Es werden
solche Abhängigkeiten zwar überprüft, aber es werden nur Warnungen statt
Fehlermeldungen angezeigt, wenn nicht erfüllte Abhängigkeiten auftreten.
- --refuse-downgrade | -G
- Ein Paket, von dem eine neuere Version bereits installiert ist, wird
nicht installiert
Eine vollständige Liste aller denkbaren Optionen sind der Handbuchseite zu
entnehmen.
dpkg-reconfigure
Wenn ein bereits installiertes Paket erneut konfiguriert werden soll, so
kann das durch den Aufruf von
dpkg-reconfigure Paketname
vorgenommen werden. Das hat aber nur dann eine tatsächliche Bedeutung, wenn
ein Paket ein debconf-Script enthält.
dselect
Das Programm dselect ist ein menügeführtes Frontend für dpkg.
Es übernimmt aber nicht nur die Aufgabe, Pakete zu installieren oder zu
deinstallieren, sondern auch die Verwaltung der zur Verügung stehenen
Pakete und der gegenseitigen Abhängigkeiten.
dselect bietet verschiedene Methoden an, um die zur Verfügung
stehenden Pakete zu managen. Dabei geht es hauptsächlich darum, woher die
Debian-Pakete bezogen werden sollen. Folgende Methoden werden angeboten:
- cdrom
- Installiert von einer Debian-CDROM. Die CDROM kann, muß aber nicht
gemountet sein und sollte ein ISO9660 Dateisystem beinhalten.
- nfs
- Installiert über einen (noch nicht gemounteten) NFS-Server. Der Server
muß die Paketbeschreibungsdateien (Packages.gz) jeder
Distributionsabteilung (stable, contrib und non-free)
zur Verfügung stellen und natürlich die entsprechenden .deb
Dateien.
- harddisk
- Installiert von einer noch nicht gemounteten Festplattenpartition. Diese
Partition muß die selben Elemente wie ein NFS-Server enthalten.
- mounted
- Installation von einem bereits gemounteten Dateisystem. Dabei kann es
sich entweder um eine gemountete Festplattenpartition oder um eine
gemounteten NFS-Freigabe handeln. Zum Inhalt gilt das selbe wie bei
NFS-Server und Festplatte.
- floppy
- Installation über einen Stapel Disketten, von dem die erste Disk die
Paketinformationen enthalten sollte. Veraltert.
- apt
- Benutzt die neue Methode, die weiter unten bei apt-get
beschrieben wird. Hier kann die Installationsquelle entweder über ein Netz
(ftp/http) oder über das Dateisystem (file) angesprochen werden.
Das dselect Programm wird normalerweise ohne weitere Parameter
aufgerufen. Es bietet menügeführt folgende Möglichkeiten:
- Zugriff (access)
- Auswahl der Zugriffsmethode (siehe oben).
- Erneuern (update)
- Erneuert die Liste der verfügbaren Pakete, wenn möglich.
- Auswählen (select)
- Menügeführte Auswahl aller zu installierender oder zu entfernender
Pakete.
- Install
- Installiert die Pakete, die angewählt wurden.
- Konfig
- Konfiguriert Pakete, die bei der letzten Installation nicht vollständig
konfiguriert wurden.
- Löschen (remove)
- Entfernt die zum Löschen markierten Pakete.
Als menügeführtes Programm ist die Bedienung von dselect zwar
manchmal gewöhnungsbedürftig, jedoch nicht weiter schwierig.
apt-get
apt-get ist das Kommandozeilenprogramm, das die modernste der
Zugriffsmethoden auf Debian-Pakete steuert. Damit ist es möglich, die
Installation und verschiedene andere Aufgaben der Paketverwaltung über ein
einfaches Kommando auszuführen. Das Programm speichert seine Konfiguration
in der Datei /etc/apt/apt.conf oder bei den moderneren Versionen in
mehreren Verzeichnissen unter /etc/apt/apt.conf.d.
Die Quellen, von denen apt-get seine Debian-Pakete bezieht, werden in
der Datei /etc/apt/sources.list angegeben. Diese Datei kann
entweder von Hand erstellt/manipuliert werden oder über das Programm
dselect im Menüpunkt Zugriff.
apt-get wird immer in einer der folgenden Formen aufgerufen:
- apt-get update
- Holt die neuesten Paketbeschreibungen der in
/etc/apt/sources.list angegebenen Installationsquellen.
- apt-get install Paketname
- Installiert das angegebene Paket von den eingestellten
Installationsquellen. Das Paket und alle weiteren notwendigen Pakete die von
ihm erfordert werden, wird vollständig installiert (mit dpkg -i).
- apt-get remove Paketname
- Das angegebene Paket wird deinstalliert.
- apt-get source Paketname
- Das Quellcode-Paket des angegebenen Paketes wird installiert.
Seine wahre Stärke spielt apt-get aus, wenn als Quellen offizielle
Debian-Server im Internet angegeben wurden und der Paketname des zu
installierenden Paketes bekannt ist. Wird z.B. festgestellt, daß auf einem
System das Programm foo nicht installiert ist, so kann durch die
Angabe des Befehls
apt-get install foo
die Installation des Programms ausgeführt werden, ohne lange ein
menügeführtes Programm aufzurufen. Es existieren inzwischen auch mehrere
Frontends für apt-get. Für Textterminals gibt es aptitude und
für graphische Terminals kann gnome-apt verwendet werden.
alien
Debian ist die Distribution, die die meisten Pakete von allen bekannten
Distributionen anbietet. Falls trotzdem einmal ein Paket nicht im
.deb Format vorliegen sollte, man also gezwungen ist, auf ein
.rpm-Paket zurückzugreifen, gibt es speziell dafür das Programm
alien.
alien konvertiert verschiedene Paketformate in jeweils andere um. Das
Programm kann mit folgenden Formaten umgehen:
- RedHat (rpm)
- Debian (deb)
- Stampede (slp)
- Slackware (tgz)
- Solaris (pkg)
Die Aufrufform ist sehr einfach. alien erkennt das Format einer
angegebenen Paketdatei automatisch und konvertiert es dann in das angegebene
Format. Das gewünschte Ausgabeformat wird durch die folgenden Parameter
angegeben:
- --to-deb
- Aus dem angegebenen Paket wird ein Debian-Paket erstellt
- --to-rpm
- Aus dem angegebenen Paket wird ein RedHat-Paket erstellt
- --to-tgz
- Aus dem angegebenen Paket wird ein Slackware-Paket erstellt
- --to-slp
- Aus dem angegebenen Paket wird ein Stampede-Paket erstellt
Wenn also das Paket foo-1.2.34.i386.rpm existiert, und daraus ein
Debian-Paket erstellt werden soll, so genügt der Befehl
alien --to-deb foo-1.2.34.i386.rpm
und alien erzeugt daraus das Paket foo_1.2.34_i386.deb
Jetzt kann dieses neu erstellte Paket mit dpkg -i installiert werden
und wird so nahtlos in die Debian-Paketverwaltung integriert.