CHIP-Spezial: Paket-Management bei Debian GNU/Linux

 
Die Debian-Distributionen ist eine der ersten Linux-Distributionen, die echte Abhängigkeiten zwischen Software-Paketen beschreibt. Heutzutage ist sie unter anderem dafür bekannt, daß sie detailierte und fein säuberlich gepflegte Abhängigkeiten enthält.

 

1. Wozu Paket-Management?
2. Release-Management
3. Abhaengigkeiten?
4. Paketnamen
5. »apt-get«-Befehle
6. Quellen von Paketen
7. Einbinden von CD-ROMs
8. Online-Updates
9. Security-Updates
10. Paketinformationen
11. Das Backend »dpkg«
12. Umstieg auf »unstable«
13. Resources

Wozu Paket-Management?

Ich will doch nur Linux.

"Linux" ist streng genommen nur der Kernel. Dieser stellt lediglich die Grundfunktionen zur Verfügugung, um die Hardware anzusteuern sowie mehrere Prozesse gleichzeitig (bzw. abwechselnd) auf den Prozessoren laufen zu lassen. Um ein funktionierendes Linux-System vor sich zu haben, wird jedoch noch viel mehr Software benötigt.

Diese stammt von vielen unterschiedlichen Autoren, die mehr oder weniger große Teile entwickelt und veröffentlicht haben. Einige dieser Teile verwenden Funktionen oder Programme aus den Werken anderer Autoren. Bereits vorhandene Systeme müssen von den Entwicklern nicht erneut geschrieben werden. Stattdessen kann auf die Arbeiten anderer zurückgegriffen werden. Daraus folgt jedoch, daß das erste Paket nur dann auch funktioniert, wenn das zweite Paket ebenfalls installiert ist. Solche Abhängigkeiten gibt es zwischen sehr vielen Paketen. Eine vereinfachte Darstellung von Abhängigkeiten ist in der nebenstehenden Abbildung gezeigt.

[Abhängigkeitsgraph (reduziert) von Gnumeric]

Abb. 1: Abhängigkeitsgraph (reduziert) von Gnumeric

Darüberhinaus macht es oftmals Sinn, große Software-Pakete in mehrere kleinere aufzuteilen. Wenn Sie nicht alle Komponenten benötigen, sollen Sie auch nicht alle installieren müssen und Platz sowie Downloadzeit verschwenden. Diese aufgespaltenen Software-Pakete sind für Distributionen die eigentlichen Pakete. Sie liegen für Debian im ».deb«-Format vor, während andere Distributionen oft ».rpm« verwenden. Abhängigkeiten und Konflikte werden bei Debian auf Basis dieser Pakete beschrieben, nicht auf Datei-Basis.

Release-Management

Das Release-Management von Debian unterscheidet sich grundlegend von dem anderer Distributionen. Da es für das Debian-Projekt keinen finanziellen oder marketing-technischen Druck gibt, wird die Distribution erst dann freigegeben, wenn die Entwickler der Meinung sind, daß sie ausreichend getestet ist, stabil funktioniert und keine kritischen Fehler mehr enthält. Dadurch hat sich in der Vergangenheit die Freigabe um mehrere Monate verzögert, das System war dadurch sehr gut getestet.

Das Debian-Projekt gibt normalerweise nicht mehr als zwei Distributionen pro Jahr heraus, in letzter Zeit sogar nur eine pro Jahr. Wer sein System auf dem aktuellen halten möchte, hat dadurch nicht viel Arbeit. Die Gefahr, das eigene System bei einem generellen Update auf eine neue Debian-Distribution zu gefährden wird zudem noch weiter veringert.

Für jedes Debian-Paket können folgende Abhängigkeiten definiert sein:

[Paket-Management mit »aptitude«]

Abb. 2: Paket-Management mit »aptitude«

Abhaengigkeiten?

Muß ich mich um darum selbst kümmern?

Für den Benutzer bleiben diese Abhängigkeiten normalerweise weitgehend verborgen. Die für die Paketverwaltung benutzten Programme lesen und beachten sie jedoch. Sie schlagen gegebenenfalls Änderungen oder Ergänzungen vor, damit das System die von Debian vorgegebenen Abhängigkeiten erfüllt.

