Differences between revisions 54 and 57 (spanning 3 versions)
Revision 54 as of 2018-02-27 20:38:57
Size: 8783
Editor: vauss
Comment: sync with English version
Revision 57 as of 2020-04-22 10:47:34
Size: 9079
Editor: vauss
Comment: sync with English version
Deletions are marked like this. Additions are marked like this.
Line 6: Line 6:
'''DebPkg:chroot''' est une opération sur les systèmes d'exploitation UNIX permettant de changer le répertoire racine apparent d'un processus de la machine hôte et ses processus fils. ''([[WikiPedia:fr:chroot|...En savoir plus]])''  . '''[[WikiPedia:fr:chroot|chroot]]''' est une opération sur les systèmes d'exploitation UNIX permettant de changer le répertoire racine apparent d'un processus de la machine hôte et ses processus fils.
Line 9: Line 9:
----
Line 20: Line 21:
 mkdir -p /srv/chroot/wheezy  mkdir -p /srv/chroot/stretch
Line 25: Line 26:
Vous pouvez soit choisir vous-même un miroir réseau proche, utiliser un miroir basé sur le dns tel que ftp.XX.debian.org où XX est le code géographique de votre pays, ou utiliser httpredir.debian.org qui fera tout automatiquement à votre place. L'utilisation de httpredir.debian.org est le plus simple à documenter et devient la méthode préférée en général. C'est par conséquent la méthode recommandée si vous n'avez pas un miroir préféré, local et rapide. Consultez la page http://httpredir.debian.org/ pour une documentation détaillée.

