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