schroot permet de gérer plus efficacement un environnement chroot. L'usage de ces deux outils (schroot et chroot) permet de créer un environnement virtualisé minimal. Puisque le système d'exploitation de l'environnement chroot partage le même noyau que le système « hôte », les ressources système (mémoire vive, processeur) sont moins sollicitées, mis à part l'utilisation du disque dur.
En terme de sécurité, schroot est moins robuste que les solutions de virtualisation régulières.
Il suffit d'installer les paquets schroot debootstrap.
Voici un petit descriptif de l'arborescence de /etc/schroot :
mkdir chroot
N'importe quel répertoire peut faire l'affaire. L'exemple est donné avec le dossier /chroot, à changer à loisir.
sudo debootstrap --arch amd64 quantal /chroot/quantal http://us.archive.ubuntu.com/ubuntu/
Ou bien, pour installer l'environnement en 32 bits :
sudo debootstrap --arch i386 quantal /chroot/quantal http://us.archive.ubuntu.com/ubuntu/
Après cela, le dossier /chroot/quantal/ contient l'arborescence habituelle de la racine de la distribution Ubuntu Quantal Lynx 10.04.
/etc/passwd /etc/shadow /etc/group /etc/sudoers /etc/hosts /etc/hostname
Pour conserver les dépôts de paquets (NE PAS FAIRE lorsque les distributions sont différentes…), ajouter cette ligne:
/etc/apt/sources.list
[quantal] description=quantal directory=/chroot/quantal users=user1,user2,... root-groups=root root-users=root type=directory aliases=default
Et remplacer "user1", "user2" par les utilisateurs ayant le droit d'utiliser le chroot. La ligne peut être remplacée par "groups=schroot" par exemple, en ajoutant les utilisateurs au groupe "schroot".
schroot
ou bien, si plusieurs environnements chroot sont installés :
schroot -c lucid
Pour quitter l'environnement, utiliser les touches Ctrl+d ou bien la commande exit.
schroot -b -c lucid
Lors du démarrage du chroot, schroot nous donne l'identifiant du chroot, par exemple lucid-00e8c158-e183-48ad-8407-272808c6b0c6
schroot -r -c lucid-00e8c158-e183-48ad-8407-272808c6b0c6
schroot -e -c lucid-00e8c158-e183-48ad-8407-272808c6b0c6
Nous allons installer un serveur LAMP dans un environnement chroot. Le système exploitation hôte sera une distribution ubuntu. Par contre le système invité sera une distribution Debian.
debootstrap --arch amd64 squeeze /chroot/squeeze http://ftp.fr.debian.org/debian/
[squeeze] description=squeeze directory=/chroot/squeeze root-groups=root root-users=root type=directory script-config=script-squeeze
touch /etc/schroot/script-squeeze
# Default settings for chroot setup and exec scripts. # See schroot-script-config(5) for further details. # Filesystems to mount inside the chroot. FSTAB="/etc/schroot/mount-squeeze"
cp /etc/schroot/mount-defaults /etc/schroot/mount-squeeze
# mount.defaults: static file system information for chroots. # Note that the mount point will be prefixed by the chroot path # (CHROOT_PATH) # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 #procbususb /proc/bus/usb usbfs defaults 0 0 /dev /dev none rw,bind 0 0 /dev/pts /dev/pts none rw,bind 0 0 /dev/shm /dev/shm none rw,bind 0 0 #/home /home none rw,bind 0 0 #/tmp /tmp none rw,bind 0 0
sudo -s schroot -b -c lenny schroot -r -c lenny-00e8c158-e183-48ad-8407-272808c6b0c6 apt-get install apache2 mysql-server php5
Pour démarrer de façon automatique la chroot et tout les services que vous désirez, je vous propose ce script :
#!/bin/bash #****************************************************************************** # File : /etc/init.d/schrootlamp # # Auteur : Zarkxe # # Date create : Mon Nov 1 16:01:09 2010 # Description : démarrer de façon automatique la chroot et tout les services # que vous désiré #****************************************************************************** . /lib/lsb/init-functions NAMESCRIPT="schrootlamp" do_start() { if [ ! -e "/tmp/schroot/$NAMESCRIPT" ]; then SCHROOT_ID=$(schroot -b -c lenny) schroot -r -c "$SCHROOT_ID" /etc/init.d/mtab.sh schroot -r -c "$SCHROOT_ID" /etc/init.d/mysql start schroot -r -c "$SCHROOT_ID" /etc/init.d/apache2 start schroot -r -c "$SCHROOT_ID" /etc/init.d/exim4 start mkdir /tmp/schroot/ echo "$SCHROOT_ID" > /tmp/schroot/$NAMESCRIPT elif [ -e "/tmp/schroot/$NAMESCRIPT" ]; then echo "$NAMESCRIPT is already running" fi } do_stop() { if [ -e "/tmp/schroot/$NAMESCRIPT" ]; then SCHROOT_ID=$(cat /tmp/schroot/$NAMESCRIPT) schroot -r -c "$SCHROOT_ID" /etc/init.d/mysql stop schroot -r -c "$SCHROOT_ID" /etc/init.d/apache2 stop schroot -r -c "$SCHROOT_ID" /etc/init.d/exim4 stop schroot -e -c "$SCHROOT_ID" rm -R /tmp/schroot/ elif [ ! -e "/tmp/schroot/$NAMESCRIPT" ]; then echo "$NAMESCRIPT is not starting" fi } case $1 in start) log_daemon_msg "Starting configuration" $NAMESCRIPT if [[ $EUID = 0 ]] then do_start log_end_msg 0 else log_end_msg 1 echo "You are not root !" fi ;; stop) log_daemon_msg "Stopping configuration" $NAMESCRIPT if [[ $EUID = 0 ]] then do_stop log_end_msg 0 else log_end_msg 1 echo "You are not root !" fi ;; restart) log_daemon_msg "restarting configuration" $NAMESCRIPT if [[ $EUID = 0 ]] then do_stop do_start log_end_msg 0 else log_end_msg 1 echo "You are not root !" fi ;; status) if [[ $EUID = 0 ]] then if [ ! -e "/tmp/schroot/$NAMESCRIPT" ]; then echo "$NAMESCRIPT isn't running" elif [ -e "/tmp/schroot/$NAMESCRIPT" ]; then SCHROOT_ID=$(cat /tmp/schroot/$NAMESCRIPT) echo "$NAMESCRIPT is running : $SCHROOT_ID" fi else echo "You are not root !" fi ;; *) log_daemon_msg "./$NAMESCRIPT [start|stop|restart|status]" ;; esac
Contributeur principal : …