Kapitel 2. Debian-Paketmanagement

# Kapitel 2. Debian-Paketmanagement

| Anmerkung

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

Die Paketquellen für das APT-System werden in diesem Dokument mit dem Oberbegriff sources.list bezeichnet . Sie können die entsprechenden Eintragungen sowohl in der Datei "`/etc/apt/sources.list`" durchführen, sowie in irgendeiner "`/etc/apt/sources.list.d/*.list`"- oder "`/etc/apt/sources.list.d/*.sources`"-Datei.

## 2.1. Grundvoraussetzungen für das Debian-Paketmanagement

### 2.1.1. Debian-Paketmanagement

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 Spiegel-Servern via HTTP und FTP bereitgestellt. Es ist auch als CD-ROM/DVD erhältlich.

Das derzeit empfohlene Debian-Werkzeug für Paketmanagement, das all diese Ressourcen nutzen kann, ist das Advanced Packaging Tool (APT).

Debians Paketmanagement-System, ermöglicht dem Nutzer (wenn es korrekt genutzt wird), konsistente Sätze von Binärpaketen auf dem System zu installieren. Derzeit sind für die amd64-Architektur 78093 Pakete verfügbar.

Das Debian-Paketmanagement-System hat eine reichhaltige Geschichte und bietet eine Auswahl an Frontend-Benutzerprogrammen, die genutzt werden können sowie an verschiedenen Varianten des Archivzugriffs. Derzeit empfehlen wir folgendes:

- apt(8) für alle interaktiven Befehlszeilen-Operationen, inklusive Paketinstallationen und -entfernungen sowie Distributions-Upgrades;

- apt-get(8) für Paketverwaltungsoperationen mittels Skripten; auch eine Ausweichlösung für den Fall, dass `apt` nicht verfügbar ist (z.B. auf älteren Debian-Systemen);

- aptitude(8) für ein interaktives Text-Interface zur Verwaltung der installierten Pakete und für die Suche nach verfügbaren Paketen.

Tabelle 2.1. Liste von Debians Paketmanagement-Werkzeugen

Paket | Popcon | Größe | Beschreibung
--- | --- | --- | ---
`dpkg` | V:904, I:1000 | 6399 | niederschwelliges Paketmanagement-System für Debian (datei-basiert)
`apt` | V:892, I:1000 | 4956 | APT-Frontend zur Paketverwaltung mit text-basierter Bedienung: `apt`/`apt-get`/`apt-cache`
`aptitude` | V:32, I:168 | 4621 | APT-Frontend für interaktives Paketmanagement mit Vollbildschirm-Konsole: aptitude(8)
`tasksel` | V:37, I:984 | 351 | APT-Frontend zur Installation von vorausgewählten Programmgruppen (Tasks): tasksel(8)
`unattended-upgrades` | V:127, I:181 | 320 | Erweiterungspaket für APT, um die automatische Installation von Sicherheits-Aktualisierungen zu ermöglichen
`gnome-software` | V:155, I:259 | 4707 | Software Center für GNOME (grafisches Frontend für APT)
`synaptic` | V:31, I:276 | 7788 | grafischer Paketmanager (grafisches GTK-Frontend für APT)
`apt-utils` | V:414, I:998 | 1181 | APT-Hilfsprogramme: apt-extracttemplates(1), apt-ftparchive(1) und apt-sortpkgs(1)
`apt-listchanges` | V:396, I:891 | 562 | Benachrichtigungswerkzeug für die Änderungshistorie von Paketen
`apt-listbugs` | V:5.2, I:7.1 | 512 | Auflistung kritischer Fehler vor jeder APT-Installation
`apt-file` | V:15, I:56 | 89 | APT-Paketsuch-Werkzeug - Befehlszeilen-Interface
`apt-rdepends` | V:0.4, I:4.7 | 39 | rekursive Auflistung von Paketabhängigkeiten

### 2.1.2. Paketkonfiguration

Hier einige wichtige Punkte für die Paketkonfiguration auf einem Debian-System:

- For the modern Desktop environment, rebooting of the system after package configuration change and package upgrade is a good idea to ensure the system to function properly.

- Die händische Konfiguration durch den Systemadministrator wird respektiert. In anderen Worten: das Paketkonfigurationssystem führt keine aufdringliche Konfiguration durch, nur weil es einfach wäre.

- Jedes Paket enthält sein eigenes Konfigurationsskript mit einer standardisierten Benutzerschnittstelle namens debconf(7), um Sie bei der Erstinstallation des Pakets zu unterstützen.

- Debian-Entwickler versuchen ihr Bestes, um mittels der Paketkonfigurationsskripte für einen fehlerfreien Ablauf der Paketaktualisierungen zu sorgen.

- Dem Systemadministrator steht die volle Funktionalität der paketierten Software zur Verfügung, aber Funktionen mit Sicherheitsrisiken sind standardmäßig deaktiviert.

- Wenn Sie von Hand einen Dienst aktivieren und so Sicherheitsrisiken hervorrufen, sind Sie selbst für die Beherrschung der Risiken verantwortlich.

- Esoterische Konfigurationen könnten manuell durch den Systemadministrator aktiviert worden sein. Dies kann Behinderungen mit beliebten, grundlegenden Systemkonfigurations-Programmen verursachen.

### 2.1.3. Grundsätzliche Vorsichtsmaßnahmen

| Warnung
Installieren Sie nicht Pakete aus einer wahllosen Mischung von Debian-Suiten (Stable, Testing, Unstable, Experimental). Sie können dadurch die Paketkonsistenz beschädigen und deren Korrektur erfordert ein tiefes Verständnis der Systemverwaltung 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. Bis Sie das Debian-System gut verstehen, sollten Sie folgende Vorsichtsmaßnahmen einhalten:

- Fügen Sie nicht `testing` oder `unstable` in Ihre "`sources.list`" ein.

- Vermischen Sie in Ihrer "`sources.list`" nicht das Standard-Debian mit anderen Nicht-Debian-Archiven wie Ubuntu.

- Erstellen Sie keine "`/etc/apt/preferences`"-Datei.

- Ä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 solche Pakete, falls nötig, in "`/usr/local`" oder "`/opt`".

Die nicht-kompatiblen Effekte, die das Verletzen von obigen Maßnahmen im Debian-Paketmanagement verursachen können, führen im schlimmsten Falle zu einem nicht mehr verwendbaren System.

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.

### 2.1.4. Leben mit den ewigen Aktualisierungen

| 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.

Trotz der obigen Warnungen weiß ich, dass viele Leser dieses Dokuments trotzdem die neuere `Testing`- oder `Unstable`-Suite nutzen möchten.

Die Erleuchtung, die wir Ihnen mit den folgenden Informationen bieten, bewahrt Sie vor der ewigen karmischen Qual der Upgrade-Hölle und ermöglicht Ihnen, das Debian-Nirvana zu erreichen.

Diese Liste zielt auf ein selbst-administriertes Arbeitsplatzsystem ab:

- Nutzen Sie die `Testing`-Suite, da dies letztlich ein Rolling-Release ist, das von Debians Qualitässicherungs-Infrastruktur profitiert, wie Debians Continuous-Integration-Unterstützung, der Regel, dass nur Quellcode hochgeladen werden kann sowie die Nachverfolgung von Versionsübergängen bei Bibliotheken. Die Pakete in der `Testing`-Suite werden häufig genug aktualisiert, um stets die neuesten Funktionalitäten bieten zu können.

- Setzen Sie den zur `Testing`-Suite passenden Codenamen (während `trixie` der aktuellen `stable`-Suite entspricht, ist dies "`forky`") in Ihrer "`sources.list`".

- Eine gewisse Zeit nach Freigabe einer neuer Debian-Veröffentlichung (ca. einen Monat, oder nach Ihrer eigenen Beurteilung auch früher oder später), ändern Sie diesen Namen in Ihrer "`sources.list`" händisch in den neuen Codenamen für `Testing`. Die Debian-User- oder -Developer-Mailinglisten sind auch gute Quellen für diese Informationen.

Die Verwendung von `Unstable` wird nicht empfohlen. Die `Unstable`-Suite ist für Entwickler gut geeignet zur Fehlersuche in Paketen, bringt aber für normale Arbeitsplatznutzer auch gewisse unnötige Risiken mit sich. Selbst wenn die `Unstable`-Suite von Debian die meiste Zeit sehr stabil erscheint, hat es in der Vergangenheit bereits Probleme mit bestimmten Paketen gegeben, von denen einige nicht einfach zu beheben waren.

Hier einige Tipps für grundlegende Vorsichtsmaßnahmen, wie Sie eine schnelle und einfache Systemwiederherstellung bei Fehlern in Debian-Paketen gewährleisten können:

- Make the rescue system available by following Abschnitt 3.2, „Rescue system“.

- Erstellen Sie ein Dual-boot-fähiges System, das Debians `Stable`-Suite auf einer anderen Partition installiert hat.

- Ziehen Sie in Betracht, `apt-listbugs` zu installieren, um vor einer Paketaktualisierung relevante Informationen aus der Debian-Fehlerdatenbank (BTS) einsehen zu können.

- Lernen Sie genug über die Infrastruktur des Paketsystems, um das Problem umgehen zu können.

| Achtung
Falls Sie keine dieser Vorsichsmaßnahmen durchführen können, sind Sie möglicherweise nicht bereit für die `Testing`- oder `Unstable`-Suite.

### 2.1.5. Grundlagen über das Debian-Archiv

| Tipp
Die offiziellen Richtlinien für das Debian-Archiv sind im Debian Policy-Handbuch, Kapitel 2 - The Debian Archive festgeschrieben.

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

Für einen System-User erfolgt der Zugriff auf das Debian-Archiv über das APT-System.

Die Paketquellen für das APT-System werden hier mit dem Oberbegriff sources.list definiert und sind in sources.list(5) beschrieben.

For the `trixie` system with the typical HTTP access, the source list is provided in the modern deb822-style in "`/etc/apt/sources.list.d/debian.sources`" as the following:

    Types: deb deb-src
    URIs: http://deb.debian.org/debian/
    Suites: trixie
    Components: main non-free-firmware contrib non-free

    Types: deb deb-src
    URIs: http://security.debian.org/debian-security/
    Suites: trixie-security
    Components: main non-free-firmware contrib non-free

| Tipp

If the source list is provided in the older deprecated one-line-style in "`/etc/apt/sources.list`" or "`/etc/apt/sources.list.d/*.list`" files, update them with:

     $ sudo apt modernize-sources

Key points of the source list in deb822-style are followings.

- Die Konfiguration wird hier in "`/etc/apt/sources.list.d/*.sources`"-Dateien festgelegt.

- Jeder Block von Zeilen (getrennt durch eine Leerzeile) definiert eine Paketquelle für das APT-System.

- Der "`Types:`"-Eintrag definiert den Typ der Quelle wie "`deb`" (für Binärpakete) und "`deb-src`" (für Quellpakete).