Besonders bequem ist die Möglichkeit, benötigte zusätzliche Pakete automatsich zu installieren und vorher sogar automatisch aus dem Internet zu ziehen, falls nötig. Dieses wird von modernen Paket-Managern wie »apt-get« (aus dem Paket »apt«), »aptitude« (aus dem gleichnamigen Paket), »capt« (aus dem Paket »console-apt«) sowie von »dselect« geboten.

[Paket-Management mit »capt«]

Abb. 3: Paket-Management mit »capt«

Paketnamen

Das einzige, was man noch wissen muß, ist der Name der zu installierenden Pakete, jedoch nicht die Pakete, die von diesem zusätzlich benötigt werden. Das regelt der Paket-Manager selbständig. Dieser ist leicht zu ermitteln. Wenn er nicht genau bekannt ist, wird einfach mit »apt-cache search name« nach Paketen mit ähnlichen Namen oder Beschreibungen gesucht.

Sollte selbst das nicht zum Erfolg führen, da nur ein Dateiname bekannt ist, jedoch nicht der Name des Pakets, bietet Debian auch hier einen einfachen Weg, diesen herauszufinden. Für jede Distribution und Architektur wird eine Datei zur Verfügung gestellt, in der alle Dateien aus allen Paketen aufgelistet sind. Diese Datei liegt auf der ersten CD im Verzeichnis »dists/stable« und heißt »Contents-i386.gz«. Mit dem folgenden Befehl wird in dieser Datei nach dem angegebenen Begriff gesucht:

  zgrep begriff Contents-i386.gz

»apt-get«-Befehle

Am Ende der Erst-Installation eines Debian-Systems werden die ausgewählten Pakete automatisch von »apt-get« installiert. Dieser Paket-Manager bietet auch später die einfachste Möglichkeit, neue Pakete zu installieren oder bestehende zu aktualisieren. Während der Installation werden die CD's eingelesen und von ihnen installiert. Das Programm bietet darüberhinaus die Möglichkeit, Pakete von Servern im Internet zu verwenden oder aus einem beliebigen Verzeichnis auf der Festplatte. Wie das funktioniert, wird in den nächsten Abschnitten erläutert.

»apt-get install name« - Mit diesem Befehl werden ein oder mehrere neue Pakete aus den eingestellten Archiven installiert. Wenn die Paket-Abhängigkeiten so gesetzt sind, daß weitere Pakete benötigt werden, sorgt »apt-get« dafür, daß diese ebenfalls installiert werden.

Wenn die Pakete von einem Server im Internet heruntergeladen werden müssen, wird »apt-get« die zusätzlichen Pakete ebenfalls herunterladen. Bevor der Download allerdings gestartet wird, schreibt »apt-get«, wieviel Daten aus dem Netz geholt werden müssen, und wartet auf eine Bestätigung.

»apt-get upgrade« - Dieser Befehl aktualisiert alle Pakete, die sich seit dem letzten Update geändert haben. Er wird vor allem dazu benutzt, um die Security-Updates einzuspielen, die das Debian-Projekt zur Verfügung stellt.

[apt-get upgrade]

Abb. 4: Beim Upgrade werden Dateien von mehreren Servern parallel gezogen

»apt-get dist-upgrade« - Dieser Befehl funktioniert so ähnlich wie ein normales Upgrade. Hier ist allerdings zusätzlich ein Mechanismus aktiviert, der helfen soll, geänderte Abhängigkeiten zu erkennen und sinnvoll aufzulösen. Das wird für die Fälle benötigt, wenn sich innerhalb der Pakete die Abhängigkeiten grundlegend ändern. Dieser Befehl sollte daher benutzt werden, wenn von einer »stable« Distribution auf die nächste umgestiegen werden soll.

»apt-get update« - Auch wenn dieser Befehl suggeriert, daß er die Pakete aktualisiert, lädt »apt-get« nur die Paket-Datenbanken neu und übernimmt sie in die interne Datenbank. Sie werden für die Berechnung der Abhängigkeiten benötigt und enthalten Informationen, auf welchem Server und in welchen Verzeichnissen die Pakete zu finden sind. Von wo die Informationen gelesen werden, wird in der Datei »/etc/apt/sources.list« festgelegt (s.u.).

[apt-get update]

Abb. 5: »apt-get« aktualisiert die Paketinformationen

