Supongamos que necesito un sistema que me permita poder deshacer lo que alguien que entre a un servidor Linux haga.
Por ejemplo: estoy dictando clases, y cada estudiante tiene su equipo. Repentinamente un estudiante pierde el sentido del tiempo y espacio y deshace, daña, elimina, desconfigura, borra, formatea algo. Cómo poderle devolver al estudiante un sistema funcional en poco tiempo?
Bueno, hay muchas formas, pero una de ellas es bien simple, se llama user-mode linux, le llamaré uml ó UML en este documento.
UML es vieja, es una forma de las primeras formas de virtualizar que existieron, no es tan popular como las alternativas modernas (xen, kvm, virtualbox, etc), sin embargo tiene cosas interesantes como el hecho de que echar a andar una máquina con UML es fácil.
Requisitos previos:
lo más posible es que requieras instalar las uml_utilities para hacer ciertas operaciones con disco y/o red:
yum install uml_utilities
Instalación inicial:
Luego te bajas un kernel compilado con soporte para uml, puedes encontrar una gran cantidad aquí:
Te aparecerá la última versión para 32bits y para 64bits. En este ejemplo usaré la última versión de 64bits que hay. Por favor no copies y pegues, pues la última versión va cambiando con el tiempo, busca aquí la última versión que haya en este momento.
mkdir ~/uml cd ~/uml wget http://uml.devloop.org.uk/kernels/kernel64-3.10.4.bz2 unzip kernel*.bz2 chmod +x kernel64*
También quizá quieras bajar una imagen ya creada de alguna distribución o sistema basado en Linux, yo probé con busybox, que es pequeñito y con CentOS-6.4. Le puedes bajar la versión que requieras de aquí.
En este ejemplo usaré la versión de centos-6.4 de 64bits que era la última al momento de yo hacer este documento. Por favor no copies y pegues de este documento, mejor busca la última versión de CentOS o de lo que quieras desde aquí.
Le bajé y descomprimí a mi versión elegida:
cd ~/uml wget http://fs.devloop.org.uk/filesystems/CentOS-6.x/CentOS6.x-AMD64-root_fs.bz2 bunzip2 CentOS*bz2
Aquí tengo digamos, la imagen base. Puedo arrancar ya con ella, pero haré algo curioso: Le arrancaré desde un COW (Copy-On-Write) que es un segundo archivo que es hacia donde se escriben los cambios, adiciones, eliminaciones que mi equipo desea hacer. La imagen baseCentOS6.x-AMD64-root_fs quedará intacta, todo cambio lo haré al COW. De esta forma puedo utilizar la misma imagen base para muuuchas máquinas virtuales. Usando una sola imagen base y varias imágenes COW.
Arranquemos:
./kernel64-3.10.4 mem=256m ubda=epe-cow,CentOS6.x-AMD64-root_fs eth0=tuntap,,,192.168.1.103
epe-cow no existe.. al no encontrarle el sistema creará un archivo llamado epe-cow,CentOS6.x-AMD64-root_fs que es el Copy on Write que le pedí.
la IP que pongo aquí es una IP de mi red, que no está usando nadie, se usará para el lado del tunel de mi máquina. La máquina uml utilizará su propia ip que intentará determinar via dhcp, si no pudiera , puedes configurarle una IP fija de tu red. Por ejemplo yo le configuraré la 192.168.1.104 y como gateway la 192.168.1.1 que es el gateway de mi red.
Como usé cow, podría levantar inmediatamente otra máquina con la misma base, y cambiar el nombre del cow, por ejemplo de epe-cow a tueres-cow, y así podría crear infinidad de máquinas todas con la misma base, pero que podrían configurarse de aquí en adelante de forma diferente.
ah, si utilizar un usuario normal, la red no arrancará… quizá debas invocarle con sudo