14.4 dpkg – Die Basis der Paketverwaltung
Debian-basierte Systeme verpacken ihre Pakete in einem .deb-Format und arbeiten mit dem Debian Package Manager (dpkg). Ubuntu macht hier keine Ausnahme.
Die Paketverwaltung kümmert sich um die Grundlage Ihres Betriebssystems – die Pakete, aus denen Ubuntu und Linux bestehen. Hierbei werden durch dpkg die Pakete so verwaltet, dass daraus ein stabiles System resultiert. Um dies zu erreichen, prüft dpkg beständig die Abhängigkeiten zu installierender Pakete und verhindert konsequent das Installieren von Programmen, wenn diese durch nicht auflösbare Abhängigkeiten das System in seiner Stabilität gefährden könnten. Der umgekehrte Weg wird ebenso überwacht, dpkg verhindert das Entfernen von Paketen, die das System zu einem einwandfreien Betrieb braucht.
Wenn Sie mehr über die vielfältigen Fähigkeiten des Paketmanagers dpkg erfahren möchten, dann lohnt sich ein Blick in die Manpage mit
user$ man dpkg
Mit dem Lesen dieser Manpage kann man Stunden verbringen und daher lohnt sich für das schnelle »Nachschlagen« von Befehlen die Kurzreferenz, die Sie mit
user$ dpkg -h | less
aufrufen können. Hierbei wird die Ausgabe über die Pipe (»|«) an den Pager less weitergegeben.
Die meisten Optionen, die Sie angeben, existieren in Kurz- und Langform. So können Sie statt
user$ dpkg -i
für das Installieren eines Paketes auch
user$ dpkg --install
angeben.
14.4.1 Standortbestimmung
Schnell stieß man mit dpkg an seine Grenzen. Man erkannte sehr früh, dass die Installation zwar einfacher wurde, da man nicht mehr bei jeder zu installierenden Anwendung diese selbst kompilieren musste, aber das Problem mit den Abhängigkeiten blieb weiterhin. Wenn man ein bestimmtes Paket installieren wollte, musste man teilweise mehrere andere Pakete vorher installieren, um die notwendigen Abhängigkeiten aufzulösen. Dies konnte unter Umständen sehr zeitaufwendig und nervenraubend sein.
Schnell fand man eine Lösung für dieses Problem und entwickelte »Aufsätze« für dpkg, die allesamt noch die Grundstruktur von dpkg, also das Installieren und Entfernen von .deb-Paketen, benutzen, sich aber teilweise im Vergleich zum alten Programm deutlich weiterentwickelt haben.
Als erste Verbesserung entstand dselect, das bis Debian 2.2 die bevorzugte Installationsmethode war. Es konnte bereits Abhängigkeiten auflösen, war aber rein konsolenbasiert und dementsprechend teilweise sehr unhandlich. So starteten ziemlich schnell Projekte wie APT und aptitude, auf die ich in den folgenden Abschnitten näher eingehen möchte.
Definition |
Es gibt genau genommen zwei Arten von Paketmanagern: Auf der einen Seite stehen die Programme, die aus anderen Quellen Pakete nachladen können, um Abhängigkeiten aufzulösen, auf der anderen Seite diejenigen Programme, die direkt die Pakete installieren oder löschen, aber keine Abhängigkeitsverwaltungs- und Konfliktlösungsmechanismen kennen. |
Zwei konkrete Fälle: Das Programm RPM kann Pakete vom Typ .rpm installieren und löschen, das Programm dpkg kann Pakete vom Typ .deb installieren und löschen. Beide können aber keine Abhängigkeiten auflösen, da sie keine Funktionen haben, um Software nachzuladen. Dies können erst die »richtigen« Paketmanager wie YUM, APT und andere. |
14.4.2 alien – Mittler zwischen Welten
Manchmal gibt es die gewünschte Lieblingssoftware nur im rpm-Format. Um diese dennoch installieren zu können, muss man dieses Paket in das bevorzugte deb-Format umwandeln. Bei dieser Aufgabe helfen einem leider keine Außerirdischen, aber ein kleines Programm namens alien. alien ist der Vermittler zwischen diese beiden Softwarewelten.
RPM- und Debian-Pakete sind häufig nicht kompatibel, können aber meist mit der Hilfe von alien von einem ins andere Format konvertiert werden. Sie installieren alien im Terminal mit
user$ sudo apt-get install alien
Wenn Sie nun ein Paket im rpm (paket.rpm) vorliegen haben, verwandeln Sie dieses mittels
user$ alien paket.rpm
in ein deb-Format. Sie finden nun im gleichen Verzeichnis die Datei paket.deb. Diese können Sie mit
user$ dpkg -i paket.deb
installieren.
Dieses Verfahren birgt aber auch einige Tücken. Es können Probleme auftreten, wenn das zu konvertierende Paket von Bibliotheken abhängt, die gar nicht oder in einer anderen Version vorliegen. In einem solchen Fall wird zwar eventuell trotzdem die Transformation mit alien abgeschlossen, die Installation danach scheitert jedoch. Dann bleibt Ihnen meist nichts anderes übrig, als auf dieses Paket zu verzichten. |
14.4.3 Pakete installieren und deinstallieren
Wie Sie ein Paket installieren, haben Sie bereits im vorangegangenen Beispiel gesehen. Diese Aktion müssen Sie mit Administratorrechten ausführen, dpkg schreibt alle Meldungen, Warnungen und Fehler in das Terminal, in das Sie den Befehl eingegeben haben:
user$ sudo dpkg -i bum_2.1.8–1_all.deb Password: Wähle vormals abgewähltes Paket bum. (Lese Datenbank ... 145205 Dateien und Verzeichnisse sind derzeit installiert.) Entpacke bum (aus bum_2.1.8–1_all.deb) ... dpkg: Abhängigkeitsprobleme verhindern Konfiguration von bum: bum hängt ab von libgtk2-gladexml-perl; aber: Package libgtk2-gladexml-perl is not installed. dpkg: Fehler beim Bearbeiten von bum (--install): Abhängigkeitsprobleme – lasse es unkonfiguriert Fehler traten auf beim Bearbeiten von: bum
Ich habe im umseitigen Beispiel mit Absicht ein Paket gewählt, das sich nicht so einfach installieren lässt, damit ich Ihnen anhand dieses Beispieles eine solche Fehlermeldung präsentieren kann.
Wie installieren Sie nun dieses Paket? Dies ist prinzipiell auf zwei Arten möglich. Zum Einen könnten Sie sich jetzt auf die Suche nach allen Paketen begeben, die imumseitigen Beispiel gefordert werden, oder Sie nutzen eine smarte Paketverwaltung wie APT. APT löst die Abhängigkeiten automatisch auf und installiert alle abhängigen Pakete mit.
Sie erfahren mehr über APT in Abschnitt 14.5.1.
Wenn Sie mehrere Pakete installieren möchten, können Sie diese einfach an den obigen Befehl anhängen:
user$ dpkg --install paket1:deb paket2.deb
Wenn Sie ein Paket verschicken bzw. es wieder entfernen möchten, dann nutzen Sie die Option -r. Ein Aufruf sieht folgendermaßen aus:
user$ sudo dpkg -r bum (Lese Datenbank ... 145242 Dateien und Verzeichnisse sind derzeit installiert.) Entferne bum ...
Mit dem obigen Befehl haben Sie allerdings nur das Programm entfernt, seine Konfigurationsdateien bleiben vorhanden. Dies ist kein Fehler, sondern beabsichtigt. So brauchen Sie bei einer erneuten Installation des Programmes dieses nicht erneut einrichten. Wenn Sie das Programm komplett entfernen möchten, also mitsamt seinen Konfigurationsdateien, dann müssen Sie es »purgen«:
user$ sudo dpkg -P bum
14.4.4 Installierte Pakete konfigurieren
Manchmal müssen Sie bereits installierte Pakete neu konfigurieren. Dies kann mehrere Gründe haben: Entweder ist bei der vorherigen Installation eines Paketes etwas schiefgelaufen oder Sie müssen eventuell Ihren X-Server nach dem Einbinden eines neuen Treibers anpassen.
Dieses Konfigurieren funktioniert mit dem folgenden Befehl:
user$ sudo dpkg --configure <Paket>
und das Rekonfigurieren z. B. des X-Servers erfolgt mit
user$ sudo dpkg-reconfigure xserver-xorg
14.4.5 Pakete finden
Sie können sich sicherlich vorstellen, dass in einem Repository mehr als ein paar Pakete liegen – es sind ein paar mehr. Sie werden in den Ubuntu-Repositories mehr als 10.000 Pakete finden, so dass man sehr viel Zeit mit dem Suchen nach dem richtigen Paket verbringen kann. Erschwerend kommt dann noch hinzu, dass die Pakete, die man installieren will, oftmals einen anderen Namen haben als die Programme, die sich in diesem Paket verstecken.
Der Paketmanager dpkg hilft Ihnen auch hierbei. Mit der Option -S oder --search können Sie das Paket ermitteln, in dem sich eine bestimmte Datei befindet.
Sie möchten wissen, in welchem Paket sich das Programm ls befindet? Hier müssen wir erst einmal einen kleinen Trick anwenden, da wir nicht wissen, wo sich der Pfad des ausführbaren Programms befindet. Diesen finden wir mit dem Befehl which und das Ergebnis binden wir in die Suche mit ein:
user$ sudo dpkg -S `which ls` coreutils: /bin/ls
Wie Sie sehen, befindet sich das gewünschte Programm in einem Paket namens coreutils.
Wenn Sie eine Liste aller installierten Pakete haben möchten, dann benutzen Sie die Option -l. Diese Liste ist natürlich sehr lang und daher ist eine Umleitung an less wieder sinnvoll:
user$ dpkg -l | less
Nach Eingabe dieses Befehls sehen Sie nicht nur eine ellenlange Liste von Paketen, sondern auch zusätzliche Informationen über deren Status (siehe Abbildung 14.2).
In den ersten beiden Spalten sehen Sie den Status des jeweiligen Paketes. Die Bedeutung der Buchstaben wird Ihnen am Anfang der Liste erklärt.
Wenn Sie die Liste wieder verlassen möchten, dann brauchen Sie das Terminal dazu nicht zu schließen. Sie verlassen die Liste wieder über die Tastenkombination (Srtg) + (Alt) + (Q) und anschließend noch einmal (Alt) + (Q).
Abbildung 14.2 Liste aller installierten Pakete
Was ist dselect? |
Die Basis der Paketverwaltung dpkg kann keine Abhängigkeiten auflösen, sondern »nur« Pakete (de-)installieren. Mit dpkg arbeiten verschiedene Paketmanager, unter anderem dselect. Dselect kann selbstständig Abhängigkeiten zwischen Paketen auflösen und Konflikte zwischen Paketversionen erkennen. Zum eigentlichen Installieren und Konfigurieren von Paketen kommt aber dpkg zum Einsatz. Dselect kann Pakete aus Quellen wie CDs, NFS- oder FTP-Servern beziehen. Dieser Paketmanager war bis Debian 2.2 der bevorzugte Paketmanager, wurde aber inzwischen von aptitude abgelöst. |