Wenn Pakete aus dem Netz heruntergeladen werden müssen, fragt »apt-get« zuerst, ob das auch tatsächlich gewollt ist. Es kann sinnvoll sein, die Pakete nur zu holen, jedoch nicht zu installieren. In dem Fall wird einfach »-d« an die Kommandozeile angehängt. Wenn nur untersucht werden soll, welche Pakete »apt-get« aktualisieren würde, sie jedoch nicht wirklich aktualisieren oder herunterladen soll, dann wird »-s« an die Kommandozeile angehängt.

Quellen von Paketen

Wie eingangs erwähnt, ist »apt-get« in der Lage, Pakete aus unterschiedlichen Quellen einzubinden, z.B. aus dem Internet. Als Konfiguration dafür dient die Datei »/etc/apt/sources.list«. In dieser wird in jeder Textzeile ein Archiv von Debian-Paketen eingetragen. Jede dieser Zeilen hat ein ähnliches Format wie das folgende Beispiel:

  deb http://www.uk.debian.org/debian potato main contrib non-free

Als Protokoll darf alternativ auch »ftp« angegeben werden, wenn die Daten auf einem FTP-Server liegen, oder »file« für lokale Verzeichnisse sowie »cdrom« für CD's (s.u.).

Obwohl die Debian-Distribution sehr groß ist und sehr viele Pakete enthält, ist nicht das gesamte Spektrum an Software in der Distribution enthalten. Teilweise hat es lizenz- oder patentrechtliche Gründe, teilweise sind die Personen nicht sicher, ob die Pakete schon die benötigte Qualität haben, oder sie haben bisher noch keine Möglichkeit, die Pakete auf den Debian-Server zu laden. Viele dieser Pakete sind dennoch bequem über »apt-get« zu erreichen, da sie in entsprechend aufbereiteten Archiven bereitstehen. Am Ende dieses Artikels finden Sie eine Liste zusätzlicher Resourcen für »apt-get«.

Einbinden von CD-ROMs

CD-ROMs werden einfach mit dem Befehl »apt-cdrom add« eingebunden. Dieser Befehl liest den Inhalt einer CDs ein und nimmt die auf ihr enthaltenen Pakete in die interne Paket-Datenbank auf. Jede richtig gemasterte Debian-CD hat zudem einen eindeutigen Namen, der ebenfalls gespeichert wird. Dieses muß für jede CD wiederholt werden, auf der Binärpakete enthalten sind. Informationen über die CD's werden in der Konfigurationsdatei »/etc/apt/sources.list« eingetragen. Wenn eine CD ein zweites mal eingelesen wird, ändert sich dort nichts.

[Einlesen von CD-ROMs]

Abb. 6: Einlesen von CD-ROMs

Wenn in Zukunft ein Paket installiert werden soll, prüft »apt-get«, ob das Paket auf einer dieser CDs liegt. Wenn das der Fall ist, wird »apt-get« Sie bitten, die entsprechende CD einzulegen. Dazu wird der vorher gelesene Name angezeigt.

Online-Updates

Wer sein System ständig auf dem Laufenden halten möchte, was die installierten Pakete angeht, der ist bei Debian genau richtig. Eine einmal freigegebene Distribution (jeweils als »stable« bezeichnet) wird zwar kaum noch geändert, jedoch fließen extrem wichtige Änderungen dennoch in die Distribution ein.

Um das System auf dem Laufenden zu halten, muß »apt-get« mit einer Zeile ähnlich des obigen Beispiels in »/etc/apt/sources.list« konfiguriert werden. Anschließend werden in regelmäßigen Abständen die folgende Befehle als »root« ausgeführt:

  apt-get update
  apt-get upgrade

Security-Updates

Das Debian-Projekt stellt korrigierte Pakete zur Verfügung, wenn Sicherheitsprobleme gefunden wurden. Das Security-Team ist dabei nicht auf das übliche Archiv angewiesen, das täglich aktualisiert wird bzw. auf die »stable« Distribution, die erheblich seltener aktualisiert wird, sondern hat auf security.debian.org ein eigenes Archiv speziell für Security-Updates eingerichtet. Neue Pakete werden dort kurz nach Auffinden des Sicherheitsproblems installiert - für alle betroffenen Architekturen.

