Je suis tombé sur le même problème et j'ai fini par écrire ceci pour le faire fonctionner sans douleur sur différents systèmes (debian, ubuntu actuellement):
Exécutez le make_chroot_initrd
script pour créer une nouvelle image initrd compatible chroot à partir de l'image existante:
# ./make_chroot_initrd /chroot/trusty/boot/initrd.img-3.13.0-32-generic
making new initrd: /chroot/trusty/boot/initrd.img-3.13.0-32-generic.chroot
La nouvelle image sera exactement la même, sauf qu'elle peut désormais gérer un chroot=
paramètre de démarrage.
Avec grub2 comme chargeur de démarrage, vous pouvez ajouter une entrée à /boot/grub/grub.cfg
:
(ou peut-être mieux /etc/grub.d/40_custom
)
menuentry "ubuntu trusty, (linux 3.13.0-32) (chroot)" {
insmod ext2 # or whatever you're using ...
set root='(hd0,7)' # partition containing the chroot
set chroot='/chroot/trusty' # chroot path
linux $chroot/boot/vmlinuz-3.13.0-32-generic root=/dev/sda7 chroot=$chroot rw
initrd $chroot/boot/initrd.img-3.13.0-32-generic.chroot
}
(modifiez les fichiers / partitions en fonction des vôtres)
Installation à l'échelle du système
Une fois que vous en êtes satisfait, vous pouvez rendre les modifications permanentes
(jusqu'à ce que le package initramfs-tools soit mis à niveau).
Dans le système chrooté:
# cd /usr/share/initramfs-tools
# cp -pdrv . ../initramfs-tools.orig # backup
# patch -p1 < path_to/boot_chroot/initrd.patch
# rm *.orig */*.orig
# update-initramfs -u
À partir de maintenant, l'image initrd normale prendra en charge le démarrage chroot.
Pas besoin d'utiliser un initrd.chroot séparé qui pourrait alors se désynchroniser avec lui.
Voir boot_chroot pour plus de détails.
vmlinuz root=/dev/sda1/chroot
ne fonctionnera pas. On pourrait probablement simuler cela avec une méthode similaire à celle utilisée dansinitrd
. Voir par exemple ici . Vous montez/new_root
comme décrit ici, puis au lieu decd /new_root
fairecd /new_root/chroot
et de continuer.