- Der "`URIs:`"-Eintrag definiert die Liste von Wurzel-URI-Adressen für das Debian-Archiv.

- Der "`Suites:`"-Eintrag definiert die Liste der Distributionsnamen, entweder über den Namen der Suite oder den Codenamen.

- Der "`Components:`"-Eintrag definiert die Liste der verwendeten Archivbereiche aus dem Debian-Archiv.

Die Definition für "`deb-src`" kann problemlose weggelassen werden, wenn die Konfiguration lediglich für `aptitude` ist, da `aptitude` entsprechende Metadaten nicht auswertet. Dies beschleunigt die Aktualisierung der Archiv-Metadaten.

Die URL kann "`https://`", "`http://`", "`ftp://`", "`file://`", …. sein.

Zeilen, die mit "`#`" beginnen, sind Kommentare und werden ignoriert.

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

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

Hier eine Liste der URL von Debian-Archiv-Seiten und Suite- oder Codenamen, die in der Konfigurationsdatei nach einer `trixie`-Veröffentlichung verwendet werden.

Tabelle 2.2. Liste von Debian-Archiv-Seiten

Archiv-URL | Suite-Name | Codename | Zweck der Paketquelle
--- | --- | --- | ---
http://deb.debian.org/debian/ | `stable` | `trixie` | Quasi statische `stable`-Veröffentlichung, umfangreich getestet
http://deb.debian.org/debian/ | `testing` | `forky` | Dynamische `testing`-Veröffentlichung, annehmbar getestet, Änderungen nach kurzer Wartezeit
http://deb.debian.org/debian/ | `unstable` | `sid` | Dynamische `unstable`-Veröffentlichung, nur minimale Tests, Änderungen ohne Wartezeit
http://deb.debian.org/debian/ | `experimental` | Nicht verfügbar | Experimentelle Vorveröffentlichung von Entwicklern (optional, nur für Entwickler)
http://deb.debian.org/debian/ | `stable-proposed-updates` | `trixie-proposed-updates` | Aktualisierungen für die nächste `stable`-Zwischenveröffentlichung (optional)
http://deb.debian.org/debian/ | `stable-updates` | `trixie-updates` | Eine Untermenge von `stable-proposed-updates` für Pakete, die dringende Updates erfordern, wie Anpassungen von Zeitzonen (optional)
http://deb.debian.org/debian/ | `stable-backports` | `trixie-backports` | Grobe Sammlung von vorkompilierten Paketen überwiegend aus der `testing`-Suite (optional)
http://security.debian.org/debian-security/ | `stable-security` | `trixie-security` | Sicherheitsaktualisierungen für die `stable`-Suite (wichtig)
http://security.debian.org/debian-security/ | `testing-security` | `forky-security` | Weder aktiv unterstützt noch genutzt vom Security-Team

| Achtung

Nur die reine `Stable`-Veröffentlichung mit Sicherheitsaktualisierungen bietet beste Stabilität. Zum größten Teil die `Stable`-Veröffentlichung zu verwenden, aber 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 von stable-updates und backports (lesen Sie dazu Abschnitt 2.7.4, „Aktualisierungen und Backports“). Diese Dienste müssen mit besonderer Sorgfalt genutzt werden.

| Achtung

Sie sollten grundsätzlich nur eine der Suiten `stable`, `testing` oder `unstable` pro "`deb`"-Zeile angeben. Wenn Sie irgendeine Kombination von `stable`, `testing` und `unstable` in einer "`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.7, „Die Installationskandidat-Version anpassen mit apt-pinning“).

| Tipp
Für ein Debian-System mit der `Stable`-Veröffentlichung ist es eine gute Idee, wie in obigem Beispiel Zeilen/Einträge mit "`http://security.debian.org/`" in der "`sources.list`" zu integrieren, um Sicherheitsaktualisierungen zu erhalten.

| Anmerkung

Sicherheitsprobleme im `Stable`-Archiv werden vom Debian-Sicherheits-Team behoben. Dies 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 funktioniert dies aber nicht so gründlich wie 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.

Tabelle 2.3. Liste der Debian-Archiv-Bereiche

Bereich | Anzahl der Pakete | Kriterien der Paketkomponenten
--- | --- | ---
`main` | 76611 | DFSG-konform und keine Abhängigkeiten zu `non-free`
`non-free-firmware` | 75 | nicht DFSG-konforme Firmware; oft erforderlich, um ein angemessenes Ergebnis bei einer Systeminstallation zu erhalten
`contrib` | 362 | DFSG-konform, aber mit Abhängigkeiten zu `non-free`
`non-free` | 1045 | nicht DFSG-konform und nicht in `non-free-firmware`

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

Die Struktur des Debian-Archivs können am besten erforschen, 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:

Tabelle 2.4. Zusammenhanag zwischen Suite und Codename

Zeitraum | Suite = `Stable` | Suite = `Testing` | Suite = `Unstable`
--- | --- | --- | ---
nach der Veröffentlichung von `Trixie` | Codename = `Trixie` | Codename = `Forky` | Codename = `Sid`
nach der Veröffentlichung von `Forky` | Codename = `Forky` | Codename = `Duke` | Codename = `Sid`

Die Historie der Codenamen ist beschrieben in der 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.

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 2-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

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. Das System ist in dieser Zeit nur schwer in lauffähigem 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 einem Monat (evtl. mehr) könnte das `Unstable`-oder `Testing`Archiv wieder nützlich sein, wenn Sie vorsichtig sind.

| Tipp
Wenn Sie das `Testing`-Archiv beobachten, stellen Sie fest, dass ein durch die Entfernung eines Pakets verursachtes Problem normalerweise umgangen wird, indem man das entsprechende Paket aus `Unstable` installiert, welches zwecks Behebung des Fehlers hochgeladen wurde.

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

- "Sections" (Sektionen);

- "Priorities" (Prioritäten);

- "Base system" (Grundsystem);

- "Essential packages" (grundlegende Pakete).

### 2.1.6. Debian ist zu 100% freie Software

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

- Debian installiert standardmäßig nur freie Software und respektiert so diedie Freiheit des Benutzers.

- Debian stellt in `main` nur freie Software bereit.

- Debian empfiehlt, nur freie Software aus `main` zu verwenden.

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

Einige Leute fragen sich, ob sich folgende Fakten widersprechen oder nicht:

- "Debian wird zu 100% frei bleiben" (der erste Punkt des Debian-Gesellschaftsvertrags).

- Debian-Server beherbergen etliche `non-free-firmware`-, `non-free`- und `contrib`-Pakete.

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 befinden sich auf den Debian-Servern in den Bereichen `non-free`, `non-free-firmware` und `contrib`.

Dies wird 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, bieten wir ein integriertes System von hoher Qualität an, 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 "`non-free`", "`non-free-firmware`" und "`contrib`" 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). Offizielle Installationsmedien von Debian könnten Firmware enthalten, die sonst nicht Teil des Debian-Systems sind; dies soll es ermöglichen, Debian auf Hardware einzusetzen, die solche Firmware erfordert.

| Anmerkung
Der aktuelle Text des 5. Absatzes im derzeitigen Debian-Gesellschaftsvertrag unterscheidet sich geringfügig von obigem Text. Diese redaktionelle Abweichung ist beabsichtigt, um dieses Dokument konsistent zu machen, ohne den realen Inhalt des Gesellschaftsvertrags ändern zu müssen.

Benutzer sollten sich der Risiken bewußt sein, die durch die Verwendung von Paketen aus `non-free`, `non-free-firmware` und `contrib` entstehen:

- fehlende Freiheit bei diesen Software-Paketen;

- 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 künstlerische Arbeiten in einem Paket. Aufgrund dessen sind Debians Freie-Software-Standards sehr streng.

Typische `non-free`-, `non-free-firmware`- 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.10.5, „Hardware-Treiber und Firmware“ unter `non-free-firmware` aufgeführt sind (meistens zu finden in der Sektion `non-free-firmware/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`, `non-free-firmware` und `contrib` weniger als 2% der Pakete in `main` beträgt. Den Zugriff auf die Bereiche `non-free`, `non-free-firmware` und `contrib` 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.

### 2.1.7. Paketabhängigkeiten

Das Debian-System stellt einen konsistenten Satz von Binärpaketen bereit und verwendet dafür einen Deklarationsmechanismus für versionierte Binärabhängigkeiten über Felder in der control-Datei. Hier eine leicht vereinfachte Definition dieser 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 auch 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, auch die in diesem Feld aufgelisteten Pakete zu installieren, aber selbst ohne diese bietet das Paket vernünftige Funktionalität.

- "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 lösen Sie etwaige Probleme, indem Sie alle in diesem Feld aufgelisteten Pakete auf den neuesten Stand bringen.

- "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
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.

### 2.1.8. Die Ereignisabfolge für das Paketmanagement

Hier folgt eine vereinfachte Ereignisabfolge für das APT-Paketmanagement.

- Aktualisierung der Paketlisten / Update ("`apt update`", "`aptitude update`" oder "`apt-get update`"):

  1. Archiv-Metadaten vom Archiv-Server beziehen;

  2. Neuaufbau und Aktualisierung der lokalen Metadaten für die Verwendung durch APT.

- Paketaktualisierung / Upgrade ("`apt upgrade`" und "`apt full-upgrade`" oder "`aptitude safe-upgrade`" und "`aptitude full-upgrade`" oder "`apt-get upgrade`" und "`apt-get dist-upgrade`"):

  1. Auswahl der Installationskandidat-Version für alle installierten Pakete, was üblicherweise die jeweils letzte verfügbare Version ist (in Abschnitt 2.7.7, „Die Installationskandidat-Version anpassen mit apt-pinning“ finden Sie Infos, wie Sie Ausnahmen festlegen);

  2. Auflösung der Paketabhängigkeiten;

  3. Ausgewählte Binärpakete vom Archiv-Server beziehen, falls die jeweilige Installationskandidat-Version sich von der installierten Version unterscheidet;

  4. Entpacken der heruntergeladenen Binärpakete;

  5. Ausführen des preinst-Skripts;

  6. Installieren der Binärdateien;

  7. Ausführen des postinst-Skripts.

- Installieren / Install ("`apt install …`", "`aptitude install …`" oder "`apt-get install …`"):

  1. Auswählen der Pakete über die Angabe auf der Befehlszeile

  2. Auflösung der Paketabhängigkeiten;

  3. Beziehen der ausgewählten Binärpakete vom Archiv-Server;

  4. Entpacken der heruntergeladenen Binärpakete;

  5. Ausführen des preinst-Skripts;

  6. Installieren der Binärdateien;

  7. Ausführen des postinst-Skripts.

- Entfernen / Remove ("`apt remove …`", "`aptitude remove …`" oder "`apt-get remove …`"):

  1. Auswählen der Pakete über die Angabe auf der Befehlszeile

  2. Auflösung der Paketabhängigkeiten;

  3. Ausführen des prerm-Skripts;

  4. Löschen der installierten Dateien außer den Konfigurationsdateien;

  5. Ausführen des postrm-Skripts.

- Entfernen inkl. der Konfigurationsdateien / Purge ("`apt purge`", "`aptitude purge …`" oder "`apt-get purge …`"):

  1. Auswählen der Pakete über die Angabe auf der Befehlszeile

  2. Auflösung der Paketabhängigkeiten;

  3. Ausführen des prerm-Skripts;

  4. Löschen der installierten Dateien inklusive der Konfigurationsdateien;

  5. Ausführen des postrm-Skripts.

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

### 2.1.9. Erste Hilfe bei Paketmanagement-Problemen

Sie sollten die offizielle Dokumentation lesen. Das erste Dokument ist hierbei die Debian-spezifische Datei "`/usr/share/doc/paketname/README.Debian`". Weitere Dokumentation in "`/usr/share/doc/paketname/`" sollten Sie ebenfalls konsultieren. Wenn Sie die Shell wie in Abschnitt 1.4.2, „Anpassen der bash“ beschrieben eingerichtet haben, geben Sie folgendes ein:

    $ cd package_name
    $ pager README.Debian
    $ mc

Sie müssen unter Umständen das entsprechende Dokumentationspaket installieren (hängen Sie dazu "`-doc`" an den Namen an), um die Dokumentation verfügbar zu haben.

Wenn Sie Probleme mit einem bestimmten Paket haben, sollten Sie unbedingt zuerst die Seiten der Debian-Fehlerdatenbank (BTS) besuchen.

Tabelle 2.5. Liste wichtiger Websites zur Lösung von Paketproblemen

Website | Befehl
--- | ---
Homepage der Debian-Fehlerdatenbank (BTS) | `sensible-browser "https://bugs.debian.org/"`
Fehlerberichte gegen ein bestimmtes Paket | `sensible-browser "https://bugs.debian.org/paketname"`
Fehlerbericht mit einer bekannten Fehlernummer | `sensible-browser "https://bugs.debian.org/fehlernummer"`

Suchen Sie bei Google mit Suchbegriffen, die "`site:debian.org`", "`site:wiki.debian.org`", "`site:lists.debian.org`" usw. enthalten.

Wenn Sie einen Fehlerbericht einreichen, nutzen Sie bitte den Befehl reportbug(1).

### 2.1.10. Wie Sie Debian-Pakete auswählen

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, welches das richtige ist) 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;

