Gentoo - Ugrade eines (ur-)alten Portage mit historischen Versionen

Die Linux-Distribution Gentoo hat den Vorteil, dass es keine Versionen gibt, sondern einzelne Pakete tagtäglich aktualisiert werden können. Somit erhält das System sehr schnell die aktuellsten Version einer Software, ohne auf einen mögliches neues Release der ganzen Linux-Distribuation warten zu müssen. Der Nachteil hierbei ist, dass der Administrator die Software-Updates, sprich Portage, regelmäßig aktualisieren sollte. Im laufenden Betrieb kann dies sehr intensiv sein, da neue Software-Updates immer wieder Probleme mit sich bringen können, weil beispielsweise die Funktionalität geändert wurde oder die Software inkompatibel zu anderen Anwendungsanforderungen geworden sind.

Daher ist es keine Seltenheit, dass auf einem Server Portage sehr veraltet ist, weil man nach dem Motto "never touch a running system" gearbeitet hat. Dies ist aber noch gefährlicher, da solche Systeme nur mit großen Schwierigkeiten aktualisiert werden können. Spätestens wenn eine Sicherheitslücke publik wird und man ein einzelnes Software-Paket aktualisieren möchte, muss Portage aktualisiert werden. Ist die letzte Synchronisation aber mehrere Monate oder sogar Jahre her, ist die Wahrscheinlichkeit groß, dass in der Zwischenzeit grundlegende Änderungen am Gentoo-System vorgenommen wurden. Diese lassen sich mit einfachem emerge --sync && emerge -upND world nicht einspielen. Im Gegenteil: die Gefahr eines Totalausfalls ist nicht unwahrscheinlich.

#
# So sollte ein Linux-Gentoo nicht aussehen
# Der letzte Sync ist fast drei Jahre her!!!
#

# emerge -upND world
 * Last emerge --sync was 2y 247d 12h 47m 12s ago.

These are the packages that would be merged, in order:

Calculating dependencies

Was aber tun, wenn man ein solch veraltetes Gentoo-System mit einer sehr alten Portage-Version in die Hände bekommt? Mit emerge --sync würde man den aktuellsten Portage-Stand installieren und in diesem Fall einen Upgrade-Schritt von fast drei Jahren machen.

Lösung: historische Portage-Versionen manuell installieren

Welche Software-Versionen existieren und welche Abhängigkeiten sie haben, wird im Verzeichnis /usr/portage definiert. Hier legt Gentoo alle wichtigen Informationen zur Software-Verwaltung Portage ab. Zum Glück gibt es eine offizielle Seite, in denen alte, historische Versionen heruntergeladen werden können:

Portage snapshot historical archives

Wunderbar! Jetzt ist es möglich, Step-By-Step das System zu aktualisieren, indem man die alten Portage-Versionen manuell installiert, das System aktualisiert, um dann mit der nächsten Portage-Version fortzufahren. Am sichersten fährt man, wenn man Monat für Monat das System aktualisiert, was aber mit sehr viel Arbeit verbunden ist. Wer es sich zutraut, kann das System auch alle 6 Monate aktualisieren. Also so, wie man es vielleicht im Betrieb machen würde.

Fangen wir mit einem Beispiel an. Unser System wurde fast. 3 Jahre nicht mehr aktualisiert. Wir brauchen also (Stand November 2014) eine Portage-Version aus dem Zeitraum Frühling 2012.

Historische Portage Versionen

Die Liste auf Gentoo.org ist wiefolgt zu lesen: JJJJMMTT. Wir nehmen also 20120320.

cd /usr/

# altes Portage-Verzeichnis umbenennen
mv portage portage.alt

# Neues Portage herunterladen
wget dev.gentoo.org/~swift/snapshots/portage-20120320.tar.bz2 .

# Portage entpacken
tar xjf portage-20120320.tar.bz2

# System aktualisieren
emerge -upND world

Das war es eigentlich schon. Wenn man Schritt für Schritt das System auf diese Weise aktualisiert, ist man irgendwann wieder in der Realität!

Pakete können nicht heruntergeladen werden. Was tun?

Nicht alle Server halten jahrelang alle Dateien vor. Wer also ein altes Portage aktualisiert, wird regelmäßig damit konfrontiert, dass die gewünschten Dateien von emerge nicht gefunden werden:

>>> Downloading 'http://linux.rz.ruhr-uni-bochum.de/download/gentoo-mirror/distfiles/openssl-1.0.0h.tar.gz'
--2014-11-23 14:13:42--  linux.rz.ruhr-uni-bochum.de/download/gentoo-mirror/distfiles/openssl-1.0.0h.tar.gz
Resolving linux.rz.ruhr-uni-bochum.de... 134.147.32.114
Connecting to linux.rz.ruhr-uni-bochum.de|134.147.32.114|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2014-11-23 14:13:42 ERROR 404: Not Found.

In diesem Fall sucht man im Internet nach der gewünschten Datei. Zu empfehlen sind hierbei FTP-Suchmaschinen wie der NAPALM FTP Indexer. Hat man die Datei gefunden, speichert man diese einfach in das Verzeichnis /usr/portage/distfiles.