martes, 3 de noviembre de 2015

Cómo bootear una distro instalada en un folder (chroot)


En el post anterior explicaba como instalar una distribución Linux dentro de un folder (chroot) en otra distro sin necesidad de crear una nueva partición.

En este post voy a explicar cómo escoger cuál de los dos sistemas bootear desde el grub de Linux.

El primer paso consiste en crear un archivo dentro del chroot al que llamaremos chrootinit, la idea es que este sea el primer programa en ejecutarse después de que el kernel termine de arrancar. Normalmente el primer proceso en ejecutarse es init y se encarga de configurar y arrancar los diferentes procesos en nuestro sistema operativo, últimente la mayor parte de distros han migrado a systemd, por lo que init ahora es un link que apunta a systemd.

Como podemos observar, en el chroot tenemos lo necesario para bootear nuestro sistema operativo, el vmlinuz que es la imagen comprimida del kernel y la imagen initramfs que es el sistema de archivos que carga el kernel en la memoria ram para poder ejecutar varios procesos. Los mismos se encuentran dentro del folder boot en nuestro chroot.

El contenido del archivo chrootinit es el siguiente:

Son solamente dos líneas de código que se encargan de montar la raíz del sistema de archivos en modo escritura-lectura y luego ejecuta el comando chroot pasándole la ubicación de nuestro sistema para después ahora sí, ejecutar el proceso init que normalmente se hubiera ejecutado de primero.

Ahora solo queda crear una nueva entrada en el grub, para que éste nos dé a escoger el sistema que deseamos bootear. Para eso necesitamos pasarle la ubicación del kernel, el initramfs y nuestro script chrootinit.

Para lograr esto tuve que copiar varias cosas de una de las entradas del grub.

Si antes de arrancar el sistema operativo que tenemos instalado presionamos la tecla 'e' podemos ver los parámetros que se le pasan al bootloader en dicha entrada:


Esto es una característica bastante útil del grub, ya que nos permite editar la configuración de las diferentes entradas directamente y probar los cambios sin hacerlos permanentes.

Después de que obtuve los resultados deseados simplemente ingresé la información en /etc/grub.d/40_custom

Esto lo hice dentro de Ubuntu que es el sistema que tenía instalado originalmente. Como se puede ver, dentro de los parámetros que se le pasan al kernel está nuestro script /arch/boot/chrootinit que será lo primero que se ejecutará en el espacio de usuario.

Ahora es sólo cuestión de correr update-grub y reiniciar el sistema



Y después de escoger 'Arch Linux chroot' ya podemos loguearnos al sistema:

Es importante señalar que el usuario había sido creado anteriormente dentro del chroot :)

Espero que les resulte útil la información.

Saludos

No hay comentarios:

Publicar un comentario