- Packages selected by the dependency package (e.g., `gcc-16` by `gcc`)

- 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.

### 2.1.11. Wie Sie mit Konflikten umgehen

Welche Debian-Suite Sie auch immer entschieden haben zu nutzen, Sie werden immer den Wunsch haben, Versionen von Programmen laufen zu lassen, die nicht in dieser Suite enthalten sind. Selbst wenn Sie Binärpakete von solchen Programmen in anderen Debian-Suites oder in nicht-Debian-Quellen finden, könnten deren Abhängigkeiten mit Ihrem aktuellen Debian-Systemen kollidieren.

Obwohl Sie das Paketmanagement anpassen können, z.B. mit der apt-pinning-Technik, um solche nicht-synchronen Binärpakete zu installieren (wie in Abschnitt 2.7.7, „Die Installationskandidat-Version anpassen mit apt-pinning“ beschrieben), haben diese Ansätze nur eine begrenzte Reichweite, da sie auch die entsprechenden Programme oder Ihr System beschädigen können.

Bevor Sie all zu brutal versuchen, solchen nicht-synchronen Pakete zu installieren, sollten Sie vorher alle verfügbaren alternativen und sicheren Lösungen in Erwägung ziehen, die mit Ihrem aktuellen Debian-System kompatibel sind:

- Installieren solcher Programme unter Verwendung eines passenden Binärpakets von Upstream in einer Sandbox (siehe Abschnitt 7.7, „Sandbox“).

  - Viele grafische Programme wie LibreOffice und GNOME-Anwendungen sind als Flatpak-, Snap- oder AppImage-Pakete verfügbar.

- Erzeugen Sie eine chroot- oder ähnliche Umgebung und lassen Sie dort solche Programme laufen (lesen Sie dazu Abschnitt 9.11, „Virtualisierte Systeme“).

  - CLI-Befehle (Konsolen-Programme) können auf einfache Art in einer kompatiblen Chroot-Umgebung ausgeführt werden (siehe Abschnitt 9.11.4, „Chroot-System“).

  - Systeme mit mehreren grafischen Arbeitsplatzumgebungen können einfach ohne einen Reboot getestet werden (siehe Abschnitt 9.11.5, „System mit mehreren Arbeitsplatzumgebungen“).

- Bauen Sie die gewünschten Versionen der Binärpakete selbst, so dass sie mit Ihrem laufenden Debian-System kompatibel sind.

  - Dies ist allerdings keine triviale Aufgabe (siehe Abschnitt 2.7.13, „Ein Paket auf das Stable-System portieren“).

## 2.2. Grundlegende Paketmanagement-Operationen

Paketmanagement-Operationen können im Debian-System mit vielen, auf APT aufbauenden Werkzeugen durchgeführt werden. Wir beschreiben hier drei grundlegende Paketmanagement-Werkzeuge: `apt`, `apt-get` / `apt-cache` und `aptitude`.

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

### 2.2.1. `apt` contra `apt-get` / `apt-cache` contra `aptitude`

Obwohl `aptitude` ein tolles interaktives Werkzeug ist, das auch der Autor überwiegend verwendet, sollten Sie einige warnende Fakten kennen:

- `aptitude` wird nicht für das Upgrade eines Debian-`Stable`-Systems (Hochrüstung von einer Stable-Version zur nächsten) empfohlen.

  - Dafür empfehlen wir "`apt full-upgrade`" oder "`apt-get dist-upgrade`". Lesen Sie dazu den Fehlerbericht #411280.

- Manchmal empfiehlt `aptitude` beim System-Upgrade von `Testing`- oder `Unstable`-Systemen die massenweise Entfernung von Paketen.

  - Diese Situation hat schon manchen Systemadministrator erschreckt. Aber: keine Panik.

  - Dies wurde scheinbar überwiegend dadurch verursacht, dass eine Schieflage bei den Versionsnummern von Paketen bestand, die von Metapaketen wie `gnome-core` abhängen oder diese empfehlen.

  - Sie können dies beheben, indem Sie "Noch ausstehende Aktionen abbrechen" im Menü von `aptitude` wählen, `aptitude` beenden und "`apt full-upgrade`" verwenden.

Die Befehle `apt-get` und `apt-cache` sind sehr grundlegende APT-basierte 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 Mechanismus zur Auflösung von Paketabhängigkeiten.

- `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 des gleichen Pakets verwalten, aber dies ist ziemlich mühselig.

Das `apt`-Programm ist eine Befehlszeilenschnittstelle für das Paketmanagement. Es ist vom Grundsatz her ein Wrapper-Skript für `apt-get`, `apt-cache` und ähnliche Programme und als Bedienoberfläche für den Benutzer gedacht; einige für die interaktive Nutzung zweckmäßige Optionen sind standardmäßig aktiviert.

- `apt` bietet eine nette Fortschrittsanzeige bei der Paketinstallation mittels `apt install`.

- Standardmäßig entfernt `apt` die zwischengespeicherten `.deb`-Dateien nach der erfolgreichen Installation.

| Tipp
Benutzern wird empfohlen, den neuen apt(8)-Befehl zu verwenden, der für die interaktive Nutzung durch den Benutzer gedacht ist. In Shell-Skripten sollten Sie apt-get(8) und apt-cache(8) einsetzen.

Der Befehl `aptitude` ist das vielseitigste APT-basierte Paketmanagement-Werkzeug.

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

- `aptitude` enthält auch eine Befehlszeilen-Benutzerschnittstelle.

- `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 geringfügig langsamer.

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

- `aptitude` kann mehrere Versionen des gleichen Pakets verwalten, ohne dabei `/etc/apt/preferences` zu verwenden, und es ist sehr intuitiv.

### 2.2.2. Grundlegende Paketmanagement-Operationen auf der Befehlszeile

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

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

`apt`-Syntax | `aptitude`-Syntax | `apt-get`/`apt-cache`-Syntax | Beschreibung
--- | --- | --- | ---
`apt update` | `aptitude update` | `apt-get update` | Aktualisieren der Paket-Metadaten
`apt install foo` | `aptitude install foo` | `apt-get install foo` | Installieren der Installationskandidat-Version von "`foo`" inklusive seiner Abhängigkeiten
`apt upgrade` | `aptitude safe-upgrade` | `apt-get upgrade` | Installieren der Installationskandidat-Version aller installierten Pakete, ohne irgendwelche anderen Pakete zu entfernen
`apt full-upgrade` | `aptitude full-upgrade` | `apt-get dist-upgrade` | Installieren der Installationskandidat-Version aller installierten Pakete und Entfernen anderer Pakete, falls nötig
`apt remove foo` | `aptitude remove foo` | `apt-get remove foo` | Entfernen des Pakets "`foo`" bei gleichzeitiger Erhaltung seiner Konfigurationsdateien
`apt autoremove` | Nicht verfügbar | `apt-get autoremove` | Entfernen aller automatisch installierten, nicht mehr benötigten Pakete
`apt purge foo` | `aptitude purge foo` | `apt-get purge foo` | Vollständiges Entfernen des Pakets "`foo`" und Löschung seiner Konfigurationsdateien
`apt clean` | `aptitude clean` | `apt-get clean` | Vollständiges Leeren des lokalen Depots heruntergeladener Paketdateien
`apt autoclean` | `aptitude autoclean` | `apt-get autoclean` | Leeren des lokalen Depots heruntergeladener Paketdateien für veraltete Pakete
`apt show foo` | `aptitude show foo` | `apt-cache show foo` | Anzeigen von detaillierten Informationen über das Paket "`foo`"
`apt search regex` | `aptitude search regex` | `apt-cache search regex` | Suchen nach Paketen, auf die der reguläre Ausdruck regex zutrifft
Nicht verfügbar | `aptitude why regex` | Nicht verfügbar | Erklären, warum die Pakete, auf die der reguläre Ausdruck regex zutrifft, installiert werden sollen
Nicht verfügbar | `aptitude why-not regex` | Nicht verfügbar | Erklären, warum die Pakete, auf die der reguläre Ausdruck regex zutrifft, nicht installiert werden sollen
`apt list --manual-installed` | `aptitude search '~i!~M'` | `apt-mark showmanual` | Händisch installierte Paket auflisten

`apt`/`apt-get` und `aptitude` können ohne größere Probleme gemischt verwendet werden.

Der Befehl "`aptitude why regex`" kann mehr Informationen ausgeben, wenn "-v" verwendet wird ("`aptitude -v why regex`"). Ähnliche Informationen erhalten Sie mit `apt rdepends paket`" oder "`apt-cache rdepends paket`.

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.

