Kapitel 2. Debian-Paketmanagement

Inhaltsverzeichnis

2.1. Grundvoraussetzungen für das Debian-Paketmanagement
2.1.1. Paketkonfiguration
2.1.2. Grundsätzliche Vorsichtsmaßnahmen
2.1.3. Leben mit den ewigen Aktualisierungen
2.1.4. Grundlagen über das Debian-Archiv
2.1.5. Debian ist zu 100% freie Software
2.1.6. Paketabhängigkeiten
2.1.7. Die Ereignisabfolge für das Paketmanagement
2.1.8. Erste Hilfe bei Paketmanagement-Problemen
2.2. Grundlegende Paketmanagement-Operationen
2.2.1. apt-get / apt-cache contra aptitude
2.2.2. Grundlegende Paketmanagement-Operationen auf der Befehlszeile
2.2.3. Interaktive Nutzung von aptitude
2.2.4. Tastaturkürzel von aptitude
2.2.5. Paketansichten in aptitude
2.2.6. Optionen für Suchmethoden mit aptitude
2.2.7. Aptitudes Regex-Formel
2.2.8. Abhängigkeitsauflösung von aptitude
2.2.9. Protokollierung der Paketaktivitäten
2.3. Beispiele für aptitude-Operationen
2.3.1. Auflisten von Paketen mit Regex-Suche auf den Paketnamen
2.3.2. Durchsuchen mit der Regex-Suche
2.3.3. Entfernte Pakete endgültig löschen
2.3.4. Automatisch/manuell-Installationsstatus bereinigen
2.3.5. Systemweite Hochrüstung
2.4. Erweiterte Paketmanagement-Operationen
2.4.1. Erweiterte Paketmanagement-Operationen auf der Befehlszeile
2.4.2. Verifizierung von installierten Paketdateien
2.4.3. Absicherungen für den Fall von Paketproblemen
2.4.4. Durchsuchen der Paket-Metadaten
2.5. Internas des Debian-Paketmanagements
2.5.1. Archiv-Metadaten
2.5.2. "Release"-Datei in der obersten Ebene und Authentizität
2.5.3. "Release"-Dateien auf Archiv-Ebene
2.5.4. Empfangen der Metadaten für ein Paket
2.5.5. Der Paketstatus für APT
2.5.6. Der Paketstatus von aptitude
2.5.7. Lokale Kopien der empfangenen Pakete
2.5.8. Debian-Paketdateinamen
2.5.9. Der dpkg-Befehl
2.5.10. Der update-alternatives-Befehl
2.5.11. Der dpkg-statoverride-Befehl
2.5.12. Der dpkg-divert-Befehl
2.6. Wiederherstellung eines beschädigten Systems
2.6.1. Inkompatibilität mit alter Benutzerkonfiguration
2.6.2. Mehrere Pakete mit überlappenden Dateien
2.6.3. Behebung von Problemen aufgrund von beschädigtem Paketskript
2.6.4. Systemrettung mit dem dpkg-Befehl
2.6.5. Paketauswahldaten wiederherstellen
2.7. Tipps für das Paketmanagement
2.7.1. Wie Sie Debian-Pakete auswählen
2.7.2. Pakete aus gemischten Paketquellen
2.7.3. Installationskandidat-Version beeinflussen
2.7.4. Aktualisierungen und Backports
2.7.5. Über "Recommends" installierte Pakete blockieren
2.7.6. Verfolgen von Testing mit einigen Paketen aus Unstable
2.7.7. Verfolgen von Unstable mit einigen Paketen aus Experimental
2.7.8. Automatisches Herunterladen und Aktualisieren von Paketen
2.7.9. Die Download-Bandbreite für APT einschränken
2.7.10. Downgrade im Notfall
2.7.11. Wer hat das Paket hochgeladen?
2.7.12. Das equivs-Paket
2.7.13. Ein Paket auf das Stable-System portieren
2.7.14. Proxy-Server für APT
2.7.15. Kleines öffentliches Paketarchiv
2.7.16. Aufzeichnen und Kopieren der Systemkonfiguration
2.7.17. Konvertieren oder installieren eines alien-Binärpakets
2.7.18. Extrahieren eines Pakets ohne dpkg
2.7.19. Weitere Lektüre zum Paketmanagement
[Anmerkung] Anmerkung

Dieses Kapitel geht davon aus, dass Wheezy die aktuelle stabile Veröffentlichung ist.

Debian ist eine Organisation Freiwilliger, die konsistente Distributionen vorkompilierter Binärpakete von freier Software erstellt und sie über ihr Archiv verteilt.

Das Debian-Archiv wird von vielen Spiegelseiten mit Fernzugriff für HTTP- und FTP-Zugang bereitgestellt. Es ist auch als CD-ROM/DVD erhältlich.

Das Debian-Paketmanagement-System, wenn korrekt genutzt, ermöglicht dem Nutzer, konsistente Sätze von Binärpaketen aus dem Archiv auf dem System zu installieren. Derzeit sind für die amd64-Architektur 41274 Pakete verfügbar.

Das Debian-Paketmanagement-System hat eine reichhaltige Geschichte und bietet viele Möglichkeiten für die Frontend-Benutzerprogramme sowie die Backend-Archivzugriff-Möglichkeiten, die genutzt werden. Derzeit empfehlen wir folgendes:

Tabelle 2.1. Liste der Debian-Paketmanagement-Werkzeuge

Paket Popcon Größe Beschreibung
apt V:857, I:999 3569 Advanced Packaging Tool (APT), Frontend für dpkg, das "http"-, "ftp"- und "file"-Archivzugriff-Methoden bietet (apt-get/apt-cache-Befehle sind enthalten)
aptitude V:227, I:991 4488 interaktiver Terminal-basierter Paketmanager mit aptitude(8)
tasksel V:51, I:966 715 Werkzeug, um Programmgruppen (Tasks) zur Installation auf dem Debian-System auszuwählen (Frontend für APT)
unattended-upgrades V:59, I:471 312 Erweiterungspaket für APT, um die automatische Installation von Sicherheits-Aktualisierungen zu ermöglichen
dselect V:8, I:80 2516 Terminal-basierter Paketmanager (früher Standard, Frontend für APT und andere alte Zugriffmethoden)
dpkg V:910, I:999 6427 Paketmanagement-System für Debian
synaptic V:111, I:478 7667 grafischer Paketmanager (GNOME-Frontend für APT)
apt-utils V:429, I:997 1364 APT-Hilfsprogramme: apt-extracttemplates(1), apt-ftparchive(1) und apt-sortpkgs(1)
apt-listchanges V:369, I:757 203 Benachrichtigungswerkzeug für die Änderungshistorie von Paketen
apt-listbugs V:9, I:15 418 Auflistung kritischer Fehler vor jeder APT-Installation
apt-file V:20, I:87 69 APT-Paketsuch-Werkzeug - Befehlszeilen-Interface
apt-rdepends V:1, I:8 64 rekursive Auflistung von Paketabhängigkeiten

[Warnung] Warnung

Installieren Sie nicht Pakete aus einer wahllosen Mischung von Debian-Suiten (Stable, Testing, Unstable, Experimental). Dies könnte die Paketkonsistenz beschädigen, was ein tiefes Verständnis der Systemverwaltung erfordert, wie Compiler-ABI, Bibliotheks-Versionen, Interpreter-Funktionalitäten usw.

Als Neuling unter den Debian-Systemadministratoren sollten Sie bei der Stable-Veröffentlichung bleiben und nur Sicherheitsaktualisierungen einspielen. Das soll heißen, dass Sie einige der folgenden, eigentlich gültigen Aktionen als Vorsichtsmaßnahme besser vermeiden sollten, bis Sie das Debian-System gut verstehen. Hier einige Erinnerungsstützen:

  • Fügen Sie nicht testing oder unstable in Ihre "/etc/apt/sources.list" ein.

  • Mischen Sie nicht Standard-Debian mit anderen Nicht-Debian-Archiven in Ihrer "/etc/apt/sources.list", z.B. Ubuntu.

  • Erstellen Sie keine "/etc/apt/preferences".

  • Ändern Sie nicht über Konfigurationsdateien das Standardverhalten der Paketmanagement-Werkzeuge, wenn Sie die vollständigen Auswirkungen nicht kennen.

  • Installieren Sie nicht irgendwelche Pakete mit "dpkg -i <irgendein_paket>".

  • Installieren Sie niemals irgendwelche Pakete mit "dpkg --force-all -i <irgendein_paket>".

  • Löschen oder verändern Sie keine Dateien in "/var/lib/dpkg/".

  • Überschreiben Sie keine Systemdateien, indem Sie Software-Programme installieren, die direkt aus den Quellen übersetzt wurden.

    • Installieren Sie diese, falls nötig, in "/usr/local" oder "/opt".

Die nicht-kompatiblen Effekte, die durch obige Aktionen in dem Debian-Paketmanagementsystem verursacht werden, könnten ein nicht mehr verwendbares System hinterlassen.

Ein ernsthafter Debian-Systemadministrator, der missionskritische Server betreibt, sollte besondere Vorsicht walten lassen.

  • Installieren Sie nicht irgendwelche Pakete von Debian, die Sicherheitsaktualisierungen beinhalten, ohne sie unter sicheren Bedingungen sorgfältig mit Ihrer speziellen Konfiguration getestet zu haben.

    • Sie als Systemadministrator sind am Ende für Ihr System verantwortlich.

    • Die lange Stabilitäts-Historie des Debian-Systems ist für sich alleine keine Garantie.

Trotz meiner obigen Warnungen weiß ich, dass viele Leser dieses Dokuments den Wunsch haben, die Testing- oder Unstable-Suite von Debian als Haupt-Betriebssystem für ihre selbst-administrierte Desktop-Umgebung zu nutzen. Dies liegt daran, dass sie sehr gut funktionieren, regelmäßig aktualisiert werden und immer die neuesten Funktionalitäten enthalten.

[Achtung] Achtung

Für Ihre Produktions-Server wird die Stable-Suite inklusive der Sicherheitsaktualisierungen empfohlen. Dasselbe gilt für Desktop-Rechner, für die nur eingeschränkt administrative Betreuung gewährleistet ist, zum Beispiel für den PC Ihrer Mutter.

Es ist nicht mehr nötig, als den Wert für die Distribution in "/etc/apt/sources.list" auf den Namen der Suite ("testing" oder "unstable") bzw. auf den Codenamen ("jessie" oder "sid") zu setzen. Dies beschert Ihnen ein Leben mit ewigen Aktualisierungen.

Die Verwendung von Testing oder Unstable bereitet viel Spaß, bringt aber auch einige Risiken mit sich. Auch wenn die Unstable-Suite die meiste Zeit sehr stabil erscheint, hat es einige Paketprobleme in der Testing- und Unstable-Suite von Debian gegeben, und einige davon waren nicht ganz einfach zu lösen. Dies könnte ziemlich schmerzlich für Sie sein. Manchmal haben Sie für mehrere Wochen ein beschädigtes Paket oder fehlende Funktionalitäten.

Hier einige Ideen, wie Sie eine schnelle und einfache Systemwiederherstellung bei Fehlern in Debian-Paketen gewährleisten können:

(Falls Sie keine dieser Vorsichsmaßnahmen durchführen können, sind Sie möglicherweise nicht bereit für die Testing- und Unstable-Suites.)

Die Erleuchtung mit dem folgenden bewahrt eine Person vor der ewigen karmischen Qual der Upgrade-Hölle und ermöglicht ihr, das Debian-Nirvana zu erreichen.

Lassen Sie uns das Debian-Archiv aus der Sicht eines Benutzers betrachten.

[Tipp] Tipp

Die offiziellen Richtlinien für das Debian-Archiv sind in dem Debian Policy-Handbuch, Kapitel 2 - The Debian Archive festgelegt.

Für typischen HTTP-Zugriff ist das Archiv in der Datei "/etc/apt/sources.list" wie folgt definiert, hier z.B. für das aktuelle Stable-System (= Wheezy).

deb http://ftp.XX.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.XX.debian.org/debian/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib
deb-src http://security.debian.org/ wheezy/updates main contrib