{{{
 debootstrap --arch i386 wheezy /srv/chroot/wheezy http://httpredir.debian.org/debian
Vous pouvez soit choisir vous-même un miroir réseau proche, utiliser un miroir basé sur le dns tel que ftp.XX.debian.org où XX est le code géographique de votre pays, ou utiliser deb.debian.org qui fera tout automatiquement à votre place. L'utilisation de deb.debian.org est le plus simple à documenter et devient la méthode préférée en général. C'est par conséquent la méthode recommandée si vous n'avez pas un miroir préféré, local et rapide. Consultez la page http://deb.debian.org/ pour une documentation détaillée.

{{{
 debootstrap --arch i386 stretch /srv/chroot/stretch http://deb.debian.org/debian
Line 37: Line 38:
  chroot /srv/chroot/wheezy   chroot /srv/chroot/stretch
Line 61: Line 62:
chroot /srv/chroot/wheezy chroot /srv/chroot/stretch
Line 112: Line 113:
 mount --bind /dev/pts /srv/chroot/wheezy/dev/pts  mount --bind /dev/pts /srv/chroot/stretch/dev/pts
Line 121: Line 122:
/dev /srv/chroot/wheezy/dev auto bind 0 0
/dev/pts /srv/chroot/wheezy/dev/pts auto bind 0 0
/proc /srv/chroot/wheezy/proc auto bind 0 0
/dev /srv/chroot/stretch/dev auto bind 0 0
/dev/pts /srv/chroot/stretch/dev/pts auto bind 0 0
/proc /srv/chroot/stretch/proc auto bind 0 0
Line 129: Line 130:
/dev on /srv/chroot/wheezy/dev -type none (rw, bind)
/dev/pts on /srv/chroot/wheezy/dev/pts kind none (rw, bind)
/proc on /srv/chroot/wheezy/proc type none (rw, bind)
/dev on /srv/chroot/stretch/dev -type none (rw, bind)
/dev/pts on /srv/chroot/stretch/dev/pts kind none (rw, bind)
/proc on /srv/chroot/stretch/proc type none (rw, bind)
Line 170: Line 171:
export MCHRMIRROR=http://httpredir.debian.org/debian export MCHRMIRROR=http://deb.debian.org/debian
Line 205: Line 206:
# vous pourriez en avoir besoin (par exemple dans le mode Rescue de l'installateur Debian)
mount --bind /sys ${MCHRDIR}/sys
mount --bind /run ${MCHRDIR}/run
Line 222: Line 227:

   # si vous les avez montés plus haut
[ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/sys
[ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/run
Line 230: Line 240:
 CategorySystemAdministration    CategorySystemAdministration | CategoryVirtualization

----

Traduction(s): Deutsch - English - Español - Français - Italiano


  • chroot est une opération sur les systèmes d'exploitation UNIX permettant de changer le répertoire racine apparent d'un processus de la machine hôte et ses processus fils.


Installation de base

Construire un « chroot » est très facile sous Debian.

Il faut :

  • Installer les paquets nécessaires

 apt-get install binutils debootstrap
  • Choisir un emplacement

 mkdir -p /srv/chroot/stretch
  • Construire le chroot

Vous pouvez soit choisir vous-même un miroir réseau proche, utiliser un miroir basé sur le dns tel que ftp.XX.debian.org où XX est le code géographique de votre pays, ou utiliser deb.debian.org qui fera tout automatiquement à votre place. L'utilisation de deb.debian.org est le plus simple à documenter et devient la méthode préférée en général. C'est par conséquent la méthode recommandée si vous n'avez pas un miroir préféré, local et rapide. Consultez la page http://deb.debian.org/ pour une documentation détaillée.

 debootstrap --arch i386 stretch /srv/chroot/stretch http://deb.debian.org/debian
  • Ca mouline, récupération d'une « image », décompression et installation des paquets nécessaires

Conseil : avant de rentrer dans 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 (voir ci-dessous pour la configuration qui peut être nécessaire dans le chroot) :

  chroot /srv/chroot/stretch

(!) Un moyen plus pratique pour entrer dans le chroot est fournit par le paquet schroot. Cette enveloppe permet à des utilisateurs non privilégiés d'accéder à un ou plus environnements chroot. Schroot gère l'appel de chroot(2) à la fois en diminuant les droits dans le chroot et en remontant des ressources dans le chroot (comme les répertoires home, /dev, /sys, /proc).

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

213 Mo (archi amd64)

wheezy

238 Mo (i386)

233 Mo (amd64)

Configuration

En général, il est nécessaire de créer/modifier des points de configuration essentiels (liste non exhaustive)

Créez un fichier /usr/sbin/policy-rc.d DANS LE CHROOT ainsi dpkg ne lancera pas de démon à moins que vous ne le souhaitiez. Cette exemple évite le démarrage de tous les démons dans le chroot.

chroot /srv/chroot/stretch
cat > ./usr/sbin/policy-rc.d <<EOF
#!/bin/sh
exit 101
EOF
chmod a+x ./usr/sbin/policy-rc.d

La commande ischroot est boguée et ne détecte pas qu'elle est exécutée dans un chroot (685034). Plusieurs paquets dépendent de ischroot pour déterminer un comportement correct dans un chroot et fonctionneront mal lors d'une mise à jour si ce n'est pas corrigé. La meilleure manière de corriger cela est de remplacer ischroot par la commande /bin/true.

dpkg-divert --divert /usr/bin/ischroot.debianutils --rename /usr/bin/ischroot
ln -s /bin/true /usr/bin/ischroot

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/group
  • les paramètres de réglages réseaux

  /etc/hosts
  /etc/resolv.conf
  • les montages de systèmes de fichiers à partir de l'hôte (PAS dans le chroot)

  /etc/fstab
  • Pour éditer l'invite de bash, ajoutez un identifiant à /etc/debian_chroot. Son contenu sera ajouté à $PS1

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/Wheezy 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 /srv/chroot/stretch/dev/pts

Automatiser les montages

Plus généralement, et pour reprendre ce qui a été vu précédemment, le fichier /etc/fstab du système principal pourrait ressembler à ça :

# grep chroot /etc/fstab
/dev /srv/chroot/stretch/dev auto bind 0 0
/dev/pts /srv/chroot/stretch/dev/pts auto bind 0 0
/proc /srv/chroot/stretch/proc auto bind 0 0

Le mount sur le système principal serait :

# mount | grep chroot
/dev on /srv/chroot/stretch/dev -type none (rw, bind)
/dev/pts on /srv/chroot/stretch/dev/pts kind none (rw, bind)
/proc on /srv/chroot/stretch/proc type none (rw, bind)

Ajout/suppression de paquets

  • Éliminer les paquets non nécessaires (tout dépend donc de l'objectif du chroot)

apt-get install deborphan

deborphan -a
  • Et par exemple

apt-get remove --purge telnet manpages pppconfig ipchains ...

liste complémentaire svgalibg1 whiptail

  • Ajouter un peu de confort

apt-get install emacs23 local mc

Utilisations

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)

Copier et coller

Ce qui suit permet de copier coller

D'abord la partie où on définit les variables du shell.

export MCHRMIRROR=http://deb.debian.org/debian
export MCHRARCH=i386
export MCHRREL=buster
export MCHRDIR=/srv/chroot/${MCHRREL}-${MCHRARCH}
echo My chroot dir is ${MCHRDIR}

De là, prudemment les éléments copier coller.

mkdir -p ${MCHRDIR}
# l'étape suivante prend plus de temps
debootstrap --variant=buildd --arch=$MCHRARCH} ${MCHRREL} ${MCHRDIR} ${MCHRMIRROR}

# évite que dpkg ne démarre des démons dans l'environnement chroot
cat > ${MCHRDIR}/usr/sbin/policy-rc.d <<EOF
#!/bin/sh
exit 101
EOF
chmod a+x ${MCHRDIR}/usr/sbin/policy-rc.d

# dans le chroot définissez ischroot comme true
cp  ${MCHRDIR}/bin/true ${MCHRDIR}/usr/bin/ischroot

#
cp /etc/hosts ${MCHRDIR}/etc/hosts
cp /etc/resolv.conf ${MCHRDIR}/etc/resolv.conf

# c'est ce qui doit être fait qu'une seule fois

# des choses à monter, vous en aurez souvent besoin
mount --bind /dev ${MCHRDIR}/dev
mount --bind /dev/pts ${MCHRDIR}/dev/pts
mount --bind /proc  ${MCHRDIR}/proc

# vous pourriez en avoir besoin (par exemple dans le mode Rescue de l'installateur Debian)
mount --bind /sys  ${MCHRDIR}/sys
mount --bind /run  ${MCHRDIR}/run

# Okay

# Entrez dans le chroot, quittez-le avec exit

chroot ${MCHRDIR}
# profitez de votre nouvel environnement
# apt install ce que vous voulez
# faites ce que vous avez en tête

Démontez

[ ! -z ${MCHRDIR} ] && echo my chroot dir is ${MCHRDIR}
[ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/proc
[ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/dev/pts
[ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/dev

        
# si vous les avez montés plus haut
[ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/sys
[ ! -z ${MCHRDIR} ] && umount ${MCHRDIR}/run

Lien externe


CategorySystemAdministration | CategoryVirtualization