Im Grunde ist dieser Artikel eine Übersetzung von Neddyseagoons' Rough Guide to Restoring Removed Key System Packages mit nur marginalen Erweiterungen.
Der Frühling ist da und das Gentoo Linux System auf meinem Laptop aufzuräumen stand an. "emerge -p --depclean" ermittelt diverse Abhängigkeiten und macht Vorschläge, welche Pakete entfernt werden können. Das man diese Vorschläge sorgfältig prüfen sollte, bevor man --depclean freie Hand gibt, war mir bewusst. Da auf dem System jedoch zwei Versionen der glibc installiert waren, keimte in mir der Wunsch die überflüssige Bibliothek los zu werden.
Obwohl "equery depends glibc" keine Abhängigkeiten zu der alten glibc meldete, kompilierte ich dennoch wichtige Systempakete wie python neu, bevor ich mutig "emerge -C =sys-libs/glibc-2.3.4.20040808-r1" befahl. Im Verlauf meldete der Prozess sehr schnell Fehler. So ziemlich kein Programm konnte mehr ausgeführt werden. Selbst "shutdown -h now" funktionierte nicht mehr!
Mit den folgenden Schritten habe ich den Rechner wiederbelebt.
- Voraussetzungen:
- Tarball des defekten Pakets (glibc, gcc ...)
- Stage3 Gentoo tarball für die entsprechende Rechnerarchitektur
Ich habe mir die Dateien auf einen USB Stick kopiert, da die CD für das laufende Live System gebraucht wird.
- >10GB freien Festplattenspeicher bzw 1GB, da das bestehende /usr/portage von Platte
eingebunden wird.
- Gentoo Installation in eine Datei
- Live CD booten (Ich benutze Knoppix. Viele andere Linux LiveCDs können verwendet werden,
doch muss man darauf achten, dass Programme wie gcc und chroot zur Verfügung stehen.)
- "knoppix 2" fährt das Live System bis zur Kommandozeile
hoch.
- Mounten einer Partition mit >1GB unter /mnt/gentoo
- "fdisk -l" listet alle verfügbaren Partitionen auf,
- mkdir /mnt/gentoo; mount /dev/sdaX /mnt/gentoo
- Erstellen einer 1GB großen Datei
- dd if=/dev/zero of=/mnt/gentoo/recovery.file
count=250000 bs=4096
- Dateisystem erstellen (ext2 - ein Journal ist überflüssig)
- mke2fs /mnt/gentoo/recovery.file
- Mountpunkt für das neue System
- mkdir /mnt/fixme
- mount -o loop -t ext2 /mnt/gentoo/recovery.file /mnt/fixme
- Entpacken des Stage3 Gentoo Tarballs
- Prozeß- und Gerätedateiverzeichnisse einbinden
- mount -t proc none /mnt/fixme/proc
- mount -o bind /dev /mnt/fixme/dev
- Einbinden der vorhandenen Paketverzeichnisse (portage tree)
- mount -o bind /mnt/gentoo/usr/portage
/mnt/fixme/usr/portage
- Sprung ins neue System und Anpassungen an die neue Umgebung
- chroot /mnt/fixme /bin/bash
- env-update
- source /etc/profile
- export PS1="(geschafft) $PS1"
- Fertig! Alle Systemwerkzeuge funktionieren wieder und da wir das alte /usr/portage eingebunden
haben, können wir auch auf alle Sourcen zugreifen.
- Reparatur
- Wenn es noch nicht unter /usr/portage/distfiles liegt,
laden wir es manuell von einem Spiegel der Wahl herunter.
- Bauen der Binärdaten
- Das Binärpaket finden wir anschließend unter /usr/portage/packages/All, das uns ja auch nach
Beenden des Rettungssystems zur Verfügung steht.
- Beenden des Rettungssystems
- Entpacken (Installation) des erstellten Paketes und Neustart
- cd /mnt/gentoo
- tar -xvjf /usr/portage/packages/All/glibc-2.x.x.tbz2
- shutdown -r now
- Quellen:
- Neddyseagoons' Rough Guide to Restoring Removed Key System Packages
- Gentoo Stage3 Tarballs
- Forumsdiskussion zum Thema