1. Über dieses Buch
1.1. Kann Paketmanagement Spaß machen?
Ja! Und wir werden Ihnen in diesem Buch zeigen, warum das so ist.
Software ist heute meist sehr komplex und darum modular aufgebaut. Das gilt nicht nur für das Betriebssystem Linux und andere freie Anwendungen, sondern hat sich als allgemeines Prinzip in der Softwareentwicklung durchgesetzt.
Modularität hat mehrere Facetten: einzelne Bausteine für spezifische Aufgaben, klare Beschreibungen zu deren Funktion, definierte Schnittstellen und Protokolle zur Kommunikation untereinander. All dies gewährleistet die Kombination und Austauschbarkeit von Komponenten, also die flexible Anpassung der Software an konkrete Anforderungen. Modularität heißt aber auch Abhängigkeiten: Bausteine und Funktionen bedingen einander, bauen aufeinander auf, verlangen bei der Installation eine vorgegebene Reihenfolge – und stehen ggf. zueinander in Konflikt. Das betrifft insbesondere Varianten und Entwicklungsstufen einer Implementierung.
Auf die Verwaltung von Software übertragen, heißt das: Die einzelnen Module werden als Pakete (Packages) bereitgestellt. Das setzt voraus, dass deren Bezug zueinander (Relation) klar geregelt ist; nur so kann ein Betriebssystem wie Debian GNU/Linux (siehe [was-ist-debian]) funktionieren und weiterentwickelt werden, an dem Hunderte von Entwicklern aus der ganzen Welt mitwirken und das inzwischen aus mehr als 40.000 Paketen besteht. Ohne ein leistungsfähiges Paketmanagement wäre dies unmöglich.
Debian GNU/Linux und davon abgeleitete Betriebssysteme – wie Ubuntu
[Ubuntu], Linux Mint [LinuxMint], Knoppix [Knoppix] oder Grml
[Grml] – setzen auf dem Paketformat deb
und der Paketverwaltung mit
dpkg
und APT auf. Neben dem RPM-Paketformat (siehe
[varianten-und-formate-fuer-softwarepakete]) ist die Kombination aus
dem deb
-Format und seinen Werkzeugen am weitesten unter den
verschiedenen Linux-Distributionen verbreitet. Das hat mehrere Gründe:
-
Es funktioniert verlässlich.
-
Es ist ausführlich und meist auch verständlich dokumentiert. Leider ist die Dokumentation aber nicht ganz einheitlich und recht verstreut – weshalb nicht zuletzt auch dieses Buch entstanden ist.
-
Pakete für Debian GNU/Linux sind aufeinander abgestimmt, wurden vorab intensiv getestet und unterliegen strengen Qualitätskontrollen.
-
Pakete für Debian GNU/Linux werden nach ihrer Veröffentlichung (Release) bzw. ihrem Entwicklungszweig kategorisiert: oldoldstable, oldstable, stable, testing, unstable oder experimental. Ein Paket für Debian GNU/Linux kann in mehreren dieser Zweige parallel vorliegen und unterscheidet sich nur in seinem jeweiligen „Reifegrad“. Als Benutzer wissen Sie daher genau, worauf Sie sich einlassen, wenn Sie einen bestimmten Entwicklungsstand benutzen (falls nicht, lesen Sie in [veroeffentlichungen] nach). Das Debian-Derivat namens Ubuntu handhabt das etwas anders: Es unterscheidet nur zwischen mehreren stabilen Veröffentlichungen und dem Entwicklungszweig. Im Rahmen einer halbjährlichen Freigabe wird aus dem Entwicklungszweig die nachfolgende, stabile Veröffentlichung.
-
Kein Stress mit Lizenzen. Es ist klar geregelt, welche Bedingungen ein Paket erfüllen muss, damit es überhaupt in den offiziellen Bestand von Debian GNU/Linux unter den Distributionsbereich main Eingang findet. Alle anderen Pakete werden in die Bereiche contrib oder non-free einsortiert. Ubuntu kennt kein Äquivalent zu contrib und verwendet statt non-free die beiden Bereiche restricted und multiverse (siehe [distributionsbereiche]).
-
Die beiden Debian-Entwicklungszweige unstable und testing (siehe [veroeffentlichungen]) wie auch der Bereich Debian Backports (siehe [debian-backports]) bekommen regelmäßig neue Pakete, die das Paketverwaltungswerkzeug
aptitude
(siehe [aptitude]) in einer eigenen Liste übersichtlich darstellt. Das ist fast wie Weihnachten, nur günstiger und häufiger.
All dies gewährleistet zwar nicht, dass Software fehlerfrei ist, allerdings reduziert dieses Vorgehen die Zahl der Fehlerquellen deutlich. Es stellt insbesondere sicher, dass sich Softwarepakete unter Berücksichtigung ihrer Abhängigkeiten konfliktfrei installieren, konfigurieren, ausprobieren und auch wieder vollständig aus dem System entfernen lassen. Der Fall, dass andere, bereits integrierte Komponenten Schaden nehmen, ist bei korrektem Vorgehen nahezu ausgeschlossen. Falls das Problem doch auftritt, ist es definitiv in überschaubarer Zeit mit Bordmitteln zu beheben. Diese Werkzeuge stehen im Mittelpunkt dieses Buches.
Die Sorge, dass Sie durch Ausprobieren Ihr Arbeitsgerät unbenutzbar machen, ist unberechtigt – zumindest innerhalb von Debian stable. Aber auch in Debian unstable passiert das nur sehr selten. Ausführlicher gehen wir darauf im Zusammenhang mit Distributionsbereichen (siehe [distributionsbereiche]) und Veröffentlichungen (siehe [veroeffentlichungen]) ein. Fühlen Sie sich also ausdrücklich ermutigt, mit den Paketen Ihres Debian-Systems zu experimentieren!
1.2. Zum Buch
1.2.1. Über die Autoren
Dipl.-Inf. Axel Beckert [Beckert-Webseite] hat Informatik mit Nebenfach Biologie an der Universität des Saarlandes studiert. Er arbeitet u.a. als Linux-Systemadministrator an der ETH Zürich, ist sowohl Mitglied des Debian-Projekts als auch in den Vorständen des Vereins Debian.ch und der Linux User Group Switzerland (LUGS).
Er benutzt aptitude
seit Anfang der 2000er Jahre und ist seit der
Neuformierung des aptitude
-Teams zum Jahreswechsel 2011/2012 als
Mentor, Versuchskaninchen für neue Versionen und Paketsponsor bei
aptitude
mit an Bord. Seit 2015 ist er auch offiziell einer der
Maintainer des Pakets aptitude
und kümmert sich primär um die
Paketierung. Desweiteren hat er im Namen des Debian Perl Teams die
Pflege der im Buch erwähnten Pakete debsums
und equivs
übernommen.
Dipl.-Inf. Frank Hofmann hat Informatik mit Nebenfach Englisch an der Technischen Universität Chemnitz studiert. Er bevorzugt das Arbeiten von unterwegs aus als Entwickler, Trainer und Autor. Nach Berlin, Kapstadt und Besançon (Franche-Comté) arbeitet er von Freiburg im Breisgau aus.
1.2.2. Wie und warum dieses Buch entstand
Das Thema „Paketmanagement“ beschäftigt uns als Autoren schon sehr lange. Obwohl jeder die Werkzeuge und Mechanismen tagtäglich verwendet, entdeckten wir zunächst unabhängig voneinander immer wieder neue Aspekte, die sich schrittweise zu einem komplexen Gesamtbild ergänzten.
Beim gemeinsamen Fachsimpeln entstanden aus dieser Begeisterung heraus zunächst Beiträge für die Zeitschrift LinuxUser [Hofmann-Osterried-Alien-LinuxUser] [Hofmann-Winde-Aptsh-LinuxUser] [Hofmann-Debtags-LinuxUser]. Parallel dazu arbeiteten wir weitere Aspekte digital auf und veröffentlichten entsprechende Blogbeiträge [Beckert-Blog], hielten Vorträge bei Linux-Veranstaltungen und versuchten uns in einem Screencast zum Thema.
Im Herbst 2012 hatte Axel die Idee, einen LinuxUser-Artikel zu
aptitude
im Alltagsgebrauch zu schreiben. Dazu kam es bisher noch
nicht
[Jörg, bitte nicht böse sein!]
, denn eine Reihe von
Vorarbeiten waren dazu notwendig. Wir einigten uns daher auf einen Beitrag
zu den Unterschieden zwischen apt-get
und aptitude
, der jedoch immer
länger und länger wurde und schließlich im Frühjahr 2013 in einen
Zweiteiler mündete [Beckert-Hofmann-Aptitude-1-LinuxUser]
[Beckert-Hofmann-Aptitude-2-LinuxUser].
Bevor wir uns daran machten, Passagen aus diesen umfangreichen Beiträgen wieder herauszustreichen, fiel irgendwann der Satz: „Wenn wir so weitermachen, können wir eigentlich gleich ein Buch schreiben“. Seitdem ließ uns diese Idee nicht mehr los. Teile der Texte und Abbildungen wurden aus den erwähnten Veröffentlichungen übernommen und nach Bedarf für das vorliegende Werk überarbeitet. Das Ergebnis halten Sie nun in Ihren Händen.
1.2.3. Motivation
Uns fasziniert die Paketverwaltung unter Debian, deren Mächtigkeit und unglaubliche Robustheit. Sie funktioniert so klaglos, dass man schon wieder skeptisch werden müsste und nach konzeptionellen Fehlern sucht – aber es gibt tatsächlich kaum welche. Wie in jedem größeren IT-Projekt gibt es neben den intensiv genutzten, gut dokumentierten Bereichen aber auch „dunkle Ecken“ und unangenehme Bugs, kuriose Lösungen und kurzfristige Workarounds; es sind allerdings nur wenige, die auch nur in recht ausgefallenen Situationen zutage treten.
Genießen Sie also das beruhigende Gefühl, dass bei der Verwendung der Werkzeuge eigentlich nichts schiefgehen kann – und wenn doch, gibt es immer einen kurzen Weg, das Malheur wieder zu beseitigen. Hier im Buch zeigen wir Ihnen die verschiedenen (Schleich-)Wege, die wir kennen.
Sich hingegen in dem vielschichtigen Geflecht aus dpkg
, APT und
aptitude
zurechtzufinden und ein Verständnis für die einzelnen
Programme und Mechanismen zu entwickeln, bedarf Ihrerseits ein wenig
Geduld: Ohne nachzulesen und intensiv auszuprobieren, geht es nicht –
und auf eben diesem Weg möchte Sie unser Buch begleiten.
Nach einem ersten, flüchtigen Blick auf die genannten Werkzeuge zur
Paketverwaltung scheint es so, als sei es unerheblich, welches wann zum
Einsatz kommt. Dem ist nicht so, denn jedes hat seine ureigene Aufgabe
in der Hierarchie der Paketverwaltung. Subtile Unterschiede zwischen APT
und aptitude
sorgen mitunter für eine blutige Nase, und insbesondere
Ein- und Umsteiger aus der RPM-Welt haben es zu Beginn nicht so leicht.
Daher gibt es im Anhang eine Übersicht zu den analogen Aufrufen von RPM,
YUM, DNF und Zypper — siehe [kommandos-zur-paketverwaltung-im-vergleich].
Bitte beachten Sie, dass sich nicht alle Verhaltensweisen identisch in
beiden Welten abbilden lassen.
Das vorliegende Buch will darum vor allem Klarheit schaffen und Ihnen die Zusammenhänge zwischen den einzelnen Programmen deutlich machen. Es hilft Ihnen, in jeder Situation das passende Werkzeug zur Paketverwaltung auszuwählen und es danach gekonnt einzusetzen. Die einzelnen Kapitel sind aufgabenbezogen zusammengestellt. In jedem Abschnitt finden Sie Lösungen, wie Sie die jeweilige Aufgabe mit den verschiedenen Werkzeugen umsetzen.
Der Praxisteil fokussiert auf komplexere Fragestellungen. Dazu fassen wir den aktuellen Stand der Entwicklung zusammen und beleuchten darüber hinaus die angrenzenden Programme bzw. die damit verbundenen Situationen im Alltag der Systembetreuung.
1.2.4. Baustellenstatus
Zum aktuellen Zeitpunkt (Frühsommer 2023) hat das Buch den Umfang von 500 Seiten bereits überschritten. Als inhaltlich vollendet sehen wir den Teil 1 „Konzepte“ an. Kleinere Baustellen finden sich noch in Teil 2 „Werkzeuge“. Hingegen klaffen im Teil 3 „Praxis“ noch größere Lücken. Wir arbeiten kontinuierlich daran, diese Lücken zu schließen. Das gelingt nicht so einfach, weil dafür bspw. komplexere Setups notwendig sind oder auch weil die Dokumentation der Werkzeuge für den betrachteten Fall schlicht und einfach nicht vorhanden, (bislang) unverständlich oder gar veraltet ist.
1.2.5. Technische Basis
Rein technisch setzt das Buch auf AsciiDoc [AsciiDoc] auf — einem Textformat, aus welchem dann über mehrere Zwischenstufen diverse Ausgabeformate wie PDF, EPUB oder HTML entstehen. Basierend auf einer einzigen Quelle stehen damit passende Ergebnisse für die verschiedenen Ausgabegeräte zur Verfügung. Die AsciiDoc-Dateien liegen in einem Versionskontrollsystem namens Git und sind auf der Plattform GitHub verfügbar [dpmb-github]. Neben der Möglichkeit, während des Arbeitens auch auf eine frühere Revision zurückgreifen zu können, ermöglicht das ein paralleles, verteiltes Arbeiten von verschiedenen Standorten aus. Zudem kann jeder Interessierte am Buch in Form von Vorschlägen und Korrekturen beitragen. Wir freuen uns über alle Anmerkungen, die uns erreichen und helfen, das Buch für alle besser zu machen.
Tipp
|
Versionsverwaltung mit Git
Den Einstieg zu Git erleichtert Ihnen das gleichnamige Buch von Julius Plenz und Valentin Haenel (Julius Plenz und Valentin Haenel: Git. Verteilte Versionsverwaltung für Code und Dokumente, Open Source Press, München, 2. Auflage November 2014, ISBN 978-3-95539-119-5). |
1.2.6. Online-Fassung
Unter https://buch.dpmb.org/ gibt es den jeweils aktuellsten Stand des
Buches auch in diversen Formaten zum Online-Lesen oder
Herunterladen. Derzeit sind es HTML, PDF und EPUB. Diese Fassungen
werden automatisch bei jedem git push
frisch generiert.
Sollte die Ihnen vorliegende Fassung (sei es als Paket in einer Debian-Veröffentlichung oder als gedrucktes Buch) nicht aktuell genug sein, so schauen Sie doch mal in die Online-Fassung. Vielleicht wurde die entsprechende Stelle dort bereits aktualisiert.
1.2.7. Quellcode und Lizenz
Der o.g. Quellcode des Buches findet sich auf GitHub [dpmb-github] und ist unter der Creative Commons Namensnennung — Weitergabe unter den gleichen Bedingungen 4.0 International Lizenz [CreativeCommons] frei verfügbar.
Änderungswünsche oder -vorschläge zum Buch senden Sie bitte dort als Issue [github-issue] — oder sogar noch besser — als Pull-Request mitsamt Patch [github-pull-request] ein.
1.2.8. Organisatorisch
Beide Autoren leben und arbeiten in recht unterschiedlichen Regionen — Axel Beckert in Zürich und Frank Hofmann in Kirchzarten bei Freiburg. Aufgrund der mitunter recht großen Distanz sind regelmäßige Arbeitstreffen nur begrenzt möglich und wurden daher mit Hilfe von Buchsprints sowie elektronischer Kommunikation überbrückt.
Das Buch entsteht seit dem Frühjahr 2013 und häufig auch im Rahmen von Linux-Events. Besonders hervorzuheben sind hierbei die Chemnitzer Linux-Tage [CLT], die Rencontres Mondiales du Logiciel Libre [RMLL] und die Debian Entwicklerkonferenz [DebConf]. An diesen Veranstaltungen nehmen wir gern aktiv teil und nutzen die Gelegenheit, das Buch gemeinsam zu vervollständigen.
Viele Texte verfassen wir zudem von unterwegs aus. Die bisherigen Stationen umfassen Aix-les-Bains, Ajacchio (Korsika), Ålesund (Norwegen), Andorra, Augsburg, Beauvais (Picardie), Bergneustadt, Berlin, Bern, Besançon, Biel/Bienne, Bottighofen (Bodensee, Schweiz), Bratland (bei Bergen, Norwegen), Bruchsal, Canterbury (Kent), Chemnitz, Cudrefin, Delémont, Edinburgh (Schottland), Engelberg-Titlis, Essen, Frankfurt/Main, Freiburg im Breisgau, Friedrichshafen, Genf, Germersheim, Goizueta (Baskenland, Spanien), Großer Sankt-Bernhard-Paß, Hamburg, Hannover, Heidelberg, Hout Bay und Kapstadt (beide Western Cape, Südafrika), Kirchzarten bei Freiburg im Breisgau, Koblenz, Lauchringen (Baden, Wutachtal), Laveno Mombello (Italien, Lago Maggiore), Lausanne, London, Magdeburg, Meersburg (Bodensee), Montpellier, Montreux, München, Orø (Dänemark), Port del Cantó (Katalanische Pyrenäen, Spanien), Radebeul bei Dresden, Rømø (Dänemark), Rostock-Warnemünde, Saint-Cergue (Jura, Schweiz), Saint-Claude (Jura, Frankreich) Saint-Étienne, Saint-Jouin-Bruneval (Normandie), Saint-Victor-sur-Loire (Auvergne-Rhône-Alpes), Sankt Augustin (bei Bonn), Savines-le-Lac (Hautes Alpes, Frankreich), Insel Sokn (bei Stavanger, Norwegen), Tübingen, Tvinnefossen (Norwegen), Zernez (Engadin, Schweiz) und Zürich (siehe [fig.buchkarte]). Orange Kreise mit rotem Rand markieren Axels Stationen, rote Kreise mit orangenem Rand die Arbeitsorte von Frank. Manchmal überlappt sich das auch — dann ist es nur einer von beiden. Wir nahmen uns dabei an der Philosophie von Debian GNU/Linux ein Beispiel: ohne Hektik, mit dem Blick fürs Detail und zumeist pedantisch bis ins letzte i-Tüpfelchen, aber trotzdem mit viel Freude, Neugierde und unserem Entdeckerdrang folgend.
1.2.9. Grundlagenwissen für Administratoren
Der sichere Umgang mit der Paketverwaltung zählt zu Ihrem Grundwissen als Administrator, um ein UNIX-/Linux-System einrichten und in Bezug auf die eingesetzte Software betreuen zu können. Betreiben Sie Ihre Systeme als Benutzer in Eigenverantwortung, sind diese Kenntnisse für Sie im Alltag ebenso unverzichtbar.
Unabdingbar ist die Auseinandersetzung mit dem Paketmanagement für Zertifizierungen. Die Prüfungen des Linux Professional Institutes (LPI), der Linux Foundation (LFC) [lfc] sowie die Linux+-Prüfung von CompTIA [comptia-linux] widmen dem Thema einen eigenen Schwerpunkt mit hoher Gewichtung (für LPIC-1 siehe [lpic-101]).
Tipp
|
Material für Ihre LPIC-Prüfungen
Ihre Vorbereitung auf die anspruchsvollen Tests des LPI ergänzen Sie am besten mit dem Buch „LPIC-1. Sicher zur erfolgreichen Linux-Zertifizierung“ von Harald Maaßen [Maassen-LPIC-1]. |
Dokumentation zu aptitude
Das vorliegende Buch resultiert auch aus einem Ärgernis, das zur weltweit verteilten Zusammenarbeit über das Netz gehört: Das Internet vergisst nichts, und irgendwo ist immer noch eine veraltete Dokumentation verlinkt, deren Hinfälligkeit mangels Verfallsdatums auch nicht zu erkennen ist.
Bei der Recherche nach aptitude
-Optionen verzweigen Suchtreffer häufig
auf unklare, überholte und vielfach verteilte Erläuterungen. Als erster
Anhaltspunkt bei einer überschaubaren Fragestellung mag das helfen, kann
aber auch in eine Sackgasse oder gar zu Fehlern führen, wenn sich die
Software just in diesem Punkt weiterentwickelt hat.
Der Wunsch nach einem aktuellen, konsistenten und einsprachigen
Nachschlagewerk zur Paketverwaltung mit dpkg
, APT und aptitude
erhielt also ausreichend Nahrung, zumal auch die an recht prominenter
Stelle verlinkte Online-Dokumentation zu aptitude
veraltet war (Stand:
2008). Auf Axels Initiative wurde sie aber mittlerweile auf den neuesten
Stand gebracht und steht seit August 2013 wieder in sämtlichen
bisherigen Übersetzungen zur Verfügung [aptitude-dokumentation],
mittlerweile sogar auf der offiziellen Webseite von Debian.
Das kommt insbesondere Anwendern entgegen, die Dokumentation lieber online lesen (oder „ergooglen“) statt sich die (stets aktuellen) Dokumentationspakete aus den Repositories auf ihrem System zu installieren. Ausführlicher gehen wir auf das Thema in [dokumentation] ein.
Bei unserer Arbeit am Buch entdeckten wir zahlreiche Lücken in den Programmbeschreibungen, den Manpages und den beigefügten, weiterführenden Dokumentationen [bugs-found-during-book-writing]. Dabei wurde uns auch bewusst, welche Bedeutung dem persönlichen Erfahrungsschatz und insbesondere dem passiven Wissen zukommt. Wir haben uns bemüht, davon möglichst viel in dieses Buch einfließen zu lassen.
1.2.10. Dokumentation deb
vs. rpm
Trotz vieler Fortschritte sind manche Programme zur Paketverwaltung und
Hinweise zum Zusammenspiel von dpkg
, APT und aptitude
nur
bruchstückhaft oder gar nicht beschrieben – oder sie sind über viele
Köpfe und Online-Ressourcen hinweg verstreut. Auch an Übersetzungen
mangelt es: So liegt trotz des hohen Nutzungsgrades beispielsweise die
aptitude
-Dokumentation bisher nicht in deutscher Sprache vor.
Im Vergleich steht das Paketformat RPM etwas besser da. In seinem Buch
„Maximum RPM“ [Bailey-Maximum-RPM] hat Edward C. Bailey im Jahr
2000 die Regieanweisungen für den Umgang mit diesem Format
veröffentlicht. Aktueller sind der „RPM Guide“ des
Fedora-Projekts [Foster-Johnson-RPM-Guide] und weiterführende
Dokumentationen auf der rpm
-Projektseite [RPM-Webseite].
Ein vergleichbares Buch zur Debian-basierten Paketverwaltung fehlte
bislang. Viele hervorragende Kompendien (siehe dazu [weitere-buecher])
behandeln zwar die einzelnen Kommandozeilenwerkzeuge dpkg
, APT,
aptitude
oder Synaptic, aber meist fehlt der (entscheidende) Entwurf
eines Gesamtbildes, das sich erst aus der geschickten Kombination dieser
Werkzeuge ergibt.
1.2.11. Was ist das Buch – und was nicht …
Wir stellen dpkg
, APT und aptitude
mit den zugrundeliegenden
Mechanismen in den Mittelpunkt. Wir erläutern die Unterschiede und
ordnen die Werkzeuge anhand konkreter Aufgabenstellungen in den realen
Einsatzkontext ein. Diesem problemorientierten Ansatz folgend, werden
Sie die Programme künftig effizienter einsetzen und Paketmanagement als
ebenso hilfreichen wie angenehmen Teil der Administration der Ihnen
anvertrauten Systeme erleben.
Gedacht ist das Buch als Nachschlagewerk und Lernmedium für den Alltag. Es hilft Ihnen, (typische) Fehler oder Umwege zu vermeiden, und räumt mit zahlreichen Missverständnissen auf, die beim Thema Paketmanagement immer noch kursieren.
Unser Buch ist kein allgemeines Linux-Einsteiger-Buch in der
Geschmacksrichtung „Debian GNU/Linux“, sondern widmet sich mit der
Paketverwaltung bei Debian-Systemen einem speziellen Teilaspekt der
Systembetreuung. Folglich spielen andere Paketformate als deb
allenfalls eine Nebenrolle (siehe
[varianten-und-formate-fuer-softwarepakete]). Andere Debian-Derivate
(siehe [welche-unix-artigen-betriebssysteme-verwenden-das]) und
Linux-Distributionen haben vieles von Debian GNU/Linux übernommen, und
die Rezepte lassen sich daher oft in gleicher Weise anwenden. Wir können
jedoch nicht garantieren, dass wirklich alle Ausführungen
uneingeschränkt für andere Distributionen gelten. Sofern uns gravierende
Abweichungen vom Debian-Standard bekannt sind, benennen wir diese und
erklären, wie Sie in einem solchen Fall am besten verfahren.
Weiterhin ist dieses Werk kein Entwicklerhandbuch, aus dem Sie erfahren,
wie Sie deb
-Pakete bauen und diese in Debian einbringen. Dieses Thema
würde den Rahmen des vorliegenden Werkes um ein Mehrfaches sprengen und
bleibt daher außen vor. Für den Bau von Debianpaketen empfehlen wir
Ihnen den Blick in das Debian-Paketierbuch (kurz: dpb) von Michael und
Mechtilde Stehmann [Debian-Paketierbuch].
Was Sie allerdings im vorliegenden Buch finden, ist die Zusammenstellung
eines deb
-Pakets — sprich: aus welchen Einzelteilen es besteht (siehe
[aufbau-und-format]), wie Sie dieses in die Komponenten zerlegen
(siehe [paket-auseinandernehmen]) und auch wieder zusammenbauen (siehe
[pakete-bauen-mit-checkinstall]).
1.2.12. Zielgruppe und Lernziele
Dieses Buch richtet sich in erster Linie an Systemadministratoren und
„Gehäusedeckelabschrauber“
[Dieter Thalmayr in:
Oberflächliches – Enlightenment als Alternative zu Gnome und KDE,
Vortrag im Rahmen des 11. Linux-Infotages Augsburg, 24. März 2012]
.
Richtig sind hier Verwalter und Betreuer Debian-basierter
Infrastrukturen sowie Fortgeschrittene, die eine solche Funktion
anstreben. Ihnen dienen Teil 1 (Konzepte) und 2 (Werkzeuge) mit den
darin beschriebenen Optionen als Nachschlagewerk. Teil 3 (Praxis)
hingegen nutzen sie als Arbeits- und Planungsmittel zur bestmöglichen
Nutzung der beschriebenen Werkzeuge im Alltag.
Für Anwender, die den Linux-Einstieg mit Ubuntu oder Linux Mint bereits erfolgreich absolviert haben und nun der Systemverwaltung jenseits graphischer Oberflächen entgegenfiebern, bilden die Teile 1 und 2 das unverzichtbare Handwerkszeug. Teil 3 entspricht der Kür fortgeschrittener Kenntnisse. Die Lernkurve wird für sie deutlicher steiler ausfallen, aber stets beherrschbar sein.
1.2.13. Vorkenntnisse
Der Umgang mit der Kommandozeile sollte Ihnen vertraut sein. Wir legen
uns nicht auf eine bestimmte Shell oder eine Terminalemulation fest.
Alle Beispiele wurden unter bash
getestet, funktionieren aber auch
unter anderen Shells, wie z.B. der zsh
(Axel nutzt auf einigen seiner
Systeme die zsh
als Login-Shell für den Benutzer root
, wie es auch
auf der Linux-Live-CD Grml gehandhabt wird). Die von uns ausgewählten
und hier abgedruckten Ausgaben im Terminal sind unabhängig von der
verwendeten Shell.
Graphische Werkzeuge spielen hier nur eine untergeordnete Rolle. Sie kommen nur dann zum Einsatz, wenn etwas nicht anders möglich ist oder es um genau deren Besonderheiten geht. Wir gehen davon aus, dass Sie auf einem Serversystem arbeiten und dieses ggf. sogar aus der Ferne betreuen. In dieser Konstellation bilden graphische Werkzeuge die absolute Ausnahme.
Für Teil 1 (Konzepte) ist Linux-Grundwissen unabdingbar: neben der Arbeit auf der Kommandozeile also auch grundlegende Kenntnisse über den Filesystem Hierarchy Standard (FHS), der die Struktur der Hauptverzeichnisse und deren Inhalte definiert (siehe dazu [FHS-Linux-Foundation] und [Debian-Wiki-FHS]).
Teil 2 (Werkzeuge) bespricht neben Strukturen zur Paketverwaltung alle Paketoperationen im Alltag und setzt dafür zumindest das Wissen aus Teil 1 voraus. Um manche Beispiele oder vorgestellte Konzepte leichter nachvollziehen zu können, ist mehrjährige Erfahrung mit Linux oder als UNIX-Systemadministrator von Nutzen.
Teil 3 (Praxis) beleuchtet ausschließlich konkrete, komplexere Anwendungsfälle aus dem Alltag. Voraussetzung dafür ist eine Vertrautheit mit den Werkzeugen zur Paketverwaltung, da es in diesem Abschnitt „ans Eingemachte“ geht.
Hilfreich sind darüber hinaus Englischkenntnisse: Viele Bildschirmausgaben erscheinen in englischer Sprache, nicht zuletzt weil die Lokalisierung der einzelnen Pakete bislang unvollständig ist. Die verwendeten Ausgaben auf dem Bildschirm und die Screenshots stammen hierbei von ganz unterschiedlichen Linux-Varianten und Veröffentlichungen — Debian GNU/Linux, Ubuntu, Xubuntu und Linux Mint. Die dabei eingestellten Lokalisierungen sind Deutsch oder Englisch.
Sie müssen auf Ihrem System über administrative Benutzerrechte
verfügen, um einen Großteil der Beispiele nachvollziehen zu können. Wir
weisen nicht jedes Mal explizit darauf hin
[Sie erlangen
diese Berechtigung je nach Konfiguration Ihres Systems über die Kommandos
su
oder sudo
– oder indem Sie sich als Benutzer root
auf Ihrem
System anmelden.]
. In den Beispielen für die Kommandozeile erkennen Sie
anhand des verwendeten Prompt-Zeichens, ob dafür administrative Rechte
notwendig sind oder nicht: #
bedeutet hierbei ja und $
bedeutet nein.
Auf Ausnahmen weisen wir Sie an der betreffenden Stelle explizit hin.
Auch wenn dpkg
, APT und aptitude
stabil und zuverlässig
funktionieren – gerade in der Rolle und mit den Berechtigungen eines
Administrators können falsche Befehle viel kaputt machen. Wir empfehlen
Ihnen darum, die vorgestellten Beispiele zunächst auf einem separaten
Testsystem auszuprobieren – sei dies ein eigener Rechner, eine
virtuelle Maschine oder auch nur eine chroot
-Umgebung
[Debian-Wiki-chroot].
Dabei spielt es kaum eine Rolle, welches APT-basierte System Sie verwenden. Begonnen haben wir das Buch zu dem Zeitpunkt, als Debian 7 Wheezy die stabile Debian-Veröffentlichung war. Daher stammen viele Beispiele im Buch aus diesem Zeitraum. Spätere Inhalte setzen auf den Nachfolgern Debian 8 Jessie, Debian 9 Stretch, Debian 10 Buster, Debian 11 Bullseye und Debian 12 Bookworm auf. Alle Ausnahmen sind entsprechend gekennzeichnet, bspw. wenn wir zur Illustration auf ein Derivat wie Ubuntu zurückgegriffen haben.
1.2.14. Und das können Sie nach der Lektüre …
Haben Sie das Buch gelesen und die Beispiele am Rechner nachvollzogen, verfügen Sie über profunde Kenntnisse in der Paketverwaltung unter Debian GNU/Linux. Dazu gehört:
-
Debian-Pakete sauber verwalten, d.h. installieren, aktualisieren und löschen
-
kleinere und mittlere Debian-basierte Infrastrukturen pflegen
-
die richtigen Werkzeuge für die Pflege benutzen und mit der Paketverwaltung sowie den Werkzeugen effektiv umgehen
-
nicht nur die Software verwenden, sondern auch wissen, warum etwas funktioniert
-
Pakete und Software nach Wunschkriterien finden
-
alternative Auflösungen für Paketabhängigkeiten finden, verstehen und anwenden
All dies qualifiziert Sie für das entsprechende Lernziel einer Linux-Zertifizierung. Darüber hinaus schaffen Sie sich damit die Grundlagen, um später eigene und fremde Pakete zu bauen und die Paketierung für Debian durchzuführen. Das ist zugleich eine Voraussetzung, um später auch als Debian-Paket-Maintainer agieren zu können [Debian-Wiki-Debian-Entwickler].
1.2.15. Buchinfo
Wir pflegen eine buchbegleitende Webseite unter der URL:
Darauf finden Sie neben einer Liste der Errata und deren Korrekturen auch inhaltliche Ergänzungen und Aktualisierungen. Natürlich freuen wir uns auch über Ihre Fragen und Anmerkungen!
1.3. Danksagung
Etliche Menschen haben uns bei der Realisierung dieses Buches direkt oder indirekt unterstützt, sei es in Form von Anregungen, Kritik, Vorschlägen zur Ergänzung oder Fach- und Verständnisfragen. Diesen Menschen gebührt unser Dank:
-
Elmar Heeb (für
aptitude-robot
und viele interessante Diskussionen) -
Dirk Deimeke (für Tipps zum Autor-Werden) [Hackerfunk]
-
Arne Wichmann (für das Diagramm der Vertrauenskette in Debian – unter GPL)
-
Annette Kalbow (für inhaltliche Vorschläge mit
apt-file
,dpkg -l
,dpkg -L
unddpkg -x
, die graphische Umsetzung der Landkarte, die vielen Anregungen zum Aufsetzen und Betreiben eines Proxies (siehe [http-proxy]) sowie dem Thema „Kryptographische Signaturen in Debian-Repositories“ -
Mechtilde Stehmann (für die Sprachkorrekturen und die Vorschläge für die FAQ)
-
Marco Uhl (für die Idee zum FAQ-Eintrag über Debian Snapshots [Debian-Snapshots] bei Testing- vs. Produktiv-Umgebung)
-
Werner Heuser (für die Installation und den Umgang auf Embedded und Mobile Devices)
-
Claude Becker (für Ideen, Korrekturlesen rund um das Parsen von Debian-Versionsnummern und APT-Pinning sowie Konsistenzprüfung)
-
Christoph Berg (für Tipps und Tricks rund um
reprepro
und seine Erfahrungen mitapt.postgresql.org
) [APT-Repo-PostgreSQL] -
Dr. Thomas Fricke (für Ergänzungen rund um die Verteilung von Paketen auf mehrere Maschinen)
-
Jens Wilke (Konfigurationsmanagement)
-
Martin Schütte (
reprepro
) -
Michael Vogt (für Erklärungen rund um APTs
mirror://
Methode und gdebi) -
David Kalnischkies (für viele Detailerklärungen – z.B. zur Parameterverarbeitung von
apt-get
– und die endlosen Diskussionen darüber, die dennoch meist irgendwann in Erleuchtung endeten) -
Albrecht Barthel (für die vielen Infos und Einblicke zum Univention Corporate Server, UCS)
-
Martin Venty Ebnöther (für ein weiteres paar Augen und Ohren zum Thema Paketmanagement)
-
Dr. Markus Wirtz für die lange Unterstützung und Hilfe, das Buch auf seinen Weg zu bringen, für den Klappentext sowie fürs Lektorat der Einleitung und dem erstem Kapitel.
-
Oliver Rath für seine Vorschläge zur besseren Lesbarkeit von Programmcode
-
Karsten Merker für viele kleine Korrekturen
-
Wolfram Schneider für den Hinweis zu
dh-make-perl
als spezialisierte Variante voncheckinstall
sowie zum Aktualisieren von LTS-Versionen (siehe [umgang-mit-lts]) -
Jörg Brühe für die Anregungen zu den Paketabhängigkeiten
-
Sebastian Andres für seine Anregungen zu Debian Backports
-
Gregor Herrmann für den Hinweis, das Buch auf Links zu alioth.debian.org-Webseiten hin zu überprüfen
-
Alf Gaida für Hinweise auf nicht shell-unabhängige Beispiele
-
Ingo Wichmann für die Hinweise zu den
rpm
- undyum
-Kommandos
Nicht zu vergessen sind die Probeleser, die sich durch unser Manuskript gekämpft haben: Arne Wichmann, Thomas Winde, Jana Pirat, Jörg Dölz, Hagen Sankowski und Eberhard Hofmann. Vielen Dank für Eure Mühe und Geduld!
Konzepte
1. Willkommen im Linux-Dschungel!
1.1. Was ist Debian?
Je nach Kontext bezeichnet „Debian“ entweder
-
das Debian-Projekt, also den Zusammenschluss von mittlerweile um die 1000 Entwicklern (Debian Developers, kurz: DD) weltweit, die das freie Betriebssystem gemeinsam entwickeln und veröffentlichen
oder
-
das vom Debian-Projekt entwickelte Betriebssystem „Debian GNU/Linux“ bzw. dessen Varianten. Dazu zählen derzeit auch Debian GNU/kFreeBSD [Debian-Wiki-Debian-GNUkFreeBSD] und Debian GNU/Hurd [Debian-Wiki-Debian-GNUHurd], die statt eines Linux-Kerns einen FreeBSD- bzw. GNU-Hurd-Betriebssystemkern nutzen.
Einer der Eckpunkte des vom Debian-Projekt entwickelten Betriebssystems ist die ausschließliche Verwendung freier Software. Dafür sind die Debian Free Software Guidelines (DFSG) [DFSG] maßgeblich, die im Debian-Gesellschaftsvertrag festgelegt sind [Debian-Social-Contract]. Sichtbar wird das auch darin, dass Pakete in den beiden Entwicklungszweigen contrib und non-free offiziell kein Bestandteil von Debian GNU/Linux sind. Genauer gehen wir darauf in [distributionsbereiche] ein.
Debian ist weder kommerziell noch profitorientiert. Das gesamte Projekt finanziert sich ausschließlich durch Spenden [Debian-Donations]. Dazu zählen nicht nur Geldspenden zufriedener Benutzer, sondern auch die Arbeitszeit von Entwicklern, Hardwarespenden oder das Betreiben eines Debian-Mirrors oder gar eines dedizierten Rechners für das Debian-Projekt.
Angestrebt wird ein universelles Betriebssystem, d.h. es gibt keinen Fokus auf einen spezifischen Einsatzbereich wie bei vielen Derivaten von Debian. Desweiteren werden dem Benutzer viele Entscheidungen selbst überlassen: Er muss – anders als z.B. in Ubuntu – wissen, was er möchte. Daher richtet sich Debian an zielorientierte, ambitionierte Einsteiger, Fortgeschrittene, Experten und Profis oder solche, die es wirklich werden wollen.
Debian stellt dafür ein ausgereiftes, stabiles und zuverlässiges
Betriebssystem inklusive aller Software dar. Es ist ein Betriebssystem,
das die Debian-Entwickler selbst benutzen wollen
[„The
project consists of a group of people who are working together to create
something that, primarily, we all want to use“
[Allbery-Debian-Popularity]]
. Daher unterstützt Debian viele
verschiedene Architekturen und ermöglicht eine einheitliche
Administration auf verschiedensten Plattformen (siehe
[debian-architekturen]). Ausführliches Testen und das Bereinigen von
Fehlern hat Vorrang vor brandaktueller Software.
Aus diesen Grundsätzen folgen weitere Eigenschaften, die sich insbesondere im Einsatzzweck von Debian und der Einordnung in die Distributionsvielfalt widerspiegeln. Die typischen Anwendungsbereiche sind Server, Systeme für die Infrastruktur sowie Low-End Systeme wie etwa die Hardware-Lernplattform Raspberry Pi [RaspberryPi]. Dennoch hat sich Debian (nicht nur bei den Autoren) auch einen festen Platz auf dem Desktop erobert.
Zudem leiten sich aus Debian sehr viele Derivate für ausgewählte Zielgruppen oder Einsatzzwecke ab, z.B. Ubuntu, Linux Mint, Knoppix, Grml oder Damn Small Linux (DSL). Einen vollständigen Überblick („Stammbaum“) erhalten Sie in [welche-unix-artigen-betriebssysteme-verwenden-das] sowie der GNU Linux Distribution Timeline [GNU-Linux-Distribution-Timeline].
1.2. Debian-Architekturen
Debian kommt mit den unterschiedlichsten Hardware-Architekturen zurecht. Die offizielle Liste der aktuell unterstützten Architekturen finden Sie auf der Debian-Webseite [Debian-Architekturen] sowie im Anhang dieses Buches (siehe [anhang-offizielle-debian-architekturen]). Neben den veralteten Architekturen (siehe [anhang-veraltete-debian-architekturen]) werfen wir auch einen Blick in die Zukunft (siehe [anhang-debian-architekturen-zukunft]).
Nicht alle „Architekturen“ sind wirklich nur von der Hardware-Architektur abhängig, auf der die Programme einsetzbar sind, sondern auch von weiteren Punkten. Dazu zählen etwa der Betriebssystemkern, wie Linux, GNU Hurd [Hurd] oder FreeBSD [FreeBSD], aber auch die Art, wie die Programme kompiliert wurden (Application Binary Interface, kurz ABI). Daher bezeichnen Entwickler dies als Portierung (Port) und sich selbst als Porters. Hier verwenden wir durchgängig den Begriff Architektur, da das entsprechende Feld in den Metadaten eines Pakets (siehe [debian-paketformat-im-detail]) architecture heißt und Debian selbst die Begriffe bislang nicht konsistent verwendet.
Eine vollständige Liste der von dpkg
verstandenen Architekturen gibt
Ihnen der Aufruf dpkg-architecture -L
im Terminal aus. Viele der in
der Ausgabe des Kommandos genannten Architekturen existieren allerdings
nur in der Theorie und zeigen auf, welche Möglichkeiten bestehen.
dpkg
unterstützt (Ausschnitt)$ dpkg-architecture -L
uclibc-linux-armel
uclibc-linux-alpha
uclibc-linux-amd64
m68k
sparc
sparc64
...
$
Die Übersicht der Architekturen im Anhang (siehe [anhang-debian-architekturen]) beschreibt die einzelnen Architekturen näher. Die verwendeten Bezeichnungen in Klammern geben dabei das entsprechende GNU-Triplet an, sofern dieses bekannt ist. Das GNU-Triplet besteht aus der Hardware-Plattform, dem Kernel und dem ABI.
Mit Hilfe des Perl-Moduls Dpkg::Arch
ermitteln Sie diese Bezeichnungen
im Handumdrehen selbst. Nachfolgend sehen Sie einen Aufruf für die
Plattformen PPC64, PowerPC-spe, Arm, Armel und Armhf.
$ perl \
-MDpkg::Arch=debarch_to_gnutriplet \
-E 'map { say "$_ = ".debarch_to_gnutriplet($_) } @ARGV' \
ppc64 powerpcspe arm armel armhf
ppc64 = powerpc64-linux-gnu
powerpcspe = powerpc-linux-gnuspe
arm = arm-linux-gnu
armel = arm-linux-gnueabi
armhf = arm-linux-gnueabihf
$
1.2.1. Debian-Ports-Projekt
Das Debian-Ports-Projekt [Debian-Ports-Projekt] stellt die Infrastruktur für APT-Archive und automatisiertes Bauen von Paketen für Architekturen bereit, die Debian noch nicht oder nicht mehr unterstützt. Typischerweise gibt es dort nur zwei Kategorien von Veröffentlichungen: unstable und unreleased. Ersteres sind die gleichen Pakete wie in Debian unstable, nur wurden diese aus demselben Quellcode für diese spezifische Architektur übersetzt. Letzteres sind speziell für diese Architektur entwickelte oder modifizierte Pakete, die in den offiziellen APT-Archiven von Debian auch nicht im Quellcode zu finden sind.
In gewisser Weise stellt das Debian-Ports-Projekt dadurch gleichzeitig den Kreißsaal und das Altersheim für Debian-Architekturen dar – Anfang und Ende.
1.2.2. Pakete für alle Architekturen
Neben den bereits genannten Architekturen gibt es noch Pakete mit dem Eintrag all. Dies sind architekturunabhängige Pakete und Sie können diese auf beliebigen Architekturen installieren.
Dazu zählen z.B. Pakete von Programmen, die vollständig in den Skriptsprachen Perl, Python, Ruby oder Tcl geschrieben wurden. Ebenfalls gehören zu dieser Gruppe Pakete, die lediglich Daten enthalten, die auf jeder Architektur identisch sind. Das betrifft z.B. Bilder, Musik und Dokumentation.
$ dpkg -l | fgrep " all" | head -5
ii abiword-common 3.0.0-8 all
efficient, featureful word processor with collaboration -- common files
ii acpi-support-base 0.142-6 all
scripts for handling base ACPI events such as the power button
ii adduser 3.113+nmu3 all
add and remove users and groups
ii adwaita-icon-theme 3.14.0-2 all
default icon theme of GNOME
ii aglfn 1.7-3 all
Adobe Glyph List For New Fonts
...
$
1.2.3. Multiarch: Mehrere Architekturen gleichzeitig auf einem System
Seit etwa 2004 läuft unter den Debian-Entwicklern die Diskussion um den Support für multiarch [Debian-Wiki-multiarch]. Unterstützung dafür gibt es in Debian seit Version 7 Wheezy und in Ubuntu seit Version 11.10 Oneiric Ocelot. Es beschreibt zwei Dinge:
-
Systeme, auf denen Sie Pakete unterschiedlicher Architekturen nebeneinander benutzen können.
-
Architekturspezifische Pakete, die explizit auf mehreren Architekturen installierbar sind.
Die Gründe für diese Mischung sind vielfältig:
-
die Existenz von Systemen mit (nahezu) identischen Prozessorbefehlen (Instruction Set), aber unterschiedlicher Verarbeitungsbreite. Dazu zählen z.B. i386/x86_64, ppc/ppc64, sparc/sparc64 und s390/s390x. Unterstützung hierfür gibt es bei RedHat/Fedora unter dem Namen biarch bereits länger [biarch].
Dies ist insbesondere relevant bei proprietärer, nicht-quelloffener Software, die für 32-Bit-Linux kompiliert wurde, aber auf einem 64-Bit-System installiert bzw. verwendet werden soll.
-
Systeme, die gemischte Prozessorbefehle unterstützen – entweder als Emulation in Hardware oder per Software. Dazu gehören z.B. i386/ia64 mittels Hardware-Emulation und arm/jede Plattform (via Qemu Userland-Emulation).
-
gemischte Betriebssystemumgebungen. Darunter fallen die Verwendung und Ausführung von Binärcode anderer Plattformen über eine Kompatibilitätsebene. Beispiele dafür sind Linux/i386 auf FreeBSD/i386 und Solaris/sparc auf Linux/sparc.
-
Cross-Kompilieren. Darunter fällt das Übersetzen von Programmcode für eine andere Zielplattform.
Um diese Eigenschaft zu ermöglichen, bedarf es z.T. erheblicher Änderungen in den Übersetzungswerkzeugen und der Integration von Daten in der Dateistruktur. Dieser Vorgang ist bislang noch nicht vollständig abgeschlossen.
Benötigen Sie Pakete von einer anderen Architektur — bspw. ein
i386-Paket (32 bit) auf einer amd64-Installation (64 bit) — ist
diese parallele Installation und Benutzung der Software durchaus
möglich. Wir zeigen Ihnen in [multiarch-einsetzen], wie Sie diesen
Schritt mit dpkg
und apt
erfolgreich bewerkstelligen.
1.2.4. Bevor es Multiarch gab
Wie oben bereits beschrieben, ist einer der Gründe hinter multiarch das Nutzen bereits kompilierter 32-Bit-Software auf 64-Bit-Systemen. Der Bedarf hierfür war auch schon vor der Entstehung von multiarch sehr groß.
Der Aufwand, alle üblicherweise genutzten Shared Libraries (zu dt.:
gemeinsam genutzte Bibliotheken) der 32-Bit-Architektur i386 zusätzlich
auch noch als eigenes amd64-Binärpaket anzubieten, ist immens. Pakete
dieser Form tragen üblicherweise das Präfix ia32- im Paketnamen. Vor
der Entstehung von multiarch wurden daher alle notwendigen
32-Bit-Bibliotheken in ein einziges amd64-Binärpaket namens
ia32-libs
[Debian-Paket-ia32-libs] gepackt. Dieses Paket umfasste am
Ende etwa stolze 800 MB und wurde in regelmäßigen Abständen mit den
Sicherheitsaktualisierungen der entsprechenden Bibliotheken
aufgefrischt.
Allein die Pflege dieses Pakets war schon recht mühsam. Ab der Einführung von multiarch wurde es gegenstandslos. Darum ist es in Debian 7.0 Wheezy ein (leeres) Übergangspaket auf die passenden multiarch-fähigen Einzelpakete der Architektur i386. In Debian 8 Jessie ist es bereits nicht mehr enthalten, auch wenn man selbst heutzutage hier und da noch Pakete von Drittparteien findet, die davon abzuhängen scheinen.
1.3. Vom tar.gz
zur Linux-Distribution
Der Begriff Linux-Distribution bezeichnet die Zusammenfassung von Softwarepaketen aus unterschiedlichen Quellen und deren gemeinsame Verteilung unter einem Distributionsnamen. Einen hohen Bekanntheitsgrad haben heute z.B. RedHat/Fedora, Debian, SuSE-Linux, Ubuntu, Knoppix und Linux Mint erreicht.
Die Vorteile einer Distribution liegen klar auf der Hand: aktuelle, stabile Versionen der Programme und insbesondere die Abstimmung der einzelnen Pakete aufeinander. Letzteres leistet der Distributor und nimmt damit Ihnen als Nutzer erhebliche Arbeit ab. Sie können sich darauf konzentrieren, die Distribution bzw. die Programme daraus zu verwenden.
Die ersten Linux-Distributionen entstanden zu Beginn der 1990er Jahre.
Zu den Pionieren zählen Yggdrasil, SLS, Slackware, SuSE, RedHat und
Debian. Bis dahin gab es kaum spezifische Pakete für jedes System –
jeder Anwender passte die Software nach seinen eigenen Bedürfnissen an
und pflegte diese Version dann kontinuierlich weiter. Zumeist waren das
einfache tar.gz
-Archive, die von Hand ergänzt und vorrangig für das
eigene System übersetzt wurden.
Ein automatisiertes Verwalten der Software war zu diesem Zeitpunkt noch nicht möglich, weil die Strukturen nicht erdacht und umgesetzt waren. Abhängigkeiten der Software ließen sich nicht automatisch auflösen. Als Benutzer mussten Sie einerseits wissen, welche Software einander bedingte, und andererseits, welche Versionen und Varianten sich miteinander vertrugen. Namensgleiche Dateien und Verzeichnisse waren problematisch. Die große Kunst bestand im Wissen, in welcher Reihenfolge Sie zueinander passende Versionen von Software zunächst auswählen und diese nachfolgend auf Ihrem Linuxsystem installieren und konfigurieren mussten.
1.4. Debians Paketsystem
Aus diesen Erfahrungen heraus startete 1993 das Debian-Projekt unter Ian
Murdock [Debian-History] mit einer revolutionären Idee: dem
Bereitstellen kompilierter, vorkonfigurierter und sauber aufeinander
abgestimmter Softwarepakete. Es folgte die Entwicklung von dpkg
,
welches bis heute ein robuster Grundstein des Systems geblieben ist.
Dabei steht d für Debian und pkg für Package. Das verwendete
deb
-Paketformat und die dazugehörigen Werkzeuge wurden später von
etlichen Linux-Distributionen übernommen. Ausführlicher beleuchten wir
diesen Aspekt in [welche-unix-artigen-betriebssysteme-verwenden-das].
Bald aber stieß das Werkzeug dpkg
an Grenzen: Es installiert lediglich
deb
-Pakete, löst aber die Abhängigkeiten zwischen einzelnen Paketen
nicht automatisch auf. Zudem muss das Paket bereits lokal vorliegen,
d.h. dpkg
kann es nicht direkt aus einem FTP- oder HTTP-Archiv
beziehen.
Daraufhin begann die Entwicklung von dselect
, welches aus dem
Quellcode von dpkg
gebaut wird, aber als eigenständiges Programm
gilt. Später folgten console-apt
(inzwischen aufgegeben) und
tasksel
(siehe [tasksel]), ab 1998 APT (Advanced Packaging Tool)
sowie ab 1999 aptitude
als Ncurses-basierte Oberfläche für dpkg
.
dselect
wurde später weiterentwickelt und konnte somit auch APT als
Backend benutzen.
Dabei lag die Zielrichtung auf der konsequenten Anwendung des
UNIX-Prinzips „Ein Werkzeug für eine Aufgabe“. Das zeigt sich
insbesondere darin, dass sich APT und aptitude
an dpkg
andocken und
die verfügbaren Funktionen integrieren, indem die Programme bereits
bestehende dpkg
-Bibliotheken mitnutzen. Weitere Details dazu finden
Sie in [softwarestapel-und-ebenen].
Heute stehen weitere textbasierte und graphische Benutzeroberflächen für
dpkg
zur Verfügung. Neben aptitude
sind das Synaptic (siehe
[gui-synaptic]), PackageKit (siehe [gui-packagekit]) – als Basis für
Gnome-PackageKit und Apper bei KDE – sowie Muon (siehe [gui-muon]),
PackageSearch (siehe [debtags-werkzeuge]) und SmartPM (siehe
[gui-smartpm]). Einen genaueren Blick werfen wir auf diese Programme in
[werkzeuge-zur-paketverwaltung].
1.5. Welche UNIX-artigen Betriebssysteme verwenden das Paketformat und das APT-Paketmanagement
Debian-Binärpakete liegen in einem spezifischen Format vor – dem
deb
-Paketformat. Sowohl das Format, als auch die dazugehörigen
Werkzeuge haben innerhalb der letzten 20 Jahre bei weitaus mehr
UNIX-artigen Betriebssystemen Einzug gehalten, als es auf den ersten
Blick zu vermuten wäre.
Vereinfacht gesagt, basiert praktisch jedes Debian-Derivat auf den beiden Konzepten. Die Übersicht in [paketformat-im-einsatz] zeigt eine Auswahl, jeweils ergänzt um den spezifischen Einsatzbereich. Bis auf den Univention Corporate Server (UCS) sind alle der genannten Derivate kostenfrei verfügbar.
2. Software in Paketen organisieren
2.1. Was ist Paketmanagement
Paketmanagement beschreibt die geordnete Verwaltung der einzelnen Softwarepakete auf ihrem System. Ziel ist dabei, dass Ihr Linux-System funktionstüchtig und benutzbar bleibt, insbesondere wenn Sie vorhandene Software aktualisieren, entfernen oder auch neue Software ergänzen.
Es umfasst daher nicht nur den Abgleich der lokalen Paketdatenbank mit den eingetragenen Paketverzeichnissen (Repositories), sondern auch die Auflistung der verfügbaren und derzeit verwendeten Pakete mit deren jeweiligen Statusinformation. Dazu gehört etwa die Paketbeschreibung, ob das Paket vollständig installiert ist und, falls ja, welche Version derzeit verwendet wird.
Weiterhin zählt zum Paketmanagement die automatische Auflösung von
Paketabhängigkeiten. Das vereinfacht die Benutzung erheblich, da Sie die
einzelnen Abhängigkeiten der Pakete nicht vorab recherchieren müssen.
Diese Abhängigkeiten beeinflussen den lokalen Paketbestand und die
Reihenfolge notwendiger Änderungen beim Hinzufügen, Aktualisieren oder
Entfernen einer Paketauswahl. Daran schließen sich die plattform- und
hardwarespezifische Konfiguration vor und nach der Installation von
Paketen über die sogenannten Maintainer-Skripte an, die dpkg
automatisch anstößt. Mehr Informationen dazu finden Sie in
[aufbau-und-format].
Die Distribution selbst bzw. die verantwortlichen Paketmaintainer
kümmern sich bei der Übersetzung und Bereitstellung der Pakete darum,
dass die nachfolgende Zusammenstellung der Paketliste harmonisch ist und
die verschiedenen Versionen der einzelnen Softwarepakete aufeinander
abgestimmt sind. Jedes deb
-Paket verfügt über eine Beschreibung in
Textform sowie eine Liste der Pakete, von denen es abhängt – bei Bedarf
sogar samt Versionsangabe.
Die Aktualisierung einer bereits bestehenden, installierten Softwareversion durch eine andere Version beinhaltet i.d.R. eine fehlerbereinigte oder erweiterte Variante des Programms. Das kann eine individuelle Sicherheitsaktualisierung sein, das Installieren eines sogenannten Debian Backports, d.h. eine neuere Paketversion wird für eine vorherige Veröffentlichung zurückportiert, aber auch im Rahmen einer Aktualisierung auf eine neue Veröffentlichung der Distribution (siehe [veroeffentlichungen]) stattfinden. Dass letzteres überhaupt möglich ist, ist noch lange nicht bei allen Distributionen selbstverständlich. Lange Zeit war dies ein Alleinstellungsmerkmal von Debian und auch heute noch bieten einige Debian-Derivate diese Eigenschaft nicht. Gleiches gilt für den Wechsel auf eine zurückliegende Softwareversion, einen sogenannten Downgrade. Dies wird allerdings auch bei Debian nicht explizit unterstützt, funktioniert aber dennoch in den meisten Fällen.
Im Detail erklären wir Ihnen die Thematik unter Pakete aktualisieren (siehe [pakete-aktualisieren]), Distribution aktualisieren (siehe [distribution-aktualisieren]), Paket downgraden (siehe [pakete-downgraden]) und dem Debian Backports Archiv (siehe [debian-backports]).
Nachfolgende Ausgaben zeigen zweierlei – die Liste aller Pakete am
Beispiel von dpkg
und die ausführliche Übersicht auf der Basis von
apt-cache
. Ersteres listet alle installierten Pakete zur
Textverarbeitung Abiword auf. Ersichtlich ist der Installationsstatus
(erste Spalte), der Paketname und die Paketversion (zweite und dritte
Spalte) sowie eine Paketbeschreibung (vierte Spalte). Auf das Werkzeug
dpkg
gehen wir en detail in den beiden Abschnitten Softwarestapel und
Ebenen ([softwarestapel-und-ebenen]) und dpkg ([dpkg]) ein.
dpkg
$ dpkg -l "abiword*"
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name Version Architektur Beschreibung
+++-===================-==============-==============-============================================
ii abiword 2.9.2+svn20120 i386 efficient, featureful word processor with co
ii abiword-common 2.9.2+svn20120 all efficient, featureful word processor with co
ii abiword-plugin-gram 2.9.2+svn20120 i386 grammar checking plugin for AbiWord
ii abiword-plugin-math 2.9.2+svn20120 i386 equation editor plugin for AbiWord
$
In Beispiel zwei nutzen wir apt-cache
mit dem Parameter showpkg
, um
weitere Details zum Paket abiword-common zu erhalten. Neben der
Versionsnummer sind auch die Paketquelle, die Paketsignaturen sowie die
Abhängigkeiten zu weiteren Paketen genannt. Die Pakete stammen aus dem
main-Zweig von Debian 7 Wheezy, sind für die Architektur i386 kompiliert
und wurden vom deutschen FTP-Server des Debian-Projekts bezogen. Die
einzige Abhängigkeit besteht zum Paket abiword.
apt-cache
$ apt-cache showpkg abiword-common
Package: abiword-common
Versions:
2.9.2+svn20120603-8 (/var/lib/apt/lists/ftp.de.debian.org_debian_dists_wheezy_main_binary-i386_Packages) (/var/lib/dpkg/status)
Description Language:
File: /var/lib/apt/lists/ftp.de.debian.org_debian_dists_wheezy_main_binary-i386_Packages
MD5: 168081fc8391dc5eb8f29d63bb588273
Description Language: de
File: /var/lib/apt/lists/ftp.de.debian.org_debian_dists_wheezy_main_i18n_Translation-de
MD5: 168081fc8391dc5eb8f29d63bb588273
Description Language: en
File: /var/lib/apt/lists/ftp.de.debian.org_debian_dists_wheezy_main_i18n_Translation-en
MD5: 168081fc8391dc5eb8f29d63bb588273
Reverse Depends:
abiword,abiword-common 2.9.2+svn20120603-8
Dependencies:
2.9.2+svn20120603-8 -
Provides:
2.9.2+svn20120603-8 -
Reverse Provides:
$
2.2. Varianten und Formate für Softwarepakete
Auf Linux-Systemen herrscht in Bezug auf das Paketformat keine
Einheitlichkeit. Jede Linux-Distribution legt selbst fest, welches
Paketformat sie verwendet. Zwei dieser Formate haben eine sehr hohe
Verbreitung erlangt – rpm
und deb
. Slackware Linux nutzt hingegen
ein schlichtes tar
-Archiv, welches entweder mit gzip
oder ab Release
13 mit xz
komprimiert wird (siehe [tab.paketformate]).
Abkürzung | Format | in Verwendung | Distribution |
---|---|---|---|
|
Debian-Paketformat |
seit 1993 |
Debian, Ubuntu, Grml, Knoppix, Linux Mint … |
|
Redhat Package Manager |
seit 1995 |
RedHat/Fedora, CentOS, Mandrake/Mandriva/Mageia, SuSE/openSUSE, … |
|
Android-Paketformat |
seit 2003 |
Android |
|
Itsy Package Management System, Vorbild |
2001 bis 2006 |
Unslung, OpenWrt, OpenMoko, webOS, Gumstix, iPAQ, QNAP (als Plugin), Synology (als Zusatz) |
|
OpenMoko Package Management System, |
seit 2006 |
OpenMoko, OpenWrt, OpenZaurus, OpenEmbedded |
|
Pacman |
seit 2002 |
Arch Linux |
|
mit |
seit 1993 (2009) |
Slackware |
Seit 2007 bestehen Containerformate, die insbesondere mit VirtualBox und Docker populär wurden. Ziel ist, in diesen Containern bereits fertig installierte Anwendungen bereitzustellen. Dazu zählen bspw. die Formate Flatpak, OpenContainers, Linux Containers (LXC), Snappy und VirtualBox (VDI) (siehe [Docker], [Flatpak], [OpenContainer], [LXC], [Ubuntu-Snappy-Projekt] und [VirtualBox]).
Abkürzung | in Verwendung | Distribution | Name des Debianpakets |
---|---|---|---|
Docker |
seit 2014 |
Debian, Ubuntu, RedHat/Fedora, openSUSE, CentOS |
docker [Debian-Paket-docker] |
Flatpak |
seit 2015 |
RedHat/Fedora, Ubuntu, CentOS |
flatpak [Debian-Paket-flatpak] |
Linux Containers (LXC) |
seit 2008 |
Debian, Ubuntu, RedHat/Fedora, CentOS |
|
OpenContainers |
seit 2015 |
Debian, Ubuntu, RedHat/Fedora, CentOS |
oci-image-tool [Debian-Paket-oci-image-tool] |
Snappy |
seit 2015 |
Ubuntu |
nicht vorhanden |
VirtualBox (VDI) |
seit 2007 |
Debian, Ubuntu, RedHat/Fedora, openSUSE, CentOS, Oracle Linux |
virtualbox (kein offizielles Debianpaket) |
Ändern Sie den Paketbestand auf Ihrem System durch eine Installation, Aktualisierung oder das Löschen eines oder mehrerer Pakete, ist in der Regel kein Neustart des gesamten Systems erforderlich. Die Paketpflege erfolgt bei laufendem System. Nach der Paketpflege ist üblicherweise lediglich der dazugehörige Dienst neu zu starten. Im Normalfall passiert dies heutzutage in den Maintainer-Skripten des Pakets und wird von der Paketverwaltung automatisch angestoßen. Mehr Informationen zu den Maintainer-Skripten finden Sie unter „Aufbau und Format eines Debianpakets“ in [aufbau-und-format].
2.3. Softwarestapel und Ebenen
2.3.1. Ebenen
Die Paketverwaltung kann man leicht in zwei Ebenen aufteilen. Dabei wird jede Ebene durch eine Reihe von Programmen und Bibliotheken repräsentiert (siehe [fig.werkzeugebenen]).
deb
-basierten Paketverwaltung2.3.2. Untere Ebene
Die Basis bildet dpkg
. Dessen Aufgabe ist es a) ein bereits lokal
vorliegendes deb
-Paket auszupacken und auf dem System einzuspielen und
b) die Inhalte eines bereits installierten deb
-Pakets wieder aus dem
System zu entfernen. Ersteres entspricht dabei dem Kommandozeilenaufruf
dpkg -i
Paketdatei, das zweite hingegen dpkg -r
Paketdatei
(siehe [pakete-installieren] und [pakete-deinstallieren]).
Für Statusabfragen zu einem einzelnen Paket stützt sich dpkg
auf die
beiden Hilfsprogramme dpkg-deb
und dpkg-query
. Dazu gehören bspw.
die Schalter -c
und -L
zum Anzeigen des Inhalts eines Pakets (siehe
[paketinhalte-anzeigen-apt-file]) sowie -l
zur Auflistung der
installierten Pakete (siehe [liste-der-installierten-pakete-anzeigen-und-deuten]),
-s
zum Erfragen des Paketstatus (siehe [paketstatus-erfragen]) und
-S
, um das Paket zu finden, in dem eine bestimmte Datei vorkommt
(siehe [paket-zu-datei-finden]).
Mit dpkg
können Sie Ihre Pakete verwalten und das System vollständig
pflegen. Jedoch müssen Sie sich dann aber selbst um alle
Komfortfunktionen kümmern. dpkg
prüft nur, ob alle Abhängigkeiten zu
anderen Paketen erfüllt sind und beendet im Fehlerfall die Aktion. Es
nimmt Ihnen weder die automatische Auflösung von Paketabhängigkeiten,
noch die richtige Reihenfolge bei der Installation der Pakete ab. Diese
Mühe erleichtern Ihnen die Werkzeuge der oberen Ebene.
Tipp
|
Paketverwaltung bei anderen Linux-Distributionen
Das Analogon zu |
2.3.3. Obere Ebene
Bei deb
-basierten Distributionen besteht die obere Ebene
typischerweise aus dem Werkzeug APT (siehe [apt]). Häufig ist
mindestens eines der weiteren Programme wie aptitude
(siehe
[aptitude]), Synaptic (siehe [gui-synaptic]), Muon (siehe [gui-muon]) oder
auch PackageKit (siehe [gui-packagekit]) installiert. Die Auswahl
variiert und hängt von der von Ihnen gewählten Linux-Distribution und
ihren Vorlieben ab.
Alle diese Programme übernehmen die Aufgabe, Ihnen die Installation und die Aktualisierung der einzelnen Programmpakete auf Ihrem System zu vereinfachen und unter möglichst einer Benutzeroberfläche zusammenzufassen. Konkret gehört dazu die Aktualisierung der Liste von Paketen aus den Paketquellen, der Auflösung der Paketabhängigkeiten und die Berechnung der Installationsreihenfolge der von Ihnen ausgewählten Pakete.
Bei der Erfüllung ihrer Aufgaben stützen sich die Programme einerseits
auf die beiden Bibliotheken libapt-inst
und libapt-pkg
(siehe
[apt-und-bibliotheken]) und andererseits auf die Werkzeuge aus der
unteren Ebene, d.h. vor allem auf dpkg
. Es übernimmt die eigentliche
Installation, Entfernung oder Aktualisierung (siehe untere Ebene).
Sichtbar wird dies insbesondere, wenn Sie ein Paket mit apt-get
oder
aptitude
installieren. Einen Teil der Ausgaben auf dem Terminal
steuern dpkg
und die o.g. Bibliotheken bei.
2.3.4. Paketformate und -werkzeuge anderer Distributionen
Bei rpm
-basierten Distributionen RedHat, Fedora und CentOS heißen die
Werkzeuge Yellowdog Updater Modified (YUM) [YUM], bei SuSE und
openSUSE Zypper [Zypper] und Yet another Setup Tool (YaST). Mageia
Linux und Rosa Linux nutzen hingegen urpmi
[Mageia-urpmi].
rpmdrake
[rpmdrake] setzt auf urpmi
auf und ist das Pendant zum
graphischen Werkzeug Synaptic. Aufgrund der einfachen Benutzbarkeit wird
es häufig Einsteigern empfohlen.
2.3.5. Werkzeuge, die verschiedene Paketformate unterstützen
Darüber hinaus gibt es Programme, die mit mehreren unterschiedlichen
Paketformaten umgehen können. Dazu zählen Muon (siehe [gui-muon]), der
Smart Package Manager (SmartPM) (siehe [gui-smartpm]) und PackageKit
(siehe [gui-packagekit]). Muon und SmartPM können die Paketformate
deb
, rpm
und tar.gz
(Slackware) verarbeiten sowie die bereits oben
genannten Verwaltungen APT, YUM und urpmi
ansprechen. Weitere
Informationen dazu finden Sie unter „Frontends für das
Paketmanagement“ in [frontends-fuer-das-paketmanagement].
2.4. Alternativen zu APT
APT mit apt-get
und apt-cache
ist erprobt, zuverlässig und daher
weit verbreitet. Dennoch gibt es Programme, die die gleichen
Funktionalitäten wie APT implementieren. Dabei gibt es verschiedene
Kategorien von Alternativen:
- Alternative Benutzerschnittstellen
-
Hierzu zählen u.a. die im Buch vorgestellten Programme
aptitude
, Muon, Synaptic und wajig (siehe [aptitude], [gui-muon], [gui-synaptic] und [wajig2]). Diese setzen auf den APT-Bibliotheken auf und sind nur Alternativen zu den Kommandozeilentoolsapt-get
undapt-cache
, nicht aber zu APT als Ganzes. - Vorgänger
-
Bevor es APT gab und an Popularität gewann, wurden Paketlisten und Pakete mit
dselect
heruntergeladen (Recherchen ergaben etwa das Jahr 1998).dselect
ist Bestandteil desdpkg
-Projekts und wird heute noch aus den Quellen vondpkg
gebaut. Allerdings benutzt es für viele Funktionalitäten mittlerweile ebenfalls APT als Backend, insbesondere für das Herunterladen von Paketen.dselect
hat heute keine Relevanz mehr (liegt quasi im Wachkoma) und wird daher im Buch nicht weiter besprochen. - Potentielle Nachfolger
-
APT ist nicht mehr ganz jung, und es wurden in der Vergangenheit Design-Entscheidungen getroffen, welche aus heutiger Sicht eher als weniger gelungen gelten, sich aber nicht mehr oder zumindest nur mit sehr viel Aufwand korrigieren lassen. Eugene V. Lyubimkin war einer der APT-Entwickler und hat sich aus o.g. Grund aus der APT-Entwicklung zurückgezogen und eine Re-Implementierung von APT namens Cupt [Debian-Wiki-cupt] geschrieben (siehe [Cupt]).
2.5. Zusammenspiel von dpkg und APT
Wie bisher gezeigt wurde, bauen dpkg
, APT und Freunde aufeinander
auf. Dabei gibt es eine Reihe von Bibliotheken und weiteren Programmen,
die zur Nutzung dieser Werkzeuge ebenfalls notwendig sind.
APT hängt vor allem von der aus dem APT-Quellcode gebauten Bibliothek libapt-pkg, von gnupg und debian-archive-keyring ab. libapt-pkg stellt eine Schnittstelle für den Zugriff auf die Debianpakete bereit (siehe „APT und Bibliotheken“ in [apt-und-bibliotheken]). Die beiden anderen Pakete werden hingegen für die Validierung von digitalen Signaturen benötigt (siehe „Bezogenes Paket verifizieren“ in [bezogenes-paket-verifizieren]).
dpkg
ist ein sog. essentielles Paket (siehe
[paket-prioritaet-und-essentielle-pakete]), hat also eher wenig
Abhängigkeiten. Die meisten davon sind selbst essentielle Pakete und
müssen daher nicht namentlich als Abhängigkeit in den Metadaten des
Pakets aufgeführt werden. Deshalb tauchen sie nur unter bestimmten
Umständen explizit in den Abhängigkeitslisten auf, z.B. wenn bestimmte
Einschränkungen bzgl. der Version bestehen.
Bei aptitude
und den meisten anderen Frontends ist dies anders, denn
diese sind alle um eine ganze Spur komplexer. Bei aptitude
kommt z.B.
noch die Benutzeroberfläche auf der Basis von Ncurses [Ncurses] hinzu.
[fig.apt-dot], [fig.dpkg-dot] und [fig.aptitude-dot] zeigen die
minimalen Paketabhängigkeiten für APT, dpkg
und aptitude
in
graphischer Form.
dpkg
aptitude
und APTDie Grafiken in den drei obigen Abbildungen erzeugen Sie mit Hilfe der
beiden Programme debtree
[Debian-Paket-debtree] (siehe
[debtree-Projektseite]) und dot
[Graphviz]. Ersteres berechnet
über die Metadaten in den Paketlisten die Abhängigkeiten zu anderen
Paketen und erzeugt daraus eine entsprechende Beschreibung des
Abhängigkeitsgraphen in der Sprache dot.
dpkg
mittels debtree
$ debtree dpkg
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Statusinformationen werden eingelesen... Fertig
digraph "dpkg" {
rankdir=LR;
node [shape=box];
"dpkg" -> "libbz2-1.0" [color=purple,style=bold];
"dpkg" -> "liblzma5" [color=purple,style=bold,label="(>= 5.1.1alpha+20120614)"];
"dpkg" -> "libselinux1" [color=purple,style=bold,label="(>= 2.3)"];
"libselinux1" -> "libpcre3" [color=blue,label="(>= 8.10)"];
"dpkg" -> "tar" [color=purple,style=bold,label="(>= 1.23)"];
"tar" -> "libacl1" [color=purple,style=bold,label="(>= 2.2.51-8)"];
"libacl1" -> "libattr1" [color=blue,label="(>= 1:2.4.46-8)"];
"libacl1" -> "libacl1-kerberos4kth" [color=red];
"tar" -> "libselinux1" [color=purple,style=bold,label="(>= 1.32)"];
"dpkg" [style="setlinewidth(2)"]
"libacl1-kerberos4kth" [style=filled,fillcolor=oldlace];
}
I: The following dependencies have been excluded from the graph (skipped):
I: libc6 multiarch-support zlib1g
// Excluded dependencies:
// libc6 multiarch-support zlib1g
// total size of all shown packages: 11501568
// download size of all shown packages: 4358750
$
Das zweite Kommando dot
wandelt diese Beschreibung über den Schalter
-T
Ausgabeformat in eine hübsche Grafik um. Als Ausgabeformat
unterstützt dot
derzeit bspw. PostScript, Structured Vector Graphics
(SVG), GIF, PNG und FIG (für die Verwendung in xfig
). Beachten Sie
bitte, dass dot
im Aufruf zwischen dem Schalter und dem von Ihnen
gewählten Ausgabeformat kein Leerzeichen erlaubt.
Für dpkg
erhalten Sie die Abbildung im Bildformat Portable Network
Graphics (PNG) mit dem nachfolgend gezeigten Aufruf auf der
Kommandozeile. Dabei wird die Ausgabe des debtree
-Kommandos nicht auf
dem Terminal sichtbar, sondern wird mit dem Pipe-Operator |
direkt an
das Programm dot
weitergegeben, welches es als Eingabe verarbeitet.
Die Ausgabe von dot
– die erzeugte Bilddatei – wird danach mit dem
Umleitungsoperator >
in die Datei dpkg.png
im aktuellen Verzeichnis
umgeleitet.
$ debtree dpkg | dot -Tpng > dpkg.png
$
2.6. Vom monolithischen Programm zu Programmkomponenten
Computerprogramme sind vergleichbar mit Kochrezepten und umfassen eine Folge von Anweisungen, die nacheinander abgearbeitet werden. Einfachere, kleine Programme sind häufig noch überschaubar und somit monolithisch. Sie beinhalten den gesamten Programmcode, der in einer einzigen Datei bereitgestellt wird.
Während zu Beginn der Informationsverarbeitung noch eine Tontafel, ein Holzstab mit Einkerbungen, ein Blatt Papier oder auch nur ein Lochstreifen zur Erfassung einer Folge von Anweisungen ausreichte, passt heutiger Programmcode nur noch selten auf eine einzige Bildschirmseite [Naumann-Abakus-Internet]. Ein Großteil der aktuell genutzten Software ist daher mehrteilig und überaus komplex. Dabei spielen viele, unterschiedliche Komponenten zusammen, erfüllen verschiedene Aufgaben und bedingen einander. Dazu gehören kompilierte Programme, Skripte, Bibliotheken, Daten und Konfigurationsdateien.
Die Paketierung der einzelnen Komponenten folgt eigenen Regeln, deren Konventionen nur zum Teil festgeschrieben sind und sich auch von Distribution zu Distribution etwas unterscheiden. [tab.paketierung-apt] zeigt die Zerlegung in einzelne Pakete am Beispiel von APT. Dabei beinhaltet die linke Spalte den generischen Paketnamen ohne Nennung von Versionsnummer und Architektur, die mittlere Spalte die Kategorie, der das Paket zugeordnet ist (siehe „Sortierung der Pakete nach Verwendungszweck“ in [sortierung-der-pakete-nach-verwendungszweck]) und die rechte Spalte eine kurze Paketbeschreibung. Auf die genannten Bibliotheken gehen wir genauer in „APT und Bibliotheken“ in [apt-und-bibliotheken] ein.
Paketname | Paketkategorie | Komponente und Bedeutung |
---|---|---|
apt |
Administration (admin) |
Paketmanager für die Kommandozeile (siehe [apt]) |
apt-doc |
Dokumentation (doc) |
Dokumentation zum Paket apt |
apt-transport-https |
Administration (admin) |
APT-Plugin für HTTPS-Support (obsolet seit APT 1.5) |
apt-utils |
Administration (admin) |
Hilfsprogramme für APT |
libapt-instX.Y |
Bibliotheken (libs) |
Laufzeitbibliothek zum Paketformat |
libapt-pkg.X.Y |
Bibliotheken (libs) |
Laufzeitbibliothek zur Paketverwaltung |
libapt-pkg-dev |
Bibliotheken zur Entwicklung (libdevel) |
Entwicklerdateien zu libapt-pkg |
libapt-pkg-doc |
Dokumentation (doc) |
Dokumentation zur Laufzeitbibliothek libapt-pkg |
libapt-pkg-perl |
Bibliotheken (libs) |
Laufzeitbibliothek zur Paketverwaltung, Perl-Schnittstelle |
Tipp
|
Benennung eines Debianpakets und Paketkategorien
In [benennung-eines-debian-pakets] beleuchten wir die Benennung und Abfolge der Komponenten in den Paketnamen. Eine genaue Auflistung und zur Bedeutung der Paketkategorien lesen Sie in [sortierung-der-pakete-nach-verwendungszweck] nach. |
Die Ideen hinter der Zerlegung in einzelne Komponenten sind ganz unterschiedlich und ergeben sich aus der Entwicklung, dem Ausrollen und der nachfolgenden Pflege einer Software. Hauptmotivation ist dabei häufig, nicht das Rad jedes Mal neu erfinden zu müssen und stattdessen bereits bestehende Komponenten zu integrieren, die etabliert sind und bekanntermaßen einen gewissen Qualitätsstandard erfüllen. Im Open-Source-Bereich erfolgt die Entwicklung weltweit verteilt, daher ist hier eine Zerlegung in kleinere Einheiten und „Bausteine“ häufig von großem Nutzen. Aufgaben und Komponenten können dadurch besser an kleine, spezialisierte Teams verteilt werden.
2.7. Debian-Pakete (Varianten)
Wird von einem Debianpaket gesprochen, ist meist ein Binärpaket mit der
Dateiendung deb
gemeint. Dieses beinhaltet Software oder Daten, welche
Sie sofort auf einem Computer mit Debian GNU/Linux installieren können.
Darüberhinaus gibt es aber auch noch andere Paketarten in Debian. Das wichtigste davon sind die Sourcepakete (siehe [sourcepakete]), die den Quellcode enthalten, aus dem später eines oder mehrere Binärpakete (siehe [binaerpakete]) gebaut werden.
2.7.1. Binärpakete (deb
)
Binärpakete beinhalten Programme in kompilierter Form, die vorher bspw. in C oder einer ähnlichen Programmiersprache geschrieben wurden. Weiterhin beinhaltet es häufig noch Konfigurationsdateien, Dokumentation und weitere Daten in exakt dem Zustand, wie sie nachher auch auf der Festplatte Ihres Rechners vorliegen.
Bei der Installation eines deb
-Pakets entpackt das Programm dpkg
zuerst das Archiv aus dem deb
-Paket und kopiert danach die Inhalte des
Archivs an die vorbezeichnete Stelle in der Verzeichnishierarchie auf
dem Zielsystem. Alle im Archiv genannten Pfade und Berechtigungen werden
dabei übernommen.
Außerdem sind in den Binärpaketen Metadaten gespeichert, die solche Informationen wie bspw. die Abhängigkeiten zu anderen Paketen enthalten. Weitere Details dazu erfahren Sie unter „Konzepte und Ideen dahinter“ (siehe [konzepte-und-ideen-dahinter]) sowie „Aufbau und Format von Binärpaketen“ (siehe [aufbau-und-format-binaer]).
Wie bereits oben benannt, hat ein Binärpaket üblicherweise die
Dateiendung deb
und wird auch durch das UNIX-Kommando
file
entsprechend als solches erkannt. Nachfolgende Ausgabe zeigt
dieses Verhalten am Beispiel des Pakets vnstat, eines Programms zur
Analyse des Netzwerktraffics.
file
identifiziert die deb
-Datei als Debianpaket$ file vnstat_1.10-1_i386.deb
vnstat_1.10-1_i386.deb: Debian binary package (format 2.0)
$
2.7.2. Übergangspakete, Metapakete und Tasks
Es gibt ein paar besondere Varianten von Binärpaketen – Übergangspakete und Metapakete. Vom Aufbau her unterscheiden sich diese nicht von normalen Binärpaketen, aber vom Inhalt. Übergangspakete und Metapakete sind reguläre Binärpakete, die jedoch im Normalfall keine eigenen Programme, Daten oder ähnliches beinhalten. Stattdessen liefern diese Abhängigkeiten auf andere Pakete.
Übergangspakete werden bei Paketumbenennungen verwendet und dienen nur dazu, Ihnen den Wechsel bei geänderten (Binär-)Paketnamen zu erleichtern. Damit wird bei einer Aktualisierung eines bestehenden Pakets das Paket mit dem neuen Namen nachgezogen. In den meisten Fällen können Sie nach der Aktualisierung das Paket mit dem bisher verwendeten Namen gefahrlos von ihrem System entfernen. Nicht selten passiert dies bereits automatisch über die Paketverwaltung durch weitere, ggf. negative Abhängigkeiten.
Übergangspakete hängen meist nur von einem einzigen anderen Paket ab. Beispiele dafür sind:
-
git → gnuit und dann später git-core → git
-
chromium → chromium-bsu und dann später chromium-browser → chromium
-
diff → diffutils
-
ttf-mplus → fonts-mplus
Metapakete sind hingegen bewusst installierte Pakete, die Ihnen die Installation einer ganzen Gruppe von Paketen erleichtern. Als Abhängigkeiten zieht ein Metapaket eine Gruppe von verwendeten Paketen hinter sich her. Auf diese Art und Weise installieren Sie durch die Auswahl eines einzelnen Pakets eine ganze Gruppe an weiteren Paketen, die thematisch zusammengehören und sich häufig auch einander bedingen.
Das ist sehr nützlich, wenn Sie sich sicher sind, dass Sie eine bereits vorbereitete Zusammenstellung von Programmen benötigen. Für die Desktop-Umgebung XFCE genügt es beispielsweise, das dazugehörige Metapaket namens xfce4 auszuwählen. Andere Programmzusammenstellungen wie gnome (GNOME-Window-Manager), lxde (LXDE-Window-Manager) und kde-full (K Desktop Environment) handhaben das ähnlich.
Sehr intensiv verwendet das Projekt Communtu diese Metapakete. Über die Webseite des Projekts stellen Sie sich individuelle Paketkombinationen („Bündel“) zusammen und beziehen diese von dort. Ausführlicher gehen wir darauf in [webbasierte-programme-communtu] ein.
Tasks – auf deutsch mit „Aufgaben“ übersetzbar – sind Metapakete,
die vom Debian Installer verwendet werden, um bestimmte Paketgruppen zu
installieren. Dabei geht es vor allem um Pakete für bestimmte Sprachen
und Lokalisierungen. Zum Beispiel hängt die Aufgabe
task-german-desktop u.a. von den Paketen mit den deutschsprachigen
Hilfedateien und Wörterbüchern von LibreOffice ab. Ähnliches existiert
für Serverfunktionen, bspw. task-dns-server und
task-database-server. Diese Funktionalität stammt vom Paket tasksel
und wird ab Debian 7 Wheezy vermehrt verwendet. Auf das angesprochene
Programm tasksel
gehen wir in [tasksel] ausführlicher ein.
Tipp
|
Aufbau und Format von Übergangs- und Metapaketen
Mehr Informationen zum Aufbau dieser Pakete finden Sie unter „Aufbau und Format von Übergangs- und Metapaketen“ in [aufbau-und-format-uebergang-und-metapakete]. |
Tipp
|
Metapakete selber bauen
Wie Sie ihre eigenen Metapakete erstellen und diese dann auch zum Bezug in einem Repository bereithalten, lernen Sie unter „Metapakete bauen“ in [metapakete-bauen]. |
2.7.3. Mikro-Binärpakete
Mikro-Binärpakete tragen die Dateiendung udeb
, wobei das u den
griechischen Buchstaben Mu („µ“) repräsentiert. Sie sind technisch
keine gewöhnlichen Binärpakete, sondern aufs Kleinste heruntergestutzte
Pakete. Sie kennen nur eine einzige Art von Paketrelation namens „hängt
ab von“. Desweiteren beinhalten sie keine Maintainer-Skripte und führen
auch sonst kaum Metainformationen mit.
Einziger Einsatzzweck dieser Mikro-Debs ist im Debian Installer während
des Zeitpunkts der Installation. Deswegen gibt es auch nur solche Pakete
als udeb
-Variante, die vom Debian Installer selbst gebraucht werden.
Darunter zählen bspw. Pakete mit den Programmen zum Anlegen von
Dateisystemen.
2.7.4. Source-Pakete (dsc
und weitere Dateien)
Diese Pakete beinhalten den Quellcode von Programmen und tragen das
Suffix dsc
als Abkürzung für Debian Source Control. Die Bestandteile
eines solchen Paketes sind:
-
der Originalquellcode als ein oder mehrere komprimierte
tar
-Archive. Je nach verwendetem Komprimierungsverfahren lauten die Dateiendungenorig.tar.gz
,orig.tar.bz2
oderorig.tar.xz
. -
die Änderungen vom Original zum Debianpaket als komprimierter Patch. Diese Dateien haben klassisch die Endung
diff.gz
und wurden mitgzip
gepackt. Liegen die Änderungen wie bei moderneren Sourcepaketen als komprimiertestar
-Archiv vor, wird als Dateiendungdebian.tar.gz
oderdebian.tar.xz
genutzt. Bei Letzterem kommt anstatt vongzip
das Komprimierungswerkzeugxz
zum Einsatz. -
eine Datei mit den Metadaten (Größe, Hashsummen, etc.) über die vorher genannten Dateien. Genutzt wird die Dateiendung
dsc
als Abkürzung für Debian Source Control.
Alle diese genannten Dateien stellen in der Gesamtheit ein einzelnes Debian-Source-Paket dar und beinhalten den Upstream-Quellcode plus Paketierung.
Tipp
|
Auspacken von Debian-Source-Paketen
Zum Auspacken von Debian-Source-Paketen benutzen Sie das Programm
|
2.7.5. Virtuelle Pakete
Reale Binärpakete können zusätzlich deklarieren, dass sie die Funktionalität eines weiteren Pakets ebenfalls bereitstellen. Existiert dieses weitere Paket nicht auch als reales Binärpaket, wird es als virtuelles Paket bezeichnet. Das gleiche virtuelle Paket kann hierbei von verschiedenen Binärpaketen zur Verfügung gestellt werden.
Andere Pakete können von einem solchen virtuellen Paket abhängen. Um diese Abhängigkeit zu erfüllen, genügt es, wenn ein Paket installiert ist, welches dieses virtuelle Paket bereitstellt.
In Debian gibt es bspw. die virtuellen Pakete xserver,
x-display-manager und x-window-manager, die typische
Komponenten des X-Window-Systems zusammenfassen.
[fig.aptitude-virtuelle-pakete] zeigt beispielhaft die Auswahl für das
virtuelle Paket x-display-manager in aptitude
. In der ersten Spalte
der Darstellung kennzeichnet dazu der Buchstabe v
neben dem Namen des
virtuellen Pakets diese spezielle Variante.
Zur Auswahl aus dem Paket stehen u.a. der Displaymanager Slim (Paket
slim), der Gnome Display Manager in Versionen 2 und 3 (Pakete gdm
und gdm3), der KDE Display Manager (Paket kdm), der WINGs Display
Manager und der ursprüngliche X Display-Manager (Paket xdm). Der
Screenshot in [fig.aptitude-virtuelle-pakete] stammt von einem
Debian-System, auf welchem GDM3 installiert ist. Das erkennen Sie an der
Hervorhebung durch fettgedruckten Text und der Markierung i
für
„Paket ist installiert“ in der ersten Spalte der Darstellung (siehe
auch [dpkg] für weitere Darstellungsvarianten).
Eine Liste aller offiziell verwendeten virtuellen Pakete in Debian gibt es im Paketierungshandbuch auf der Debian-Webseite [Debian-Virtual-Packages-List]. Andere Distributionen nutzen dieses Konzept auch, jedoch in unterschiedlicher Intensität.
2.7.6. Pseudopakete im Debian Bug Tracking System
Eine weitere Art nicht real existierender Pakete sind die sogenannten Pseudopakete, die Sie bei der Rückmeldung von Fehlern verwenden können. Diese Pakete dienen dazu, um Probleme mit der Debian-Infrastruktur aufzufangen und über das Debian Bug Tracking System (BTS) zu verfolgen.
Finden Sie bspw. einen Fehler auf den Webseiten von Debian, so können Sie einen Fehlerbericht gegen das Pseudopaket www.debian.org schreiben. Paketentfernungen aus Debian werden über Fehlerberichte gegen das Paket ftp.debian.org abgehandelt. Zukünftige Pakete sowie verwaiste Pakete werden über das Pseudopaket wnpp verwaltet und verfolgt. wnpp ist eine Abkürzung für „Work-needing and prospective packages“ — auf deutsch: „Arbeit bedürfende und zukünftige Pakete“.
Möchten Sie einen Fehlerbericht schreiben, wissen aber nicht, welchem konkreten Paket der Fehler zuzuordnen ist, so können Sie einen Fehlerbericht gegen das Pseudopaket general schreiben. Die Debian-Entwickler werden danach versuchen, herauszufinden, welches reale Paket die Ursache für den von Ihnen berichteten Fehler ist.
Tipp
|
Fehler zu einem Paket anzeigen
Unter „Bugreports anzeigen“ in [bugreports-anzeigen] lernen Sie, wie Sie die bestehenden Fehlermeldungen zu einem Paket anzeigen, deuten und einen eigenen Bugreport an das Betreuerteam des Pakets (Paket-Maintainer) übermitteln. |
2.8. Sortierung der Pakete nach Verwendungszweck
Für Debian sind inzwischen sehr viele unterschiedliche Pakete verfügbar. Um Ihnen die Orientierung in der Paketmenge sowie die Recherche und Auswahl daraus zu erleichtern, ordnet der Paketbetreuer – der Verantwortliche für das Paket – dieses Paket genau einer bestimmten Kategorie zu. Die Auswahl der Kategorie basiert dabei auf dem hauptsächlichen Einsatzbereich der Software.
[fig.aptitude-paketbereiche] zeigt die Sichtbarkeit der Kategorien bei
der Paketauswahl in aptitude
. In jeder Kategorie sind die Pakete
zusätzlich nach ihrem Distributionsbereich (siehe
[distributionsbereiche]) – main, contrib und non-free –
gruppiert. Der jeweilige Entwicklungszweig (siehe
[veroeffentlichungen]) – bspw. stable, unstable oder testing –
wird in dieser Darstellung nicht angezeigt, lässt sich aber bei Bedarf
als weitere Ebene in der Anzeigehierarchie konfigurieren.