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? |
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.
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:
- Depends - Die folgenden Pakete müssen installiert sein, sonst ist das eigentliche Paket nicht funktionsfähig. (Beispiel: GIMP funktioniert ohne die Grafik-Bibliothek Gtk nicht)
- Conflicts - Die folgenden Pakete dürfen nicht gleichzeitig installiert sein. (Beispiel: »postfix« und »exim«, beide würden auf dem TCP-Port 25 lauschen, was nicht möglich ist)
- Recommends - Teile des Pakets funktionieren nur dann, wenn weitere Pakete installiert sind.
- Suggests - Das Paket funktioniert besser oder wird unterstützt von den angegebenen Paketen.
- Provides - Dieses Paket stellt die Funktionalität eines anderen zur Verfügung.
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.
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.
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.).
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.
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
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.
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
Resources
- Security-Reports
debian-security-announce@lists.debian.org - Security-Updates
deb http://security.debian.org/ stable/updates main - Unoffizielle Resourcen für »apt-get«
- Einführung in »dpkg« (engl.)
![[Paket-Management mit »aptitude«]](aptitude-small.png)
![[Paket-Management mit »capt«]](capt-small.png)
![[apt-get upgrade]](upgrade-small.png)
![[apt-get update]](update-small.png)
![[Einlesen von CD-ROMs]](apt-cdrom-small.png)
![[Paketinformationen werden mit »apt-cache« angezeigt]](c_show-small.png)
![[... oder mit »dpkg -s«]](d_stat-small.png)