Wer den Rechner ans Internet angeschlossen hat, der sollte zumindest die Security-Updates regelmäßig einspielen, da sie oft Probleme beheben, die Angreifer aus dem Internet nutzen könnten. Das gibt zwar keinen ultimativen Schutz, doch die bekannten Sicherheitslöcher werden auf diese Weise zeitnah geschlossen und die Wahrscheinlichkeit drastisch reduziert, daß in den Rechner eingebrochen wird.

Die folgende Zeile sollte daher in jeder »/etc/apt/sources.list« eines am Internet angeschlossenen Debian-Rechners stehen.

  deb http://security.debian.org/potato/updates main contrib non-free

Mit jedem Aufruf von »apt-get update« werden dann die Index-Dateien mit Security-Updates eingelesen. Nach Aufruf von »apt-get upgrade« werden dann automatisch die Pakete installiert, für die Sicherheits-Updates vorhanden sind.

Paketinformationen

[Paketinformationen werden mit »apt-cache« angezeigt]

Abb. 7: Paketinformationen werden mit »apt-cache« angezeigt

Informationen über Pakete erhält man mit dem Befehl »apt-cache show paket«. Dabei werden alle allgemeinen Informationen zu diesem Paket angezeigt. Falls das Paket installiert ist, werden teilweise zusätzlich Informationen über den Status und die Konfigurationsdateien ausgegeben. Diese erhält man ebenfalls mit dem Befehl »dpkg -s paket«. Nur wenn als Status »installed ok installed« angezeigt wird, ist das Paket ordentlich installiert und würde bei einem Update aktualisiert werden.

[... oder mit »dpkg -s«]

Abb. 8: ... oder mit »dpkg -s«

Das Backend »dpkg«

Obwohl »apt-get« eine komfortable Schnittstelle zur Paket-Verwaltung darstellt, muß für einige Funktionen auf den eigentlichen Paket-Manager »dpkg« zurückgegriffen werden. »apt-get« stützt sich intern ebenfalls auf »dpkg« ab. Die wichtigsten Funktionen werden daher im folgenden beschrieben.

»dpkg --install paket.deb« - installiert die in der Kommandozeile angegebenen Pakete, wenn die Abhängigkeiten erfüllt werden. (Kurz: »-i«)

»dpkg --remove paketname« - löscht ein Paket vom System, wenn die Abhängigkeiten der verbleibenen Pakete dieses erlauben. Die Konfigurationsdateien bleiben erhalten. (Kurz: »-r«)

»dpkg --purge paketname« - löscht ein Paket zusammen mit dessen Konfigurationsdateien aus dem System. (Kurz: »-P«)

»dpkg --list« - erstellt eine große Liste aller auf dem Rechner installierten Debian-Pakete zusammen mit einer einzeiligen Beschreibung. (Kurz: »-l«)

»dpkg --configure paket« - konfiguriert ein Paket, falls die Konfiguration bei der vorherigen Installation nicht durchgeführt werden konnte. Das sollte bei der Distribution »stable« nicht auftauchen, wohl aber bei »unstable«

Umstieg auf »unstable«

Wer unbedingt die allerneuesten Pakete benutzen möchte, der verwendet die Distribution »unstable«. Dieses ist die aktuelle Entwicklerversion, in die alle neuen Pakete installiert werden und mit der die Entwickler der Debian-Distribution selbst arbeiten. Auch wenn diese Distribution im allgemeinen als sehr stabil gilt, kommt der Name nicht von ungefähr. Wenn Pakete umstrukturiert werden oder große Pakete (Perl, Python, XFree86 etc.) geändert werden, stehen die Chancen gut, daß sie zu Anfang Probleme bereiten und teilweise nicht installiert werden können. Wer »unstable« einsetzt, muß damit rechnen, daß das System zeitweise inkonsistent ist.

Die folgenden Zeilen für »sources.list« sorgen für die benötigten Paketinformationen für die Distribution »unstable«:

  deb ftp://ftp.rfc822.org/debian unstable main contrib non-free
  deb http://nonus.debian.org/debian-non-US unstable/non-US main contrib non-free

Anschließend reichen die folgenden Befehle aus, um auf die »unstable«-Distribution umzusteigen:

  apt-get update
  apt-get dist-upgrade
  dpkg --configure -a
Martin Schulze

Resources

Quelle: CHIP Linux Spezial 7/2001