chroot (Français)

État de la traduction:
Cet article est la version francophone de
chroot
. Date de la dernière traduction: 2023-02-18. Vous pouvez aider à synchroniser la traduction s'il y a eu des
changements
dans la version anglaise.
Related articles
PRoot
Linux Containers
systemd-nspawn
DeveloperWiki:Building in a clean chroot
Un
chroot
est une opération qui modifie le répertoire racine apparent pour le processus en cours d'exécution et ses enfants. Un programme qui est exécuté dans un tel environnement modifié ne peut pas accéder aux fichiers et aux commandes en dehors de l'arborescence des répertoires de l'environnement.  Cet environnement modifié est appelé
chroot jail
(prison «chroot»).
Raisonnement
Le changement de racine est généralement effectué pour effectuer la maintenance du système sur des systèmes où il n'est plus possible de démarrer et/ou de se connecter. Des exemples courants sont :
Réinstaller le
chargeur d'amorçage
.
Reconstruction de l'image
initramfs
.
Mise à jour ou
rétrogradation de paquets
.
Réinitialisation d'un
mot de passe oublié
.
Construction de paquets dans un
chroot propre
.
Consultez également
Wikipedia:Chroot#Limitations
.
Pré-requis
Afin d'utiliser chroot, vous avez besoin d'une autre installation sous Linux ou d'un autre support d'installation (de n'importe quelle distribution), avec :
Les privilèges
root
(voir
#Sans privilèges root
pour les alternatives).
Le même
jeu d'instructions
que le système dans lequel vous allez chrooter. L'architecture de l'environnement actuel peut être trouvée avec :
uname -m
(par exemple, i686 ou x86_64).
Charger les modules du noyau qui sont nécessaires dans l'environnement chroot.
Swap
activé si nécessaire :
# swapon /dev/sd
xY
Une connexion Internet fonctionnelle si nécessaire.
Préparer le nouvel emplacement de la racine
La cible du chroot doit être un répertoire qui contient une hiérarchie de système de fichiers.
Dans le
guide d'installation
, ce répertoire est
/mnt
. Pour une installation existante, vous devez monter vous-même les partitions existantes dans
/mnt
:
Exécutez
lsblk
et notez la disposition des partitions de votre installation. Ce sera généralement quelque chose comme
/dev/sd
XY
ou si vous avez un lecteur NVMe
/dev/nvme0n
X
p
Y
.
Montez le système de fichiers :
mount /dev/sd
XY'
/mnt
Si vous avez une
partition système EFI
et que vous devez y apporter des modifications (par exemple, mettre à jour les images
vmlinuz
ou
initramfs
) :
mount /dev/sd'
XZ
/mnt/
esp
Si vous avez des
partitions distinctes
, montez-les également.
Dans les exemples suivants,
/chemin/vers/la/nouvelle/racine
est le répertoire où réside la nouvelle racine (par exemple
/mnt
).
Utilisation
Note
Certains outils
systemd
tels que
hostnamectl
,
localectl
et
timedatectl
ne peuvent pas être utilisés dans un chroot, car ils nécessitent une connexion
dbus
active.
[1]
Le système de fichiers qui servira de nouvelle racine (
/
) à votre chroot doit être accessible (c'est-à-dire déchiffré,
monté
).
Il y a deux options principales pour utiliser chroot, décrites ci-dessous.
Avec arch-chroot
Le script bash
arch-chroot
fait partie du paquet
arch-install-scripts
.
arch-chroot
est une surcouche de
chroot(1)
, assurant que les fonctionnalités importantes sont disponibles, par exemple le montage de
/dev
,
/proc
et d'autres systèmes de fichiers API, ou l'exposition de
/etc/resolv.conf
au chroot.
Entrer un chroot
Lancez arch-chroot avec le nouveau répertoire racine comme premier argument :
# arch-chroot
/chemin/vers/la/nouvelle/racine
Vous pouvez maintenant effectuer la plupart des opérations disponibles dans votre installation existante. Certaines tâches qui nécessitent le
D-Bus
ne fonctionneront pas comme indiqué dans
#Utilisation
.
Quitter un chroot
Pour quitter le chroot, utilisez :
# exit
Exécuter une seule commande et quitter
Pour exécuter une commande depuis le chroot et sortir à nouveau, ajoutez la commande à la fin de la ligne :
# arch-chroot
/chemin/vers/la/nouvelle/racine
ma-commande
Par exemple, pour exécuter
mkinitcpio -p linux
pour un chroot situé à
/mnt/arch
, faites :
# arch-chroot /mnt/arch mkinitcpio -p linux
Avec chroot
Tout d'abord, montez les systèmes de fichiers temporaires de l'API :
# cd
/chemin/vers/la/nouvelle/racine
# mount -t proc /proc proc/
# mount -t sysfs /sys sys/
# mount --rbind /dev dev/
Attention
Lorsque vous utilisez
--rbind
, certains sous-répertoires de
dev/
et
sys/
ne seront pas démontables. Tenter de démonter avec
umount -l
dans cette situation interrompra votre session et nécessitera un redémarrage. Si possible, utilisez
-o bind
à la place.
Et optionnellement :
# mount --rbind /run run/
Si vous utilisez un système UEFI, vous aurez également besoin d'accéder aux variables EFI. Sinon, lors de l'installation de GRUB, vous recevrez un message similaire à :
UEFI variables not supported on this machine
:
# mount --rbind /sys/firmware/efi/efivars sys/firmware/efi/efivars/
Ensuite, afin d'utiliser une connexion internet dans l'environnement chroot, copiez les détails du DNS :
# cp /etc/resolv.conf etc/resolv.conf
Enfin, pour changer la racine en
/chemin/vers/la/nouvelle/racine
en utilisant un shell bash :
# chroot
/chemin/vers/la/nouvelle/racine
/bin/bash
Note
Si vous rencontrez l'erreur :
chroot : cannot run command '/usr/bin/bash' : Exec format error
, il est probable que les architectures de l'environnement hôte et de l'environnement chroot ne correspondent pas.
chroot : '/usr/bin/bash' : permission denied
, remontez avec la permission d'exécuter :
mount -o remount,exec
/chemin/vers/la/nouvelle/racine
.
Si cette vérification n'a pas aidé, alors
assurez-vous
que les composants de base du nouvel environnement sont intacts (si c'est une racine Arch, essayez
paccheck --root=
/chemin/vers/la/nouvelle/racine
--files --file-properties --md5sum glibc filesystem
, de
pacutils
).
Après le chrootage, il peut être nécessaire de charger la configuration locale de bash :
# source /etc/profile
# source ~/.bashrc
Astuce
Optionnellement, créez une invite unique pour pouvoir différencier votre environnement chroot :
# export PS1="(chroot) $PS1"
Lorsque vous avez terminé avec le chroot, vous pouvez le quitter via :
# exit
Puis démontez les systèmes de fichiers temporaires :
# cd /
# umount --recursive
/chemin/vers/la/nouvelle/racine
Note
S'il y a une erreur mentionnant quelque chose comme :
umount : /path : device is busy
, cela signifie généralement que soit : un programme (même un shell) a été laissé en exécution dans le chroot ou qu'un sous-montage existe toujours.  Quittez le programme et utilisez
findmnt -R
/chemin/vers/la/nouvelle/racine
pour trouver et ensuite
umount
les sous-montages. Il peut être délicat de
umount
certaines choses et on peut espérer que
umount --force
fonctionne. En dernier recours, utilisez
umount --lazy
qui les libère simplement. Dans tous les cas, pour être sûr,
reboot
ez dès que possible si ces problèmes ne sont pas résolus pour éviter d'éventuels conflits futurs.
Exécuter des applications graphiques à partir de chroot
Si un
serveur X
est exécuté sur votre système, vous pouvez lancer des applications graphiques à partir de l'environnement chroot.
Pour permettre à l'environnement chroot de se connecter à un serveur X, ouvrez un terminal virtuel à l'intérieur du serveur X (c'est-à-dire à l'intérieur du bureau de l'utilisateur qui est actuellement connecté), puis exécutez la commande
xhost
, qui donne la permission à quiconque de se connecter au serveur X de l'utilisateur (consultez également
Xhost
) :
$ xhost +local :
Ensuite, pour diriger les applications vers le serveur X à partir du chroot, définissez la variable d'environnement DISPLAY à l'intérieur du chroot pour qu'elle corresponde à la variable DISPLAY de l'utilisateur propriétaire du serveur X. Ainsi, par exemple, exécutez :
$ echo $DISPLAY
en tant qu'utilisateur propriétaire du serveur X pour consulter la valeur de DISPLAY. Si la valeur est ":0" (par exemple), exécutez la commande suivante dans l'environnement chroot :
# export DISPLAY=:0
Sans privilèges root
Chroot nécessite des privilèges root, ce qui peut ne pas être souhaitable ou possible pour l'utilisateur dans certaines situations. Il existe cependant plusieurs façons de simuler un comportement de type chroot en utilisant des implémentations alternatives.
PRoot
PRoot
peut être utilisé pour changer le répertoire racine apparent et utiliser
mount --bind
sans les privilèges de root. Ceci est utile pour confiner des applications à un seul répertoire ou pour exécuter des programmes construits pour une architecture de CPU différente, mais il y a des limitations dues au fait que tous les fichiers appartiennent à l'utilisateur du système hôte. PRoot fournit un argument
--root-id
qui peut être utilisé comme une solution de contournement pour certaines de ces limitations d'une manière similaire (bien que plus limitée) à
fakeroot
.
Fakechroot
fakechroot
est une bibliothèque «shim» (cale) qui intercepte l'appel chroot et simule les résultats. Elle peut être utilisée en conjonction avec
fakeroot
pour simuler un chroot comme un utilisateur normal.
$ fakechroot fakeroot chroot ~/my-chroot bash
Unshare
Unshare, qui fait partie de
util-linux
, peut être utilisé pour créer un nouvel espace de noms du noyau. Cela fonctionne avec la commande chroot habituelle. Par exemple :
$ unshare --map-root-user chroot ~/namespace /bin/sh
Dépannage
arch-chroot: /chemin/vers/la/nouvelle/racine is not a mountpoint. This may have undesirable side effects.
Lors de l'exécution de
arch-chroot
/chemin/vers/la/nouvelle/racine
, un avertissement est émis :
==> WARNING:
/chemin/vers/la/nouvelle/racine
is not a mountpoint. This may have undesirable side effects.
Consultez
arch-chroot(8)
pour une explication et un exemple d'utilisation de bind mounting pour faire du répertoire chroot un point de montage.
Voir aussi
Chroot de base