| 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 auch in Zukunft verursachen), wie z.B. Fehler #411123, Fehler #514930 und Fehler #570377. Im Zweifel bevorzugen Sie bitte die `apt`-, `apt-get`- und `apt-cache`-Befehle.

Befehlsoptionen können direkt im Anschluß an den "`aptitude`"-Befehl angegeben werden.

Tabelle 2.7. Erwähnenswerte Befehlsoptionen für aptitude(8)

Befehlsoptionen | Beschreibung
--- | ---
`-s` | das Resultat des Befehls simulieren
`-d` | nur Herunterladen, aber nicht installieren/aktualisieren
`-D` | kurze Erläuterungen vor automatischen Installationen und Entfernungen anzeigen

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

### 2.2.3. Interaktive Nutzung von aptitude

Für interaktives Paketmanagement starten Sie `aptitude` von der Konsolen-Shell aus im interaktiven Modus mit:

    $ sudo aptitude -u
    Password:

Die lokale Kopie der Archivinformationen wird aktualisiert und die Paketliste in der Vollbildschirm-Ansicht angezeigt. Aptitude legt seine Konfiguration in "`~/.aptitude/config`" ab.

| Tipp
Wenn Sie root's Konfiguration verwenden wollen statt der des unprivilegierten Benutzers, verwenden Sie in obigem Ausdruck "`sudo -H aptitude …`" statt "`sudo aptitude …`".

| Tipp
`Aptitude` merkt automatisch bestimmte Aktionen vor, wenn es interaktiv gestartet wird. Wenn Sie dies nicht möchten, können Sie sie über das Menü zurücksetzen: "Aktionen" → "Nicht abgeschlossene Aktionen abbrechen".

### 2.2.4. Tastaturkürzel von aptitude

Es folgen einige erwähnenswerte Tastenkürzel, um in der Vollbildschirm-Ansicht den Status von Paketen abzufragen und "geplante Aktionen" vorzumerken.

Tabelle 2.8. Liste der Tastaturkürzel für aptitude

