19 Juni 2006

Pakete verwalten

Ich habe schon sehr oft gelesen, dass Linux unter anderem deswegen nicht den Weg aufs Desktop findet, weil die Installation von neuer Software sehr kompliziert wäre. Auf den ersten Blick ist sie das auch, aber wenn man genauer hinsieht, verbirgt sich unter der "Kompliziertheit" ein genial ausgeklügeltes System, welches sicher stellt, dass bei der Installation von Programm A auch alle anderen Programme installliert werden, die für den Betrieb von A erforderlich sind.

Zunächst möchte ich aber auf die chaotischen Zustände von Windows eingehen. Ein Windows-System hat den Anspruch sehr benutzerfreudlich zu sein und eben den Benutzer nicht mit unnötigen System-Details zu belasten. Neben vielen Dingen, die ich früher schon beschrieben habe, gehört dazu auch die Möglichkeit Software "einfach so" zu installieren. So schön dies auf den ersten Blick auch ist, so furchtbar ist es, wenn man es sich genauer ansieht. Die Setup-Programme dürfen quasi machen, was sie wollen. Sie dürfen für alle Benutzer funktionieren, nur für den aktuellen Benutzer, oder aber nur für den Administrator. Letzteres ist natürlich sehr schlecht, wenn man die Software als eingeschränkter Benutzer verwenden möchte. Windows stellt zwar eine Funktion zur verfügung, die zumindest scheinbar in der Lage ist, installierte Programme zu entfernen. Es handelt sich hierbei aber lediglich um eine Darstellung von Programmen, die sich in die Registrierungsdatenbank eingetragen haben, mit einem Link auf das Programm, welches die Software weieder entfernen kann oder es ermöglicht zusätzliche Funktionen nachzuinstallieren. Die Programme können sich in diese Datenbank eintragen, müssen es aber nicht (wie es manche Windows-Updates zum Teil auch nicht machen). Möchte man nun ein spezielles Programm installieren, dann muss man zusätzlich wissen, welche anderen Programme erforderlich sind, damit es funktioniert.

Ein triviales Beispiel wäre ein Plugin für ein Programm, wobei das Programm nicht installiert ist. Gute Programme haben die Abhängigkeitsbehandlung in der Installationsroutine für das Plugin eingebaut. Es wird bei der Installation geprüft, ob die Software installiert ist, oder nicht. Wie das funktioniert, und welche Bedingungen erfüllt sein müssen um zu entscheiden, ob ein Programm installiert ist, oder nicht, ist nicht klar und auch nirgendwo einheitlich definiert. Schlecht programmierte Plugin-Installer scuhen entweder garnicht nach der benötigten Software oder finden sie nicht, obwohl sie installiert ist.

Ganz anders sieht es hier bei Linux aus. Jede Distribution teilt die Software, die installiert werden kann, in mehr oder weniger große Pakete ein und benutzt einen sogenannten Paketverwalter, um die Abhängigkeiten der Pakete zueinander zu ermitteln. Möchte ich jetzt z.B. Gimp installieren, kommt es, auch wenn ich nur mit KDE arbeite, nicht ohne die Gnome-Kernbibliotheken und die GTK-Bibliotheken aus. Einem unerfahrenen Benutzer kann man aber nicht zumuten das zu wissen, und genau hier faltet der Paketverwalter einen Teil seiner Stärke aus. Er prüft, welche Pakete erforderlich sind, um Gimp laufen zu lassen, prüft, welche davon schon installiert sind (das merkt sich der Paketverwalter selbstverständlich auch immer) und installiert die fehlenden Pakete automatisch mit (sinnvollerweise bevor das eigentliche Paket installiert wird). Die meißten Paketverwalter sind auch in der Lage, bei der Deinstallation eines Pakets, alle Pakete die davon abhängig sind automatisch mit zu deinstallieren. Wenn ich jetzt z.B. die Gnome-Kernbibliotheken lösche und Gimp installiert habe, wird Gimp auch deinstalliert.
Der gängiste Paketverwalter ist RPM. Er wurde ursprünglich von Red-Hat benutzt und wird heutzutage auch von vielen anderen Distributionen verwendet. Der Paketmanager von Debian heißt "APT" und wird von allen Debian-basierenden Systemen verwendet (unter anderem Knoppix). Diese beiden Systeme beherrschen die von mir beschriebene Funktionsweise sehr vorbildlich.
Der Paket-Verwalter von Gentoo ("portage") setzt da aber noch einen drauf! Gentoo zeichnet sich durch seine enorme Anpassungsfähigkeit aus. Alle Programme werden aus den Quelltexten übersetzt und somit gibt es theoretisch die Möglichkeit Programmteile, die auf nicht erwünschten Programmen basieren, einfach weg zu lassen, und somit indirekten Einfluss auf die Abhängigkeiten auszuüben. Praktisch umgesetzt wird dies durch die sogenannte "USE-Variable". Hier kann der Benutzer (möglichst bei der Erstinstallation) genau angeben, welche Features die Programme haben sollen, und welche nicht. Möchte ich ein reines KDE-System haben, dann setzte ich in der Use-Variable einfach "USE=... -gnome +kde ..." und alle Pakete, die sowohl eine KDE, als auch eine Gnome-Unterstützung bieten, werden nur mit der KDE-Unterstützung kompiliert. Die resultierenden Programme (Binaries) werden so sehr viel kompakter als bei den "herkömmlichen" Distributionen. Kleinere Binaries bedeuten auch eine schnellere Ausführung, woher Gentoo übrigens seinen Namen hat (Gentoo = schnelle Pinguin-Art).

Einer der Hauptvorteile der Paketverwalter ist die Fähigkeit das System mit nur einem einzigen Befehl auf den neuesten Stand zu bringen (bei Gentoo braucht man zwei). Es wird für jedes Paket geprüft, ob ein Update verfügbar ist, und alle veralteten Programme werden automatisch aktualisiert. Eine solche Funktionalität sucht man bei Windows vergeblich und es wird sie auch nie dort geben (wenn man mal vom Windows-Update absieht, welches aber nur für Windows, aber nicht für die Anwendungsprogramme funktioniert)!

Alle Paketverwalter haben allerdings einen Nachteil wenn es um die Installation von Software geht, die nicht in der Datenbank der installierbaren Pakete steht. Aber bei allen gibt es die Möglichkeit die Datenbanken zu manipulieren und somit auch Software zu installieren, die nicht in der Distribution enthalten sind. Möchte man das nicht, kann man die Software auch "direkt" installieren, verliert aber damit die Vorteile der Paketverwaltung.

Keine Kommentare: