// Datei: ./werkzeuge/paketoperationen/pakete-downgraden.adoc

// Baustelle: Rohtext

[[pakete-downgraden]]

=== Pakete downgraden ===

// Stichworte für den Index
(((Paket, bestimmte Version installieren)))
(((Paket, downgraden)))
(((Paket installieren, bestimmte Version)))

Allgemein gesprochen, steht der Begriff 'Downgrade' für einen
Niedergang, eine Abwertung oder einen Rückschritt. Bezogen auf die
Verwaltung von Softwarepaketen umfasst es das Einspielen oder
Zurückgehen zu einer vorherigen Paketversion. Es stellt damit das
Gegenstück zu einer Aktualisierung mittels `apt-get upgrade` dar (siehe
dazu <<pakete-aktualisieren>>).

Ein Downgrade ist in Betracht zu ziehen, wenn die derzeit installierte
Version eines Softwarepakets nicht das leistet, was sie verspricht,
bspw. dabei Fehler auftreten oder Inkompatibilitäten mit anderen
Softwarepaketen deren Benutzung unmöglich machen. Häufig fallen in
letztere Kategorie geänderte Schnittstellen, die noch nicht auf allen
nachfolgenden Ebenen konsequent umgesetzt wurden.

Ein Downgrade wird vom Release-Team von Debian GNU/Linux offiziell nicht
unterstützt. Alle Mechanismen zur Paketverwaltung und Aktualisierung
sind auf das Einspielen einer neueren Version ausgerichtet. Daher
verfügt auch keines der hier im Buch vorgestellten Werkzeuge zur
Paketverwaltung bislang über einen spezifischen Schalter, um ein
Downgrade explizit anzustoßen. Es bleibt daher nur ein Vorgehen über
andere Wege, die jedoch auf den bereits zuvor beschriebenen Mechanismen
aufsetzen.

==== Hintergrund und Fragen zum Downgrade ====

// Stichworte für den Index
(((Maintainer-Skripte, postinst)))
(((Maintainer-Skripte, postrm)))
(((Maintainer-Skripte, preinst)))
(((Maintainer-Skripte, prerm)))

Das Einspielen einer neueren Version ist vom prinzipiellen Ablauf her
nicht anders als die Aktualisierung -- es laufen die gleichen
Mechanismen ab und es kommen die gleichen Werkzeuge zum Einsatz. Der
Unterschied ist jedoch die Komplexität, die hier deutlich höher ist.

Vergleichbar ist der Vorgang wie das Bewegen entgegen der Fahrtrichtung
in einer Einbahnstraße -- es geht so lange gut, wie Ihnen keiner
entgegenkommt. Schwierigkeiten können Ihnen nämlich die
Maintainerskripte (siehe ``Binärpakete'' in
<<aufbau-und-format-binaer>>) bereiten, die das Downgrade im Normalfall
nicht unterstützen. Eventuell ist der Mechanismus, der sie aufruft, auch
nicht darauf vorbereitet. Kritisch sind insbesondere die Fälle, wo eine
konzeptuelle Änderung im Paket in der Rückrichtung nicht umgebaut werden
kann (siehe dazu bspw. den Debian-Bug 764503
<<apt-get-update-bug-764503>>).

Ein Downgrade ist mit einer Aktualisierung gleichzusetzen. Hierbei
benennen Sie jedoch explizit eine ältere Paketversion, die Sie entweder
über einen Parameter -- ``target release'' oder Versionsnummer -- beim
Aufruf von `dpkg` bzw. `apt-get` angeben oder in der Textoberfläche von
Aptitude auswählen. Berechnet die Paketverwaltung nun die Abhängigkeiten
zu den übrigen Paketen, kann am Ende dieses Vorgangs auch eine
großflächige Änderung am Restbestand der Pakete stehen. Dieser Fall ist
nicht ungewöhnlich, denn er kann ebenso bei einer Aktualisierung
vorkommen. Die Wahrscheinlichkeit, daß die Änderungen erheblich sind,
ist sehr groß.

Wie oben schon benannt, sind diese Änderungen nicht immer
rückwärtskompatibel und lösen Verwicklungen aus (Aktualisierungen sind
eigentlich bereits hinreichend komplex). Wir empfehlen Ihnen daher, ein
Downgrade nur bei dem tatsächlichen Bedarf dafür durchzuführen. Prüfen
Sie bitte vorher, ob das Mischen von Veröffentlichungen mittels
`apt-pinning` (siehe <<veroeffentlichungen-mischen>>) oder das
Übersetzen des Pakets aus den Quellen und das nachfolgende Einspielen
des eigenen Binärpakets risikoärmer ist.

==== Ablauf und Durchführung ====
===== Bestehende Paketversionen klären =====

// Stichworte für den Index
(((apt-cache, showpkg)))
(((apt-show-versions)))
(((aptitude, versions)))
(((Debianpaket, openvpn)))
(((Paket, verfügbare Versionen anzeigen)))
(((Pakete aktualisieren, verfügbare Versionen anzeigen)))

