Gentoo von no-multilib in multilib Profil umwandeln

Gentoo

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.