Alle Linuxdistributionen kennen zur Softwareinstallation und Deinstallation Paketsysteme. Bei Paketsystemen wird ein Programm (das ja meist aus mehreren Dateien besteht) zu einem Paket zusammengefaßt und mit zusätzlichen Verwaltungsinformationen versehen. Wird die Software im System installiert, wird darüber in einer Datenbank genau Buch geführt. Dies ermöglicht später auch eine saubere Deinstallation. In der Linuxwelt gibt es mehrere Paketsysteme. Die größte Verbreitung haben inzwischen Pakete im rpm und im Debian-Format. Man sieht also, das es hier etwas größere Unterschiede zwischen den verschiedenen Linuxdistributionen gibt. Ich werde hier nur die Verwaltung von Debian-Paketen, die bei Debian und allen davon abgeleiteten Distributionen wie etwa Ubuntu, verwendet wird, erklären.
Grundsätzlich muß man bei der Paketverwaltung zwischen Low-Level und High-Level Tools unterscheiden. Der Unterschied besteht darin, daß Low-Level Tools nur direkt mit Paketdateien und der Paketdatenbank umgehen können, während High-Level Tools automatische Abhängigkeitsauflösung und Paketrepositorys kennen. Paketrepositorys sind Sammlungen von vielen Paketen, die auf CDs oder FTP-Servern vorliegen können.
Das Low Level Tool für Debian Pakete heißt dpkg. Möchte man ein einzelnes Paket installieren funktioniert dies so:
dpkg -i a2ps_4.14-1_i386.deb
Der Parameter -i bei dpkg steht für installieren und auch upgrades bereits installierter Pakete. Dahinter kommt der Dateiname des Paketes, der meist aus dem Programmnamen, der Versionsnummer, der Hardwarearchitektur (z. B. i386, amd64 oder sparc) und der Endung .deb besteht. Sollte diese Software von einer anderen Software abhängig sein, die noch nicht installiert ist, wird eine Fehlermeldung ausgegeben und das Paket nicht installiert.
Die Deinstallation eines Paketes funktioniert mit:
dpkg -r a2ps
Der Parameter -r steht für remove. Danach muß nur der Paketname angegeben werden. Die Versionsnummer ist nicht notwendig, der Paketname wird einfach in der Paketdatenbank nachgesehen. Dieser Befehl beläßt allerdings systemweite Konfigurationsdateien für den Fall einer Reinstallation im System. Möchte man wirklich alle Dateien loswerden, sollte man statt -r den Parameter -P verwenden:
dpkg -P a2ps
Das P steht dabei für purge, also "säubern".
Natürlich läßt sich mit dpkg auch die Paketdatenbank abfragen. Möchte man einfach alle im System installierten Pakete auflisten hilft folgender Befehl:
dpkg -l
Die ausgegebene Liste enthält pro Zeile ein Paket und läßt sich daher natürlich auch mit anderen Shelltools wie grep
weiter filtern und verarbeiten.
Möchte man wissen welche Dateien im System zu einem bestimmten Paket gehören liefert einen diese Information der Parameter -L:
dpkg -L a2ps
Das umgekehrte, also die Suche nach dem Paketnamen anhand einer Datei im Dateisystem macht -S:
dpkg -S /usr/bin/xargs
Die Ausgabe sind dann z. B. so aus:
findutils: /usr/bin/xargs
Das Binary /usr/bin/xargs wurde also aus dem Paket findutils installiert.
dpkg hat den Nachteil das es keine Abhängigkeiten automatisch lösen kann. dpkg kann diese Funktionalität nicht bieten, da es gar nicht wüßte woher es denn weitere Pakete holen sollte um eine Abhängigkeit zu erfüllen. Aus diesem Grund gibt es Pakettools die auf dpkg aufsetzen und mit Software-Repositorys umgehen können. Software-Repositorys können Festplattenverzeichnisse, CDs, FTP- oder HTTP-Server sein, die viele Pakete inklusive ihrer Abhängigkeiten enthalten. Apt ist eine auf dpkg aufsetzende Software, die mit Repositorys umgehen kann. Das Kommando um Apt zu nutzen lautet aptitude
.
aptitude install cups
Mit diesem Kommando wird das Cups-Paket installiert. Abhängigkeiten werden dabei automatisch aufgelöst. Falls es noch nicht erfüllte Abhängigkeiten gibt, fragt aptitude nach ob es diese ebenfalls installieren soll.
Aptitude kann auf 2 verschiedene Arten arbeiten: Als ncurses basierende Oberfläche mit interaktiven Menüs oder über Subkommandos wie install, search oder remove. Gibt man nach aptitude kein weiteres Kommando an, startet sich die ncurses Oberfläche von aptitude:
Benutzt man hingegen hinter aptitude eines der Unterkommandos startet sich nicht diese Oberfläche, sondern die gewünschte Aktion wird direkt ausgeführt. Es ist Geschmackssache welche Art der Oberfläche einem besser gefällt.
aptitude remove cups
Mit diesem Kommando entfernt man das Cups-Paket wieder. Dabei wird, wie bei dpkg -r
, die Konfiguration des Paketes nicht gelöscht. Möchte man ein Paket wirklich ganz löschen benutzt man:
aptitude purge cups
Im Regelfall sollte man Pakete die man mit aptitude installiert hat, auch nur mit aptitude wieder entfernen. dpkg wird man meist, außer für Abfragen der Paketdatenbank, nicht benutzen. Beim Deinstallieren von Paketen kann aptitude, Pakete die nur als Abhängigkeit installiert wurden und nach der Deinstallation des einen Paketes nicht mehr benötigt werden, ebenfalls deinstallieren. Diese Fähigkeit hat dpkg nicht.
Oft möchte man auch in einem Repository eine Suche nach einem Paket durchführen können. Dazu gibt es:
aptitude search print
Dies zeigt alle im konfigurierten Repository verfügbaren Pakete die "print" im Namen enthalten. Möchte man nun nähere Informationen zu einem einzelnen Paket anzeigen benutzt man:
aptitude show cups-driver-gutenprint
Dies zeigt alle Detailinformationen zu dem Paket cups-driver-gutenprint.
Wichtig für die Sicherheit eines Systems ist es auch stets Sicherheitsupdates einzuspielen. aptitude vereinfacht diese Aufgabe enorm. Damit aptitude über neue Pakete (wie Sicherheitsupdates) in den konfigurierten Repositorys Bescheid weiß gibt es den Befehl:
aptitude update
Dieser Befehl installiert keine Updates, sondern er holt erst aktuelle Informationen aus den Repositorys ob es neue Pakete gibt. Das eigentliche Update aller installierten Pakete stößt man danach so an:
aptitude upgrade
Nach Eingabe dieses Befehls bekommt man, falls es Updates gibt, diese angezeigt und man wird gefragt ob diese installiert werden sollen.
Seit Debian 5.0 Lenny wird empfohlen statt upgrade die Kommandos safe-upgrade und full-upgrade zu verwenden. safe-upgrade updatet dabei nur Pakete, falls sich deren Abhängigkeiten nicht geändert haben. full-upgrade updatet auch Pakete mit geänderten Abhängigkeiten und installiert die neuen Abhängigkeiten dabei gleich hinzu.
aptitude clean
Mit diesem Befehl läßt sich Speicherplatz sparen. Apt cached Pakete nach dem herunterladen in /var/cache/apt/archives
. Möchte man diese Pakete wieder los werden, reicht ein aptitude clean
.
Teilweise findet man noch die Beschreibung des Befehls apt-get
, statt aptitude
. apt-get
ist weiterhin in Debian enthalten und kann genutzt werden. Die Debian Entwickler empfehlen jedoch inzwischen das modernere aptitude, da es mit Abhängigkeiten wesentlich besser umgehen kann.
Damit aptitude
seine Arbeit verrichten kann, müssen entsprechende Repositorys konfiguriert sein. Diese Repositorys werden in der Datei /etc/apt/sources.list
konfiguriert. Jede Zeile in dieser Datei entspricht einem Repository. Die Repositorys werden beim installieren von Paketen in der Reihenfolge in der sie auch in der Datei aufgeführt sind benutzt. Existiert also eine Datei in der gleichen Version in mehreren Repositorys, wird das erste aufgeführte Repository verwendet. Dies gilt nicht, wenn die Versionsnummern der Pakete verschieden sind, dann wird immer das Paket mit der höchsten Versionsnummer benutzt.
Eine typische Zeile in der sources.list könnte so aussehen:
deb http://ftp.de.debian.org/debian/ lenny main
In der ersten Spalte steht stets entweder deb oder deb-src. deb steht dabei für ein normales Paketrepository mit Binärpaketen. deb-src steht für ein Repository mit Quellcodepaketen in denen also der unkompilierte Quellcode zu den Paketen zu finden ist. Als normaler Anwender möchte man meist nur ersteres. In der zweiten Spalte steht der Ort an dem das Repository ist. Im Falle eines FTP- oder HTTP-Servers also eine Url, ansonsten ein Dateipfad oder die Kennung einer CD oder DVD. Dahinter steht meistens (ausnahme: einfache Repositorys, diese benötigen nur die 2 ersten Spalten) der Versionsname des Distributionsreleases für den Pakete benutzt werden sollen. Als letzte Spalte(n) kommen noch die Bezeichnungen für die Art von Paketen die installiert werden sollen, wie etwa bei Debian main, contrib und non-free. Bei Debian hat dies etwas mit den Lizenzen der Pakete zu tun: In main findet sich der Hauptteil der Software. Diese steht komplett unter freien Lizenzen. In non-free findet sich nur Software unter nicht freien Lizenzen. In contrib ist die enthaltene Software zwar ebenfalls frei, hat jedoch Abhängigkeiten zu unfreier Software. Bei Ubuntu wird diese Spalte dazu benutzt zwischen dem offiziell unterstützten Paketrepository und zusätzlichen nicht offiziell unterstützten Repositorys (z. B. universe) zu unterscheiden.
Hier eine /etc/apt/sources.list eines Debian-Systems:
deb http://ftp.de.debian.org/debian/ lenny main
deb-src http://ftp.de.debian.org/debian/ lenny main
deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main
deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main
Dies ist eine typische sources.list nach einer Standardinstallation von Debian Lenny, bei der als Standort Deutschland ausgewählt wurde.
Hat man zusätzliche CDs oder DVDs die man in seine sources.list einfügen möchte, kann man dies nicht ohne weiteres von Hand machen, da CDs in der sources.list spezielle Kennungen verwenden und außerdem muß Apt die CD einlesen um zu wissen welche Pakete auf ihr vorhanden sind. Für diesen Zweck gibt es das Tool apt-cdrom
.
apt-cdrom add
Mit diesem Befehl wird man aufgefordert eine CD einzulegen die dann automatisch zur sources.list hinzugefügt wird. Die CD muß dazu natürlich nicht nur Debian Pakete enthalten, sondern als richtiges Repository auch die entsprechenden Paketbeschreibungen.
Seit Debian 4.0 Etch verfügt Debian über ein neues Sicherheitsfeature bei Paketinstallationen. Repositorys haben jetzt eine digitale Signatur. Apt läßt jetzt nur noch Paketinstallationen zu, wenn das Repository eine korrekte digitale Signatur vorweisen kann. Dies soll dem Fall vorbeugen, das jemand versucht, einem ein Repository mit trojanisierten Paketen unterzujubeln. Damit dies funktioniert, wird mit Apt der öffentliche Schlüssel des Debian Repositories mit ausgeliefert. Falls man mal in eine Situation kommt bei der man selber einen Schlüssel nachinstallieren muß, geht das mit apt-key
:
apt-key add key.gpg
Dies fügt den Schlüssel in der Datei key.gpg als vertrauenswürdigen Schlüssel zu Apt hinzu.
Signiert wird in den Repositories eine Datei mit den MD5-Hashes aller Pakete. Ändert sich ein Paket, ändert sich auch dessen MD5-Hash und der signierte Hash würde nicht mehr passen. Dadurch können auch Betreiber von Spiegelservern nicht einfach einzelne Pakete durch eigene Versionen austauschen. Möchte jemand eigene Pakete in einem Repository zur Verfügung stellen müßte er auch den öffentlichen Schlüssel den er zum signieren verwendet anbieten. Sollten sie einen derartigen zusätzlichen Schlüssel importieren, bedenken sie das sie damit dem Aussteller vertrauen.
Weitere Informationen zur Debian Paketverwaltung gibt es auch in der Debian FAQ in den Kapiteln 7, 8 und 9, sowie in der Debian Referenz Kapitel 2.2 und 2.3.