Als Schritt eins bringen Sie in Erfahrung, welche Paketversionen
überhaupt installiert und darüberhinaus aus dem Repository ihrer
genutzten Veröffentlichung verfügbar sind. Dabei helfen ihnen bspw. die
Werkzeuge `apt-cache`, `aptitude`, `rmadison` und `apt-show-versions`
weiter (siehe ``Paketstatus erfragen'' in
<<paketstatus-apt-cache-showpkg>>, ``Verfügbare Paketversionen
ermitteln'' in <<verfuegbare-paketversionen-ermitteln>> und ``Aus
welchem Repo kommen die Pakete'' in
<<aus-welchem-repo-kommen-die-pakete>>). Im Aufruf benötigen alle
Programme zusätzlich den Namen des gewünschten Pakets und listen in der
Ausgabe die letzte Version auf, ggf. noch spezifiziert für die jeweilige
Veröffentlichung. Die nachfolgende Ausgabe nutzt `apt-show-versions` und
zeigt das anhand des Paketes `openvpn` aus der stabilen
Veröffentlichung.

.Auflistung der verfügbaren Versionen zum Paket `openvpn`
----
$ apt-show-versions openvpn
openvpn:amd64/jessie 2.3.4-5+deb8u1 uptodate
$
----

Die oben benannten Werkzeuge können Ihnen jedoch nicht darstellen,
welche vorherigen Versionen eines Pakets existieren und noch verfügbar
sind. Aus obiger Ausgabe von `apt-show-versions` wird nur ersichtlich,
daß derzeit die Version `2.3.4-5+deb8u1` installiert ist und es sich
dabei um das derzeit aktuellste Paket handelt. Das Suffix `deb8u1`
deutet auf eine (Sicherheits-)Aktualisierung der Vorgängerversion
`2.3.4-5` hin.

Um diese Version aufzuspüren, kann ein Blick in den Paketcache bereits
zum Erfolg führen:

.Recherche im Paketcache
----
$ ls /var/cache/apt/archives/openvpn*
/var/cache/apt/archives/openvpn_2.3.4-5_amd64.deb
/var/cache/apt/archives/openvpn_2.3.4-5+deb8u1_amd64.deb
$
----

Sie sehen, dass das Paket mit der Version `2.3.4-5` noch lokal
herumliegt. Dieses Paket können Sie nachfolgend benutzen.

// Stichworte für den Index
(((Debian Snapshots, Paketarchiv)))
Sollte obiger Schritt jedoch nicht (mehr) von Erfolg gekrönt sein --
weil Sie bspw. den Paketcache aufgeräumt haben -- benötigen Sie Plan B.
Dieser beinhaltet eine Recherche im Paketarchiv unter 'Debian Snapshots'
<<Debian-Snapshots>> (siehe <<fig.snapshots>>). 

.Das Debian-Paketarchiv
image::werkzeuge/paketoperationen/snapshots.png[id="fig.snapshots", width="50%"]

Dieses Archiv beinhaltet den Zugriff auf alle Varianten eines Pakets,
welche jemals Bestandteil einer Veröffentlichung von Debian waren. Über
diese Webseite stöbern Sie veröffentlichungsbezogen oder anhand des
Paketnamens für das Quell- bzw. Binärpaket. <<fig.snapshots-openvpn>>
zeigt das Suchergebnis für das Paket `openvpn`. Mit einem Klick auf die
gesuchte Version aus der Liste beziehen das benötigte Paket aus dem
Archiv und speichern es im Paketcache unter `/var/cache/apt/archives'.

.Suchergebnis nach dem Paket `openvpn` im Paketarchiv
image::werkzeuge/paketoperationen/snapshots-openvpn.png[id="fig.snapshots-openvpn", width="50%"]

===== Paket austauschen =====

Im sich nun anschließenden Schritt zwei ersetzen Sie das aktuelle Paket
durch dessen Vorgänger. Dieser Schritt ist unkompliziert, sofern keine
größeren Paketabhängigkeiten bestehen und repariert werden müssen. Im
vorliegenden Fall genügt dazu folgendes:

. Entfernen des derzeit installierten `openvpn`-Pakets mittels `apt-get
remove openvpn`

. Einspielen des älteren `openvpn`-Pakets mittels `dpkg -ihv
/var/cache/apt/archives/openvpn_2.3.4-5_amd64.deb`.

Bei dieser Vorgehensweise bleiben alle Konfigurationsdateien unverändert
erhalten.

===== Paket über die Angabe der Versionsnummer austauschen =====

// Stichworte für den Index
(((apt-get, -t install)))
(((Debianpaket, openvpn)))
(((Paket, bestimmte Version installieren)))
(((Paket installieren, bestimmte Version)))

* über die explizite Angabe der Versionsnummer des Pakets: 

----
apt-get install <package-name>=<package-version-number>
----

===== Paket über die Angabe der Veröffentlichung austauschen =====

// Stichworte für den Index
(((apt-get, -t install)))
(((Debianpaket, openvpn)))
(((Paket, bestimmte Version installieren)))
(((Paket installieren, Auswahl anhand der Veröffentlichung)))

* über die explizite Angabe der Veröffentlichung: 

----
apt-get -t=<target release> install <package-name>
----

// Datei (Ende): ./werkzeuge/paketoperationen/pakete-downgraden.adoc
