Afficher/cacher Sommaire
Archlinux chroot
Adaptation de l’article chroot du wiki archlinux (fr)
Le chroot
(abréviation de CHanging ROOT) est un processus qui permet de changer la racine en entrant dans un environnement isolé. Un programme lancé dans cet environnement ne peut pas accéder aux fichiers et aux commandes du système hôte. Cet environnement modifié est appelé chroot jail (une prison).
Quand chrooter
Le chroot est généralement utilisé pour dépanner des systèmes qui ne démarrent pas ou bien où le logging est impossible. Quelques exemples courants :
- Réinstaller le chargeur de démarrage (bootloader).
- Reconstruire les initramfs.
- Mettre à jour ou bien rétrograder des paquets.
- Réinitialiser un mot de passe oublié.
Cette méthode présente toutefois des limitations (voir Wikipedia (en)).
Exigences
Avant de chrooter, assurez-vous de :
- Avoir le privilège root.
- Avoir un autre environnement GNU/Linux, tel un LiveCD/USB, ou bien depuis une autre installation existante.
- Avoir la même architecture entre les deux environnements (c’est-à-dire être depuis une distribution x86_64 pour chrooter une Arch x86_64). On peut trouver l’architecture de l’environnement courant avec la commande uname -m (le résultat étant i686 ou bien x86_64).
- Avoir les modules noyaux nécessaires chargés qui serviront dans l’environnement chrooté.
- Avoir son swap activé si nécessaire (swapon /dev/sdXY.
- Avoir une connexion Internet fonctionnelle si nécessaire.
Montage des partitions
Pour chrooter dans un système sur lequel vous n’avez pas démarré, il faut préparer un minimum l’environnement. Prenons le cas où vous devez utiliser votre système Arch depuis un autre système GNU/Linux (LiveCD, autre installation, …); en supposant que vous utilisez le dossier /mnt, vous devez monter au minimum les dossiers suivants:
Astuce: Vous venez de charger un LiveCD, et vous auriez plus de facilités en utilisant votre clavier français ; faites :
loadkeys fr
Note: Si vous utilisez LVM, munissez-vous d’un LiveCD le supportant (celui d’Arch par exemple) et avant les opérations de montage, activez-le en lançant :
vgchange -a y
Vous pouvez utiliser les commandes lsblk, fdisk -l ou blkid pour trouver les partitions de votre système.
Une fois les partitions repérées, procédez au montage :
mount /dev/sdXY /mnt
Note: /dev/sdXY étant la partition de votre racine (/).
N’oubliez pas de monter les partitions séparées si besoin (/boot, /boot/efi (la partition d’ESP, /home, /usr, /var, …) dans le sous-répertoire approprié de /mnt.
Changement de racine, passage en “chroot”
Il existe plusieurs méthodes pour procéder au chroot:
- La première méthode étant propre à Arch
- La deuxième méthode plus générique dans le monde UNIX
- La troisième méthode étant propre à Systemd.
Méthode 1 : en utilisant arch-chroot
Si vous êtes depuis le LiveCD d’Arch ou bien depuis une autre Arch où le paquet arch-install-scripts est installé, vous n’avez qu’une seule commande à faire (le script s’occupant de préparer au mieux l’environnement à chrooter).
Pour un chroot habituel :
arch-chroot /mnt
Pour exécuter un autre shell dans l’environnement chrooté (ici on veut utiliser Bash) :
arch-chroot /mnt /bin/bash
Pour exécuter une seule commande dans l’environnement chrooté (par exemple mkinitcpio -p linux) :
arch-chroot /mnt /usr/bin/mkinitcpio -p linux
Méthode 2 : en utilisant chroot
Il faut monter soi-même les systèmes de fichiers nécessaires au bon fonctionnement de l’environnement chrooté (pour éviter les commandes à rallonge, on utilise volontairement à la fois des chemins absolus et relatifs, soyez prudent) :
cd /mnt
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/
Et optionnellement :
mount --rbind /run run/
Pour utiliser une connexion Internet dans l’environnement chrooté, il faut copier les informations du DNS :
cp /etc/resolv.conf etc/
Astuce: Si vous souhaitez lancer des applications graphiques, vous serez peut-être amené à utiliser xhost +
pour permettre au chroot d’accéder à X, une fois fini n’oubliez pas d’enlever cette autorisation avec xhost -
.
Enfin le chroot :
chroot /mnt /bin/bash
Note:Si vous voyez une erreur
chroot: cannot run command '/usr/bin/bash': Exec format error
, c’est que l’architecture du système hôte est différente du système à chrooter.
chroot: '/usr/bin/bash': permission denied
, remonter la partition avec l’option exec :mount -o remount,exec /mnt
.
Une fois le chroot effectué, vous aurez peut-être besoin de charger la configuration de Bash :
source /etc/profile
source ~/.bashrc
Astuce: Pour différencier l’environnement chrooté, vous pouvez utiliser un prompt différent :
export PS1="(chroot) $PS1".
Méthode 3 : en utilisant systemd-nspawn
Bien que cette méthode soit similaire, ce n’est pas à proprement parler du chroot. Cette commande est plus puissante, elle virtualise l’ensemble du système à chrooter, comme si ce dernier était en cours d’exécution. C’est similaire à démarrer un deuxième système d’exploitation, ce n’est pas une machine virtuelle mais un conteneur.
cd /mnt
systemd-nspawn
La syntaxe complète serait :
systemd-nspawn -b -D ~/MyContainer -n`
- L’option -b démarre le système du conteneur (avec le PID=1), au lieu de simplement y ouvrir un shell.
Pour quitter une machine virtuelle lancée avec cette option, il faut exécuter le commandepoweroff
(en root) dans ladite machine, ou bien utiliser la commandemachinectl
depuis l’hôte. - L’option -D spécifie le dossier-racine du conteneur.
- L’option -n établit un réseau privé entre hôte et conteneur.
Elle n’est pas nécessaire pour connecter la machine à Internet; au contraire, elle implique d’avoir créé un réseau privé. - Disponible aussi l’option –bind qui permet de monter un répertoire de l’hôte dans le conteneur
par exemple :--bind /var/cache/pacman/pkg:/var/cache/pacman/pkg-host
Voir le wiki (en) pour plus de détails.
Astuce: Depuis une machine Debian tournant avec systemd un paquet spécifique doit avoir été installé : systemd-container
.
Quitter le chroot
Une fois les modifications terminées, utilisez exit pour sortir du chroot (ou encore Ctrl+D).
exit
Il faut enfin démonter ce que vous avez monté, en utilisant la commande umount:
cd /
umount --recursive /mnt/
Note: Si un message tel umount: /chemin: device is busy
apparaît, c’est qu’un programme s’exécute toujours dans le chroot. Le moyen le plus propre consiste à terminer ce programme, puis à utiliser la commande mount
pour localiser la ou les partitions qui n’ont pas été démontées, puis d’utiliser à nouveau umount
. Si cela ne fonctionne toujours pas, utilisez umount --force
, ou umount --lazy
en dernier recours. Si le problème n’est toujours pas résolu, préférez un redémarrage pour éviter de futur conflits.
Et éventuellement redémarrer:
reboot
Manjaro chroot
mhwd-chroot : le chroot facile
A partir du Live USB sous Manjaro, installer le paquet mhwd-chroot :
sudo pacman -Sy mhwd-chroot
Exécuter mhwd-chroot :
sudo mhwd-chroot
“chrooter” le système hôte :
sudo mhwd-chroot-shell
Le système hôte est chrooté !
La commande mhwd-chroot va détecter la partition où se trouve le système Linux puis va automatiquement la monter.
Grub
Installation/Réinstallation grub
La façon simple d’installer grub/grub2 à partir de n’importe quel CD live de linux ou tout autre support de démarrage.
Etape 1 : démarrer à partir d’un CD/DVD live linux ou même d’une clé USB.
Etape 2 : monter votre hdd
Etape 3 : chroot dans le système de fichiers monté
Etape 3 : installer grub
Etape 4 : redémarrage
Boot sur un Live CD/USB/SD
fdisk -l
mount /dev/sda1 /mnt/
mount -t proc none /mnt/proc
mount -o bind /dev /mnt/dev
mount -t sysfs sys /mnt/sys
chroot /mnt/ /bin/bash
update-grub
/usr/sbin/grub-install --recheck --no-floppy /dev/sda
sync & reboot
Restaurer le GRUB
Etape 1 : Installer un nouveau chargeur GRUB par la commande suivante :
grub-install --recheck /dev/sda # Bios Legacy
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=manjaro --recheck # Bios EFI
Etape 2 : Configurer le chargeur GRUB nouvellement installé :
update-grub
Fermer le terminal et redémarrer votre système pour utiliser le GRUB réinstallé.