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 Abschnitt 8.41, „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. Glücklicherweise setzen diese jedoch auf den bereits zuvor beschriebenen Mechanismen auf.
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 Abschnitt 4.2.3, „Binärpakete“) 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 dazu
Kapitel 20, Veröffentlichungen mischen) oder das Übersetzen des Pakets aus den
Quellen und das nachfolgende Einspielen des eigenen Binärpakets risikoärmer
ist.
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 Abschnitt 8.4.4, „apt-cache showpkg
Paketname“,
„Verfügbare Paketversionen ermitteln“ in
Abschnitt 8.14.3, „Verfügbare Paketversionen ermitteln“ und „Aus welchem Repo kommen die
Pakete“ in Abschnitt 8.14, „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 Veröffentlichung von Debian 8 Jessie.
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 benutzen Sie nachfolgend zum Downgrade.
Sollte obiger Schritt jedoch nicht (mehr) von Erfolg gekrönt sein — weil Sie bspw. den Paketcache schon aufgeräumt haben — benötigen Sie einen Plan B. Eine Recherche im Paketarchiv unter Debian Snapshots [Debian-Snapshots] (siehe Abbildung 8.31, „Das Debian-Paketarchiv“) ist ein solcher Plan.
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. Abbildung 8.32, „Suchergebnis nach dem Paket openvpn
im Paketarchiv“ 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 lokal im Paketcache unter
/var/cache/apt/archives
ab.
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:
apt-get
remove openvpn
dpkg -ihv
/var/cache/apt/archives/openvpn_2.3.4-5_amd64.deb
.
Bei dieser Vorgehensweise bleiben alle Konfigurationsdateien unverändert
erhalten. Es kann jedoch passieren, dass nicht alle Abhängigkeiten erhalten
bleiben und andere Pakete ebenfalls ausgetauscht werden müssen. Das erreichen
Sie mit Hilfe des nachfolgenden Aufrufs apt-get install -f
. Der Schalter -f
kürzt --fix-broken
ab.
APT akzeptiert als Parameter auch die explizite Angabe der Versionsnummer des Pakets. Falls das Paket noch nicht installiert ist, hilft dieser Aufruf:
apt-get install <package-name>=<package-version-number>
Ist das Paket jedoch schon installiert, gelingt dieser Aufruf:
apt-get install --reinstall <package-name>=<package-version-number>
In beiden Fällen ersetzen Sie <package-name> durch den tatsächlichen Namen des Paketes und <package-version-number> durch die gewünschte Versionsnummer. Für die Version 2.3.4-5 des Paketes openvpn sieht der Aufruf wie folgt aus:
Paket mit konkreter Versionsangabe (neu) installieren.
# apt-get install --reinstall openvpn=2.3.4-5
APT ist flexibel und erlaubt ebenfalls die Referenzierung eines Paketes über
die explizite Angabe der Veröffentlichung. Dazu kommt der Schalter -t
(Langform: --target-release
) zum Einsatz:
apt-get -t=<target release> install <package-name>
Die Angabe <target release>
benennt die Veröffentlichung, also bspw. stable
oder unstable, aber auch den Namen wie Bullseye oder Bookworm. Für den Wert
<package-name> geben Sie den tatsächlichen Namen des Paketes an. Für das
Paket openvpn aus der vorherigen, stabilen Veröffentlichung (genannt
oldstable) sieht der Aufruf dann wie folgt aus:
Paket mit Angabe der Veröffentlichung installieren.
# apt-get -t=oldstable install openvpn