Taste | Tastaturbefehl
--- | ---
`F10` oder `Strg-t` | Menü
`?` | Hilfe für Tastaturkürzel anzeigen (ausführlichere Auflistung)
`F10` → Hilfe → Handbuch | Benutzerhandbuch anzeigen
`u` | Paketinformationen (Metadaten) aktualisieren
`+` | Paket zur Aktualisierung (upgrade) oder Installation (install) vormerken
`-` | Paket zum Entfernen (remove) vormerken (Konfigurationsdateien erhalten)
`_` | Paket zum vollständigen Entfernen (purge) vormerken (Konfigurationsdateien löschen)
`=` | Paket auf Zurückhalten (hold) setzen
`U` | Alle aktualisierbaren Pakete markieren (die gleiche Funktion wie full-upgrade)
`g` | Das Herunterladen und Installieren aller markierten Pakete starten
`q` | Aktuelle Ansicht schließen und Änderungen speichern
`x` | Aktuelle Ansicht schließen und Änderungen verwerfen
`Enter` | Informationen über ein Paket anzeigen
`C` | Änderungsprotokoll (Changelog) eines Pakets anzeigen
`l` | Ändern des Filters für die Paketanzeige
`/` | Suche nach dem ersten Treffer
`\` | Wiederholen der letzten Suche

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
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.

### 2.2.5. Paketansichten in aptitude

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 Markierung für "automatisch installiert" (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
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.7, „Die Installationskandidat-Version anpassen mit apt-pinning“).

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

Tabelle 2.9. Liste der Ansichten für aptitude

Ansicht | Beschreibung der Ansicht
--- | ---
Paketansicht | laut Tabelle 2.10, „Die Kategorisierung von Standard-Paketansichten“ (Standardeinstellung)
`Empfehlungen überprüfen` | Pakete auflisten, die von installierten Paketen empfohlen werden, aber noch nicht installiert sind
`Einfache Paketansicht` | Pakete ohne Kategorisierung anzeigen (für Verwendung mit Regex)
`Debtags-Browser` | Pakete sortiert nach der Kategorisierung in ihren debtags-Einträgen anzeigen
`Quellpaketansicht` | Pakete gruppiert nach Quellpaketen anzeigen

| Anmerkung
Bitte helfen Sie uns, Pakete mit debtags zu versehen!

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

Tabelle 2.10. Die Kategorisierung von Standard-Paketansichten

Kategorie | Beschreibung der Ansicht
--- | ---
`Aktualisierbare Pakete` | Pakete organisiert nach `Sektion` → `Bereich` → `Paket`
`Neue Pakete` | "
`Installierte Pakete` | "
`Nicht installierte Pakete` | "
`Veraltete und lokal erstellte Pakete` | "
`Virtuelle Pakete` | Pakete mit der gleichen Funktionalität auflisten
`Tasks (Programmgruppen)` | Pakete mit verschiedenen Funktionalitäten auflisten, die grundsätzlich für eine bestimmte Aufgabe benötigt werden

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

### 2.2.6. Optionen für Suchmethoden mit aptitude

Aptitude bietet verschiedene Optionen, damit Sie über seine Regex-Formel (regulären Ausdruck) nach Paketen suchen können.

- Shell-Befehlszeile:

  - "`aptitude search aptitude_regex`" zur Anzeige von Installationsstatus, Paketname und Kurzbeschreibung passender Pakete

  - "`aptitude show paketname`" zur Anzeige detaillierter Informationen für ein Paket

- Interaktive Vollbildschirm-Ansicht:

  - "`l`" zur Einschränkung der Paketansicht auf zutreffende Pakete

  - "`/`" für die Suche nach einem passenden Paket

  - "`\`" für die Rückwärts-Suche nach einem passenden Paket

  - "`n`" zum Finden des nächsten Treffers

  - "`N`" zum Finden des nächsten Treffers in umgekehrter Richtung

| Tipp
Die obige Zeichenkette paketname muss exakt auf den Paketnamen zutreffen, außer sie beginnt mit "`~`", um anzuzeigen, dass es ein regulärer Ausdruck ist.

### 2.2.7. Aptitudes Regex-Formel

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“); 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 Paketname | `~nregex_name`
Treffer auf Paketbeschreibung | `~dregex_beschreibung`
Treffer auf Task-Name | `~tregex_task`
Treffer auf Debtag | `~Gregex_debtag`
Treffer auf Paketbetreuer | `~mregex_betreuer`
Treffer auf Paketsektion | `~sregex_sektion`
Treffer auf Paketversion | `~Vregex_version`
Treffer auf Archiv | `~A{trixie,forky,sid`}
Treffer auf Paket-Herkunft | `~O{debian,…`}
Treffer auf 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 manuell 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 | `~Btyp`
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 aus der folgenden Liste: 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
Wenn regex_muster ein Null-String ist, geben Sie "`~T`" direkt hinter dem Befehl an.

Hier einige Abkürzungen:

- "`~Pname`" == "`~Dprovides:name`"

- "`~Cname`" == "`~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
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.

### 2.2.8. Abhängigkeitsauflösung bei aptitude

Die Auswahl eines Pakets in `aptitude` bringt nicht nur Pakete mit, die in seiner "`Depends:`"-Liste stehen, sondern auch solche in "`Recommends:`", falls die Einstellung im Menü unter `F10` → "Optionen" → "Einstellungen" → "Abhängigkeitsbehandlung" entsprechend gesetzt ist. Diese automatisch installierten Pakete werden automatisch entfernt, wenn sie laut `aptitude` nicht mehr benötigt werden.

Der Schalter, der das "auto install"-Verhalten von `aptitude` steuert, kann auch über den Befehl apt-mark(8) aus dem `apt`-Paket verändert werden.

### 2.2.9. Protokollierung der Paketaktivitäten

Sie können vergangene Paketaktivitäten in den Protokolldateien nachkontrollieren.

Tabelle 2.12. Protokolldateien für Paketaktivitäten

Datei | Inhalt
--- | ---
`/var/log/dpkg.log` | Protokollierung der Operationen auf `dpkg`-Ebene für alle Paketaktivitäten
`/var/log/apt/term.log` | Protokollierung der grundlegenden APT-Aktivitäten
`/var/log/aptitude` | Protokollierung der Aktivitäten des `aptitude`-Befehls

In der Realität ist es nicht so einfach, aus diesen Protokollen auf die Schnelle aussagekräftige Informationen herauszuziehen. Abschnitt 9.3.9, „Aufzeichnen von Änderungen in Konfigurationsdateien“ gibt Ihnen hilfreiche Infos, wie Sie dies einfacher bewältigen können.

## 2.3. Beispiele für aptitude-Operationen

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

### 2.3.1. Suchen nach interessanten Paketen

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

### 2.3.2. Auflisten von Paketen mit Regex-Suche auf den Paketnamen

Der folgende Befehl listet Pakete auf, bei denen die Regex-Suche nach dem Paketnamen zutrifft:

    $ aptitude search '~n(pam|nss).*ldap'
    p libnss-ldap - NSS module for using LDAP as a naming service
    p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces

Dies ist für Sie ziemlich praktisch, um den exakten Namen eines Pakets zu finden.

### 2.3.3. Durchsuchen mit der Regex-Suche

Wenn Sie den regulären Ausdruck "`~dipv6`" in der "Neuen einfachen Paketansicht" im "`l`"-Dialog eingeben, werden die angezeigten Pakete auf diejenigen eingeschränkt, bei denen der Ausdruck auf die Paketbeschreibung zutrifft, und Sie können deren Informationen interaktiv durchsuchen.

### 2.3.4. Entfernte Pakete endgültig löschen

Sie können alle verbliebenen Konfigurationsdateien entfernter Pakete endgültig löschen.

Überprüfen Sie die Resultate des folgenden Befehls:

    # aptitude search '~c'

Wenn Sie glauben, dass die aufgelisteten Pakete vollständig entfernt werden können, führen Sie folgenden Befehl aus:

    # aptitude purge '~c'

Sie möchten das gleiche vielleicht im interaktiven Modus durchführen, um eine detailgenaue Kontrolle über den Vorgang zu haben:

Sie geben den regulären Ausdruck "`~c`" unter der "Neuen Paketansicht" in dem "`l`"-Dialog ein. Dadurch werden die angezeigten Pakete auf solche eingeschränkt, auf die der reguläre Ausdruck zutrifft, d.h. "gelöscht, aber nicht vollständig inklusive der Konfigurationsdateien entfernt". All diese, auf den regulären Ausdruck zutreffenden Pakete können angezeigt werden, indem Sie auf der höchsten Ebene der Anzeigehierachie (z.B. "Nicht installierte Pakete") "`[`" drücken.

Dann drücken Sie auf einem Eintrag in der höchsten Anzeigehierachie (z.B. auf "Nicht installierte Pakete") "`_`". Nur Pakete, auf die der reguläre Ausdruck passt, werden auf diese Art vollständig inklusive der Konfigurationsdateien entfernt. Sie können jedes dieser Pakete interaktiv von der vollständigen Entfernung ausschließen, indem Sie auf dem entsprechenden Paket "`=`" drücken.

Diese Methode ist ziemlich praktisch und funktioniert für viele andere Befehlskürzel.

### 2.3.5. Automatisch/manuell-Installationsstatus bereinigen

Hier beschreibe ich, wie Sie den automatisch/manuell-Installationsstatus bereinigen können (nach der Verwendung von anderen Paketinstallationsprogrammen o.ä.):

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`" und setzen Sie den Anzeigefilter auf "`~i(~R~i|~Rrecommends:~i)`"; drücken Sie dann "`M`" mit der Markierung auf "`Installierte Pakete`", um deren Status auf "Automatisch installiert" zu ändern.

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`", um deren Status auf "Manuell installiert" zu ändern.

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 von apt-get als ungenutzt gemeldet werden.

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 gewünschten 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.

### 2.3.6. Systemweite Hochrüstung

| 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, „Datensicherung und -wiederherstellung“), 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 "`sources.list`" ändern, so dass sie auf die neue Veröffentlichung zeigt; führen Sie danach "`apt update; apt dist-upgrade`" aus.

Um von `stable` nach `testing` bzw. `unstable` zu aktualisieren, während `trixie`-das aktualle `stable` ist , ersetzen Sie "`trixie`" in dem "`sources.list`"-Beispiel aus Abschnitt 2.1.5, „Grundlagen über das Debian-Archiv“ durch "`forky`" bzw. "`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, vor der offiziellen Freigabe der nächsten Veröffentlichung von `Stable` zu `Testing` zu wechseln, gibt es keine Veröffentlichunshinweise, die Ihnen helfen könnten. Die Unterschiede zwischen `Stable` und `Testing` könnten seit der letzten `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 Konfigurationsdateien).

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: `oldstable` → `stable` → `testing` → `unstable`.

10. Aktualisieren Sie Ihre "`sources.list`", so dass sie nur auf das neue Archiv verweist, und führen Sie "`aptitude update`" aus.

11. Installieren Sie neue Kern-Pakete separat im Voraus, z.B. "`aptitude install perl`" (optional).

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
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
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.

| Achtung
"Release Notes" may not cover all possible cases. If you change low level configurations, your next upgrade may fail badly as "... segfault after upgrade ...".

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

## 2.4. Erweiterte Paketmanagement-Operationen

### 2.4.1. Erweiterte Paketmanagement-Operationen auf der Befehlszeile

Hier eine Liste weiterer Paketmanagement-Operationen, die `aptitude` nicht unterstützt, weil es auf einer anderen Ebene arbeitet oder weil ihm die nötigen 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 -plow 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.revision.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.revision_arch.deb` | Ein lokales Paket in das System installieren
`apt install /pfad/zu/paketname.deb` | Ein lokales Paket in das System installieren und dabei versuchen, die Abhängigkeiten automatisch aufzulösen
`debi paketname_version-debian.revision_arch.dsc` | Lokale(s) Paket(e) in das System installieren
`dpkg --get-selections '*' >selection.txt` | `dpkg`-Paketauswahlinformationen sichern
`dpkg --set-selections <selection.txt` | `dpkg`-Paketauswahlinformationen setzen
`echo paketname hold | dpkg --set-selections` | `dpkg`-Paketauswahlinformationen eines Pakets auf hold (halten) setzen (gleichbedeutend mit "`aptitude hold paketname`")

| Anmerkung
Für ein Paket mit der multi-arch-Funktionalität müssen Sie unter Umständen bei einigen Befehlen den Architekturnamen mit 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

Grundlegende Paketwerkzeuge wie "`dpkg -i …`" und "`debi …`" sollten vom Systemadministrator mit Vorsicht eingesetzt werden. Erforderliche Paketabhängigkeiten werden dabei nicht automatisch aufgelöst. Dpkg's Befehlszeilenoption "`--force-all`" und ähnliche (schauen Sie in dpkg(1)) dürfen nur von Experten eingesetzt werden. Sie zu verwenden ohne deren Auswirkungen vollständig zu verstehen könnte das komplette System beschädigen.

Bitte beachten Sie folgendes:

- Alle System-Konfigurations- und Installationsbefehle müssen von root ausgeführt werden.

- Anders als `aptitude`, das reguläre Ausdrücke verwendet (mehr dazu in Abschnitt 1.6.2, „Reguläre Ausdrücke“), nutzen andere Paketmanagement-Befehle Suchmuster wie Shell-Globs (Details in Abschnitt 1.5.6, „Shell-Glob“).

- Für apt-file(1) aus dem `apt-file`-Paket muss zuvor "`apt-file update`" ausgeführt werden.

- configure-debian(8) aus dem `configure-debian`-Paket führt dpkg-reconfigure(8) als Backend im Hintergrund aus.

- dpkg-reconfigure(8) führt Paketskripte aus, die debconf(1) als Backend im Hintergrund verwenden.

- Die Befehle "`apt-get build-dep`", "`apt-get source`" und "`apt-cache showsrc`" erfordern einen "`deb-src`"-Eintrag in Ihrer "`sources.list`".

- dget(1), debuild(1) und debi(1) erfordern die Installation des `devscripts`-Pakets.

- Infos zur Prozedur des (Neu-)Paketierens mittels "`apt-get source`" finden Sie in Abschnitt 2.7.13, „Ein Paket auf das Stable-System portieren“.

- Der `make-kpkg`-Befehl erfordert die Installation des `kernel-package`-Pakets (lesen Sie Abschnitt 9.10, „Der Kernel“).

- Grundsätzliche Informationen über das Paketieren finden Sie in Abschnitt 12.9, „Erstellen von Debian-Paketen“.

### 2.4.2. Verifizierung von installierten Paketdateien

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

| 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.

### 2.4.3. Absicherungen für den Fall von Paketproblemen

Viele Benutzer bevorzugen die Testing- oder Unstable-Veröffentlichung des Debian-Systems wegen seiner neuen Funktionen und Pakete. Dies macht deren System jedoch anfällig für kritische Paketfehler.

Die Installation des `apt-listbugs`-Pakets schützt Ihr System vor kritischen Fehlern, indem bei Upgrades durch das APT-System automatisch die Debian-Fehlerdatenbank (BTS) bezüglich kritischer Fehler abgefragt wird.

Die Installation des `apt-listchanges`-Pakets stellt Ihnen wichtige Neuigkeiten aus "`NEWS.Debian`" zur Verfügung, wenn Upgrades durch das APT-System durchgeführt werden.

### 2.4.4. Durchsuchen der Paket-Metadaten

Obwohl der Besuch der Debian-Site https://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 wurden.

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.

## 2.5. Internas des Debian-Paketmanagements

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

### 2.5.1. Archiv-Metadaten

Metadaten-Dateien für die jeweilige Distribution sind auf jedem Debian-Spiegel unter "`dist/codename`" abgelegt, z.B. auf "`http://deb.debian.org/debian/`". Sie können die Archivstruktur mit einem Webbrowser durchsuchen. Es gibt sechs Arten von wichtigen Metadaten:

Tabelle 2.14. Inhalt der Metadaten des Debian-Archivs

Datei | Speicherort | Inhalt
--- | --- | ---
`Release` | Wurzelverzeichnis der Distribution | Archivbeschreibung und Integritätsinformationen
`Release.gpg` | Wurzelverzeichnis der Distribution | Signaturdatei für die "`Release`"-Datei, mit dem Archiv-Schlüssel signiert
`Contents-architektur` | Wurzelverzeichnis der Distribution | Liste aller Dateien für alle Pakete in dem entsprechenden Archiv
`Release` | Wurzelverzeichnis aller Distributions-/Bereichs-/Architektur-Kombinationen | Archivbeschreibung, die zur Festlegung von apt_preferences(5) verwendet wird
`Packages` | Wurzelverzeichnis aller Distributions-/Bereichs-/Binärarchitektur-Kombinationen | vereinigte `debian/control` für Binärpakete
`Sources` | Wurzelverzeichnis aller Distributions-/Bereichs-/Quellen-Kombinationen | vereinigte `debian/control` für Quellpakete

Im aktuellen Archiv sind diese Metadaten als komprimierte und differenzielle Dateien abgelegt, um Netzwerkverkehr zu reduzieren.

### 2.5.2. "Release"-Datei im Wurzelverzeichnis und Authentizität

| Tipp
Die "Release"-Datei im Wurzelverzeichnis wird verwendet, um die Archive im Secure-APT-System zu signieren.

Jede Suite im Debian-Archiv hat im Wurzelverzeichnis eine "`Release`"-Datei, z.B. "`http://deb.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
Hier finden Sie den Grund dafür, warum ich in Abschnitt 2.1.5, „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 im Wurzelverzeichnis wird über die kryptografische Infrastruktur namens Secure-APT verifiziert, wie in apt-secure(8) beschrieben.

- Die kryptografische Signaturdatei "`Release.gpg`" wird aus der authentischen "`Release`"-Datei im Wurzelverzeichnis und dem geheimen Debian-Archiv-Schlüssel erzeugt.

- Die öffentlichen Debian-Archiv-Schlüssel werden lokal mittels des aktuellsten `debian-archive-keyring`-Pakets installiert.

- Das Secure-APT-System verifiziert automatisch kryptografisch die Integrität der heruntergeladenen "`Release`"-Datei im Wurzelverzeichnis über diese "`Release.gpg`"-Datei und die lokal installierten Debian-Archiv-Schlüssel.

- Die Integrität all der "`Packages`"- und "`Sources`"-Dateien wird über MD5sum-Werte in der "`Release`"-Datei im Wurzelverzeichnis 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 im Wurzelverzeichnis einen guten Kompromiss zwischen Sicherheit und Performance (weiteres in Abschnitt 10.3, „Datensicherheits-Infrastruktur“).

Wenn der sources.list-Eintrag die "`signed-by`"-Option enthält, wird die Integrität der heruntergeladenen "`Release`"-Datei des obersten Pfad-Levels mittels des angegebenen öffentlichen Schlüssels verifiziert. Dies ist nützlich, wenn die sources.list Einträge für nicht-Debian-Archive enthält.

| Tipp
Die Verwendung des apt-key(8)-Befehls für das APT-Paketmanagement ist überholt.

Sie können die Integrität der "`Release`"-Datei auch händisch mittels `gpg` mit der "`Release.gpg`"-Datei und dem öffentlichen Schlüssel des Debian-Archivs verifizieren, der auf ftp-master.debian.org zu finden ist.

### 2.5.3. "Release"-Dateien im Archivverzeichnis

| Tipp
Die "Release"-Dateien im Archivverzeichnis werden zur Festlegung von apt_preferences(5) genutzt.

Es gibt "`Release`"-Dateien in allen Archivverzeichnissen, die über sources.list-Einträge wie "`http://deb.debian.org/debian/dists/unstable/main/binary-amd64/Release`" oder "`http://deb.debian.org/debian/dists/sid/main/binary-amd64/Release`" angegeben werden, wie hier:

    Archive: unstable
    Origin: Debian
    Label: Debian
    Component: main
    Architecture: amd64

| Achtung
Für "`Archive:`" werden im Debian-Archiv Suite-Namen ("`stable`", "`testing`", "`unstable`", …) verwendet, im Ubuntu-Archiv jedoch Codenamen ("`trusty`", "`xenial`", "`artful`", …).

Für einige Archive (wie `experimental` und `trixie-backports`), die Pakete enthalten, welche nicht automatisch installiert werden sollten, z.B. "`http://deb.debian.org/debian/dists/experimental/main/binary-amd64/Release`", existiert eine zusätzliche Zeile, wie hier:

    Archive: experimental
    Origin: Debian
    Label: Debian
    NotAutomatic: yes
    Component: main
    Architecture: amd64

Bitte beachten Sie, dass für normale Archive ohne "`NotAutomatic: yes`" der Wert für die Pin-Priorität 500 ist, während für besondere Archive mit "`NotAutomatic: yes`" dieser Wert 1 ist (lesen Sie dazu apt_preferences(5) und Abschnitt 2.7.7, „Die Installationskandidat-Version anpassen mit apt-pinning“).

### 2.5.4. Empfangen der Metadaten für ein Paket

Um APT-Werkzeuge wie `aptitude`, `apt-get`, `synaptic`, `apt-file`, `auto-apt` … zu verwenden, 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 der "`sources.list`" festgelegten Namen für `Distribution`, `Bereich` und `Architektur` (weiteres in Abschnitt 2.1.5, „Grundlagen über das Debian-Archiv“):

- "`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_Release`"

- "`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_Release.gpg`"

- "`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area_binary-architektur_Packages`"

- "`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_bereich_source_Sources`"

- "`/var/cache/apt/apt-file/deb.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 "`deb`" in der "`sources.list`" angegeben ist. "`Sources`"-Metadaten werden aktualisiert, wenn "`deb-src`" in der "`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`".)

### 2.5.5. Der Paketstatus für APT

Zusätzlich zu den von außerhalb empfangenen Metadaten speichert das APT-Werkzeug seit `Lenny` seine lokal erzeugten Installationsstatus-Informationen in der Datei "`/var/lib/apt/extended_states`", die von allen APT-Programmen genutzt wird, um automatisch installierte Pakete zu verfolgen.

### 2.5.6. Der Paketstatus von aptitude

Zusätzlich zu den von außerhalb empfangenen Metadaten speichert der `aptitude`-Befehl seine lokal erzeugten Installationsstatus-Informationen in der Datei "`/var/lib/aptitude/pkgstates`", die nur von aptitude selbst genutzt wird.

### 2.5.7. Lokale Kopien der empfangenen Pakete

Alle über den APT-Mechanismus von außerhalb empfangenen Pakete werden im Verzeichnis "`/var/cache/apt/archives`" abgelegt, bis sie gelöscht werden.

Sie können diese Richtlinie zur Entfernung von zwischengespeicherten Dateien bei `aptitude` unter "`Optionen`" → "`Einstellungen`" festlegen; über das Menü unter "`Aktionen`" → "`Paketcache komplett leeren`" oder "`Nur veraltete Paketdateien löschen`" können Sie dies auch händisch erzwingen.

### 2.5.8. Debian-Paketdateinamen

Die Dateien von Debian-Paketen haben eine bestimmte Namensstruktur:

Tabelle 2.15. Namensstruktur von Debian-Paketen

Pakettyp | Namensstruktur
--- | ---
Binärpaket (auch `deb`) | `paketname_upstream-version-debian.revision_architektur.deb`
Binärpaket für den debian-installer (auch `udeb`) | `paketname_upstream-version-debian.revision_architetur.udeb`
Quellpaket (Quellcode der Originalprogrammierer) | `paketname_upstream-version-debian.revision.orig.tar.gz`
`1.0`-Quellpaket (Debian-Änderungen) | `paketname_upstream-version-debian.revision.diff.gz`
`3.0 (quilt)`-Quellpaket (Debian-Änderungen) | `paketname_upstream-version-debian.revision.debian.tar.gz`
Quellpaket (Beschreibung) | `paketname_upstream-version-debian.revision.dsc`

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

Tabelle 2.16. In den einzelnen Komponenten von Debian-Paketnamen zu verwendende Zeichen

Namenskomponente | zu verwendende Zeichen (erweiterter regulärer Ausdruck) | Existenz
--- | --- | ---
`paketname` | `[a-z0-9][-a-z0-9.+]+` | erforderlich
`epoche:` | `[0-9]+:` | optional
`upstream-version` | `[-a-zA-Z0-9.+:]+` | erforderlich
`debian.revision` | `[a-zA-Z0-9.+~]+` | optional

| Anmerkung
Sie können die Reihenfolge von Paketversionen (welche Versionsnummer höher ist) mit dpkg(1) überprüfen, z.B. mittels "`dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?`" .

| 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).

