chroot est une commande des systèmes d'exploitation UNIX permettant de changer le répertoire racine d'un processus de la machine hôte. (...En savoir plus)
Installation de base
Construire un «chroot» est très facile sous Debian.
Il faut :
- Installer les paquets nécessaires
aptitude install binutils debootstrap
- Choisir un emplacement
mkdir -p /var/chroot/etch
- Construire le chroot
debootstrap --arch i386 etch /var/chroot/etch
- Ca mouline, récupération d'une «image», décompression et installation des paquets nécessaires
Conseil : avant de rentrer de votre chroot tout neuf et de le modifier, il peut être pertinent d'en effectuer une sauvegarde (une archive .tar.gz par exemple). Le chroot étant souvent destiné à expérimenter, il n'est pas rare de vouloir repartir de zéro après une mauvaise manipulation. Si c'est le cas vous n'aurez alors qu'à désarchiver votre sauvegarde et vous gagnerez du temps.
- Pour y entrer:
chroot /var/chroot/etch
La taille d'un chroot
L'espace disque nécessaire constaté est le suivant :
Version |
Taille |
slink |
80 Mo (archi i386 ? à confirmer) |
potato |
95 Mo (archi i386 ? à confirmer) |
woody |
100 Mo (archi i386 ? à confirmer) |
sarge |
138 Mo (archi i386 ? à confirmer) |
squeeze |
- |
wheezy |
233 Mo (amd64) |
Configuration
En géneral, il est nécessaire de créer/modifier des points de configuration essentiels (liste non exhaustive)
La configuration d'un chroot étant relativement statique et très spécifique, on peut éventuellement se dispenser des commandes de «haut-niveau» et modifier directement les fichiers concernés.
- les utilisateurs définis dans le chroot
/etc/passwd /etc/groups
- les paramètres de réglages réseaux
/etc/hosts /etc/resolv.conf
- les montages de systèmes de fichiers
/etc/fstab
Montage des pseudos systèmes de fichiers
/proc
- Vérifier dans le système chrooté la présence de /proc sinon le chroot ne risque pas d'être pleinement opérationnel. A priori, le debootstrap depuis la version Debian/Etch intègre nativement le montage de /proc et de /sys
proc on /proc type proc (rw) sysfs on /sys type sysfs (rw)
/dev/pts
D'après http://lists.debian.org/debian-user-french/2008/05/msg00351.html
Il est aussi conseillé de faire un "bind" de /dev/pts. Ceci permet d'éviter les messages d'erreur du type Must be connected to a terminal ou Cannot access '/dev/pts/0': Aucun fichier ou répertoire de ce type avec l'utilisation de la commande screen.
Dans ce cas, sur le système principal, lancer la commande:
mount --bind /dev/pts /var/chroot/etch/dev/pts
Automatiser les montages
Plus généralement, et pour reprendre ce qui a été vu précédement, le fichier /etc/fstab du système principal pourrait ressembler à ça:
# cat /etc/fstab | grep chroot /dev /var/chroot/etch/dev auto bind 0 0 /dev/pts /var/chroot/etch/dev/pts auto bind 0 0 /proc /var/chroot/etch/proc auto bind 0 0
Le mount sur le système principal serait:
# mount | grep chroot /dev on /var/chroot/etch/dev type none (rw,bind) /dev/pts on /var/chroot/etch/dev/pts type none (rw,bind) /proc on /var/chroot/etch/proc type none (rw,bind)
Ajout/suppression de paquets
- Éliminer les paquets non nécessaires (tout dépend donc de l'objectif du chroot)
aptitude install deborphan
deborphan -a
- Et par exemple
aptitude remove --purge telnet pppconfig manpages ipchains ...
liste complémentaire svgalibg1 whiptail
- Ajouter un peu de confort
aptitude install emacs21 sudo locales mc
Utilisation(s)
Plusieurs utilisations sont envisageables, par exemple :
Recompilation d'application dans un contexte autre que la machine qui héberge le chroot (backport, cross-compilation, ...)
- Mise à jour d'un service en production par basculement de l'ancien service (machine hôte) vers le nouveau (installé dans le chroot)
- Sécurisation d'un service «chrooté» par rapport à la machine hôte (et vice-versa)
Liens externes
http://clx.anet.fr/spip/article.php3?id_article=143 - Le chroot « à la main »