27 marzo 2014

Gentoo: passare da "no-multilib" a "multilib"

Vi avranno detto che non si può fare e basta (vedasi la FAQ di Gentoo su AMD64). In realtà si può fare, come si evince da quest'altra guida. Quest'ultima guida è un pelino scarna e, forse, dà per scontate troppe cose.

Perché ho dovuto fare tutto 'sto ambaradan? Beh. Dovevo installare roba che, se dovessi aspettare la facciano per i 64bit, creperei prima io. Di vecchiaia.

Inizialmente, il gentoo che ho qua in ufficio era impostato così:

xxxxxx ~ # eselect profile list
Available profile symlink targets:
  [1]   default/linux/amd64/13.0
  [2]   default/linux/amd64/13.0/selinux
  [3]   default/linux/amd64/13.0/desktop
  [4]   default/linux/amd64/13.0/desktop/gnome
  [5]   default/linux/amd64/13.0/desktop/gnome/systemd
  [6]   default/linux/amd64/13.0/desktop/kde
  [7]   default/linux/amd64/13.0/desktop/kde/systemd
  [8]   default/linux/amd64/13.0/developer
  [9]   default/linux/amd64/13.0/no-multilib *
  [10]  default/linux/amd64/13.0/x32
  [11]  hardened/linux/amd64
  [12]  hardened/linux/amd64/selinux
  [13]  hardened/linux/amd64/no-multilib
  [14]  hardened/linux/amd64/no-multilib/selinux
  [15]  hardened/linux/amd64/x32
  [16]  hardened/linux/uclibc/amd64

Non so come sia il vostro. In ogni caso, per ora, NON pensateci nemmeno a passare a un qualsivoglia x32. È tuttora sperimentale (this is NOT Sparta, ragà). Se lo fate cercatevi 'nartra guida e non rompetemi più le scatole. Io ho scelto la [1], col comando eselect profile set 1. Dopodiché createvi una dir 'ndovecazzovepare, in /media, /mnt o /sarcazzo.

Io ho scelto /mnt/switch per la "gabbia" dove poi ricompilerò tutta la fuffa necessaria a ripartire come multilib (glibc, gcc). Siccome i vari tools per la compilazione già presenti nel mio sistema sono tutti no-multilib, devo appunto usare una gabbia dove scaricare e decomprimere il stage3 multilib, contenente giustappunto i tools in questione:

xxxxxx ~ # mkdir /mnt/switch/
xxxxxx ~ # cd /mnt/switch/
xxxxxx switch # wget http://distfiles.gentoo.org/releases/amd64/current-iso/stage3-amd64-20140320.tar.bz2 ./
xxxxxx switch # tar xpf stage3-amd64-20140320.tar.bz2 -C /mnt/switch/ 
Se copiateincollate quella url senza pensare, lo fate a vostro rischioepericolo

Ora preparariamo la gabbia per la ricompilazione summenzionata...

xxxxxx switch # mount -t proc none /mnt/switch/proc
xxxxxx switch # mount -o bind /dev /mnt/switch/dev
xxxxxx switch # mkdir /mnt/switch/usr/portage
xxxxxx switch # mount -o bind /usr/portage /mnt/switch/usr/portage
xxxxxx switch # cp -L /etc/resolv.conf /mnt/switch/etc/
xxxxxx switch # cp -r /etc/portage/* /mnt/switch/etc/portage/
xxxxxx switch # cp -L /etc/locale.gen /mnt/switch/etc/
xxxxxx switch # cp -L /etc/make.conf /mnt/switch/etc/
xxxxxx switch # chroot /mnt/switch /bin/bash
xxxxxx / # env-update 

Ho copiato il locale.gen perché il mio ha poche localizzazioni (5 invece di 445), e il make.conf, perché era in /etc e non in /etc/portage. Ovviamente, anche qui vale il solito disclaimer: se copiateincollate ciecamente senza riflettere, cazzivostri :) Altrettanto ovviamente, verificate che i vari USE non vadano in conflitto con il multilib futuro (io ho rimosso "-multilib", per esempio) PRIMA di copiare. Finito con l'env-update, riverificate con eselect profile list prima di proseguire.

Prima di ricompilare glibc e gcc controllate non solo che siano versioni il più possibili "vicine" a quelle fuori dalla gabbia, ma anche che siano effettivamente predisposti per il multilib, con emerge -pv. Ricompilate prima glibc, poi controllate se dovete ricompilare anche binutils, coreutils e libtool. Poi rifate lo stesso con gcc. Dopo la ricompilazione, verificate con gcc-config e fix_libtool_files.sh. Infine create i pacchetti binari di glibc e gcc con il comando quickpkg (se avete ricompilato anche altra roba nella gabbia, aggiungete anche quelli), che li metterà in /usr/portage/packages/.

Uscite dalla gabbia. Per reinstallare glibc e gcc "multilibbati" dai pacchetti, usate prima emerge -Kpv1 per essere sicuri. Dovrebbero essere di color violetto e comunque riportare qualcosa tipo:

xxxxxx ~ # emerge -Kav1 glibc

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

Calculating dependencies... done!
[binary   R    ] sys-libs/glibc-2.17:2.2  USE="gd (multilib*) -debug (-hardened) -nscd -profile (-selinux)
 -suid -systemtap -vanilla" 0 kB

Total: 1 package (1 reinstall, 1 binary), Size of downloads: 0 kB

Se non vi fidate, controllate:

xxxxxx ~ # emerge -av1 glibc

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

Calculating dependencies... done!
[ebuild   R    ] sys-libs/glibc-2.17:2.2  USE="gd (multilib*) -debug (-hardened) -nscd -profile (-selinux)
 -suid -systemtap -vanilla" 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

Da qui proseguite come al solito (dispatch-conf, gcc-config, fix_libtool_files.sh, eccetera, eccetera, ricostruzione della fuffa di base, poi di world e, se necessario, anche del kernel), secondo i vostri gusti/paranoie/rituali apotropaici... (se pensavate di poter pendere tranquillamente dalle mie labbra, col cacchio. Sarò nerd, ma sono umana anche io, indi soggetta a dimenticanze, errori, eccetera.)

Nessun commento:

Posta un commento

NOTA BENE: Se vi ostinate a commentare posts di un mese fa, scatta la moderazione (se non sono in vacanza, controllo quasi ogni giorno)... Ovviamente, se siete spammers vi cancello :)