### 2.5.9. Der dpkg-Befehl

dpkg(1) ist das Werkzeug, das beim Debian-Paketmanagement auf der untersten Ebene arbeitet. 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 und 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 ä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
In der debian-installer-Umgebung wird der Befehl `udpkg` benutzt, um `udeb`-Pakete zu öffnen. `udpkg` ist eine reduzierte Variante des `dpkg`-Befehls.

### 2.5.10. Der update-alternatives-Befehl

Das Debian-System hat Mechanismen, um Programme, die sich bei der Funktionalität ein wenig überlappen, friedlich nebeneinander zu installieren, und zwar mittels update-alternatives(1). Zum Beispiel können Sie den `vi`-Befehl so einrichten, dass er `vim` ausführt, wenn Sie sowohl das `vim` wie auch das `nvi`-Paket installiert haben.

    $ ls -l $(type -p vi)
    lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi
    $ sudo update-alternatives --display vi
    ...
    $ sudo update-alternatives --config vi
      Selection    Command
     ----------------------------------------------
          1        /usr/bin/vim
    *+    2        /usr/bin/nvi

    Enter to keep the default[*], or type selection number: 1

Das Debian-alternatives-System setzt seine Auswahl als symbolischer Link in "`/etc/alternatives/`". Der Auswahlprozess nutzt die entsprechende Datei in "`/var/lib/dpkg/alternatives/`".

### 2.5.11. Der dpkg-statoverride-Befehl

Stat overrides, bereitgestellt durch den dpkg-statoverride(8)-Befehl, sind ein Weg, dpkg(1) mitzuteilen, dass bei Installation eines Pakets für eine Datei ein anderer Eigentümer oder andere Berechtigungen verwendet werden sollen. Falls "`--update`" angegeben wurde und die Datei bereits existiert, werden direkt der neue Eigentümer oder neue Berechtigungen gesetzt.

| Achtung
Die direkte Abänderung von Benutzer oder Berechtigungen durch den Systemadministrator (über die Befehle `chmod` oder `chown`) bei einer Datei, die zu einem Paket gehört, wird bei der nächsten Aktualisierung des Pakets wieder aufgehoben.

| Anmerkung
Ich verwende hier den Begriff Datei, jedoch kann dies jegliches Objekt im Dateisystem sein, dass durch `dpkg` behandelt wird, inklusive Verzeichnissen, Gerätedateien usw.

### 2.5.12. Der dpkg-divert-Befehl

Diversions, bereitgestellt durch den dpkg-divert(8)-Befehl, bieten die Möglichkeit, dpkg(1) zu zwingen, eine Datei nicht an Ihren Standardort zu installieren, sondern an einen umgelenkten Speicherort (diverted). `dpkg-divert` ist zur Verwendung durch Paketverwaltungs-Skripte gedacht. Die beiläufige Verwendung durch den Systemadministrator ist nicht mehr zeitgemäß.

## 2.6. Wiederherstellung eines beschädigten Systems

Bei einem `testing`- oder `unstable`-System sollte der Administrator darauf vorbereitet sein, das System im Falle einer Beschädigung des Paketmanagements wiederherstellen zu können.

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

### 2.6.1. Inkompatibilität mit alter Benutzerkonfiguration

Wenn ein Desktop-GUI-Programm nach signifikanten Upgrades von Upstream Instabilitäten erkennen lässt, sollten Sie Behinderungen durch alte lokal erstellte Konfigurationsdateien als Ursache in Betracht ziehen. Falls das Programm unter einem neu erstellten Benutzerkonto stabil läuft, ist diese Hypothese bestätigt. (Dies ist ein Fehler beim Paketieren und wird für gewöhnlich durch den Paketersteller vermieden.)

Um das Programm wieder stabil zu bekommen, sollten Sie die entsprechenden lokalen Konfigurationsdateien beiseite schaffen und das GUI-Programm neu starten. Sie müssen möglicherweise die Inhalte alter Konfigurationsdateien lesen, um die Konfigurationsinformationen später wiederherstellen zu können. (Löschen Sie sie nicht zu früh.)

### 2.6.2. Fehler beim Zwischenspeichern der Paketdaten

Fehler beim Zwischenspeichern der Paketdaten führen zu verblüffenden Meldungen, wie "GPG error: ... invalid: BADSIG ..." bei APT.

Sie sollten alle zwischengespeicherten Daten mittels "`sudo rm -rf /var/lib/apt/*` " entfernen und es erneut versuchen. (Falls Sie `apt-cacher-ng` verwenden, führen Sie auch "`sudo rm -rf /var/cache/apt-cacher-ng/*` " aus.)

### 2.6.3. Systemrettung mit dem dpkg-Befehl

Since `dpkg` is very low level package tool, it can function without network connection.

Let's assume `foo` package was broken and needs to be fixed.

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 https://snapshot.debian.org/ herunterladen oder von einem funktionierenden System herüber kopieren.)

Ist das System boot-fähig, könnte es unter Umständen möglich sein, das Paket mit folgendem Befehl zu installieren:

    # dpkg -i /path/to/foo_old_version_arch.deb

Falls der Versuch, ein Paket auf diese Art zu installieren, aufgrund von verletzten Abhängigkeiten fehlschlägt, können Sie als letzten Ausweg 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
Falls Ihr System ernsthaft beschädigt ist, sollten ein vollständiges Backup aller Daten an einem sicheren Ort ablegen (siehe Abschnitt 10.2, „Datensicherung und -wiederherstellung“) und eine saubere Neuinstallation durchführen. Dies ist weniger zeitaufwändig und führt am Ende zu einem besseren Ergebnis.

| 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.11, „Downgrade im Notfall“ beschrieben.

### 2.6.4. Fehlgeschlagene Installation aufgrund von fehlenden Abhängigkeiten

Wenn Sie die Installation eines Pakets über "`sudo dpkg -i ...`" auf einem System erzwingen, auf dem nicht alle erforderlichen Pakete vorhanden sind, wird die Paketinstallation mit dem Status "`nicht vollständig installiert`" fehlschlagen.

