La commande chroot1) permet de changer le répertoire racine, et ainsi l'environnement d'exécution shell de l'utilisateur concerné ou d'applications, vers un nouvel environnement d'exécution.
chroot arborescence shell/application
Cette opération peut être utilisée dans divers cas :
C'est une action logicielle qui consiste à protéger l'environnement système des faiblesses de sécurités d'une application.
Pour cela on peut utiliser chroot, ou les conteneurs ou la virtualisation matérielle.
Dans cette documentation nous traitons de la mise en place avec chroot.
Le concept de chroot, de changements ou d'isolation d'environnement système utilisateurs (ou d'exécution d'applications), s'est étendu aux ressources du système d'exploitation avec la notion de conteneurs comme lxc, docker (sans changement du logiciel système d'exploitation), et aux systèmes d'exploitation au niveau du matériel avec la virtualisation ou les proxy matériels pur, les XénoServeur, comme xen.
Cette technique est le plus souvent utilisée pour récupérer une installation endommagée ou pour installer un nouveau système d'exploitation.
Ici le chroot sera utilisé après le démarrage sur un système sain pour se retrouver dans l'environnement endommagé et faire des modifications directement dans ce dernier environnement.
sudo mkdir -v /media/system sudo mount </dev/partition> /media/system
par exemple, si sda2 est la partition racine, la commande sera :
sudo mount /dev/sda2 /media/system
/proc et /dev :sudo mount --bind /dev /media/system/dev sudo mount -t proc /proc /media/system/proc
update-grub par exemple) il faut aussi lier le répertoire /run :sudo mount --bind /run /media/system/run
/sys :sudo mount -t sysfs /sys /media/system/sys
net-setup eth0
/etc/resolv.conf pour la connexion internet (à faire seulement si votre connexion internet ne marche pas directement sans rien faire dans l'environnement chrooté) :sudo cp /etc/resolv.conf /media/system/etc/resolv.conf
sudo chroot /media/system
/bin/zsh, remplacer cette commande par :sudo chroot /media/system /bin/bash
Maintenant vous êtes sur l'installation endommagée et vous pouvez travailler dessus pour y corriger les problèmes.
Pour quitter l'environnement, il suffit d'un :
exit
Pour démonter toutes les partitions montées avec la partition racine du système endommagé lorsque vous avez terminé :
sudo umount /media/system/{dev,proc,sys,run,}
Il s'agit de faire en sorte une fois le chroot exécuté de faire le nécessaire pour prendre en charge l'EFI.
sudo mkdir -v /media/system && sudo mount -v /dev/<PARTITION_SYSTEM> /media/system && sudo mount -v /dev/<PARTITION_EFI> /boot/efi && sudo mount -v --bind /dev /media/system/dev && sudo mount -vt proc /proc /media/system/proc && sudo mount -v --bind /run /media/system/run && sudo mount -vt sysfs /sys /media/system/sys && sudo chroot /media/system
mount -t efivarfs none /sys/firmware/efi/efivars
Ne pas oublier bien sûr de remplacer : <PARTITION_SYSTEM> et <PARTITION_EFI> par ce qui convient.
RAPPEL : il est possible d' obtenir les informations de partitions préalablement avec la commande suivante :
lsblk -fe7
Le plus souvent, cette utilisation est faite à partir d'une clé USB d'installation d'Ubuntu. Ceci est un cas pratique fait en EFI avec une partition système non chiffrée. Les commandes de préparation sont :
setxkbmap fr ### afin d'avoir un clavier français
L'identification de la partition système à cibler sera plus aisée en tapant la commande :
lsblk -fe7
Si cette commande montre que Ubuntu est installé dans une partition chiffrée, il est nécessaire de l'ouvrir pour y avoir accès.
sudo cryptsetup luksOpen /dev/xxx part_dechiffree
La partition système à cibler se monte en entrant la commande (pensez à remplacer XXXX par la bonne valeur).
sudo mount /dev/XXXX /media/system ### Si pas chiffrée
ou
sudo mount /dev/mapper/part_dechiffree /media/system ### Si chiffrée
ou
sudo zpool import -a -f -l -R /media/system ### Si partition zfs standard
Le montage des répertoires se fera avec ces commandes (copier/coller).
sudo mount -t proc /proc /media/system/proc sudo mount -t sysfs /sys /media/system/sys sudo mount --bind /dev /media/system/dev sudo mount --bind /run /media/system/run sudo mount --bind /etc/resolv.conf /media/system/etc/resolv.conf sudo modprobe efivars
Le changement d'environnement se fera avec cette commande
sudo chroot /media/system
Quelques contrôles seront à faire par exemple
sudo mount -t devpts devpts /dev/pts df -h && df -i ping -c4 8.8.8.8 && ping -c4 google.fr ls -ls /home
Vous pouvez alors passer à la réparation proprement dite qui a justifié cette opération.
Espérons simplement que le message d'erreur Running in chroot, ignoring request. n'empêchera pas votre réparation.
Lorsque cela sera fini, le plus simple est de redémarrer pour vérifier. La commande suivante s'occupe de toutes les déconnexions :
sudo reboot
Dans le cas d'une partition chiffrée, si vous obtenez avec lsblk -fe7 après avoir passé la commande sudo cryptsetup luksOpen /dev/xxx part_dechiffree, quelque chose comme :
└─nvme1n1p3
crypto 2 3d9739ab-61a7-415e-b1b5-81246666e518
└─part_dechiffree
LVM2_m LVM2 aa6Ped-pjQi-dIWF-WFlx-mOnB-P9Pf-EGorvY
├─vgubuntu-root
│ ext4 1.0 0f2dd8fb-a4d8-479c-9863-18f8bbcb73cd
└─vgubuntu-swap_1
swap 1 9c94fa4c-f4b9-4efd-bda9-a8fa468b08fc
il faut alors monter la partition racine endommagée avec la commande suivante :
sudo mount /dev/mapper/vgubuntu-root /media/system
Vous pouvez aussi vouloir démarrer en chroot un système Linux d'une autre architecture matérielle.
Pour cela il vous faut installer les paquets binfmt-support et qemu-user-static.
Vous pouvez alors lister les architectures matérielles supportées :
ls /usr/bin/qemu-*-static
ou plus verbeux :
sudo update-binfmts --display
Pour démarrer le chroot en ARM 64 bits par exemple, et après avoir monté tout ce dont vous avez besoin pour fonctionner en chroot dans /media/system :
cp /usr/bin/qemu-aarch64-static /media/system/usr/bin sudo chroot /media/system qemu-aarch64-static /bin/bash
Vous pouvez aussi utiliser des commande comme proot pour passer des commandes en chroot.
proot -S /chemin/répertoire_monté/ -q qemu-architecture-static commande_bash
proot -S /media/system/ -q qemu-aarch64-static arch
proot -S /media/system/ -q qemu-aarch64-static bash -c "if ping -c 1 doc.ubuntu-fr.org &> /dev/null; then echo 'Réseau OK'; else exit 1; fi"
Cette option devient de plus en plus désuète puisque la plupart des machines sont maintenant en 64 bits.
Préférez toujours utiliser chroot entre deux systèmes de même architecture.
USB live 32 bits pour une installation système 32 bits et de même pour 64 bits.
cp /usr/bin/qemu-i386-static /path/folder_system_32bit/usr/bin sudo chroot /media/system qemu-i386-static /bin/bash
Voir le tutoriel chroot32bits pour approfondir.
Il faut d'abord utiliser chroot tel que décrit ci-dessus.
Il est préférable de mettre à jour le logiciel de façon classique.
sudo apt update && sudo apt upgrade
Puis de procéder à l'installation des modules 64 bits absents avec ces commandes :
dpkg --add-architecture amd64 sudo apt-get update sudo apt-get install linux-image-amd64:amd64
Voir le forum ou la documentation ou aussi là et en anglais.
Insérez la clé USB contenant ubuntu dans un port de l' ordi . Démarre l ' ordi sur la clé et choisir " essayer ubuntu ".
Ouvrez un terminal et entrez :
sudo add-apt-repository universe multiverse -y && sudo apt update && sudo apt install arch-install-scripts -y
Installer le paquet arch-install-scripts
sudo apt install arch-install-scripts
Repérer votre partition système endommagée avec :
lsblk -fe7 | grep ext4
et noter son block device (ce qui suit /dev/), puis monter votre partition système endommagée :
sudo mount -v /dev/<BLOCK_DEVICE_PARTITION_SYSTEME> /mnt
en remplaçant <BLOCK_DEVICE_PARTITION_SYSTEME> par le block device correspondant à votre partition système endommagée.
sudo arch-chroot /mnt