Cómo ejecutar múltiples distribuciones Linux sin virtualización

Hace unas semanas, escribí un artículo sobre Cómo ejecutar múltiples sesiones X sin virtualización , en el que demostraba cómo se pueden ejecutar varios entornos de escritorio al mismo tiempo en el mismo equipo y cambiar de uno a otro con sólo pulsar un botón. Admito que esto fue algo así como un calentamiento para el programa real: cómo ejecutar múltiples distribuciones de Linux al mismo tiempo sin tener que lidiar con los inconvenientes del software de virtualización.

Hoy, vamos a usar chroot para tratar ciertas partes de su sistema de ficheros Linux como sistemas (casi) completamente aislados. Esto puede permitirle hacer todo tipo de cosas interesantes, como ejecutar un sistema Gentoo completo desde dentro de su sistema Ubuntu con poca o ninguna pérdida de rendimiento.

Cómo funciona

Antes de empezar, sería una buena idea repasar exactamente lo que estamos haciendo y cómo funciona todo. Al iniciar su equipo con Linux, debe seguir una serie de pasos para arrancar. GRUB, su gestor de arranque, carga el núcleo especificado en el archivo de configuración de GRUB, lo adjunta a su partición raíz y ejecuta los scripts init almacenados allí. A partir de ese momento, su sistema se ejecutará desde esa partición raíz.

Vamos a usar un sistema Linux host (lo haré desde Debian, pero los pasos deberían ser prácticamente idénticos independientemente de la distribución) que pase por ese proceso de arranque normal, pero luego tratar una cierta parte de su sistema de ficheros (como /mnt/guest) como su propia instalación aislada. Ese sistema invitado no pasará por el proceso de arranque, no cargará un kernel y no ejecutará scripts de inicio. Simplemente le dirá a su host «conectarse a este directorio como si fuera la nueva partición raíz». El siguiente diagrama debería ayudar a demostrar lo que quiero decir.

Así es aproximadamente como los archivos estarán dispuestos en su sistema, simplemente sentados ahí como archivos normales en una partición normal, tratados igual que cualquier otro archivo hasta que usemos «chroot» para convertirlos en algo especial.

Cómo ejecutar múltiples distribuciones Linux sin virtualización

Pero una vez que usamos chroot (CHange ROOT) y apuntamos a /mnt/guest (o donde sea que pongamos los archivos en el siguiente paso), ese directorio es ahora su propio sistema de ficheros raíz. Se vuelve completamente ajeno al sistema anfitrión. Todos los programas y comandos que se ejecutan desde esa nueva raíz se ejecutan en base al software dentro de esa nueva rama.

Cómo ejecutar múltiples distribuciones Linux sin virtualización

Por ejemplo, si estás chrootado en /mnt/guest y escribes «ls», está leyendo el comando «ls» desde el interior de ese entorno chroot, sin saber nada del comando «ls» en el sistema host. Si escribes «firefox», ejecuta el Firefox desde dentro de la nueva raíz, tanto si tienes instalado Firefox en el host como si no.

Cómo obtener y usar el restaurante para invitados

Para que esto funcione, sólo necesita el sistema de ficheros base de una distribución de Linux, sea cual sea esa distribución. Debian tiene una gran herramienta para este propósito llamada debbootstrap que descarga los ficheros base y los coloca donde usted quiera. Para mantener las cosas interesantes, y para demostrar lo que chroot puede hacer, vamos a usar un sistema de archivos Gentoo para nuestro invitado. Para mantener las cosas simples y directas, voy a incluir la descarga del tarball como uno de los pasos que haremos en la línea de comandos.

Estos pasos van a descargar todos los archivos base para un sistema Gentoo, extraerlos en nuestro directorio de destino (estaré usando /mnt/guest pero puedes usar lo que quieras) y luego hacer chroot en ese directorio para que sea tratado como el nuevo directorio raíz (/). Puede que necesite permisos de root (sudo) para algunos de los siguientes comandos.

mkdir /mnt/guest
cd /mnt/guest

wget http://distfiles.gentoo.org/releases/x86/2008.0/stages/stage3-x86-2008.0.tar.bz2
tar -jxvf stage3-x86-2008.0.tar.bz2
chroot /mnt/guest

Estos comandos siguen los siguientes pasos, en orden de número de línea:

  1. Crear el espacio para que nuestro sistema invitado viva
  2. Moverse a ese espacio
  3. Descargar los archivos de sistema de Gentoo
  4. Extraerlos
  5. Trate este nuevo espacio como el directorio raíz (/)

La siguiente captura de pantalla debería ayudar a demostrar que una vez que hemos usado chroot para conectar nuestro nuevo directorio como root, ahora está aislado de las ramas anteriores en el árbol del sistema de archivos.

Cómo ejecutar múltiples distribuciones Linux sin virtualización

Para explicar la captura de pantalla, empezamos con una línea de comandos normal en el sistema host. Estoy usando pwd para mostrar mi directorio actual, donde todos los archivos de Gentoo están sentados como archivos viejos sin ningún significado especial. Luego uso chroot para tratar este directorio como la nueva raíz, y ahora puedes ver visualmente que mi prompt ha cambiado porque la línea de comandos está sacando toda su información (incluyendo cómo dibujar el prompt) desde el entorno raíz de Gentoo. TODOS los comandos y acciones que realizo mientras hago chroot in dependen de los comandos existentes dentro de ese nuevo árbol de archivos. Cuando escribo pwd de nuevo, ya no dice /mnt/guest, porque por lo que esa shell sabe, no existe nada más que lo que ve dentro de ese árbol.

Cosas para tener en cuenta

Como indiqué anteriormente, esto no está 100% aislado del sistema host. El entorno chroot nunca fue «arrancado», así que nunca cargó su propio kernel, y nunca ejecutó sus propios scripts init. En nuestro ejemplo, tenemos Gentoo ejecutándose en el kernel con el que el host (en mi caso Debian) arrancó.

Este método ciertamente no es un reemplazo para la virtualización, y no puede hacer todo lo que el software VM puede hacer. El sistema invitado nunca «arranca» o ejecuta scripts de inicio, y es posible que su sistema operativo invitado requiera algunas características que su kernel anfitrión no ofrece.

¿Para qué?

En los tiempos en que he mencionado esta técnica a la gente en el pasado, a menudo han dicho algo como: «Está bien, pero ¿para qué la usarías? Personalmente he encontrado varios usos para chroot :

  • Probar el software de desarrollo en un entorno prístino
  • Ejecutar software destinado a otra distribución
  • Ejecutar software que requiere una versión más antigua o más reciente de su distribución actual
  • Acceder a una instalación de Linux en una partición diferente sin tener que reiniciar
  • Arrancar un Live CD y usar chroot para reparar su instalación o GRUB
  • Acceder a una unidad en la que ha olvidado el usuario/password

Y estoy seguro de que hay muchas más en las que nunca he pensado. ¿Alguna vez has usado chroot para ejecutar múltiples distribuciones? ¿Qué tal si reparamos un sistema Linux desde un Live CD? Háganoslo saber en los comentarios.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *