Rendez-vous sur Arrakis

Faire un chroot transparent

Mais qu'est-ce que ça veut dire ça, un chroot transparent? Il s'agit en fait de pouvoir lancer des applications d'un autre système, le tout à partir de debian.

Par exemple, vous êtes en 64bits, mais il vous faut lancer un programme uniquement présent en 32 bits. (Déprécié lorsque le multi arch sera là) Ou alors, vous utilisez debian stable, mais avez besoin d'un logiciel présent en sid.

Une autre utilisation est de pouvoir installer des programmes et ne pas risquer de polluer le système de base. En particulier, installer des packages LaTeX et compiler les documents latex avec le chroot, même s'ils proviennent d'une source tierce. Ainsi, il n'y a pas de soucis avec les mises à jours.

Ce que je décris ensuite permet de lancer ces commandes relatives à un autre système sans avoir à préparer le chroot à chaque fois.

Mise en place

Installation du sous-système

Lorsqu'un # précède la commande à taper, c'est qu'il faut se placer avec les droits superutilisateur.

En partant du principe que c'est une debian que vous voulez utiliser pour lancer une application non présente pour votre architecture ou version de debian. On commence par créer le dossier qui contiendra la distribution , ici ce sera le dossier /debception, puis avec la commande debootstrap on installe le système de base :

# mkdir /debception
# debootstrap --arch i386 squeeze /debception http://ftp.fr.debian.org/debian

remplacer --arch i386 par l'architecture qui vous intéresse, ainsi que squeeze par la branche souhaitée (sid par exemple). Et voilà, vous voici avec le squelette d'une debian dans le dossier /debception.

Configuration du sous-système

Vous pouvez désormais :

Maintenant, on passe au premier chroot proprement dit. Vous pourrez alors faire comme dans un système debian normal, installer les logiciels que vous voulez, réaliser les modifications voulues… Tout d'abord, il faut relier /proc et /dev, puis ensuite on lance le chroot proprement dit

# mount -t proc none /debception/proc
# mount -o bind /dev /debception/dev
# chroot /debception /bin/bash

C'est une bonne idée de configurer la langue du système :

# apt-get install locales
# dpkg-reconfigure locales

Et maintenant vous faîtes ce que vous voulez de ce système :

# apt-get update
# apt-get install zsnes

Intégration du chroot

Bon, c'est bien joli tout ça, mais on ne va pas lancer toutes ces commandes dès que l'on veut utiliser une commande du sous-système. Pour cela, on automatise la liaison entre les documents (le /home), les dossiers “système” et “périphériques” (/proc et /dev) au sein du fstab. En fait, on rajoute ces lignes à la fin du fichier /etc/fstab qui contient tous les périphériques à monter au démarrage :

/home           /debception/home       none    bind            0       0
/tmp            /debception/tmp        none    bind            0       0
proc            /debception/proc       proc    defaults        0       0
/var/run        /debception/var/run    none    bind            0       0
/dev            /debception/dev        none    bind            0       0

Redémarrez ou lancez mount -a pour prendre les changements en compte

Utilisation et lancement d'une commande

Afin de se faciliter la vie, on va utiliser le programme schroot qui s'occupera de faire le lien avec le sous-système de façon sécurisée. Installez donc le paquet schroot, puis assurez-vous d'avoir ces lignes dans le fichier /etc/schroot/schroot.conf

[debception]
directory=/debception
users=thuban

Quelques explications :

Et voilà, vous pouvez maintenant lancer n'importe quelle application du sous- système, via cette commande :

schroot -c debception -p COMMANDE ARGUMENTS

Pour vous simplifier la vie, vous pouvez créer un alias dans le fichier ~/.bashrc. Il suffira de lancer alorsdoChroot <commande>

alias doChroot='schroot -c debception -p'

Attention toutefois, il se peut que vous ayez ce message d'erreur : No protocol specified Impossible d'ouvrir l'affichage :. Il faut donc vous donner le droit d'ouvrir des applications graphiques. Pour cela, il faut juste lancer la commande xhost + avant la commande précédente.

Exemple

Vous connaissez peut-être le jeu dwarf fortress. Seul souci, il est compilé pour 32 bits, et j'utilise une debian 64 bits. Alors, pour le lancer, je vais dans son répertoire :

cd /home/thuban/Jeux/df_linux/

Puis je le lance, comme si j'étais dans le système 32 bits :

schroot -c squeeze32 -p ./df

Et voilà le résultat :

Références :

La page de fran.b