Ältere Paketversion installieren (Downgrade): Unterschied zwischen den Versionen

Aus wiki.archlinux.de
GerBra (Diskussion | Beiträge)
pacman verlinkt
 
(11 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
*F: Ich habe gerade '''pacman -Syu''' ausgeführt und Paket XYZ wurde von Version N auf Version M aktualisiert. Dieses Paket macht auf meinem Rechner Probleme. Wie kann ich die Aktualisierung wieder rückgänging machen?
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.
*A: Du kannst die ältere Version des Paketes einfach installieren, indem Du Dir das Verzeichnis '''/var/cache/pacman/pkg''' ansiehst und guckst ob dort das alte Paket gespeichert ist. (Falls Du in letzter Zeit kein pacman -Scc ausgeführt hast, sollte es noch dort sein). Wenn das Paket vorhanden ist kannst Du es mit '''pacman -U pkgname-olderpkgver.pkg.tar.gz''' installieren.
<br>
#Falls Du das alte Paket nicht mehr auf dem Rechner hast, kannst Du unter folgender Seite einen länger nicht mehr aktualisierten Mirror aussuchen und ihn als Paketquelle eintragen: https://www.archlinux.de/?page=MirrorStatus
#Sind auch dort keine alten Pakete mehr zu finden, kann es sich lohnen unter folgenden Adressen nachzusehen:
##http://arm.konnichi.com (Archiviert ab November 2009)
##http://schlunix.org/archlinux/


:Man muss die Pakete herunterladen und händisch installieren (oder via wget und [[pacman]] von der Konsole) oder sich gegebenefalls ein [[Eigene_Repositories_erstellen|eigenes Repo]] bauen. Weitere Informationen finden sich im [https://bbs.archlinux.org/viewtopic.php?id=53665 englischen Forum]
Ein Downgrade sollte immer die letzte Möglichkeit sein, und nie als dauerhafte Lösung betrachtet werden.
<br>
Ist das alte Paket nicht mehr auf einem der Servern verfügbar, musst Du es selbst kompilieren. Dazu brauchst Du ein PKGBUILD für das Paket. Du kannst das PKGBUILD aus dem [[Arch Build System|ABS]] Baum nehmen und so anpassen, dass die alte Version kompiliert wird; oder auf http://www.archlinux.org/packages/ gehen und nach dem Paket suchen, von welchem Du eine ältere Version installieren willst. Hast Du es gefunden, klickst Du auf "View SVN entries". Hier kannst du jetzt ein älteres PKGBUILD runterladen bzw. in einer Datei speichern und das Paket dann mit makepkg erstellen.


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


== Pacman daran hindern bestimmte Pakete zu aktualisieren ==
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.


*F: Wie halte ich [[Pacman]] davon ab, ältere Paketversionen zu aktualisieren?
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.
*A: Mit der '''IgnorePkg''' Variable in '''/etc/pacman.conf'''
 
  IgnorePkg = Paket1 Paket2
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.
teilt Pacman mit, dass Paket1 und Paket2 bei einem System-Update nicht aktualisiert werden sollen.
 
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, das ''Arch Linux Archive'', 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 {{ic|-U}} installiert.
 
{{hc|1=pacman -U meinpaket-2.0-1-x86_64.pkg.tar.xz|2=
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 {{ic|meinpaket}} in der Version 2.5 auf die Version 2.0 heruntergestuft. 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 {{ic|/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 [https://www.archlinux.org/mirrors/status/#outofsync Mirrorstatus-Seite] {{sprache|en}} 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'' bietet neben der Möglichkeit, [https://wiki.archlinux.org/index.php/Arch_Linux_Archive ein „altes“ System zu betreiben]{{sprache|en}}, 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 [https://www.archlinux.org/packages/ Paketübersichtsseite] {{sprache|en}} 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 {{ic|+++ b/trunk/PKGBUILD}} gelangt man zum vorher ausgewählten Stand des PKGUILDs. Dieses kann man über „Plain“ im Rohformat anzeigen und Speichern. Alternativ kann man das Repository auch per [[Git]] ziehen und auf den entsprechenden Commit auschecken.
 
Das Paket kann dann wie im [[Arch Build System#Erstellung_von_Paketen|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 [[Chroot|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 {{ic|/mnt/root}} [[Mounten|gemountet]] werden. Mittels {{ic|chroot /mnt/root/ /bin/bash}} wechselt man in das System.
 
Für den Kerneldowngrade sind mindestens {{paket|linux}} und {{paket|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.
 
Es bietet sich an, statt eines nicht unterstützten alten Kernels den {{paket|linux-lts|LTS-Kernel}} zu verwenden. Dieser ist ebenfalls älter, wird aber aktiv mit Sicherheitsupdates versorgt.


== Siehe auch ==
== Siehe auch ==
[[Arch Build System]] - Informationen zum ABS
* [[AUR]] für „beliebte“ ältere Pakete
* [[Arch Build System]] für Details zum Erstellen von Paketen


{{ÜberFDL||Seite=http://wiki.archlinux.org|Name=ArchLinux.org Wiki|Original=http://wiki.archlinux.org/index.php?title=Downgrade_packages}}  
== Weblinks ==
* [https://bbs.archlinux.org/viewtopic.php?id=53665 Beitrag über das ''Arch Linux Archive'' (vormals ''Arch Rollback Machine'') im englischen Forum] {{sprache|en}}
* [http://sch1zo.github.io/blog/2012/05/08/downgrading-a-bad-kernel-on-arch-with-luks-and-lvm/ Kerneldowngrade mit LVM und Verschlüsselung] {{sprache|en}}


[[Kategorie:Paketverwaltung]]
[[Kategorie:Paketverwaltung]]
[[en:Downgrading Packages]]

Aktuelle Version vom 4. Januar 2022, 13:32 Uhr

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, das Arch Linux Archive, 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 heruntergestuft. 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 Mirrorstatus-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 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. Alternativ kann man das Repository auch per Git ziehen und auf den entsprechenden Commit auschecken.

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.

Es bietet sich an, statt eines nicht unterstützten alten Kernels den LTS-Kernel zu verwenden. Dieser ist ebenfalls älter, wird aber aktiv mit Sicherheitsupdates versorgt.

Siehe auch

Weblinks