In diesem Tutorial beschreibe ich euch alle nötigen Schritte um ein Gentoo von “no-multilib” System in ein “multilib” System umzuwandeln.
Auf meinem Server hatte ich ein “no-multilib” Gentoo laufen, kam aber in die Bredouille eine 32-Bit Anwendung irgendwie zum Laufen zu bringen. Ein einfaches wechseln des Profils ist leider nicht ausreichend. Da für mich eine Neuinstallation zu aufwendig war, habe ich mich für einen anderen Weg entschieden, den ich euch hier erläutere.
Ich benutze ein aktuelles Stage 3 Archiv mit dem ich in einer Chroot einfach die notwendigen Pakete kompiliere.
Vorbereitung
Bevor Ihr anfangt, solltet Ihr unbedingt ein Backup des bestehenden Systems machen! Falls etwas schief läuft will ich nicht der Bösewicht sein, der euer System gekillt hat.
Kernel konfigurieren
Wir aktivieren in unserem Kernel folgende Parameter um eine 32-Bit Unterstützung zu aktivieren:
Binary Emulations --->
[*] IA32 Emulation
< > IA32 a.out support
[*] x32 ABI for 64-bit mode
Danach den Kernel neu kompilieren und installieren.
Stage 3 chroot erstellen
Zuerst legen wir uns einen Ordner für das Stage3 System an. Ich habe mich für “/chroot” entschieden. Nachdem man den Ordner erstellt hat, wechselt man in diesen.
mkdir /chroot
ch /chroot
Solltet Ihr euch für einen anderen Ordner entschieden haben, müsst Ihr “/chroot” im Laufe dieses Tutorials mit eurem ersetzen!
Nun laden wir das aktuelle Stage3 Archiv runter:
wget http://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-*.tar.xz
Das “” in “stage3-amd64-.tar.xz” müsst Ihr mit dem aktuellen Release ersetzen!
Nun entpacken wir das Stage3 Archiv:
tar xvpf stage3-amd64-*.tar.xz
Verzeichnisse erstellen und mounten
Zuerst mounten wir unserer Portage Verzeichnis in den Stage3 Ordner:
mkdir /chroot/usr/portage
mount --bind /usr/portage /chroot/usr/portage
Als nächstes binden wir das Root Dateisystem des Hauptsystems ein:
mkdir /chroot/system_root
mount --bind / /chroot/system_root
Danach folgen die üblichen Schritte die man auch aus dem Gentoo Handbuch kennt:
cp /etc/resolv.conf /chroot/etc/
mount -t proc none /chroot/proc
chroot /chroot /bin/bash
env-update
source /etc/profile
Chroot System konfigurieren
Nun befinden wir uns in unser Chroot. Wir wählen zuerst ein passendes Profil aus. Eine Liste bekommt man mit:
eselect profile list
Ein Profil setzen geht über:
eselect profile set [Nummer]
In der “/etc/portage/make.conf” trägt man am Besten die gleichen CFLAGS ein wie beim Hauptsystem.
Pakete kompilieren
Nun müssen wir “GCC” und “glibc” kompilieren. Es ist wichtig das hier unbedingt die gleichen Versionen wie im Hauptsystem zu benutzen sind! Kontrolliert dies bitte genau!
emerge -a --root=/system_root --root-deps=rdeps gcc glibc
Damit werden “GCC” und “glibc” in der Chroot kompiliert aber im Hauptsystem installiert. Achtet darauf, dass wenn Ihr einen anderen Ordner als “system_root” benutzt, diesen unbedingt anpasst!
Sind die beiden Pakete erfolgreich installiert verlassen wir wieder die Chroot.
Chroot verlassen und aufräumen
Nachdem wir “GCC” und “glibc” im Hauptsystem installiert haben, verlassen wir die Chroot und räumen auf:
umount /chroot/proc
umount /chroot/usr/portage
umount /chroot/system_root
Wenn man die Chroot nicht mehr braucht, kann man diese auch einfach wieder löschen:
rm -R /chroot
Hauptsystem fertigstellen
Da wir nun im Hauptsystem “GCC” und “glibc” in der “multilib” Variante haben, können wir nun unser Profil wechseln. Wechselt also nun auf das gewünschte “multilib” Profil:
eselect profile set [Nummer]
Danach führen wir zum Schluss noch ein World Update aus:
emerge -a -u --deep --newuse --changed-deps @world
Das sollte zumindest “sys-apps/sandbox” mit der ABI_X86 Flag für 32- und 64-Bit installieren.
Fazit
Mit den beschrieben Schritten habt Ihr euer “no-multilib” System in ein “multilib” System gewandelt. Sollte irgendetwas nicht funktionieren, spielt euer Backup zurück, dass Ihr selbstverständlich am Anfang gemacht habt.