Ältere Paketversion installieren (Downgrade)
Ein Paket zu downgraden – also eine Ältere Version zu installieren, obwohl eine neuere Version bereits installiert ist – kann mehrere Gründe haben. Am häufigsten wird vorkommen, dass die neuere Version nicht mehr so funktioniert, wie die vorherige Version, oder aber gar nicht mehr funktioniert.
Ein Downgrade sollte immer die letzte Möglichkeit sein, und nie als dauerhafte Lösung betrachtet werden.
Auswirkungen
Bei einem Downgrade aufgrund eines Bugs ist dieser nicht behoben, sondern lediglich vermieden. Es ist hilfreicher, einen Bugreport zu erstellen, oder im Forum eine Diskussion zu starten, und gegebenenfalls den Autor zu kontaktieren, bevor man einfach blind downgradet.
Updates sind häufig mit Sicherheitsverbesserungen oder mehr Programmstabilität verbunden. Bei einem Downgrade ist man nicht vor bekannten Sicherheitslücken im entsprechenden Programm geschützt, die in der vorherigen Version bekannt wurden.
Ebenfalls kann es zu Problemen mit dem Programm kommen, wenn zum Beispiel die Interaktion mit anderen Programmen auf die neueren Versionen dieser Programme abgestimmt wurde, und die alte Version des Programms dies noch nicht unterstützt.
Zusätzlich zum eigentlich zu downgradenen Programm können weitere Programme betroffen sein. Hier sind es meist Librarys, die ein Programm benötigt. Die vorherige Version benötigt dann eine ältere Library, diese muss dann ebenfalls gedowngradet werden. Das wiederum kann weitere Programme beeinträchtigen, die die neuere Version der Library benötigen.
Neben Librarys können auch Konfigurationsdateien und -parameter betroffen sein, die durch ein Upgrade geändert wurden, und nach einem downgrade nicht mehr funktionieren, da die ältere Version des Programms diese nicht unterstützt.
Vorgehen
Zunächst muss das ältere Paket in der Benötigten Version beschafft werden. Es gibt vier gängige Möglichkeiten, dies zu tun. Diese umfassen den lokalen Paketcache, veraltete Mirrors, die Arch Rollback Machine, und das erstellen eines eigenen Pakets mit der gewünschten Programmversion.
Installation eines Pakets
Ältere Pakete müssen irgendwie beschafft und manuell mittels Pacman installiert werden. Zur Beschaffung folgt unten mehr. Ist das Paket lokal vorhanden, wird es mittels Parameter -U
installiert.
pacman -U meinpaket-2.0-1-x86_64.pkg.tar.xz
Lade Pakete ... Warnung: Downgrade des Paketes meinpaket (2.5-1 => 2.0-1) Löse Abhängigkeiten auf... Suche nach Zwischenkonflikten... Pakete (1): Name Alte Version Neue Version Netto-Veränderung meinpaket 2.5-1 2.0-1 -0,92 MiB Gesamtgröße der zu installierenden Pakete: 57,79 MiB Größendifferenz der Aktualisierung: -0,92 MiB :: Installation fortsetzen? [J/n]
Hier wird das Paket meinpaket
in der Version 2.5 auf die Version 2.0 heruntergstuft. Pacman gibt eine entsprechende Warnung aus. Bei Meldungen über nicht erfüllbare Abhängigkeiten sind die gemeldeten Pakete ebenfalls auf eine ältere Version zu bringen.
Paketquellen
Standardmäßig legt Pacman alle Pakete unter /var/cache/pacman/pkg/
ab, und löscht diese auch nicht, wenn neuere Versionen der Pakete verfügbar sind. Die vorherige Version ist im Regelfall dort zu finden.
Eine weitere Quelle für alte Pakete sind Mirrors, die nicht auf dem aktuellen Stand sind. Auf der Mirrostatus-Seite kann man prüfen, welche Mirrors veraltet sind, und um welche Zeitspanne sie es sind. Je größer die Zeitspanne, desto wahrscheinlicher finden sich ältere Pakete auf diesen Mirrors.
Das Arch Linux Archive (vormals "Arch Rollback Machine bietet neben der Möglichkeit, [ein „altes“ System zu betreiben], auch die Möglichkeit, ältere Pakete [direkt herunterzuladen]. Und zwar sowohl nach Datum, als auch nach „letzte Woche“, „letzter Monat“, etc. sortiert. Es werden Pakete für 64- und 32-Bit-Systeme bereitgestellt.
Selbst erstellen
Sollte keine der vorherigen Methoden zum gewünschten Erfolg führen, bietet sich noch an, manuell ein Paket für das gewünschte Programm zu erstellen, und dort die gewünschte Programmversion anzugeben. Alle Pakete in den offiziellen Repositorys werden in einem SVN- bzw. GIT-Repository verwaltet.
Das jeweilige Repository des Pakets ist über die Suche auf der Paketübersichtsseite zu erreichen. Hier wählt man das Paket aus, und wählt dann bei den „Package Actions“ die Option „View Changes“. Im Abschnitt „Age“ sieht man, von wann die Version ist. Mit einem Klick auf die jeweilige „Commit Message“ kommt man auf die Diff-Seite für den jeweiligen Commit.
Hier sieht man die Änderungen zwischen dem vorherigen Stand, und dem gewählten Stand. Mittels eines weiteren Klicks auf +++ b/trunk/PKGBUILD
gelangt man zum vorher ausgewählten Stand des PKGUILDs. Dieses kann man über „Plain“ im Rohformat anzeigen und Speichern.
Das Paket kann dann wie im Arch-Build-System-Artikel beschrieben erstellt werden. Bei Paketen, die außer dem PKGBUILD noch zusätzliche Dateien benötigen, sind diese ebenfalls aus dem Paket-Repository (Registerreiter „tree“ für die aktuelle Version, ansonsten manuell aus den Commits ermitteln) zu beziehen.
Älteren Kernel installieren
Der Kernel ist die wichtige Systemkomponente überhaupt. Ein Downgrade des Kernels sollte daher nur in Ausnahmefällen, wenn das System nicht mehr startet, durchgeführt werden. Prinzipiell funktioniert ein Kerneldowngrade wie ein herkömmliches Paketdowngrade.
Wenn das System nicht mehr startet, benötigt man ein aktuelles Bootmedium. Man bootet von diesem, und chrootet in das zu downgradende System.
mkdir /mnt/root mount /dev/sda1 /mnt/root mount -t proc proc /mnt/root/proc/ mount -t sysfs sys /mnt/root/sys/ mount -o bind /dev /mnt/root/dev/
Sollte man weitere Partitionen haben, die für den Systemstart wichtig sind, müssen diese ebenfalls innerhalb /mnt/root
gemountet werden. Mittels chroot /mnt/root/ /bin/bash
wechselt man in das System.
Für den Kerneldowngrade sind mindestens linux und linux-headers downzugraden. Bei zusätzlichen Kernelmodulen sind diese ebenfalls zu berücksichtigen. Es ist hier besonders auf eventuell nicht mehr kompatible mkinitcpio-Optionen zu achten.
Siehe auch
- AUR für „beliebte“ ältere Pakete
- Arch Build System für Details zum Erstellen von Paketen