Bitte beachten Sie, dass "ftp.XX.debian.org" durch die passende Spiegel-Server-URL für Ihren Standort ersetzt werden muss, für Deutschland z.B. "ftp.de.debian.org", welche Sie in der Liste der weltweiten Spiegel-Sites von Debian finden. Den Status dieser Server können Sie auf der Debian Mirror Checker-Seite überprüfen.

Hier neige ich dazu, den Codenamen "wheezy" zu verwenden statt dem Namen der Suite (stable), um Überraschungen zu vermeiden, wenn das nächste Stable-Release veröffentlicht wird.

Die Bedeutung von "/etc/apt/sources.list" ist in sources.list(5) beschrieben und die Schlüsselpunkte sind folgende:

  • Die "deb"-Zeile definiert die Quelle für Binärpakete.

  • Die "deb-src"-Zeile definiert die Quelle für Quellpakete.

  • Das erste Argument ist die Wurzel-URL für das Debian-Archiv.

  • Das zweite Argument ist der Name der Distribution: entweder der Name der Suite oder der Codename.

  • Das dritte und die darauf folgenden Argumente sind eine Liste gültiger Namen für Bereiche im Debian-Archiv.

Die "deb-src"-Zeilen können ohne Probleme weggelassen werden (oder auskommentiert, indem "#" an den Anfang der Zeile gestellt wird), wenn nur aptitude verwendet wird, was nicht auf Metadaten bezüglich der Quellpakete zugreift. Dies beschleunigt die Aktualisierungen der Paket-Metadaten. Die URL kann u.a. "http://", "ftp://", "file://" sein.

[Tipp] Tipp

