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
1) Installer un chroot 32bits et installer les applications
2) Intégrer le tout dans l'environnement 64 bits.

1) Se fait par debootstrap:
En clair, si on installe le tout sous /32bits

Code:

# 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

Code:

# 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

Code:

# 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

Code:

# 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.

2) 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)), /run (anciennement /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

Code:

/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


et faire

Code:

mount -a



Le repertoire /32bits/tmp est le même que /tmp, etc.
Installer dchroot

Code:

# apt-get install dchroot


Rajouter dans /etc/dchroot.conf les lignes

Code:

# etch i386
i32 /32bits



Désormais l'utilisateur standard peut lancer une application 32 bits en tapant

Code:

$ 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.

Mathieu Janin m'a donné l'astuce suivante:

Code:

#!/bin/sh
CMD=`echo $0 | sed -e 's/32$//'`
ARG="$*"
dchroot -q -c i32 -d "$CMD $ARG"


nommé en do_chroot et mis dans /usr/local/bin de l'arborescence principale. Pour lancer l'application /usr/bin/pouet en environnement 32 bits, on fait juste un
# ln -s /usr/local/bin/do_chroot /usr/bin/pouet
Si l'application existe aussi en 64bits, on fait
# ln -s /usr/local/bin/do_chroot /usr/bin/pouet32
et dans ce cas
$ pouet lance pouet en 64bits
$ pouet32 lance pouet en 32bits