You should install all dependency packages by repeatedly using "`sudo dpkg -i ...`" or by using:

    # apt --fix-broken install

Konfigurieren Sie dann alle unvollständig installierten Pakete mit folgendem Befehl:

    # dpkg --configure -a

### 2.6.5. Mehrere Pakete mit überlappenden Dateien

Paketmanagementsysteme für das Debian-Archiv 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.7, „Paketabhängigkeiten“).

Fehler durch einen Paketbetreuer oder die Einrichtung von inkonsistent gemischten Archivquellen durch den Systemadministrator (lesen Sie Abschnitt 2.7.6, „Pakete aus verschiedenen Paketarchiven ohne apt-pinning“) 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
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 old-package

### 2.6.6. Behebung von Problemen aufgrund von beschädigtem Paketskript

Wenn ein Befehl in einem Paketskript aus irgendeinem Grund einen Fehler zurückgibt und das Skript aufgrund des Fehlers abgebrochen wird, beendet das Paketmanagement die Aktion und es bleiben halb-installierte Pakete zurück. Enthält ein Paket Programmierfehler in seinen Skripten zum Löschen des Pakets, könnte es sein, dass das Paket nicht mehr entfernt werden kann und ziemlich unangenehm wird.

Wenn das Paket "`paketname`" ein Problem mit den Skripten hat, sollten Sie in folgenden Paketskripten nachschauen:

- "`/var/lib/dpkg/info/paketname.preinst`"

- "`/var/lib/dpkg/info/paketname.postinst`"

- "`/var/lib/dpkg/info/paketname.prerm`"

- "`/var/lib/dpkg/info/paketname.postrm`"

Editieren Sie die angebotenen Paketskripte von Grund auf mittels folgender Techniken:

- deaktivieren Sie die problematische Zeile, indem Sie ein "`#`" voranstellen;

- erzwingen Sie, dass das Skript einen Rückgabewert für Erfolg zurück gibt, indem Sie der fraglichen Zeile "`|| true`" anhängen.

Konfigurieren Sie dann alle unvollständig installierten Pakete mit folgendem Befehl:

    # dpkg --configure -a

### 2.6.7. Paketauswahldaten wiederherstellen

Falls "`/var/lib/dpkg/status`" aus irgendeinem Grund beschädigt wird, verliert das Debian-System die Daten über ausgewählte Pakete und kommt dadurch erheblich zu Schaden. Sie finden alte "`/var/lib/dpkg/status`"-Dateien in "`/var/lib/dpkg/status-old`" oder "`/var/backups/dpkg.status.*`".

Es könnte eine gute Idee sein, "`/var/backups/`" auf einer separaten Partition abzulegen, da dieses Verzeichnis viele wichtige Systemdaten enthält.

Bei ernsten Beschädigungen empfehle ich eine frische Neuinstallation, nachdem eine Sicherung der Daten durchgeführt wurde. Sogar wenn alles in "`/var/`" verloren ist, können Sie trotzdem noch etliche Informationen aus Verzeichnissen in "`/usr/share/doc/`" wiederherstellen, um Ihre neue Installation zu lenken:

Installieren Sie ein minimales (Desktop-)System.

    # mkdir -p /path/to/old/system

Binden Sie die alten Systempartitionen in "`/pfad/zum/alten/system/`" ein.

    # cd /path/to/old/system/usr/share/doc
    # ls -1 >~/ls1.txt
    # cd /usr/share/doc
    # ls -1 >>~/ls1.txt
    # cd
    # sort ls1.txt | uniq | less

Jetzt haben Sie eine Liste mit Paketnamen, die Sie installieren können. (Es könnten auch einige Zeichenfolgen darunter sein, die keine Paketnamen sind, wie z.B. "`texmf`".)

## 2.7. Tipps für das Paketmanagement

Der Einfachheit halber sind die sources.list-Beispiele in diesem Abschnitt im einzeiligen Stil angegeben, nach Freigabe von `trixie`.

### 2.7.1. Wer hat das Paket hochgeladen?

Obwohl der Betreuername, der in "`/var/lib/dpkg/available`" und "`/usr/share/doc/package_name/changelog`" aufgelistet ist, Informationen darüber gibt, "wer hinter den Paketaktivitäten steht", sind Informationen über den Uploader (die Person, die das Paket wirklich hochgeladen hat) ein wenig verschleiert. who-uploads(1) aus dem `devscripts`-Paket identifiziert die realen Uploader von Debian-Quellpaketen.

### 2.7.2. Die Download-Bandbreite für APT einschränken

Falls Sie die Download-Bandbreite für APT einschränken möchten, sagen wir z.B. auf 800Kib/sec (=100kiB/sec), sollten Sie APT mit folgenden Konfigurationsparametern einrichten:

    APT::Acquire::http::Dl-Limit "800";

### 2.7.3. Automatisches Herunterladen und Aktualisieren von Paketen

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 `Testing`- oder `Unstable`-System laufen haben, sollten Sie kein automatisches Upgrade verwenden, da sonst mit Sicherheit eines Tages das System beschädigt würde. Aber sogar für solch ein `Testing`- oder `Unstable`-System möchten Sie vielleicht in Vorbereitung für ein interaktives Upgrade die Pakete schon mal 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";

### 2.7.4. Aktualisierungen und Backports

Es gibt stable-updates- ("`trixie`-updates", während `trixie` als `stable` gilt) und backports.debian.org-Archive, die aktualisierte Pakete für `stable` bereitstellen.

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

    deb http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free
    deb http://security.debian.org/debian-security trixie-security main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-updates main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-backports main non-free-firmware 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 im Archivverzeichnis“).

- Alle installierten veralteten Pakete werden auf die neuen von `trixie-updates` aktualisiert.

- Nur manuell installierte veraltete Pakete von `trixie-backports` werden auf die neuen Versionen von `trixie-backports` aktualisiert.

Wann immer Sie ein Paket namens "`paketname`" inklusive seiner Abhängigkeiten von `trixie-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 trixie-backports package-name

| Warnung
Installieren Sie nicht zu viele Pakete von backports.debian.org. Dies könnte zu Abhängigkeitsproblemen führen. In Abschnitt 2.1.11, „Wie Sie mit Konflikten umgehen“ finden Sie alternative Lösungen.

### 2.7.5. Externe Paketarchive

| Warnung
Sie sollten sich bewusst sein, dass das externe Paket root-Privilegien für Ihr System bekommt. Sie sollten nur externe Paketarchive nutzen, denen Sie vertrauen. In Abschnitt 2.1.11, „Wie Sie mit Konflikten umgehen“finden Sie alternative Lösungen.

Sie können secure-APT mit Debian-kompatiblen externen Paketarchiven verwenden, indem Sie diese zur sources.list hinzufügen und den zugehörigen Archivschlüssel zum "`/etc/apt/trusted.gpg.d/`"-Verzeichnis. Lesen Sie dazu sources.list(5), apt-secure(8) und apt-key(8).

### 2.7.6. Pakete aus verschiedenen Paketarchiven ohne apt-pinning

| 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 stable-updates.

Hier ein Beispiel von Befehlen, über die man spezielle neuere Upstream-Versionen von Paketen aus `Unstable` verwendet, während ansonsten `Testing` genutzt 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

Wenn Sie gemischte Paketquellen verwenden, müssen Sie die Kompatibilität selbst sicherstellen, da Debian diese in solchem Falle 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 nicht zu empfehlen.

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

- Nicht-binäre Pakete ("`Architecture: all`") sind recht unproblematisch zu installieren:

  - Dokumentationspakete: keine speziellen Anforderungen;

  - Pakete von Interpreter-Programmen: ein kompatibler Interpreter muss verfügbar sein.

- Bei Binärpaketen (nicht "`Architecture: all`") gibt es gewöhnlich viele Stolpersteine und ihre Installation könnte problematisch sein:

  - Kompatibilität zu Bibliotheksversionen (inklusive "`libc`");

  - Kompatibilität zu damit in Verbindung stehenden Hilfswerkzeugen;

  - Kernel ABI-Kompatibilität;

  - C++ ABI-Kompatibilität;

  - …

| 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

Die Installation von Binärpaketen aus nicht-Debian-Archiven ist grundsätzlich eine schlechte Idee, außer vielleicht um für eine kurze Zeit die Installation von beschädigten Paketen zu vermeiden. Sie sollten vorher alle anderen, verfügbaren sicheren Alternativen in Erwägung ziehen, die mit Ihrem aktuellen Debian-System kompatibel sind (lesen Sie dazu Abschnitt 2.1.11, „Wie Sie mit Konflikten umgehen“).

### 2.7.7. Die Installationskandidat-Version anpassen mit apt-pinning

| Warnung
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. See Abschnitt 2.1.11, „Wie Sie mit Konflikten umgehen“ for alternative solutions.

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 Archiven, die nicht als automatische Quelle für Aktualisierungen empfohlen werden, die Einstellung NotAutomatic gesetzt ist und diese entsprechend behandelt werden.

| Tipp
Die Regel zum Vergleich der Versionsnummern (welche Versionsnummer größer ist) kann z.B. über "`dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?`" verifiziert werden (näheres unter dpkg(1)).

Wenn Sie regelmäßig Pakete aus gemischten Quellen installieren (siehe Abschnitt 2.7.6, „Pakete aus verschiedenen Paketarchiven ohne apt-pinning“), 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; dies ist in apt_preferences(5) beschrieben. Dies Verfahren wird apt-pinning genannt.

Wenn Sie apt-pinning verwenden, müssen Sie die Kompatibilität der Pakete selbst sicherstellen, da Debian diese in einem solchen Fall nicht garantieren kann. Apt-pinning ist ein absolut optionales Verfahren und nicht zu empfehlen.

Für die apt_preferences(5)-Regeln werden die Release-Dateien im Archiv-Wurzelverzeichnis verwendet (näheres in Abschnitt 2.5.3, „"Release"-Dateien im Archivverzeichnis“). 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`".

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
Selbst wenn Sie keine "`/etc/apt/preferences`"-Datei erstellen, können Sie auch ohne apt-pinning ziemlich komplexe Systemoperationen durchführen (lesen Sie Abschnitt 2.6.3, „Systemrettung mit dem dpkg-Befehl“ und Abschnitt 2.7.6, „Pakete aus verschiedenen Paketarchiven ohne apt-pinning“).

Hier eine vereinfachte Beschreibung der Technik hinter apt-pinning:

Das APT-System wählt für ein Upgrade das Paket 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 für Upgrades nicht beachtet, um ein Downgrade (eine Zurückrüstung auf eine ältere Version) zu ermöglichen (siehe Abschnitt 2.7.11, „Downgrade im Notfall“).

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

Tabelle 2.18. Liste erwähnenswerter Pin-Prioritäts-Werte für apt-pinning