Falls in dem obigen Beispiel "sid" statt "wheezy" benutzt wird, ist die Zeile "deb: http://security.debian.org/ …" für Sicherheitsaktualisierungen in "/etc/apt/sources.list" nicht nötig (weil es kein Archiv für Sicherheitsaktualisierungen für "Sid" (Unstable) gibt.

Hier ist eine Liste der URL von Debian-Archiv-Seiten und Suite- oder Codenamen, die in der Konfigurationsdatei verwendet werden.


[Achtung] Achtung

Nur die reine Stable-Veröffentlichung mit Sicherheitsaktualisierungen bietet beste Stabilität. Zum größten Teil die Stable-Veröffentlichung zu verwenden vermischt mit einigen Paketen aus Testing oder Unstable, birgt ein höheres Risiko, als reines Unstable zu nutzen (aufgrund von unpassenden Bibliotheksversionen usw). Wenn Sie wirklich die neueste Version einiger Programme unter Stable benötigen, verwenden Sie bitte Pakete der Dienste wheezy-updates und http://backports.debian.org (lesen Sie dazu Abschnitt 2.7.4, „Aktualisierungen und Backports“). Diese Dienste müssen mit zusätzlicher Sorgfalt genutzt werden.

[Achtung] Achtung

Sie sollten grundsätzlich nur eine der Suiten stable, testing oder unstable in der "deb"-Zeile integrieren. Wenn Sie irgendeine Kombination von stable, testing und unstable in der "deb"-Zeile verwenden, bremst dies die APT-Programme aus, wobei am Ende aber nur das neueste Archiv verwendet wird. Eine Auflistung mehrerer Einträge macht Sinn, wenn die "/etc/apt/preferences"-Datei genutzt wird und dort klare Richtlinien festgelegt sind (lesen Sie dazu Abschnitt 2.7.3, „Installationskandidat-Version beeinflussen“).

[Tipp] Tipp

Für das Debian-System mit den Stable- und Testing-Veröffentlichungen ist es eine gute Idee, wie in obigem Beispiel Zeilen mit "http://security.debian.org/" in der "/etc/apt/sources.list" zu integrieren, um so die Sicherheitsaktualisierungen zu aktivieren.

[Anmerkung] Anmerkung

Sicherheitsprobleme im Stable-Archiv werden vom Debian-Sicherheits-Team behoben. Diese Aktivität war immer ziemlich gründlich und zuverlässig. Sicherheitsprobleme im Testing-Archiv werden unter Umständen durch das Debian-Testing-Sicherheits-Team behoben. Aus verschiedenen Gründen ist diese Aktivität nicht so gründlich wie die für Stable und Sie müssen möglicherweise warten, bis die Pakete mit den Fehlerkorrekturen von Unstable nach Testing migriert sind. Sicherheitsprobleme in Unstable werden durch die jeweiligen Paketbetreuer behoben. Aktiv betreute Unstable-Pakete sind für gewöhnlich in einem ziemlich guten Zustand, da Sicherheitskorrekturen von Upstream mit einfließen. In der Debian Sicherheits-FAQ finden Sie Informationen, wie Debian mit Sicherheitslücken umgeht.


Die Paketanzahl in obiger Liste gilt für die amd64-Architektur. Der main-Bereich stellt das Debian-System bereit (lesen Sie dazu Abschnitt 2.1.5, „Debian ist zu 100% freie Software“).

Die Organisation des Debian-Archivs kann am besten erforscht werden, indem Sie mit Ihrem Browser die jeweilige Archiv-URL mit einem angehängten dists oder pool besuchen.

Die Distribution wird auf zwei Arten referenziert, über die Suite oder über den Codenamen. Das Wort "Distribution" wird in vielen Dokumentationen synonym zum Namen der Suite verwendet. Die Beziehung zwischen Suite und Codename kann wie folgt zusammengefasst werden:


Die Historie der Codenamen ist beschrieben in Debian FAQ: Kapitel 6.2.1 Welche Codenamen wurden in der Vergangenheit verwendet?

In der strengeren Debian-Archiv-Terminologie wird das Wort "Sektion" (section) speziell für die Kategorisierung der Pakete durch Anwendungen genutzt. (Obwohl der Begriff "main section" auch verwendet werden könnte, um den Bereich "main" im Debian-Archiv zu beschreiben.)

Immer wenn ein Debian-Entwickler (DD, von Debian developer) ein Paket in das unstable-Archiv hochlädt (via incoming), muss der DD dafür sorgen, dass das hochgeladene Paket mit dem aktuellen Satz der Pakete im Unstable-Archiv kompatibel ist.

Falls der DD diese Kompatibilität absichtlich verletzt (für wichtige Bibliotheksaktualisierungen usw.), gibt es gewöhnlich eine Ankündigung dazu auf der Mailingliste debian-devel usw.

Bevor eine Gruppe von Paketen durch das Wartungsskript des Debian-Archivs von Unstable nach Testing verschoben wird, prüft das Wartungsskript nicht nur das Alter (rund 10 Tage alt) und den Status der veröffentlichungskritischen Fehler (RC bugs) für die Pakete, sondern versucht auch die Kompatibilität der Pakete mit dem aktuellen Satz der Pakete im Testing-Archiv sicherzustellen. Dieser Prozess macht Testing sehr aktuell und nutzbar.

Durch den abgestuften, vom Release-Team gesteuerten Archiv-Freeze-Prozess ist das Testing-Archiv bereits gereift, um es auf diesem Wege - mit einigen manuellen Eingriffen - vollständig konsistent und fehlerfrei zu machen. Dann wird die neue Stable-Veröffentlichung erzeugt, indem der Codename für das alte Testing-Archiv dem neuen Stable-Archiv zugewiesen wird; anschließend wird ein neuer Codename für das neue Testing-Archiv erstellt. Die anfänglichen Inhalte des neuen Testing entsprechen exakt dem des neu veröffentlichten Stable.

Sowohl das Unstable- wie auch das Testing-Archiv können aus unterschiedlichen Gründen unter vorübergehenden Störungen leiden:

  • Upload eines beschädigten Pakets in das Archiv (meistens bei Unstable);

  • Verzögerung, bis die neuen Pakete im Archiv akzeptiert werden (meistens bei Unstable);

  • Timing-Probleme bei der Archiv-Synchronisation (sowohl bei Testing wie auch bei Unstable);

  • Manuelle Eingriffe in das Archiv wie das Entfernen eines Pakets (überwiegend bei Testing).

Falls Sie sich also jemals entscheiden, diese Archive zu verwenden, sollten Sie in der Lage sein, diese Arten von Störungen zu beheben oder zu umgehen.

[Achtung] Achtung

Für die ersten Monate nach einer neuen Stable-Veröffentlichung sollten die meisten Desktop-Benutzer das Stable-Archiv inklusive der Sicherheitsaktualisierungen verwenden, selbst wenn sie normalerweise Unstable oder Testing benutzen. In dieser Übergangszeit sind sowohl das Unstable- wie auch das Testing-Archiv für die meisten Leute nicht gut. Ihr System ist zu dieser Zeit schwer in einem guten lauffähigen Zustand zu halten, da Unstable Fluten von gravierenden Hochrüstungen der Kernpakete ertragen muss, und auch Testing ist nicht von Nutzen, weil sein Inhalt überwiegend dem von Stable entspricht, aber ohne die Unterstützung für Sicherheitsaktualisierungen (Debian Testing-Security-Ankündigung 12/2008). Nach einigen Monaten könnte das Unstable-Archiv wieder nutzbar sein, wenn Sie vorsichtig sind.

[Tipp] Tipp

Wenn Sie das Testing-Archiv verfolgen, wird ein Problem, das durch ein entferntes Paket verursacht wird, normalerweise dadurch umgangen, dass das entsprechende Paket aus Unstable installiert wird, welches zur Fehlerbehebung hochgeladen worden ist.

Näheres über Begriffsdefinitionen zum Debian-Archiv finden Sie im Debian Policy-Handbuch:

Debian besteht aus folgenden Gründen aus 100% freier Software:

  • Debian installiert standardmäßig nur freie Software, um die Freiheit des Benutzers zu respektieren.

  • Debian bietet in main nur freie Software an.

  • Debian empfiehlt, nur freie Software aus main zu verwenden.

  • Kein Paket in main hängt von Paketen in non-free oder contrib ab bzw. empfiehlt diese.

Einige Leute fragen sich, ob die folgenden beiden Fakten sich widersprechen oder nicht:

Sie widersprechen sich nicht, und zwar aus folgenden Gründen:

  • Das Debian-System ist zu 100% frei und seine Pakete werden von Debian-Servern im main-Bereich vorgehalten.

  • Pakete außerhalb des Debian-Systems werden von Debian-Servern in den Bereichen non-free und contrib vorgehalten.

Sie werden auch präzise unter Punkt 4 und 5 des Debian-Gesellschaftsvertrags erklärt:

  • Unsere Prioritäten sind unsere Anwender und Freie Software

    • Wir orientieren uns an den Bedürfnissen unserer Anwender und der Gemeinschaft für Freie Software. Deren Interessen stehen an erster Stelle. Wir werden unsere Nutzer bei ihrer Arbeit mit den verschiedensten Rechnerumgebungen unterstützen. Wir haben nichts gegen unfreie Arbeiten, die darauf abzielen, auf Debian-Systemen verwendet zu werden oder versuchen, eine Gebühr von Personen, die solche Arbeiten erstellen oder verwenden, einzufordern. Wir erlauben anderen, Distributionen zu erstellen, die das Debian-System und andere Arbeiten enthalten, ohne dafür irgendwelche Gebühren zu erheben. Um diese Ziele zu fördern, werden wir ein integriertes System von hoher Qualität anbieten, das die gerade beschriebene Nutzung nicht durch rechtliche Einschränkungen verhindert.

  • Arbeiten, die nicht unseren Standards für Freie Software genügen

    • Wir wissen, dass einige unserer Anwender unbedingt Arbeiten einsetzen müssen, die nicht den Debian-Richtlinien für Freie Software entsprechen. Für solche Arbeiten haben wir die Bereiche "contrib" und "non-free" in unserem Archiv eingerichtet. Die Pakete in diesen Bereichen sind nicht Bestandteil des Debian-Systems, wurden aber trotzdem für den Einsatz mit Debian vorbereitet. Wir empfehlen den CD-Herstellern, die jeweiligen Lizenzbestimmungen der Pakete in diesen Bereichen zu studieren und selbst zu entscheiden, ob sie die Pakete mit ihren CDs verteilen dürfen. Obwohl unfreie Arbeiten nicht Bestandteil von Debian sind, unterstützen wir ihren Einsatz und bieten Infrastruktur für nicht-freie Pakete an (z.B. unsere Fehlerdatenbank und die Mailinglisten).

Benutzer sollten sich der Risiken durch die Verwendung von Paketen aus den non-free- und contrib-Bereichen bewußt sein:

  • fehlende Freiheit für solche Software-Pakete;

  • keine Unterstützung von Debian für solche Software-Pakete (Debian kann keine vernünftige Unterstützung für Software bieten, bei der nicht auf den Quellcode zugegriffen werden kann);

  • Verunreinigung Ihres zu 100% freien Debian-Systems

Die Debian-Richtlinien für Freie Software (DFSG) sind der Freie-Software-Standard für Debian. Debian interpretiert "Software" im weitesten Sinne inklusive Dokumentation, Firmware, Logos und Daten künstlerischer Arbeit in einem Paket. Aufgrund dessen sind Debians Freie-Software-Standards sehr streng.

Um diese strengen Freie-Software-Standards für main erreichen zu können, hat Debian Software-Pakete von Mozilla (wie Firefox, Thunderbird und Seamonkey) abgewandelt, indem deren Logo und einige Dateien künstlerischer Arbeit entfernt wurden und sie als Iceweasel, Icedove und Iceape veröffentlicht wurden.

Typische non-free- und contrib-Pakete enthalten frei verteilbare Pakete der folgenden Typen:

  • Dokumentationspakete unter der GNU-Lizenz für freie Dokumentation mit unveränderlichen Abschnitten wie diejenigen für GCC und Make (meistens zu finden in der Sektion non-free/doc).

  • Firmware-Pakete, die Binärdaten ohne Quelltext enthalten, wie diejenigen, die in Abschnitt 9.9.6, „Hardware drivers and firmware“ als nicht-frei aufgeführt sind (meistens zu finden in der Sektion non-free/kernel).

  • Spiele- und Schriftarten-Pakete mit Einschränkungen für die kommerzielle Verwendung und/oder inhaltliche Veränderung.

Bitte beachten Sie, dass die Anzahl der Pakete in non-free und contrib weniger als 2% der Pakete in main beträgt. Den Zugriff auf die non-free- und contrib-Bereiche des Archivs zu ermöglichen, verschleiert nicht die Quellen der Pakete. Die interaktive Verwendung von aptitude(8) im Vollbildmodus erlaubt Ihnen die vollständige Ansicht und Kontrolle darüber, welche Pakete aus welchen Bereichen installiert sind, um Ihr System so frei zu halten, wie Sie möchten.

Das Debian-System stellt einen konsistenten Satz von Binärpaketen bereit und verwendet dafür einen Deklarationsmechanismus für versionierte Binärabhängigkeiten, der über Felder in der control-Datei gesteuert wird. Hier eine leicht vereinfachte Definition für diese Felder:

  • "Depends" / Hängt ab von

    • Depends deklariert eine absolute Abhängigkeit und alle Pakete, die in diesem Feld aufgelistet sind, müssen zur selben Zeit oder im Voraus installiert sein.

  • "Pre-Depends" / Hängt ab (vorher) von

    • Pre-Depends ist ähnlich wie Depends, nur dass die vollständige Installation der aufgelisteten Pakete im Voraus erforderlich ist.

  • "Recommends" / Empfiehlt

    • Recommends deklariert eine starke, aber nicht absolute Abhängigkeit. Die meisten Benutzer würden das Paket nicht installiert haben wollen, solange nicht alle in diesem Feld aufgelisteten Pakete installiert sind.

  • "Suggests" / Schlägt vor

    • Suggests deklariert eine schwache Abhängigkeit. Viele Benutzer dieses Pakets würden davon profitieren, die in diesem Feld aufgelisteten Pakete zu installieren, aber auch ohne sie kann das Paket vernünftige Funktionen bieten.

  • "Enhances" / Wertet auf

    • Enhances deklariert eine schwache Abhängigkeit wie Suggests, nur funktioniert sie in der entgegengesetzten Richtung.

  • "Breaks" / Beschädigt

    • Breaks deklariert eine Paket-Inkompatibilität, gewöhnlich mit einer Versionsangabe. Grundsätzlich ist die Lösung, alle in diesem Feld aufgelisteten Pakete zu aktualisieren.

  • "Conflicts" / Kollidiert

    • Conflicts deklariert eine absolute Inkompatibilität. Alle in diesem Feld aufgelisteten Pakete müssen entfernt werden, um dieses Paket zu installieren.

  • "Replaces" / Ersetzt

    • Replaces wird deklariert, wenn Dateien, die von diesem Paket installiert werden, andere Dateien in den aufgelisteten Paketen ersetzen.

  • "Provides" / Stellt bereit

    • Provides wird deklariert, wenn dieses Paket alle Dateien und Funktionalitäten der hier aufgelisteten Pakete bereitstellt.

[Anmerkung] Anmerkung

Bitte beachten Sie, dass die gleichzeitige Deklaration von "Provides", "Conflicts" und "Replaces" für ein virtuelles Paket eine vernünftige Konfiguration ist. So wird sichergestellt, dass nur ein reelles Paket, das dieses virtuelle Paket bereit stellt, zur jeweiligen Zeit installiert sein kann.

Die offizielle Definition inklusive der Quellpaket-Abhängigkeiten finden Sie im Debian Policy-Handbuch: Kapitel 7 - Declaring relationships between packages.

Hier folgt eine Zusammenfassung der vereinfachten Ereignisabfolge für das APT-Paketmanagement.

Um des Gesamtbildes willen habe ich hier absichtlich technische Details übersprungen.

Auf dem Debian-System können grundlegende Paketmanagement-Operationen mit jedem auf dem System verfügbaren Paketmanagement-Werkzeug durchgeführt werden. Wir erklären hier ein paar elementare Werkzeuge: apt-get / apt-cache und aptitude.

Für Paketmanagement-Operationen inklusive Paketinstallation oder Aktualisierungen der Paket-Metadaten benötigen Sie root-Privilegien.

[Anmerkung] Anmerkung

The package dependency resolver of the aptitude command tends to suggest mass package removals when packages in unstable are temporarily inconsistent. This situation is a bit frightening. Usually, "apt-get dist-upgrade" should resolve this situation. This situation seems to be caused mostly by the version skew among packages depended or recommended by a meta-package such as gnome-core.

Die apt-get- und apt-cache-Befehle sind die grundlegendsten Paketmanagement-Werkzeuge.

  • apt-get und apt-cache bieten lediglich eine Befehlszeilen-Oberfläche.

  • apt-get eignet sich sehr gut für die großen Systemhochrüstungen von einer Debian-Veröffentlichung auf die nächste usw.

  • apt-get bietet einen robusten und stabilen Paketabhängigkeitsauflöser, der die allgemeinen Paket-Statusdaten verwendet.

  • apt-get ist weniger anspruchsvoll bezüglich der Hardware-Ressourcen. Es verbraucht weniger Speicher und läuft schneller.

  • apt-cache bietet eine grundlegende, auf regulären Ausdrücken basierende Suche über Paketname und -beschreibung.

  • apt-get und apt-cache können über /etc/apt/preferences mehrere Versionen von Paketen verwalten, aber dies ist ziemlich mühselig.

Der aptitude-Befehl ist das vielseitigste Paketmanagement-Werkzeug.

  • aptitude bietet eine interaktive textbasierte Benutzeroberfläche mit Vollbildschirm-Ansicht.

  • aptitude weist auch eine Befehlszeilen-Benutzerschnittstelle auf.

  • aptitude eignet sich sehr gut für das tägliche interaktive Paketmanagement wie die Überprüfung installierter Pakete und die Suche nach verfügbaren Paketen.

  • aptitude ist anspruchsvoller bezüglich der Hardware-Ressourcen. Es verbraucht mehr Speicher und läuft nicht ganz so schnell.

  • aptitude bietet eine erweiterte, auf regulären Ausdrücken basierende Suche über alle Paket-Metadaten.

  • aptitude kann mehrere Versionen von Paketen verwalten, ohne dabei /etc/apt/preferences zu verwenden, und ist sehr intuitiv.

Hier einige grundlegende Paketmanagement-Operationen auf der Befehlszeile, die aptitude(8) und apt-get(8) / apt-cache(8) verwenden.

Tabelle 2.6. Grundlegende Paketmanagement-Operationen auf der Befehlszeile mit aptitude(8) und apt-get(8) / apt-cache(8)

aptitude-Syntax apt-get/apt-cache-Syntax Beschreibung
aptitude update apt-get update Aktualisieren der Paket-Archiv-Metadaten
aptitude install foo apt-get install foo Installieren der Installationskandidat-Version von "foo" inklusive seiner Abhängigkeiten
aptitude safe-upgrade apt-get upgrade Installieren der Installationskandidat-Version aller installierten Pakete, ohne irgendwelche anderen Pakete zu entfernen
aptitude full-upgrade apt-get dist-upgrade Installieren der Installationskandidat-Version aller installierten Pakete und Entfernen anderer Pakete, falls nötig
aptitude remove foo apt-get remove foo Entfernen des Pakets "foo", während dabei dessen Konfigurationsdateien erhalten bleiben
Nicht verfügbar apt-get autoremove Entfernen aller automatisch installierten Pakete, die nicht mehr benötigt werden
aptitude purge foo apt-get purge foo Vollständiges Entfernen des Pakets "foo" inklusive seiner Konfigurationsdateien
aptitude clean apt-get clean Vollständiges Leeren des lokalen Depots empfangener Paketdateien
aptitude autoclean apt-get autoclean Leeren des lokalen Depots empfangener Paketdateien für veraltete Pakete
aptitude show foo apt-cache show foo Anzeigen von detaillierten Informationen über das Paket "foo"
aptitude search <regex> apt-cache search <regex> Suchen nach Paketen, auf die der reguläre Ausdruck <regex> passt
aptitude why <regex> Nicht verfügbar Erklären, warum die Pakete, auf die der reguläre Ausdruck <regex> passt, installiert werden sollten
aptitude why-not <regex> Nicht verfügbar Erklären, warum die Pakete, auf die der reguläre Ausdruck <regex> passt, nicht installiert werden sollten

[Anmerkung] Anmerkung

Obwohl der aptitude-Befehl reichhaltige Funktionen mit sich bringt, wie z.B. seinen erweiterten Paketabhängigkeitsauflöser, hat diese Komplexität einige Rückentwicklungen verursacht (oder könnte sie noch immer verursachen), wie z.B. Fehler #411123, Fehler #514930 und Fehler #570377. Im Zweifel bevorzugen Sie bitte die apt-get- und apt-cache-Befehle gegenüber aptitude.

[Anmerkung] Anmerkung

Da apt-get und aptitude den Paket-Status für automatisch installierte Pakete (lesen Sie dazu Abschnitt 2.5.5, „Der Paketstatus für APT“) seit der Zeit nach der Lenny-Veröffentlichung gemeinsam verwalten, können Sie diese beiden Programme ohne größere Probleme im Wechsel verwenden (weiteres dazu unter Fehler #594490).

Der Befehl "aptitude why <regex>" kann mehr Informationen ausgeben, wenn "-v" verwendet wird ("aptitude -v why <regex>"). Ähnliche Informationen können Sie mittels apt-cache rdepends <paket> erhalten.

Wenn aptitude im Befehlszeilenmodus gestartet wird und Probleme wie z.B. Paketkonflikte anzeigt, können Sie im Nachhinein in die interaktive Vollbildschirm-Ansicht wechseln, indem Sie am Prompt die Taste "e" drücken.

Sie können Befehlsoptionen direkt hinter "aptitude" angeben.


Weitere Informationen finden Sie unter aptitude(8) und im "aptitude-Benutzerhandbuch" in "/usr/share/doc/aptitude/README".

[Tipp] Tipp

Das dselect-Paket ist immer noch verfügbar und war in früheren Veröffentlichungen das bevorzugte interaktive Paketmanagement-Werkzeug mit Vollbildschirm-Ansicht.

Es folgen einige erwähnenswerte Tastendrücke, um in dieser Vollbildschirm-Ansicht den Status von Paketen abzufragen und "geplante Aktionen" für sie vorzumerken.


Die Angabe des Dateinamens auf der Befehlszeile sowie das Eingabefeld nach dem Drücken von "l" und "//" nutzen aptitudes Regex (regulären Ausdruck) wie unten beschrieben. Damit aptitudes regulärer Ausdruck exakt auf einen Paketnamen zutrifft, können Sie eine Zeichenkette verwenden, die mit ~n beginnt, gefolgt von dem Paketnamen.

[Tipp] Tipp

Im interaktiven Modus müssen Sie "U" drücken, um alle installierten Pakete auf die Installationskandidat-Version zu aktualisieren. Andernfalls werden nur die markierten Pakete und solche mit versionierten Abhängigkeiten zu diesen auf die Installationskandidat-Version aktualisiert.

In der interaktiven Vollbildschirm-Ansicht von aptitude(8) werden Pakete in der Paketliste wie im folgenden Beispiel angezeigt:

idA   libsmbclient                             -2220kB 3.0.25a-1  3.0.25a-2

Diese Zeile hat die folgenden Bedeutungen (von links nach rechts):

  • Die Markierung für den "aktuellen Zustand" (der erste Buchstabe)

  • Die Markierung für die "geplante Aktion" (der zweite Buchstabe)

  • Die "automatisch"-Markierung (der dritte Buchstabe)

  • Der Paketname

  • Die voraussichtliche Änderung beim verwendeten Platz auf der Festplatte, ausgelöst durch die "geplante Aktion"

  • Die aktuelle Version des Pakets

  • Die Installationskandidat-Version des Pakets

[Tipp] Tipp

Eine vollständige Liste der Markierungen finden Sie am unteren Ende der Hilfe-Ansicht, die Ihnen durch Drücken von "?" angezeigt wird.

Die Installationskandidat-Version wird aufgrund der aktuellen lokalen Voreinstellungen ausgewählt (lesen Sie dazu apt_preferences(5) und Abschnitt 2.7.3, „Installationskandidat-Version beeinflussen“).

Im Menü unter Ansichten sind verschiedene Arten von Paketansichten verfügbar:


[Anmerkung] Anmerkung

Bitte helfen Sie uns, Pakete mit debtags zu versehen!

Die Standard-Paketansicht kategorisiert Pakete ähnlich wie dselect plus einiger zusätzlicher Funktionalitäten.


[Tipp] Tipp

Die Tasks-Ansicht kann verwendet werden, um aus verschiedenen Paketen für eine Aufgabe auszuwählen.

Die Regex-Formel (regulärer Ausdruck) ist ähnlich wie bei mutt ein erweiterter regulärer Ausdruck (ERE) (lesen Sie dazu Abschnitt 1.6.2, „Reguläre Ausdrücke“) und die Bedeutung der aptitude-spezifischen speziellen Regelerweiterungen ist im folgenden erklärt.

Tabelle 2.11. Liste von aptitudes Regex-Formeln

Beschreibung der erweiterten Regel Regex-Formel
Treffer auf den Paketnamen ~n<regex_name>
Treffer auf die Paketbeschreibung ~d<regex_beschreibung>
Treffer auf den Task-Namen ~t<regex_task>
Treffer auf den Debtag ~G<regex_debtag>
Treffer auf den Paketbetreuer ~m<regex_betreuer>
Treffer auf die Paketsektion ~s<regex_sektion>
Treffer auf die Paketversion ~V<regex_version>
Treffer auf das Archiv ~A{wheezy,jessie,sid}
Treffer auf die Paket-Herkunft ~O{debian,…}
Treffer auf die Priorität ~p{extra,important,optional,required,standard}
Treffer auf essentielle Pakete ~E
Treffer auf virtuelle Pakete ~v
Treffer auf neue Pakete ~N
Treffer auf noch nicht abgeschlossene Aktion ~a{install,upgrade,downgrade,remove,purge,hold,keep}
Treffer auf installierte Pakete ~i
Treffer auf Pakete mit der A-Markierung (automatisch installierte Pakete) ~M
Treffer auf Pakete ohne A-Markierung (vom Administrator zur Installation ausgewählte Pakete) ~i!~M
Treffer auf installierte und aktualisierbare Pakete ~U
Treffer auf entfernte Pakete, deren Konfigurationsdateien aber noch vorhanden sind ~c
Treffer auf Pakete, die entfernt oder vollständig inklusive der Konfigurationsdateien entfernt wurden oder entfernt werden können ~g
Treffer auf Pakete, die eine beschädigte Abhängigkeit melden ~b
Treffer auf Pakete, die eine beschädigte Abhängigkeit vom Typ <typ> melden ~B<abhängigkeitstyp>
Treffer auf Pakete, die eine Abhängigkeit vom Typ <typ> definiert haben ~D[<typ>:]<muster>
Treffer auf Pakete, die eine beschädigte Abhängigkeit vom Typ <typ> definiert haben ~DB[<typ>:]<muster>
Treffer auf Pakete, zu denen auf <muster> passende Pakete die Abhängigkeit <typ> definiert haben ~R[<typ>:]<muster>
Treffer auf Pakete, zu denen auf <muster> passende Pakete die beschädigte Abhängigkeit <typ> definiert haben ~RB[<typ>:]<muster>
Treffer auf Pakete, von denen andere installierte Pakete abhängig sind ~R~i
Treffer auf Pakete, von denen keine anderen installierten Pakete abhängig sind !~R~i
Treffer auf Pakete, von denen andere installierte Pakete abhängig sind oder empfohlen werden ~R~i|~Rrecommends:~i
Treffer auf Pakete, die auf <muster> passen, mit gefilterter Version ~S filter <muster>
Treffer auf alle Pakete (true/wahr) ~T
Treffer auf kein Paket (false/unwahr) ~F

  • Der Regex-Teil ist der gleiche erweiterte reguläre Ausdruck (ERE) wie in Unix-typischen Textverarbeitungswerkzeugen und nutzt "^", ".*", "$" usw., wie es auch egrep(1), awk(1) und perl(1) tun.

  • Der Typ einer Abhängigkeit zur Festlegung von Wechselbeziehungen zwischen Paketen ist einer der folgenden: depends (hängt ab von), predepends (hängt ab (vorher) von), recommends (empfiehlt), suggests (schlägt vor), conflicts (kollidiert mit), replaces (ersetzt), provides (stellt bereit).

  • Der Typ der Standardabhängigkeit ist "depends".

[Tipp] Tipp

Wenn <regex_muster> ein Null-String ist, geben Sie "~T" direkt hinter dem Befehl an.

Hier einige Abkürzungen:

  • "~P<name>" == "~Dprovides:<name>"

  • "~C<name>" == "~Dconflicts:<name>"

  • "…~W name" == "(…|name)"

Benutzer, denen mutt geläufig ist, werden sich auch hier schnell zurechtfinden, da mutt die Inspiration für die Syntax des regulären Ausdrucks war. Lesen Sie "SEARCHING, LIMITING, AND EXPRESSIONS" im "Benutzerhandbuch" unter "/usr/share/doc/aptitude/README".

[Anmerkung] Anmerkung

Seit der Lenny-Version von aptitude(8) kann für die Suche über reguläre Ausdrücke statt der alten kurzen Form (wie z.B. "~b") auch die neue lange Form (entsprechend "?broken") verwendet werden. Leerzeichen " " werden jetzt als Regex-Abschluß-Zeichen gewertet, zusätzlich zu dem Tilde-Zeichen "~". Weitere Details zur Syntax der neuen langen Form finden Sie im Benutzerhandbuch.

Hier ein paar Beispiele für aptitude(8)-Operationen.

Hier beschreibe ich, wie ich den automatisch/manuell-Installationsstatus bereinige (nach der Verwendung von anderen Paketinstallationsprogrammen usw.):

  1. Starten Sie aptitude im interaktiven Modus als root.

  2. Drücken Sie "u", "U", "f" und "g", um die Paketliste sowie die Pakete zu aktualisieren.

  3. Drücken Sie "l", um den Anzeigefilter auf "~i(~R~i|~Rrecommends:~i)" zu setzen und drücken Sie "M" mit der Markierung auf "Installierte Pakete", damit deren Status auf Automatisch installiert geändert wird.

  4. Drücken Sie "l", setzen Sie den Anzeigefilter auf "~prequired|~pimportant|~pstandard|~E" und drücken Sie "m" mit der Markierung auf "Installierte Pakete", damit deren Status auf Manuell installiert geändert wird.

  5. Drücken Sie "l", setzen Sie den Anzeigefilter auf "~i!~M" und entfernen Sie nicht genutzte Pakete, indem Sie "-" auf jedem davon drücken (wenn die Markierung auf "Installierte Pakete" steht, können Sie mit "[" die Liste aufklappen, so dass alle Pakete sichtbar werden).

  6. Drücken Sie "l" um den Anzeigefilter auf "~i" zu setzen; drücken Sie dann "m", während die Markierung auf "Tasks" steht, um diese Pakete auf Manuell installiert zu setzen.

  7. Beenden Sie aptitude.

  8. Führen Sie "apt-get -s autoremove|less" als root aus, um zu überprüfen, welche Pakete derzeit ungenutzt sind.

  9. Starten Sie aptitude erneut im interaktiven Modus und markieren Sie Pakete, bei denen dies nötig ist, mit "m" als Manuell installiert.

  10. Führen Sie erneut "apt-get -s autoremove|less" als root aus, um erneut zu überprüfen, ob bei ENTFERNT nur die erwarteten Pakete enthalten sind.

  11. Führen Sie "apt-get autoremove|less" als root aus, um nicht genutzte Pakete automatisch zu entfernen.

Die Aktion "m" mit der Markierung auf "Tasks" ist eine optionale Aktion, um die Situation massenhaft zu entfernender Pakete in der Zukunft zu vermeiden.

[Anmerkung] Anmerkung

Beim Wechsel auf einen neue Veröffentlichung sollten Sie eine Neuinstallation in Erwägung ziehen, auch wenn Debian wie unten beschrieben auch auf die neue Version hochgerüstet werden kann. So haben Sie eine Chance, Müll, der sich über die Dauer der Zeit angesammelt hat, loszuwerden und bekommen die beste Kombination der aktuellsten Pakete. Natürlich sollten Sie ein vollständiges System-Backup machen und an einem sicheren Platz ablegen (lesen Sie dazu Abschnitt 10.2, „Backup and recovery“), bevor Sie neu installieren. Ich empfehle für einen sanften Übergang eine Dual-Boot-Installation unter Verwendung separater Partitionen.

Sie können eine systemweite Hochrüstung auf eine neue Veröffentlichung durchführen, indem Sie die Inhalte der Datei "/etc/apt/sources.list" ändern, so dass sie auf die neue Veröffentlichung zeigen; führen Sie danach "apt-get update; apt-get dist-upgrade" aus.

Um von stable nach testing oder unstable zu aktualisieren, ersetzen Sie "wheezy" in dem "/etc/apt/sources.list"-Beispiel aus Abschnitt 2.1.4, „Grundlagen über das Debian-Archiv“ durch "jessie" oder "sid".

In der Realität könnte es vielleicht einige Komplikationen aufgrund von Problemen mit Paketübergängen geben, meistens wegen Paketabhängigkeiten. Je größer die Unterschiede bei der Hochrüstung sind, um so wahrscheinlicher werden Sie gravierendere Probleme bekommen. Für die Hochrüstung des alten Stable auf das neue Stable nach dessen Veröffentlichung können Sie die neuen Veröffentlichungshinweise (Release Notes) lesen. Folgen Sie exakt der dort beschriebenen Prozedur, um die möglichen Probleme zu minimieren.

Wenn Sie sich entscheiden, von Stable zu Testing zu wechseln, bevor dies formal veröffentlicht wird, gibt es keine Veröffentlichunshinweise, die Ihnen helfen. Die Unterschiede zwischen Stable und Testing könnten seit der vorherigen Stable-Veröffentlichung ziemlich groß geworden sein und die Situation für eine Hochrüstung recht komplex machen.

Sie sollten vorbeugende Schritte für das vollständige Upgrade durchführen, indem Sie aktuellste Informationen von den Mailinglisten sammeln, und Ihren gesunden Menschenverstand einsetzen.

  1. Lesen Sie die vorherigen "Veröffentlichungshinweise (Release Notes)".

  2. Machen Sie eine vollständige Sicherung (Backup) von Ihrem System (speziell Daten und Konfigurationsinformationen).

  3. Halten Sie ein boot-fähiges Medium bereit für den Fall eines beschädigten Bootloaders.

  4. Informieren Sie die Benutzer des Systems rechtzeitig vorher.

  5. Zeichnen Sie die Aktivitäten während des Upgrades mit script(1) auf.

  6. Wenden Sie "unmarkauto" für erforderliche Pakete an, also z.B. "aptitude unmarkauto vim", um solche Pakete als Manuell installiert zu markieren und zu verhindern, dass sie entfernt werden.

  7. Minimieren Sie die Anzahl installierter Pakete, um die Wahrscheinlichkeit von Paketkonflikten zu reduzieren, entfernen Sie z.B. Desktop-Task-Pakete.

  8. Entfernen Sie die Datei "/etc/apt/preferences" (um apt-pinning zu deaktivieren).

  9. Versuchen Sie, das Upgrade in mehreren Schritten durchzuführen: oldstablestabletestingunstable.

  10. Aktualisieren Sie die Datei "/etc/apt/sources.list", so dass sie nur auf das neue Archiv verweist, und führen Sie "aptitude update" aus.

  11. Installieren Sie (optional) neue Kern-Pakete zuerst, z.B. "aptitude install perl".

  12. Führen Sie "apt-get -s dist-upgrade" aus, um die Auswirkungen im Voraus abschätzen zu können.

  13. Führen Sie als letztes den Befehl "apt-get dist-upgrade" aus.

[Achtung] Achtung

Es ist nicht klug, bei Hochrüstung einer Stable-Veröffentlichung auf ein anderes Stable ein oder mehrere Debian-Hauptveröffentlichungen zu überspringen (also z.B. von Debian 5.0 direkt auf 7.0 hochzurüsten und dabei 6.0 zu überspringen).

[Achtung] Achtung

In früheren "Veröffentlichungshinweisen" wurden für GCC, Linux-Kernel, initrd-Werkzeuge, Glibc, Perl, APT-Werkzeuge usw. spezielle Vorsichtsmaßnahmen bei systemweiten Upgrades erwähnt.

Informationen zu täglichen Upgrades in Unstable finden Sie in Abschnitt 2.4.3, „Absicherungen für den Fall von Paketproblemen“.

Hier eine Liste weiterer Paketmanagement-Operationen, für die aptitude auf zu hohem Level arbeitet oder für die ihm nötige Funktionen fehlen.

Tabelle 2.13. Liste erweiterter Paketmanagement-Operationen

Befehl Aktion
COLUMNS=120 dpkg -l <paketnamen_muster> Status eines installierten Pakets für einen Fehlerbericht auflisten
dpkg -L <paketname> Inhalte eines installierten Pakets auflisten
dpkg -L <paketname> | egrep '/usr/share/man/man.*/.+' Handbuchseiten (manpages) für ein installiertes Paket auflisten
dpkg -S <dateinamen_muster> Installierte Pakete auflisten, die auf das Muster passende Dateien enthalten
apt-file search <dateinamen_muster> Pakete im Archiv auflisten, die auf das Muster passende Dateien enthalten
apt-file list <paketnamen_muster> Inhalte von auf das Muster passenden Paketen im Archiv auflisten
dpkg-reconfigure <paketname> Dieses Paket neu konfigurieren
dpkg-reconfigure -p=low <paketname> Dieses Paket mit detaillierten Fragen neu konfigurieren
configure-debian Pakete über das Vollbildschirm-Menü neu konfigurieren
dpkg --audit System nach teilweise installierten Paketen durchsuchen
dpkg --configure -a Alle teilweise installierten Pakete konfigurieren
apt-cache policy <binärpaketname> Verfügbare Version, Priorität und Archivinformationen eines Binärpakets anzeigen
apt-cache madison <paketname> Verfügbare Version und Archivinformationen eines Pakets anzeigen
apt-cache showsrc <binärpaketname> Quellpaket-Informationen eines Binärpakets anzeigen
apt-get build-dep <paketname> Zum Bau eines Pakets benötigte Pakete installieren
aptitude build-dep <paketname> Zum Bau eines Pakets benötigte Pakete installieren
apt-get source <paketname> Ein Quellpaket herunterladen (aus dem Standardarchiv)
dget <URL für dsc-Datei> Ein Quellpaket herunterladen (aus einem anderen Archiv)
dpkg-source -x <paketname>_<version>-<debian_version>.dsc Einen Quellcodebaum aus einem Satz von Quellpaketen erstellen ("*.orig.tar.gz" und "*.debian.tar.gz"/"*.diff.gz")
debuild binärdatei Paket(e) aus einem lokalen Quellcodebaum bauen
make-kpkg kernel_image Ein Kernelpaket aus einem Kernel-Quellcodebaum bauen
make-kpkg --initrd kernel_image Ein Kernelpaket mit aktivierter initramfs aus einem Kernel-Quellcodebaum bauen
dpkg -i <paketname>_<version>-<debian_version>_<arch>.deb Ein lokales Paket in das System installieren
debi <paketname>_<version>-<debian_version>_<arch>.dsc Lokale(s) Paket(e) in das System installieren
dpkg --get-selections '*' >selection.txt Paketauswahl-Statusinformationen auf dpkg-Level sichern
dpkg --set-selections <selection.txt Paketauswahl-Statusinformationen auf dpkg-Level setzen
echo <paketname> hold | dpkg --set-selections Paketauswahl-Statusinformationen eines Pakets auf dpkg-Level auf hold (halten) setzen (gleichbedeutend mit "aptitude hold <paketname>")

[Anmerkung] Anmerkung

Für ein Paket mit der multi-arch-Funktionalität müssen Sie unter Umständen den Architekturnamen bei einigen Befehlen angeben. Verwenden Sie zum Beispiel "dpkg -L libglib2.0-0:amd64", um die Inhalte des Pakets libglib2.0-0 für die amd64-Architektur anzuzeigen.

[Achtung] Achtung

Paketwerkzeuge auf niedrigem Level wie "dpkg -i …" und "debi …" sollten mit Vorsicht vom Systemadministrator eingesetzt werden. Sie kümmern sich nicht automatisch um erforderliche Paketabhängigkeiten. Dpkg's Befehlszeilenoption "--force-all" und ähnliche (schauen Sie in dpkg(1)) sind nur zur Verwendung durch Experten gedacht. Sie zu verwenden ohne deren Auswirkungen vollständig zu verstehen könnte das komplette System beschädigen.

Bitte beachten Sie folgendes:

Die Installation von debsums ermöglicht die Verifizierung installierter Pakete gegen MD5sum-Werte in der Datei "/var/lib/dpkg/info/*.md5sums" mittels debsums(1). Details darüber, wie MD5sum arbeitet, finden Sie in Abschnitt 10.3.5, „The MD5 sum“.

[Anmerkung] Anmerkung

Da die MD5sum-Datenbank durch Eindringlinge gefälscht werden könnte, ist debsums(1) als Werkzeug für die Systemsicherheit nur von begrenztem Nutzen. Es eignet sich aber gut dafür, lokale Veränderungen durch den Administrator oder durch Beschädigungen aufgrund von Fehlern des Speichermediums zu erkennen.

Obwohl der Besuch der Debian-Site http://packages.debian.org/ heutzutage einfache Möglichkeiten bietet, die Paket-Metadaten zu durchsuchen, wollen wir uns auch die traditionellen Wege anschauen.

Die Befehle grep-dctrl(1), grep-status(1) und grep-available(1) können verwendet werden, um jegliche Datei zu durchsuchen, die das grundsätzliche Format einer control-Datei für ein Debian-Paket hat.

"dpkg -S <dateinamen_muster>" kann verwendet werden, um durch dpkg installierte Pakete zu finden, die auf das Suchmuster passende Dateinamen enthalten. Hiermit werden jedoch keine Dateien gefunden, die durch Skripte der Paketbetreuer erzeugt werden.

Wenn Sie eine tiefergehende Suche der dpkg-Metadaten benötigen, müssen Sie den Befehl "grep -e regex_muster *" im Verzeichnis "/var/lib/dpkg/info/" ausführen. So können Sie Wörter finden, die in Paketskripten und Texten für Abfragen bei der Installation auftauchen.

Wenn Sie Paketabhängigkeiten rekursiv abfragen möchten, sollten Sie apt-rdepends(8) verwenden.

Lassen Sie uns betrachten, wie das Debian-Paketmanagement-System intern funktioniert. Dies sollte Ihnen dabei helfen, eigene Lösungen für einige Paketprobleme zu finden.

[Tipp] Tipp

Die "Release"-Datei in der obersten Ebene wird verwendet, um die Archive im Secure-APT-System zu signieren.

Jede Suite im Debian-Archiv hat in der obersten Ebene eine "Release"-Datei, z.B. "http://ftp.de.debian.org/debian/dists/unstable/Release", wie hier:

Origin: Debian
Label: Debian
Suite: unstable
Codename: sid
Date: Sat, 14 May 2011 08:20:50 UTC
Valid-Until: Sat, 21 May 2011 08:20:50 UTC
Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
Components: main contrib non-free
Description: Debian x.y Unstable - Not Released
MD5Sum:
 bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz
 9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz
 3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz
...
[Anmerkung] Anmerkung

Hier finden Sie den Grund dafür, warum ich in Abschnitt 2.1.4, „Grundlagen über das Debian-Archiv“ "Suite" und "Codename" verwende. Die "Distribution" wird benutzt, um sowohl auf "Suite" wie auch auf "Codename" zu verweisen. Alle Namen der Archiv-Bereiche, die von dem Archiv angeboten werden, sind unter "Components" aufgelistet.

Die Integrität der "Release"-Datei in der obersten Ebene wird über die kryptografische Infrastruktur namens SecureApt verifiziert.

  • Die kryptografische Signaturdatei "Release.gpg" wird aus der authentischen "Release"-Datei der obersten Ebene und dem geheimen Debian-Archiv-Schlüssel erzeugt.

  • Der öffentliche Debian-Archiv-Schlüssel kann in "/etc/apt/trusted.gpg" platziert werden:

  • Das Secure-APT-System verifiziert kryptografisch die Integrität der heruntergeladenen "Release"-Datei der obersten Ebene über diese "Release.gpg"-Datei und den öffentlichen Debian-Archiv-Schlüssel in "/etc/apt/trusted.gpg".

Die Integrität all der "Packages"- und "Sources"-Dateien wird mittels MD5sum-Werten in der "Release"-Datei von deren oberster Ebene verifiziert. Die Integrität der Paketdateien wird über MD5sum-Werte in den "Packages"- und "Sources"-Dateien verifiziert. Lesen Sie dazu debsums(1) und Abschnitt 2.4.2, „Verifizierung von installierten Paketdateien“.

Da die kryptografische Signaturverifizierung viel CPU-intensiver ist als die Berechnung von MD5sum-Werten, bietet die Verwendung von MD5sum-Werten für die Pakete bei gleichzeitiger Nutzung einer kryptografischen Signatur für die "Release"-Datei der obersten Ebene einen guten Kompromiss zwischen Sicherheit und Performance (weiteres in Abschnitt 10.3, „Data security infrastructure“).

Wenn APT-Werkzeuge wie aptitude, apt-get, synaptic, apt-file, auto-apt … verwendet werden, müssen wir die lokalen Kopien der Metadaten, die die Debian-Archivinformationen enthalten, aktualisieren. Diese lokalen Kopien haben die folgenden Dateinamen, passend zu den in "/etc/apt/sources.list" festgelegten Namen für Distribution, Bereich und Architektur (weiteres in Abschnitt 2.1.4, „Grundlagen über das Debian-Archiv“):

  • "/var/lib/apt/lists/ftp.de.debian.org_debian_dists_<distribution>_Release"

  • "/var/lib/apt/lists/ftp.de.debian.org_debian_dists_<distribution>_Release.gpg"

  • "/var/lib/apt/lists/ftp.de.debian.org_debian_dists_<distribution>_<area>_binary-<architektur>_Packages"

  • "/var/lib/apt/lists/ftp.de.debian.org_debian_dists_<distribution>_<bereich>_source_Sources"

  • "/var/cache/apt/apt-file/ftp.de.debian.org_debian_dists_<distribution>_Contents-<architektur>.gz" (für apt-file)

Die ersten vier Typen obiger Dateien werden von allen entsprechenden APT-Befehlen gemeinsam genutzt und mittels "apt-get update" oder "aptitude update" aktualisiert. Die "Packages"-Metadaten werden aktualisiert, wenn eine "deb"-Zeile in "/etc/apt/sources.list" existiert. Die "Sources"-Metadaten werden aktualisiert, wenn eine "deb-src"-Zeile in "/etc/apt/sources.list" existiert.

Die "Packages"- und "Sources"-Metadaten enthalten einen "Filename:"-Eintrag, der auf den Speicherort der Binär- und Quellpakete verweist. Derzeit sind diese Pakete in dem Verzeichnisbaum unterhalb von "pool/" abgelegt zwecks einfacher Übergänge zwischen den Veröffentlichungen.

Lokale Kopien der "Packages"-Metadaten können mit Hilfe von aptitude interaktiv durchsucht werden. Der spezialisierte Suchbefehl grep-dctrl(1) kann lokale Kopien der "Packages"- und "Sources"-Metadaten durchsuchen.

Lokale Kopien von "Contents-<architektur>"-Metadaten können mittels "apt-file update" aktualisiert werden und ihr Speicherort unterscheidet sich von den vier anderen. Lesen Sie dazu apt-file(1). (auto-apt nutzt standardmäßig andere Speicherorte für die lokale Kopie von "Contents-<architektur>.gz".)

Die Dateien von Debian-Paketen haben eine bestimmte Namensstruktur:


[Tipp] Tipp

Hier sind nur die grundlegenden Quellpaketformate beschrieben. Lesen Sie weitere Details in dpkg-source(1).


[Anmerkung] Anmerkung

Sie können die Paketversions-Reihenfolge mit dpkg(1) überprüfen, z.B. mittels "dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?" .

[Anmerkung] Anmerkung

Der debian-installer (d-i) nutzt udeb als Dateinamenerweiterung für seine Binärpakete, statt des normalen deb. Ein udeb-Paket ist ein reduziertes deb-Paket, in dem einige nicht-essentielle Bestandteile wie Dokumentation entfernt wurden, um Speicherplatz zu sparen; dazu wurden die Anforderungen an die Paketrichtlinien etwas gelockert. Sowohl deb- wie auch udeb-Pakete verwenden die gleiche Paketstruktur. Das "u" steht für micro (sehr klein).

dpkg(1) ist das Werkzeug für Debian-Paketmanagement auf niedrigster Ebene. Es ist sehr leistungsfähig und muss mit Vorsicht verwendet werden.

Beim Installieren eines Pakets "<paketname>" arbeitet dpkg folgende Schritte ab:

  1. Die deb-Datei auspacken (gleichbedeutend mit "ar -x")

  2. Ausführen von "<paketname>.preinst" mittels debconf(1)

  3. Installieren des Paketinhalts in das System (gleichbedeutend zu "tar -x")

  4. Ausführen von "<paketname>.postinst" mittels debconf(1)

Das debconf-System bietet eine standardisierte Benutzer-Schnittstelle mit Unterstützung für I18N und L10N (Näheres in Kapitel 8, I18N and L10N).

Tabelle 2.17. Erwähnenswerte Dateien, die durch dpkg erzeugt werden

Datei Beschreibung des Inhalts
/var/lib/dpkg/info/<paketname>.conffiles Liste der Konfigurationsdateien (durch den Benutzer veränderbar)
/var/lib/dpkg/info/<paketname>.list Liste von Dateien und Verzeichnissen, die durch das Paket installiert werden
/var/lib/dpkg/info/<paketname>.md5sums Liste der MD5-Hash-Werte für Dateien, die durch das Paket installiert werden
/var/lib/dpkg/info/<paketname>.preinst Paket-Skript, das vor der Paketinstallation ausgeführt wird
/var/lib/dpkg/info/<paketname>.postinst Paket-Skript, das nach der Paketinstallation ausgeführt wird
/var/lib/dpkg/info/<paketname>.prerm Paket-Skript, das vor der Paketentfernung ausgeführt wird
/var/lib/dpkg/info/<paketname>.postrm Paket-Skript, das nach der Paketentfernung ausgeführt wird
/var/lib/dpkg/info/<paketname>.config Paket-Skript für das debconf-System
/var/lib/dpkg/alternatives/<paketname> alternative-Informationen, die durch den update-alternatives-Befehl genutzt werden
/var/lib/dpkg/available availability-Informationen (Verfügbarkeit) für alle Pakete
/var/lib/dpkg/diversions die diversions-Informationen, die durch dpkg(1) genutzt und durch dpkg-divert(8) gesetzt werden
/var/lib/dpkg/statoverride die stat-override-Informationen, die durch dpkg(1) genutzt und durch dpkg-statoverride(8) gesetzt werden
/var/lib/dpkg/status Status-Informationen für alle Pakete
/var/lib/dpkg/status-old Backup der ersten Generation von "var/lib/dpkg/status"
/var/backups/dpkg.status* Backup der zweiten Generation und ältere von "var/lib/dpkg/status"

Die "status"-Datei wird auch von Werkzeugen wie dpkg(1), "dselect update" und "apt-get -u dselect-upgrade" verwendet.

Der spezialisierte Suchbefehl grep-dctrl(1) kann lokale Kopien der "status"- und "available"-Metadaten durchsuchen.

[Tipp] Tipp

In der debian-installer-Umgebung wird der Befehl udpkg benutzt, um udeb-Pakete zu öffnen. udpkg ist eine reduzierte Variante des dpkg-Befehls.

Wenn ein unstable-System betrieben wird, sollte der Administrator darauf vorbereitet sein, das System im Falle einer Beschädigung des Paketmanagements wiederherzustellen.

[Achtung] Achtung

Einige Methoden, die hier beschrieben werden, beinhalten ein hohes Risiko. Sie wurden gewarnt!

Paketmanagementsysteme auf Archiv-Ebene wie aptitude(8) oder apt-get(1) versuchen erst gar nicht, Pakete mit überlappenden Dateien über Paketabhängigkeiten zu installieren (weiteres in Abschnitt 2.1.6, „Paketabhängigkeiten“).

Fehler durch einen Paketbetreuer oder die Einrichtung von inkonsistent gemischten Archivquellen durch den Systemadministrator (lesen Sie Abschnitt 2.7.2, „Pakete aus gemischten Paketquellen“) könnten Situationen mit falsch definierten Paketabhängigkeiten hervorrufen. Wenn Sie in solch einer Situation ein Paket mit überlappenden Dateien mittels aptitude(8) oder apt-get(1) installieren, stellt dpkg(1), das das Paket entpackt, sicher, dass ein Fehler an das aufrufende Programm zurückgegeben wird, ohne dass vorhandene Dateien überschrieben werden.

[Achtung] Achtung

Die Verwendung von Paketen aus Drittquellen bringt durch Betreuerskripte ein erhebliches Risiko für das System mit sich, da diese mit root-Privilegien ausgeführt werden und jegliche Aktion auf dem System ausführen können. Der dpkg(1)-Befehl schützt lediglich vor dem Überschreiben beim Entpacken.

Sie können solche beschädigten Installationen umgehen, indem Sie vorher das alte betroffene Paket <altes-paket> entfernen:

$ sudo dpkg -P <altes-paket>

Da dpkg ein Paketwerkzeug ist, das auf sehr niedriger Ebene arbeitet, kann es auch in sehr schlechten Situationen wie einem nicht startfähigen System und ohne Netzwerkverbindung noch arbeiten. Wir gehen hier davon aus, dass das Paket foo beschädigt war und ersetzt werden muss.

Sie könnten im cache-Verzeichnis "/var/cache/apt/archives/" zwischengespeicherte Kopien von älteren, fehlerfreien Versionen des Pakets foo finden. (Falls nicht, können Sie diese auch aus dem Archiv unter http://snapshot.debian.net/ herunterladen oder von einem funktionierenden System herüber kopieren.)

Wenn Sie das System booten können, ist es unter Umständen möglich, das Paket mit folgendem Befehl zu installieren:

# dpkg -i /pfad/zu/foo_<alte_version>_<arch>.deb
[Tipp] Tipp

Wenn die Beschädigung des Systems nur gering ist, könnten Sie das ganze System möglicherweise mit dem APT-System auf eine ältere Version zurückrüsten, wie in Abschnitt 2.7.10, „Downgrade im Notfall“ beschrieben.

Wenn Ihr System überhaupt nicht mehr von Festplatte gestartet werden kann, könnten Sie nach anderen Wegen suchen, das System zu starten:

  1. Booten Sie das System, indem Sie den Rettungsmodus der debian-installer-CD verwenden.

  2. Binden Sie die Festplattenpartitionen des nicht mehr zu startenden Systems in "/target" ein.

  3. Installieren Sie wie folgt eine ältere Version des Pakets foo:

# dpkg --root /target -i /pfad/zu/foo_<alte_version>_<arch>.deb

Dies funktioniert sogar, wenn der dpkg-Befehl auf der Festplatte beschädigt ist.

[Tipp] Tipp

Jegliches GNU/Linux-System, das von einem anderen System auf der Festplatte oder von Live-GNU/Linux-CD, bootfähigem USB-Stick oder per Netboot gestartet wird, kann auf ähnliche Art zur Rettung des beschädigten Systems verwendet werden.

Falls der Versuch, ein Paket auf diese Art zu installieren, aufgrund von verletzten Abhängigkeiten fehlschlägt und Sie dies als letzten Ausweg wirklich tun müssen, können Sie Abhängigkeiten mit den dpkg-Optionen "--ignore-depends", "--force-depends" und weiteren überschreiben. Dabei müssen Sie besondere Sorgfalt darauf verwenden, die Abhängigkeiten später korrekt wiederherzustellen. Details finden Sie in dpkg(8).

[Anmerkung] Anmerkung

Falls Ihr System ernsthaft beschädigt ist, sollten ein vollständiges Backup aller Daten an einem sicheren Ort ablegen (siehe Abschnitt 10.2, „Backup and recovery“) und eine saubere Neuinstallation durchführen. Dies ist weniger zeitaufwändig und führt am Ende zu einem besseren Ergebnis.

Mit aptitude können Sie nach Paketen suchen, die Ihren Anforderungen entsprechen, entweder über die Paketbeschreibung oder über die Liste in "Tasks".

Wenn Sie auf mehr als zwei ähnliche Pakete stoßen und sich fragen, welches Sie installieren sollen, ohne dabei nach dem "trial and error"-Verfahren (ausprobieren und schauen, ob Fehler auftreten) vorgehen zu müssen, sollten Sie ein wenig Ihren gesunden Menschenverstand benutzen. Die folgenden Punkte können als gute Hinweise auf passende Pakete angesehen werden:

  • Essentiell: ja > nein

  • Bereich: main > contrib > non-free

  • Priorität: erforderlich > wichtig > standard > optional > extra

  • Tasks: Pakete, die in Tasks wie "Desktop-Umgebungen" aufgelistet sind

  • Pakete, die über eine Paketabhängigkeit ausgewählt werden (z.B. python2.4 über python)

  • Popcon: höhere Einstufung bei den vote- und install-Werten

  • Changelog (Änderunsprotokoll): regelmäßige Aktualisierungen durch den Betreuer

  • BTS (Fehlerdatenbank): keine veröffentlichungskritischen Fehler (RC-Bugs, d.h. keine Fehler mit Schweregrad critical, grave oder serious)

  • BTS (Fehlerdatenbank): Betreuer reagiert auf Fehlerberichte

  • BTS (Fehlerdatenbank): höhere Anzahl von kürzlich behobenen Fehlern

  • BTS (Fehlerdatenbank): niedrigere Anzahl von offenen Fehlern mit Schweregrad (Severity) verschieden von wishlist

Debian ist ein Freiwilligenprojekt mit verteiltem Entwicklungsmodell, dessen Archiv viele Pakete unterschiedlicher Zielsetzung und Qualität enthält. Sie müssen Ihre eigene Entscheidung treffen, was Sie damit anfangen.

[Achtung] Achtung

Die Installation von Paketen aus gemischten Paketquellen wird von der offiziellen Debian-Distribution nicht unterstützt, außer für ein paar bestimmte Archivkombinationen, wie z.B. stable mit Sicherheits-Updates und wheezy-updates.

Hier ein Beispiel von Befehlen, über die man spezielle neuere Upstream-Versionen von Paketen aus Unstable mit einbezieht, während für einzelne Operationen Testing verwendet wird:

  1. Ändern Sie die Datei "/etc/apt/sources.list" vorübergehend in "unstable".

  2. Führen Sie "aptitude update" aus.

  3. Führen Sie "aptitude install <packetname>" aus.

  4. Stellen Sie die Originalversion von "/etc/apt/sources.list" für testing wieder her.

  5. Führen Sie "aptitude update" aus.

Bei diesem manuellen Vorgehen erstellen Sie keine "/etc/apt/preferences"-Datei und müssen sich auch keine Sorgen über apt-pinning machen. Allerdings ist dies sehr mühsam.

[Achtung] Achtung

Wenn Sie gemischte Paketquellen verwenden, müssen Sie die Kompatibilität selbst sicherstellen, da Debian diese nicht garantieren kann. Falls Paketinkompatibilitäten existieren, könnten Sie Ihr System beschädigen. Sie müssen in der Lage sein, diese technischen Anforderungen zu beurteilen. Die Verwendung von gemischten Quellen zufällig ausgewählter Archive ist eine absolut optionale Operation und nichts, was ich Ihnen empfehlen kann.

Die grundsätzlichen Regeln für die Installation von Paketen aus unterschiedlichen Archiven sind wie folgt:

[Anmerkung] Anmerkung

Um die Installation eines Pakets unproblematischer zu machen, existieren möglicherweise einige nicht-freie Binärprogramm-Pakete mit vollständig statisch gelinkten Bibliotheken. Sie sollten diese immer auf ABI-Kompatibilitätsprobleme usw. kontrollieren.

[Anmerkung] Anmerkung

Außer um kurzfristig beschädigte Pakete zu vermeiden ist die Installation von Binärpaketen aus offiziell nicht unterstützten Archiven grundsätzlich eine schlechte Idee. Dies gilt sogar, wenn Sie apt-pinning verwenden (lesen Sie dazu Abschnitt 2.7.3, „Installationskandidat-Version beeinflussen“). Sie sollten chroot oder ähnliche Techniken in Betracht ziehen (weiteres in Abschnitt 9.10, „Virtualized system“), um Programme aus verschiedenen Archiven laufen zu lassen.

Ohne eine "/etc/apt/preferences"-Datei wählt das APT-System basierend auf dem Versionseintrag die letzte verfügbare Version als Installationskandidat-Version aus. Dies ist der normale Weg und die empfohlene Verwendung des APT-Systems. Alle offiziell unterstützten Archivkombinationen erfordern keine "/etc/apt/preferences"-Datei, da bei den Archiven, die nicht als automatische Quelle für Aktualisierungen genutzt werden sollten, die Einstellung NotAutomatic gesetzt ist und diese entsprechend behandelt werden.

[Tipp] Tipp

Die Regel zum Vergleich des Versionseintrags kann verifiziert werden, z.B. über "dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?" (näheres unter dpkg(1)).

Wenn Sie regelmäßig Pakete aus gemischten Quellen installieren (siehe Abschnitt 2.7.2, „Pakete aus gemischten Paketquellen“), können Sie diese komplizierten Operationen automatisieren, indem Sie eine Datei "/etc/apt/preferences" mit entsprechenden Einträgen erstellen; so beeinflussen Sie die Auswahlregel für die Installationskandidat-Version, wie in apt_preferences(5) beschrieben. Dies wird apt-pinning genannt.

[Warnung] Warnung

Die Verwendung von apt-pinning durch einen unerfahrenen Benutzer wird sicher große Probleme hervorrufen. Sie sollten die Verwendung von apt-pinning vermeiden, außer es ist unbedingt erforderlich.

[Achtung] Achtung

Wenn Sie apt-pinning verwenden, müssen Sie die Kompatibilität der Pakete selbst sicherstellen, da Debian diese nicht garantieren kann. Apt-pinning ist eine absolut optionale Operation und nichts, was ich Ihnen empfehlen kann.

[Achtung] Achtung

Die Release-Dateien auf Archiv-Ebene (näheres in Abschnitt 2.5.3, „"Release"-Dateien auf Archiv-Ebene“) werden für die apt_preferences(5)-Regel verwendet. Daher funktioniert apt-pinning bei normalen Debian-Archiven und Debian-Archiven für Sicherheitsaktualisierungen nur mit dem "Suite"-Namen. (Dies ist anders als bei Ubuntu-Archiven.) Zum Beispiel können wir "Pin: release a=unstable" in "/etc/apt/preferences" verwenden, aber nicht "Pin: release a=sid".

[Achtung] Achtung

Wenn Sie Debian-fremde Archive als Teil von apt-pinning verwenden, sollten Sie kontrollieren, wofür diese gedacht sind und ob sie glaubwürdig sind. So sind zum Beispiel Ubuntu und Debian nicht dazu gedacht, miteinander vermischt zu werden.

[Anmerkung] Anmerkung

Sogar wenn Sie keine "/etc/apt/preferences"-Datei erstellen, können Sie ziemlich komplexe Systemoperationen auch ohne apt-pinning durchführen (lesen Sie Abschnitt 2.6.4, „Systemrettung mit dem dpkg-Befehl“ und Abschnitt 2.7.2, „Pakete aus gemischten Paketquellen“).

Hier eine vereinfachte Beschreibung der Technik hinter apt-pinning:

Das APT-System wählt das Paket zum Upgrade mit der höchsten Pin-Priorität aus den verfügbaren (in "/etc/apt/sources.list" definierten) Paketquellen als Installationskandidat-Version aus. Wenn die Pin-Priorität des Pakets größer als 1000 ist, wird die Einschränkung auf ein Upgrade nicht beachtet, um ein Downgrade (eine Zurückrüstung auf eine ältere Version) zu ermöglichen (siehe Abschnitt 2.7.10, „Downgrade im Notfall“).

Werte für die Pin-Priorität eines jeden Pakets werden über "Pin-Priority"-Einträge in der "/etc/apt/preferences"-Datei festgelegt oder verwenden deren Standardwert.


Das Zielveröffentlichungs-Archiv kann über verschiedene Methoden festgelegt werden:

  • "/etc/apt/apt.conf"-Konfigurationsdatei mit einer "APT::Default-Release "stable";"-Zeile

  • Befehlszeilen-Option, z.B. "apt-get install -t testing irgendein-paket"

Die NotAutomatic- und ButAutomaticUpgrades-Archive werden durch Archiv-Server definiert, die in ihren Release-Dateien auf Archiv-Ebene (siehe Abschnitt 2.5.3, „"Release"-Dateien auf Archiv-Ebene“) sowohl "NotAutomatic: yes" wie auch "ButAutomaticUpgrades: yes" gesetzt haben. Das NotAutomatic-Archiv wird über Server definiert, die in ihren Release-Dateien auf Archiv-Ebene lediglich "NotAutomatic: yes" gesetzt haben.

Die apt-pinning-Situation von <package> aus mehreren Archivquellen wird mittels "apt-cache policy <package>" angezeigt.

  • Eine Zeile beginnend mit "Package pin:" listet die Paketversion von pin auf, wenn die Zuordnung direkt über <package> definiert ist, z.B. "Package pin: 0.190".

  • Es existiert keine Zeile mit "Package pin:", wenn keine Zuordnung direkt über <package> definiert ist.

  • Der Pin-Prioritäts-Wert, der direkt zu <package> gehört, ist rechts neben den Versionseinträgen aufgelistet, z.B. "0.181 700".

  • "0" wird rechts neben den Versionseinträgen aufgelistet, wenn keine Zuordnung direkt mit <package> definiert ist, z.B "0.181 0".

  • Die Pin-Prioritäts-Werte von Archiven (definiert als "Package: *" in der "/etc/apt/preferences"-Datei) sind links von den Archivpfaden aufgelistet, z.B. "100 http://ftp.de.debian.org/debian/ wheezy-backports/main Packages".

Es gibt wheezy-updates- und backports.debian.org-Archive, die aktualisierte Pakete für stable (wheezy) bereitstellen.

Um diese Archive zu nutzen, listen Sie alle erforderlichen Archive in der "/etc/apt/sources.list"-Datei wie unten gezeigt auf:

deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib
deb http://ftp.de.debian.org/debian/ wheezy-updates main contrib non-free
deb http://ftp.de.debian.org/debian/ wheezy-backports main contrib non-free

Es ist nicht nötig, einen Wert für die Pin-Priorität in "/etc/apt/preferences" zu setzen. Wenn neuere Pakete verfügbar werden, werden mit der Standardkonfiguration passende Upgrades bereitgestellt (siehe Abschnitt 2.5.3, „"Release"-Dateien auf Archiv-Ebene“).

  • Alle installierten veralteten Pakete werden auf die neuen von wheezy-updates aktualisiert.

  • Nur manuell installierte veraltete Pakete von wheezy-backports werden auf die neuen Versionen von wheezy-backports aktualisiert.

Wann immer Sie ein Paket namens "<paketname>" inklusive seiner Abhängigkeiten von wheezy-backports manuell installieren möchten, verwenden Sie den folgenden Befehl, wobei Sie die Zielveröffentlichung mit der Option "-t" festlegen.

$ sudo apt-get install -t wheezy-backports <paketname>

Hier ein Beispiel für eine apt-pinning-Technik, um neuere Upstream-Versionen einzelner Pakete aus Unstable regelmäßig aktualisieren zu können und ansonsten Testing zu verfolgen. Sie listen alle benötigten Archive in der "/etc/apt/sources.list"-Datei wie folgt auf:

deb http://ftp.de.debian.org/debian/ testing main contrib non-free
deb http://ftp.de.debian.org/debian/ unstable main contrib non-free
deb http://security.debian.org/ testing/updates main contrib

Richten Sie die "/etc/apt/preferences"-Datei wie folgt ein:

Package: *
Pin: release a=unstable
Pin-Priority: 100

Wenn Sie mit dieser Konfiguration ein Paket namens "<paketname>" aus dem Unstable-Archiv inklusive seiner Abhängigkeiten installieren möchten, führen Sie folgenden Befehl aus, der über die Option "-t" die Zielveröffentlichung ändert (die Pin-Priorität von Unstable wird 990).

$ sudo apt-get install -t unstable <paketname>

Mit dieser Konfiguration wird die normale Ausführung von "apt-get upgrade" und "apt-get dist-upgrade" (oder "aptitude safe-upgrade" und "aptitude full-upgrade") Pakete, die aus Testing installiert wurden, unter Verwendung des derzeitigen Testing-Archivs aktualisieren; Pakete, die aus Unstable installiert wurden, werden unter Verwendung des derzeitigen Unstable-Archivs aktualisiert.

[Achtung] Achtung

Achten Sie darauf, dass Sie nicht den "testing"-Eintrag aus der "/etc/apt/sources.list"-Datei entfernen. Ohne diesen "testing"-Eintrag aktualisiert das APT-System alle Pakete unter Verwendung des (neueren) Unstable-Archivs.

[Tipp] Tipp

Ich bearbeite für gewöhnlich die "/etc/apt/sources.list"-Datei direkt nach obigen Befehlen, um das "unstable"-Archiv auszukommentieren. Dies vermeidet einen langsamen Update-Prozess aufgrund von zu vielen Einträgen in der "/etc/apt/sources.list"-Datei; allerdings können dadurch Pakete, die aus Unstable installiert wurden, nicht unter Verwendung des derzeitigen Unstable-Archivs aktualisiert werden.

[Tipp] Tipp

Wenn "Pin-Priority: 1" statt "Pin-Priority: 100" in der "/etc/apt/preferences"-Datei verwendet wird, werden bereits installierte Pakete, die den Pin-Prioritäts-Wert 100 haben, nicht mittels dem Unstable-Archiv aktualisiert, selbst wenn der "testing"-Eintrag in "/etc/apt/sources.list" entfernt wird.

Wenn Sie bestimmte Pakete in Unstable automatisch ohne vorangestelltes "-t unstable" bei der Installation verfolgen möchten, müssen Sie die "/etc/apt/preferences"-Datei erstellen und ganz oben in der Datei all diese Pakete wie folgt auflisten:

Package: <package-1>
Pin: release a=unstable
Pin-Priority: 700

Package: <package-2>
Pin: release a=unstable
Pin-Priority: 700

Dadurch wird der Pin-Prioritäts-Wert für jedes Paket spezifisch gesetzt. Um zum Beispiel die aktuellste Unstable-Version dieser "Debian Reference" in Englisch zu verfolgen, sollten Sie folgende Einträge in Ihrer "/etc/apt/preferences"-Datei haben:

Package: debian-reference-en
Pin: release a=unstable
Pin-Priority: 700

Package: debian-reference-common
Pin: release a=unstable
Pin-Priority: 700
[Tipp] Tipp

Diese apt-pinning-Technik funktioniert sogar, wenn Sie das Stable--Archiv verfolgen. Dokumentationspakete konnten nach meiner Erfahrung bis jetzt immer problemlos aus dem Unstable-Archiv installiert werden.

Das apt-Paket enthält ein eigenes cron-Skript ("/etc/cron.daily/apt"), um den automatischen Download von Paketen zu unterstützen. Durch die Installation des unattended-upgrades-Pakets kann dieses Skript erweitert werden, so dass auch die automatische Aktualisierung von Paketen durchgeführt wird. Sie können dies über Parameter in "/etc/apt/apt.conf.d/02backup" und "/etc/apt/apt.conf.d/50unattended-upgrades" noch weiter anpassen (wie in "/usr/share/doc/unattended-upgrades/README" beschrieben).

Das unattended-upgrades-Paket ist hauptsächlich für Sicherheits-Upgrades auf Stable-Systemen gedacht. Wenn das Risiko, ein vorhandenes Stable-System über einen automatischen Upgrade-Prozess zu beschädigen, geringer ist als das, welches von einem Angreifer ausgeht, der über Ausnutzung einer Sicherheitslücke das System schädigt, sollten Sie ein automatisches Upgrade in Erwägung ziehen, das diese Lücke über ein Sicherheits-Upgrade schließt. Nutzen Sie dazu folgende Konfigurationsparameter:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";

Wenn Sie ein Unstable-System laufen haben, sollten Sie die automatischen Upgrades nicht verwenden, da sonst mit Sicherheit eines Tages das System beschädigt würde. Aber sogar für solch ein Unstable-System möchten Sie vielleicht in Vorbereitung für ein interaktives Upgrade die Pakete automatisch herunterladen, um Zeit zu sparen. Verwenden Sie dazu folgende Konfigurationsparameter:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "0";
[Achtung] Achtung

Ein Downgrade wird von Debian aufgrund seines Designs nicht offiziell unterstützt. Es sollte nur als Teil einer Notfall-Rettungsmaßnahme durchgeführt werden. Davon einmal abgesehen weiß man, dass es in den meisten Fällen gut funktioniert. Bei kritischen Systemen sollten Sie nach der Wiederherstellung alle wichtigen Daten auf dem System sichern und dann das System von Grund auf neu installieren.

Sie könnten Glück haben, ein Downgrade (Zurückrüstung auf eine ältere Debian-Version) von einem neueren auf ein älteres Archiv durchzuführen, indem Sie die Installationskandidat-Versionen manipulieren (lesen Sie dazu Abschnitt 2.7.3, „Installationskandidat-Version beeinflussen“). Dies ist die tippfaule Alternative zu langwierigen Aktionen vieler Befehle der Art "dpkg -i <beschädigtes-paket>_<alte-version>.deb" (näheres in Abschnitt 2.6.4, „Systemrettung mit dem dpkg-Befehl“).

Suchen Sie Zeilen in der "/etc/apt/sources.list"-Datei wie die folgende, die unstable referenzieren:

deb http://ftp.de.debian.org/debian/ sid main contrib non-free

Ersetzen Sie sie durch die folgende, um stattdessen auf testing zu verweisen:

deb http://ftp.de.debian.org/debian/ jessie main contrib non-free

Legen Sie die "/etc/apt/preferences"-Datei wie folgt an:

Package: *
Pin: release a=testing
Pin-Priority: 1010

Führen Sie "apt-get update; apt-get dist-upgrade" aus, um ein Downgrade aller Pakete im System zu erzwingen.

Entfernen Sie diese spezielle "/etc/apt/preferences"-Datei nach dem Downgrade.

[Tipp] Tipp

Es ist eine gute Idee, so viele Pakete wie möglich zu löschen (nicht vollständig inklusive der Konfigurationsdateien entfernen!), um die Wahrscheinlichkeit von Abhängigkeitsproblemen zu minimieren. Sie müssen unter Umständen einige Pakete von Hand entfernen oder installieren, um ein Downgrade des Systems durchführen zu können. Linux-Kernel, Bootloader, udev, PAM, APT und Netzwerk-bezogene Pakete sowie deren Konfigurationsdateien erfordern besondere Aufmerksamkeit.

Obwohl das Spiegeln von kompletten Untersektionen des Debian-Archivs Plattenplatz und Netzwerkbandbreite verschwendet, ist es der Einsatz eines lokalen Proxy-Servers für APT wert in Erwägung gezogen zu werden, wenn Sie viele Systeme im LAN (Netzwerk) administrieren. APT kann konfiguriert werden, einen generischen Web-(http-)Proxy-Server wie squid (siehe auch Abschnitt 6.10, „Other network application servers“) zu verwenden, wie in apt.conf(5) und "/usr/share/doc/apt/examples/configure-index.gz" beschrieben. Die Umgebungsvariable "$http_proxy" kann genutzt werden, um die Proxy-Server-Einstellungen aus der "/etc/apt/apt.conf"-Datei zu überschreiben.

Es gibt Proxy-Hilfsprogramme, die für das Debian-Archiv spezialisiert sind. Sie sollten die Fehlerdatenbank (BTS) überprüfen, bevor Sie sie verwenden.


[Achtung] Achtung

Wenn Debian seine Archivstruktur umorganisiert, neigen diese spezialisierten Proxy-Hilfsprogramme dazu, eine Code-Änderung durch den Paketbetreuer zu benötigen und könnten eine Zeit lang nicht funktionieren. Generische Web-(http-)Proxy-Server auf der anderen Seite sind robuster und können einfacher mit solchen Änderungen umgehen.

Hier ein Beispiel für die Erstellung eines kleinen öffentlichen Paketarchivs, das mit dem modernen secure APT-System (siehe Abschnitt 2.5.2, „"Release"-Datei in der obersten Ebene und Authentizität“) kompatibel ist. Wir gehen einmal von folgenden Dingen aus:

  • Kontoname: "foo"

  • Rechnername (host name): "www.example.com"

  • Erforderliche Pakete: apt-utils, gnupg, und andere

  • URL: "http://www.example.com/~foo/" ( → "/home/foo/public_html/index.html")

  • Architektur der Pakete: "amd64"

Erzeugen Sie wie folgt einen APT-Archiv-Schlüssel von Foo auf Ihrem System:

$ ssh foo@www.example.com
$ gpg --gen-key
...
$ gpg -K
...
sec   1024D/3A3CB5A6 2008-08-14
uid                  Foo (ARCHIVE KEY) <foo@www.example.com>
ssb   2048g/6856F4A7 2008-08-14
$ gpg --export -a 3A3CB5A6 >foo.public.key

Publizieren Sie die Archivschlüssel-Datei "foo.public.key" für Foo mit der Schlüssel-ID "3A3CB5A6".

Erzeugen Sie wie folgt einen Archivbaum namens "Origin: Foo":

$ umask 022
$ mkdir -p ~/public_html/debian/pool/main
$ mkdir -p ~/public_html/debian/dists/unstable/main/binary-amd64
$ mkdir -p ~/public_html/debian/dists/unstable/main/source
$ cd ~/public_html/debian
$ cat > dists/unstable/main/binary-amd64/Release << EOF
Archive: unstable
Version: 4.0
Component: main
Origin: Foo
Label: Foo
Architecture: amd64
EOF
$ cat > dists/unstable/main/source/Release << EOF
Archive: unstable
Version: 4.0
Component: main
Origin: Foo
Label: Foo
Architecture: source
EOF
$ cat >aptftp.conf <<EOF
APT::FTPArchive::Release {
  Origin "Foo";
  Label "Foo";
  Suite "unstable";
  Codename "sid";
  Architectures "amd64";
  Components "main";
  Description "Public archive for Foo";
};
EOF
$ cat >aptgenerate.conf <<EOF
Dir::ArchiveDir ".";
Dir::CacheDir ".";
TreeDefault::Directory "pool/";
TreeDefault::SrcDirectory "pool/";
Default::Packages::Extensions ".deb";
Default::Packages::Compress ". gzip bzip2";
Default::Sources::Compress "gzip bzip2";
Default::Contents::Compress "gzip bzip2";

BinDirectory "dists/unstable/main/binary-amd64" {
  Packages "dists/unstable/main/binary-amd64/Packages";
  Contents "dists/unstable/Contents-amd64";
  SrcPackages "dists/unstable/main/source/Sources";
};

Tree "dists/unstable" {
  Sections "main";
  Architectures "amd64 source";
};
EOF

Sie können wiederkehrende Updates der APT-Archiv-Inhalte auf Ihrem Server automatisieren, indem Sie dupload konfigurieren.

Platzieren Sie die Paketdateien in "~foo/public_html/debian/pool/main/", indem Sie "dupload -t foo changes_file" ausführen, während "~/.dupload.conf" folgendes enthält:

$cfg{'foo'} = {
  fqdn => "www.example.com",
  method => "scpb",
  incoming => "/home/foo/public_html/debian/pool/main",
  # The dinstall on ftp-master sends emails itself
  dinstall_runs => 1,
};

$cfg{'foo'}{postupload}{'changes'} = "
  echo 'cd public_html/debian ;
  apt-ftparchive generate -c=aptftp.conf aptgenerate.conf;
  apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release ;
  rm -f dists/unstable/Release.gpg ;
  gpg -u 3A3CB5A6 -bao dists/unstable/Release.gpg dists/unstable/Release'|
  ssh foo@www.example.com  2>/dev/null ;
  echo 'Package archive created!'";

Das postupload-Hook-Skript, das von dupload(1) angestossen wurde, erzeugt aktualisierte Archivdateien für jeden Upload.

Mit folgenden Befehlen können Sie dieses kleine öffentliche Archiv zu der apt-Zeile auf Ihrem Client-System hinzufügen:

$ sudo bash
# echo "deb http://www.example.com/~foo/debian/ unstable main" \
   >> /etc/apt/sources.list
# apt-key add foo.public.key
[Tipp] Tipp

Wenn das Archiv in dem lokalen Dateisystem abgelegt ist, können Sie stattdessen "deb file:///home/foo/debian/ …" verwenden.

Die Inhalte des "dpkg*.deb"-Pakets können in allen Unix-ähnlichen Umgebungen mit den Standardwerkzeugen ar(1) und tar(1) auch ohne dpkg(1) extrahiert werden:

# ar x /pfad/zu/dpkg_<version>_<arch>.deb
# ls
total 24
-rw-r--r-- 1 bozo bozo  1320 2007-05-07 00:11 control.tar.gz
-rw-r--r-- 1 bozo bozo 12837 2007-05-07 00:11 data.tar.gz
-rw-r--r-- 1 bozo bozo     4 2007-05-07 00:11 debian-binary
# mkdir control
# mkdir data
# tar xvzf control.tar.gz -C control
# tar xvzf data.tar.gz -C data

Die Inhalte anderer "*.deb"-Pakete können mit dem dpkg-deb(1)-Befehl aus dem oben genannten "dpkg*.deb"-Paket entpackt werden; oder verwenden Sie ar(1) und das neuere GNU tar(1) mit Unterstützung für den xz(1)-Dekompressionsalgorithmus, ähnlich dem obigen Beispiel.

Der Paketinhalt kann auch mit dem mc-Befehl durchsucht werden.