Il arrive fréquemment d’avoir une application 32 bits à faire fonctionner dans un environnement 64 bits. Faire un environnement chroot 32 bits est dans ce cas la solution la plus fiable lorsque les i32libs ne suffisent pas. C’est par exemple souvent le cas pour les applications propriétaires (maple, skype, …). Cela donne l’assurance que l’ensemble fonctionnera bien. Cette méthode convient également à ceux voulant faire tourner une application sid dans une Etch sans rapatrier des morceaux de sid alors qu’un backport est trop délicat à faire.
Pour faire cela il faut
-
Installer un chroot 32bits et installer les applications
-
Intégrer le tout dans l’environnement 64 bits.
-
Se fait par debootstrap:
En clair, si on installe le tout sous /32bits
# mkdir /32bits
# cd /
# debootstrap --arch i386 etch /32bits http://ftp.fr.debian.org/debian/
L’ensemble s’installe. Il n’y a pas de difficultés particulières. debootstrap est une méthode d’installation de debian très efficace.
Il s’agit après de compléter l’installation. Pour cela
- Créer le fichier /32bits/etc/apt/sources.list en le mettant conforme à vos désirs.
- Créer les mêmes utilisateurs. Cela peut être fait par exemple par
# grep "^[^:]*:x:[0-9][0-9][0-9][0-9]:" /etc/passwd >> /32bits/etc/passwd
# grep "^[^:]*:x:[0-9][0-9][0-9][0-9]:" /etc/group >> /32bits/etc/group
(cela recopie les utilisateurs standards sur le système 32 bits).
Il s’agit ensuite d’installer les applications voulues. Pour cela il faut successivement faire
# mount -t proc none /32bits/proc
# chroot /32bits
# apt-get update
# apt-get install truc32bitsquejeveux
Parfois, /dev doit être aussi vu de /32bits lors de l’installation de paquets, faire pour cela
# mount -o bind /dev /32bits/dev
qui monte /dev en bind de manière classique. Attention, bien évidemment lors de l’installation de paquets, il peut y avoir des conflits au moment de lancement de serveurs si ceux ci tournent aussi sous l’environnement 64 bits. Les scripts d’installation en tiennent compte en général.
À ce stade, en général je redémarre la machine pour être sur de partir d’un système tel qu’il sera au lancement de la machine.
Pour imprimer, il suffit d’installer cupsys-client ou lprng mais ne pas installer une imprimante, il faut utiliser le cups 64 bits.
- Ensuite il s’agit d’intégrer le tout dans l’environnement 64 bits. Tout d’abord, il faut s’assurer que les répertoires utilisateurs, la connexion avec X et les démons 64 bits (cups par exemple) se passera bien. Il faut en fait donc monter en «bind» les répertoires /home (utilisateurs), /tmp (pour X et quelques douilles (sockets)), /var/run (même raison, cups, lprng, etc) et /dev (périphériques). On peut parfois avoir besoin de /sys dans le 32 bits. Pour cela rajouter au /etc/fstab du 64 bits les lignes suivantes
/home /32bits/home none bind 0 0
/tmp /32bits/tmp none bind 0 0
proc /32bits/proc proc defaults 0 0
#none /32bits/sys sysfs defaults
/run /32bits/run none bind 0 0
/dev /32bits/dev none bind 0 0
[edit: changement /var/run -> /run]
et faire
mount -a
Le repertoire /32bits/tmp est le même que /tmp, etc.
Installer dchroot
# apt-get install dchroot
Rajouter dans /etc/dchroot.conf les lignes
# etch i386
i32 /32bits
Désormais l’utilisateur standard peut lancer une application 32 bits en tapant
$ dchroot -c i32 -d application32bits argument1 argument2
Il doit voir le répertoire personnel de l’utilisateur, il doit pouvoir imprimer, etc le tout de manière complètement transparente.
Un environnement chroot 32 bits de base pèse 128M plus les applications installées. Sur un disque de 160G, c’est assez indolore pour une solution très pratique et complètement transparente pour l’utilisateur. La technique est identique pour installer une application experimentale ou sid sur un environnement etch qu’on ne veut pas fragiliser.
[lire la suite du fil pour peaufiner (message de Matt et ma conclusion)