Pin-Priorität | apt-pinning-Effekte auf das Paket
--- | ---
1001 | das Paket installieren, auch wenn dies ein Downgrade des Pakets bedeutet
990 | wird als Standardwert für das Archiv der Zielveröffentlichung verwendet
500 | wird als Standardwert für das normale Archiv verwendet
100 | wird als Standardwert für Archive mit NotAutomatic und ButAutomaticUpgrades verwendet
100 | wird für das installierte Paket verwendet
1 | wird als Standardwert für Archive mit NotAutomatic verwendet
-1 | das Paket niemals installieren, selbst wenn es empfohlen wird

Die gewünschte Zieldistribution (target release) kann über die Befehlszeilen-Option angegeben werden, z.B. "`apt-get install -t testing irgendein-paket`".

Die NotAutomatic- und ButAutomaticUpgrades-Archive werden durch Archiv-Server definiert, die in ihren Release-Dateien im Archiv-Wurzelverzeichnis (siehe Abschnitt 2.5.3, „"Release"-Dateien im Archivverzeichnis“) sowohl "`NotAutomatic: yes`" wie auch "`ButAutomaticUpgrades: yes`" gesetzt haben. Das NotAutomatic-Archiv wird über Server definiert, die in ihren Release-Dateien 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://deb.debian.org/debian/ trixie-backports/main Packages`".

### 2.7.8. Über "Recommends" installierte Pakete blockieren

| Warnung
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. See Abschnitt 2.1.11, „Wie Sie mit Konflikten umgehen“ for alternative solutions.

Wenn Sie verhindern möchten, dass bestimmte Pakete über "Recommends"-Abhängigkeiten (Empfohlen) installiert werden, müssen Sie die Datei "`/etc/apt/preferences`" erstellen und explizit all diese Pakete ganz oben in der Datei auflisten, wie in diesem Beispiel:

    Package: package-1
    Pin: version *
    Pin-Priority: -1

    Package: package-2
    Pin: version *
    Pin-Priority: -1

### 2.7.9. Nutzen von `Testing` mit einigen Paketen aus `Unstable`

| Warnung
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. See Abschnitt 2.1.11, „Wie Sie mit Konflikten umgehen“ for alternative solutions.

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 nutzen. Sie listen alle benötigten Archive in der "`/etc/apt/sources.list`"-Datei auf, wie hier:

    deb http://deb.debian.org/debian/ testing main contrib non-free
    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://security.debian.org/debian-security testing-security 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, wobei über die Option "`-t`" die Zielveröffentlichung angepasst wird (die Pin-Priorität von `Unstable` wird 990):

    $ sudo apt-get install -t unstable package-name

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
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

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

| Tipp
Wenn "`Pin-Priority: 1`" statt "`Pin-Priority: 100`" in der "`/etc/apt/preferences`"-Datei eingetragen 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.

Möchten Sie bestimmte Pakete in `Unstable` automatisch ohne vorangestelltes "`-t unstable`" auf aktuellem Stand halten, 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 die Pin-Priorität für jedes dieser Pakete spezifisch gesetzt. Um zum Beispiel immer die aktuellste `Unstable`-Version dieser "Debian Reference" in Englisch zu installieren, 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
Diese apt-pinning-Technik funktioniert sogar, wenn Sie normalerweise `Stable` verwenden. Dokumentationspakete konnten nach meiner Erfahrung bis jetzt immer problemlos aus dem `Unstable`-Archiv installiert werden.

### 2.7.10. Nutzen von `Unstable` mit einigen Paketen aus `Experimental`

| Warnung
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. See Abschnitt 2.1.11, „Wie Sie mit Konflikten umgehen“ for alternative solutions.

Hier ein anderes Beispiel der apt-pinning-Technik, um neuere Upstream-Versionen einzelner Pakete aus `Experimental` zu integrieren und ansonsten `Testing` zu nutzen. Sie listen alle benötigten Archive in der "`/etc/apt/sources.list`"-Datei auf, wie hier:

    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://deb.debian.org/debian/ experimental main contrib non-free
    deb http://security.debian.org/ testing-security main contrib

Die Standard-Pin-Priorität für das `Experimental`-Archiv ist immer 1 (<<100), da es ein Archiv mit gesetztem NotAutomatic ist (siehe Abschnitt 2.5.3, „"Release"-Dateien im Archivverzeichnis“). Es ist nicht nötig, den Wert für die Pin-Priorität explizit in der "`/etc/apt/preferences`"-Datei zu setzen, um das `Experimental`-Archiv nutzen zu können (außer wenn Sie möchten, dass bestimmte Pakete daraus beim nächsten Upgrade automatisch verwendet werden sollen).

### 2.7.11. Downgrade im Notfall

| Warnung
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. See Abschnitt 2.1.11, „Wie Sie mit Konflikten umgehen“ for alternative solutions.

| 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 ist bekannt, 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 und ein Downgrade auf eine ältere Archiv-Version durch Manipulation der Installationskandidat-Versionen hinbekommen (lesen Sie dazu Abschnitt 2.7.7, „Die Installationskandidat-Version anpassen mit apt-pinning“). Dies ist die tippfaule Alternative zu vielen langwierigen Befehlen der Art "`dpkg -i beschädigtes-paket_alte-version.deb`" (näheres dazu in Abschnitt 2.6.3, „Systemrettung mit dem dpkg-Befehl“).

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

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

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

    deb http://deb.debian.org/debian/ forky main contrib non-free

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

    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

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 bei einem solchen Downgrade unter Umständen einige Pakete von Hand entfernen oder installieren. Linux-Kernel, Bootloader, udev, PAM, APT und Netzwerk-bezogene Pakete sowie deren Konfigurationsdateien erfordern besondere Aufmerksamkeit.

### 2.7.12. Das equivs-Paket

Wenn Sie ein Programm aus den Quellen übersetzen möchten, um das entsprechende Debian-Paket zu ersetzen, ist es das beste, ein echtes lokal gebautes Paket nach Debian-Art zu erstellen (`*.deb`) und dafür ein privates Archiv zu nutzen.

Haben Sie sich jedoch entschieden, ein Programm aus den Quellen zu kompilieren und es stattdessen in "`/usr/local`" zu installieren, können Sie möglicherweise `equivs` als letzte Rettung einsetzen, um die fehlenden Paketabhängigkeiten zu erfüllen:

    Package: equivs
    Priority: optional
    Section: admin
    Description: Circumventing Debian package dependencies
     This package provides a tool to create trivial Debian packages.
     Typically these packages contain only dependency information, but they
     can also include normal installed files like other packages do.
     .
     One use for this is to create a metapackage: a package whose sole
     purpose is to declare dependencies and conflicts on other packages so
     that these will be automatically installed, upgraded, or removed.
     .
     Another use is to circumvent dependency checking: by letting dpkg
     think a particular package name and version is installed when it
     isn't, you can work around bugs in other packages' dependencies.
     (Please do still file such bugs, though.)

### 2.7.13. Ein Paket auf das Stable-System portieren

| Achtung
Es gibt keine Garantie, dass die hier beschriebene Prozedur ohne händischen Extraaufwand funktioniert, wenn das System sich unterscheidet.

Für partielle Upgrades eines `Stable`-Systems ist das Neubauen von Paketen innerhalb ihrer Umgebung unter Verwendung der Quellpakete sinnvoll. Sie vermeiden so riesige Upgrades aufgrund von Paketabhängigkeiten.

Fügen Sie folgende Einträge zur "`/etc/apt/sources.list`" des `Stable`-Systems hinzu:

    deb-src http://deb.debian.org/debian unstable  main contrib non-free

Installieren Sie für das Kompilieren erforderliche Pakete und laden Sie das Quellpaket wie folgt herunter:

    # apt-get update
    # apt-get dist-upgrade
    # apt-get install fakeroot devscripts build-essential
    # apt-get build-dep foo
    $ apt-get source foo
    $ cd foo*

Aktualisieren Sie einige Pakete aus der Werkzeugkette wie z.B. `dpkg` und `debhelper` aus Paketquellen für zurück-portierte Pakete, falls diese für die Rückportierung erforderlich sind.

Führen Sie folgendes aus:

    $ dch -i

Erhöhen Sie die Paketversion, z.B. indem Sie ein "`+bp1`" in "`debian/changelog`" angehängen.

Bauen Sie die Pakete und installieren Sie sie wie folgt im System:

    $ debuild
    $ cd ..
    # debi foo*.changes

### 2.7.14. Proxy-Server für APT

Obwohl das Spiegeln von vollständigen Sektionen 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.5, „Weitere Netzwerkanwendungs-Server“) zu verwenden, wie in apt.conf(5) und "`/usr/share/doc/apt/examples/configure-index.gz`" beschrieben. Sie können die Umgebungsvariable "`$http_proxy`" nutzen, 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.

Tabelle 2.19. Liste von Proxy-Hilfsprogrammen speziell für das Debian-Archiv

Paket | Popcon | Größe | Beschreibung
--- | --- | --- | ---
`apt-cacher` | V:0.31, I:0.35 | 265 | zwischenspeichernder Proxy-Server für Debian-Paket- und Quell-Dateien (Perl-Programm)
`apt-cacher-ng` | V:4.2, I:4.3 | 2063 | zwischenspeichernder Proxy für die Verteilung von Software-Paketen (kompiliertes C++-Programm)

| Achtung
Sollte Debian einmal seine Archivstruktur umorganisieren, benötigen diese spezialisierten Proxy-Hilfsprogramme eventuell eine Code-Änderung durch den Paketbetreuer und könnten eine Zeit lang nicht funktionsfähig sein. Generische Web-(http-)Proxy-Server sind andererseits robuster und können einfacher mit solchen Änderungen umgehen.

### 2.7.15. Weitere Lektüre zum Paketmanagement

Folgende Dokumentation bietet sich an, um mehr über das Paketmanagement zu lernen.

- Primäre Dokumentation zum Paketmanagement:

  - aptitude(8), dpkg(1), tasksel(8), apt(8), apt-get(8), apt-config(8), apt-secure(8), sources.list(5), apt.conf(5) und apt_preferences(5);

  - "`/usr/share/doc/apt-doc/guide.html/index.html`" und "`/usr/share/doc/apt-doc/offline.html/index.html`" aus dem `apt-doc`-Paket;

  - "`/usr/share/doc/aptitude/html/en/index.html`" aus dem `aptitude-doc-en`-Paket.

- Offizielle und detaillierte Dokumentation zum Debian-Archiv:

  - "Debian Policy Manual Chapter 2 - The Debian Archive"

  - "Debian Entwickler-Referenz, Kapitel 4 - Ressourcen für Debian-Entwickler, 4.6 Das Debian-Archiv"

  - "Die Debian GNU/Linux-FAQ, Kapitel 6 - Die Debian FTP-Archive"

- Anleitung zum Bau eines Debian-Pakets für Debian-Benutzer:

  - "Debian-Leitfaden für Paketbetreuer"

Kapitel 1. GNU/Linux-Lehrstunde |  | Kapitel 3. Die Systeminitialisierung