Arrancar el sistema Linux desde chroot: ¿hay una mejor manera de hacerlo?

Arrancar el sistema Linux desde chroot: ¿hay una mejor manera de hacerlo?

Quiero configurar la entrada del menú Grub para iniciar en el sistema chrooted (instalé chrooted debootstrap para evitar tocar demasiado el sistema existente).

Actualmente hago lo siguiente para lograrlo:

  1. Instale linux-image y amigos dentro del entorno chroot

  2. Remasterice manualmente initramfs para realizar chroot en el sistema en lugar del comportamiento habitual:

rootmnt=$rootmnt/root/squeeze
...
#exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
exec chroot ${rootmnt} ${init} "$@"  <${rootmnt}/dev/console >${rootmnt}/dev/console

3.. Agregue una entrada a /boot/grub.cfg:

menuentry 'Chrooted debian Squeeze' {
    ...
    linux   /root/squeeze/boot/vmlinuz root=... rw
    initrd  /root/squeeze/boot/initrd-chroot
}

Funciona, pero no es fácil de configurar y necesita piratería manual cada vez que se debe cambiar initrd. ¿Cómo hacerlo mejor?

Respuesta1

Me encontré con el mismo problema y terminé.escribiendo estopara que funcione sin problemas en diferentes sistemas (debian, ubuntu actualmente):

Ejecute make_chroot_initrdel script para crear una nueva imagen initrd habilitada para chroot a partir de la existente:

#  ./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 nueva imagen será exactamente igual, excepto que ahora puede manejar un chroot=parámetro de arranque.

Con grub2 como gestor de arranque puedes agregar una entrada a /boot/grub/grub.cfg:
(o quizás mejor /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
}

(cambie archivos/particiones para que coincidan con los suyos)

Instalación en todo el sistema

Una vez que esté satisfecho con él, puede hacer que los cambios sean permanentes
(hasta que se actualice el paquete initramfs-tools).
En el sistema 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

A partir de ahora, la imagen initrd normal admitirá el arranque chroot.
No es necesario utilizar un initrd.chroot separado que puede no estar sincronizado con él en ese momento.

Verarranque_chrootpara detalles.

Respuesta2

¿Por qué cambiaste de run-init a chroot? No deberías hacer eso. run-init elimina todo lo que hay en la raíz de initramfs y luego realiza el chroot a $rootmnt. Quieres mantener ese comportamiento.

En cuanto a cómo evitar tener que reconstruir manualmente su initramfs cada vez, edite la copia maestra del script de inicio en /usr/share/initramfs-tools. Eso debería funcionar al menos hasta que actualice el paquete initramfs-tools.

Una solución permanente sería parchear el script de inicio para que reconozca un argumento de arranque para agregar algo a rootmnt y enviar ese parche para incluirlo en Debian. Luego puede agregar el argumento a grub para las entradas que deberían iniciarse de esa manera.

información relacionada