Pourquoi (et comment) faire des chroots sur son ordinateur personnel
Pourquoi ?
Installer une distro dans une distro, ça peut paraître un peu lourd et l'intérêt ne saute pas forcément aux yeux. Alors pourquoi réinstaller plusieurs mini-debian dans une debian ?
Premièrement, il y a le problème de la gestion des paquets installés. Le jeu des dépendances fait qu'en peu de temps, on ne maîtrise plus du tout les paquets installés sur sa machine. Pourquoi sont-ils là, à quoi servent-ils, que font-ils, quelle place prennent-ils, me sont-ils vraiment nécessaires, etc. ?
Cloisonner les applications peut donc aider à avoir un système plus « maintenable » et plus « sous contrôle ».
Sur ce principe, voilà comment je vois l'organisation de mon OS.
Le système hôte se charge de la composante matérielle, c'est lui qui charge les modules associés aux pilotes matériel. C'est avec lui que j'interagis, il s'occupe donc des tty, du serveur X et du Window Manager. Il contient aussi les outils que j'utilise tous les jours : mon navigateur web, mon client mail, messagerie instantanée et bien sûr, les outils de base : éditeur de texte et compagnie.
Tout ça me fait un / de moins de 3 Go (en excluant /home).
J'ai un chroot Debian sid pour la compilation (sid 64bit), qui pèse moins de 1,5 Go Un autre chroot pour Latex et la compilation (sid 32 bits), qui pèse environs 2 Go
Si je veux faire un peu de ménage, je n'ai qu'à supprimer le chroot qui me gêne et à le refaire. Mon système ne bouge pas. Je peux même avoir en même temps différents chroot qui servent à la même chose mais qui ont des particularités (ex : plusieurs JVM… haha… déjà qu'une JVM…)
Comment ?
C'est archi-simple. La méthode est toujours la même, voici l'installation de base suivie de quelques exemples.
Installation
- On vérifie d'avoir les bons outils installés…
sudo aptitude install coreutils debootstrap
- Je commence par préparer le terrain
sudo mkdir -p /srv/babylon
babylon étant le doux nom que je dédierai à ce chroot.
- J'installe une Lenny (en utilisant le premier miroir français). Cependant, en replaçant lenny par la version de votre choix et le premier miroir debian français par celui de votre choix, vous serez bien plus sûrement satisfaits. Si vous le désirez, vous pouvez aussi installer une Ubuntu comme ça.
sudo debootstrap lenny /srv/babylon http://ftp.fr.debian.org/debian
- Je donne un
/devet un/procdignes de leur nom à mon chroot
sudo mount -o bind /dev /srv/babylon/dev sudo mount -t proc proc /srv/babylon/proc
- Je fais en sorte que la partition
/homesoit commune à mon système hôte et à mon chroot (facultatif)
sudo mount -o bind /home /srv/babylon/home
Configuration
- Entrons dans notre chroot !
LANG=C sudo chroot /srv/babylon
On utilise les locales de base car les locales françaises ne sont pas encore installées.
- Donnons-lui un nom :
echo babylon > /etc/debian_chroot
- On met à jour la base de paquets
aptitude update
- On installe et configure les locales
aptitude install locales dpkg-reconfigure locales export LANG=fr_FR.UTF-8
- On crée un utilisateur principal de même nom et de même id que notre compte sur la machine hôte
adduser --uid 1000 mon_login
- On bascule vite fait en mode utilisateur
su - mon_login
où nous sommes accueillis par un joli prompt :
(babylon)mon_login@salade:~$
(peut différer si vous avez monté le /home de votre machine hôte dans le /home du chroot et que vous avez personnalisé votre prompt…)
Et voilà…
Quelques trucs
- Lancer rapidement son chroot :
Créer un fichier exécutable babylon.sh (à bien mettre dans le PATH)
#!/bin/sh sudo chroot /srv/babylon/ su - mon_login
- Monter automatiquement /proc, /dev et /home
Rajouter dans le /etc/fstab de la machine hôte
proc /srv/babylon/proc proc defaults 0 0 /dev /srv/babylon/dev auto bind 0 0 /dev/sda7 /srv/babylon/home ext4 defaults 0 2
- Il est possible de lancer des applications graphiques depuis le chroot, pour ce faire, il faut déclarer DISPLAY à la valeur qu'il a sur le serveur X où doivent s'afficher les fenêtres.
Exemple :
export DISPLAY=":0" soffice
Exemples
Installer son serveur LAMP sans polluer le reste
Pour faire localement mes tests que je mettrai en suite en production sur un serveur dédié, je souhaite avoir des versions équivalentes. Je vais donc commencer par m'installer la même distribution, en l'occurrence la stable du moment : Lenny.
Une fois l'installation faite, on installe les outils habituels (et pas plus…)
sudo aptitude install -R apache2 mysql-server libapache2-mod-php5 phpmyadmin
Puis quand on souhaite les utiliser, on les lance (depuis le chroot)
sudo invoke-rc.d mysql start sudo invoke-rc.d apache2 start
Installer les outils de compilation sans polluer le reste
De la même manière on suit la procédure décrite ci-dessus en choisissant comme version à installer celle du système pour lequel on veut compiler (on me souffle à l'oreille qu'il y a quelques problèmes avec la sid, donc plutôt la squeeze)
Installer des logiciels « sensibles aux mises à jour » sans priver le système de mises à jour
sudo aptitude install texlive-latex-extra




