# [HOWTO]chroot 32 bit sur amd64

## marvin rouge

But de ce howto

J'ai un superbe scanner à négatifs, qui fonctionne pas très bien sous Linux. Pour l'utiliser, soit il faut que je soit sous Windows (bof), soit il faudrait que je code un driver mais je sais pas faire (gnniii !). Donc la seule solution, c'est d'utiliser un soft proprio, donc déjà compilé, donc en 32 bits. Toute mon installation est en 64 bits.

Bref, toute appli 32 bits non portée 64 bits est susceptible d'être utilisée dans un chroot.

 :Arrow:  macromedia flash

 :Arrow:  scanner avec driver proprio

 :Arrow:  ...

Donc, en route pour un chroot 32 bits  :Wink: 

Préparation du chroot

Préparation du système de base

Créer une partition de taille suffisante (ici 20 GO), la formater. Comme je la place sur un RAID0, dans la suite ce sera /dev/md2, à adapter en fonction de la config.

Monter la partition de chroot:

```
echo "/dev/md2                /mnt/32bit      reiserfs        noauto,noatime  0 0" >> /etc/fstab

mount /mnt/32bit
```

Télecharger dans /mnt/32bit un stage i686 (ici je vais faire un stage 3).

Décompression !

```
cd /mnt/32bit

tar -xvjpf stage3-i686-2004.3.tar.bz2
```

On monte /proc /tmp et /dev pour le chroot:

```
mount -o bind /proc /mnt/32bit/proc

mount -o bind /tmp /mnt/32bit/tmp

mount -o bind /dev /mnt/32bit/dev

mount -o bind /proc/bus/usb /mnt/32bit/proc/bus/usb
```

Pour éviter d'avoir 2 arbres portage (et 2 overlays) ainsi que les distfiles en double, on utilise un arbre commun (gain de place, de temps, et de bande passante):

```
mkdir /mnt/32bit/usr/portage

mount -o bind /usr/portage/ /mnt/32bit/usr/portage/

mkdir /mnt/32bit/usr/local/portage

mount -o bind /usr/local/portage/ /mnt/32bit/usr/local/portage/
```

On entre dans le chroot

```
linux32 chroot /mnt/32bit /bin/bash
```

 et maintenant on est dans un envirronement 32 bits:

```
uname -m

i686
```

Installation du système

A partir d'ici, la racine est celle du chroot.

Pour les CFLAGS, il faut vérifier quel est le gcc:

```
gcc-config -l

[1] i686-pc-linux-gnu-3.3.4 *
```

Pas de chance, on ne pourra pas utiliser -march=k8 d'après [1], donc on se fait un [color]/etc/make.conf[/color] comme ça:

```
CFLAGS="-O2 -march=i686 -fomit-frame-pointer -msse2 -msse -pipe"

CHOST="i686-pc-linux-gnu"

CXXFLAGS="${CFLAGS}"

ACCEPT_KEYWORDS="~x86"

GENTOO_MIRRORS="ftp://ftp.proxad.net/mirrors/ftp.gentoo.org/ http://mirror.switch.ch/ftp/mirror/gentoo/ ftp://mirror.switch.ch/ftp/mirror/gentoo/"
```

Après, on suis grosso-modo le handbook (on n'a pas besoin de synchroniser l'arbre portage, puisqu'il est commun avec le système hôte)

```
env-update

source /etc/profile

ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime

echo "PORTDIR_OVERLAY=\"/usr/local/portage\"" >> /etc/make.conf

echo "sys-libs/glibc userlocales" >> /etc/portage/package.use
```

Editer le /etc/locales.build à votre goût. Moi je laisse ça: */etc/locales.build wrote:*   

> en_US/ISO-8859-1
> 
> en_US.UTF-8/UTF-8
> 
> fr_FR/ISO-8859-1
> ...

 

A priori, si on ne boote pas directement sur le chroot (ce qui est possible), on n'a pas besoin de configurer de kernel. Je m'installe quand même les sources d'un kernel, on ne sait jamais ... 

```
emerge -av gentoo-dev-sources
```

Le /etc/fstab:

```
/dev/md2                /               reiserfs        noatime                 0 0

#/dev/SWAP              none            swap            sw                      0 0

none                    /proc           proc            defaults                0 0

none                    /dev/shm        tmpfs           defaults                0 0

none                    /proc/bus/usb   usbfs           defaults                0 0
```

A vérifier/compléter : je ne suis pas sûr du tout que partager les swap soit une bonne idée, donc pas de swap sans ce /etc/fstab, et je n'ai pas copié le /etc/mtab du système 64 bits dans le chroot (ce qui me semble logique ... mais du coup le df -h ne fonctionne plus, et slocate non plus :/  Si quelqu'un a des idées là dessus, je suis interressé.)

Définir un mot de passe root pour le chroot: passwd

Ajouter un utilisateur

```
useradd -m -G users,wheel,audio -s /bin/bash utilisateur

passwd utilisateur
```

 Possibilité: faire un bind entre le /home 64 bit et le /home 32 bit du même utilisateur pour le partage des fichiers.

Mise à jour

Régler les USE flags et mettre à jour le système (et aller se boire quelques cafés en attendant):

```

emerge unmerge linux-headers

emerge linux26-headers

emerge glibc

emerge -avu portage

emerge -avu world
```

Se délogger.

Utiliser le chroot

En utilisateur normal, en dehors du chroot:

```
xhost local:localhost
```

Se logger en root:

```
su

...

mount /mnt/32bit

mount -o bind /proc /mnt/32bit/proc

mount -o bind /tmp /mnt/32bit/tmp

mount -o bind /dev /mnt/32bit/dev

mount -o bind /usr/portage /mnt/32bit/usr/portage

mount -o bind /usr/local/portage /mnt/32bit/usr/local/portage

mount -o bind /home /mnt/32bit/home

mount -o bind /proc/bus/usb /mnt/32bit/proc/bus/usb

linux32 chroot /mnt/32bit /bin/bash --login

```

à compléter: mettre tout ça dans le fstab 64bit pour que tout soit monté automatiquement

Une fois là, on se re-logge en user dans le chroot:

```
su - utilisateur

export DISPLAY=:0.0
```

et normalement, c'est bon ! Evidemment, pour lancer une appli gtk dans le chroot, il faudra installer xorg-x11, et les libs gtk ...

Sources et documentation

[1] La page du projet AMD64 Gentoo

un thread de la section amd64

Toute remarque / amélioration est la bienvenue  :Smile: 

EDIT: correction d'erreursLast edited by marvin rouge on Thu Mar 24, 2005 7:23 am; edited 1 time in total

----------

## kernelsensei

waaaa cool !!!

Pour ceux qui voudraient du mplayer 32bits, il n'est pas necessaire de faire un chroot, ya un ebuild de mplayer-bin qui traine sur ce forum, mais je ne sais plus ou !

EDIT: retrouve le lien : http://sh.nu/download/ebuilds/mplayer/

----------

