genvm: Generación de máquinas virtuales
“Genvm” es un script personalizado de Debian generado por una máquina virtual (VM). Las imágenes de unidad generadas se pueden utilizar con Qemu/KVM, VirtualBox y VMWare (Windows, Mac OS o Linux) según el formato de imagen seleccionado. Este script acepta diferentes opciones para personalizar todos los parámetros generados de KVM.
En este artículo simplemente usaremos el script "genvm".
Aunque la versión de desarrollo de la herramienta “genvm” ya se utiliza ampliamente en muchas plataformas de integración continua (TeamCity Jenkins) para la difusión de herramientas de investigación (por ejemplo, CosyVerif).
Instalación
No se requiere instalación especial, hay un archivo de script para descargar y colocar donde quieras. Usaremos el siguiente comando:
aaricia ~ # wget -q https://downloads.sourceforge.net/project/genvm/genvm.tar.bz2 -O - | tar xjvf - -C /sbin/
genvm
aaricia ~ # chown root.root /sbin/genvm
De los requisitos previos necesarios al iniciar por primera vez la herramienta, encontramos los siguientes:
- instalador debootstrap Debian disponible en la mayoría de las distribuciones (consulte AUR para Arch Linux, EPEL para RedHat, etc.);
- kpartx instalado de forma predeterminada en muchas distribuciones;
- qemu-img y qemu-nbd están disponibles en todos los Linux.
Finalmente, el script requiere los derechos "root" para ejecutarse.
Como primera máquina virtual
Para generar una máquina virtual mínima, el script solo necesita tener el nombre de la imagen de disco que se generará (aquí “firstvm.raw” se creará en “~fhh/VM VirtualBox/”):
aaricia ~ # time genvm ~fhh/VirtualBox\ VMs/firstvm.raw
Set password to root >
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
real 2m15.012s
user 0m47.003s
sys 0m5.410s
aaricia ~ # ls -l ~fhh/VirtualBox\ VMs/
total 557652
-rw------- 1 root root 5368709120 Mai 12 14:52 firstvm.raw
En este caso, el script se detiene durante la construcción de la imagen del disco para solicitar la contraseña de administrador para futuras máquinas virtuales.
La invocación del argumento sin script muestra, entre otras cosas, los valores predeterminados utilizados para la generación de nuestra primera imagen de disco:
aaricia ~ # genvm | grep default
-a : architecture : amd64, i386 (default : amd64)
-f : format of image : raw, qcow2, qcow, vmdk (default : raw)
-k : specify kernel version (default : linux-image-amd64)
-n : virtual machine name (default : aaricia)
-o : change default tmp dir location (path with no space ; default "/tmp")
-p : root password (default : ask to user)
-s : image size (default : 5G)
-S : server to download debian (default : http://ftp.debian.org/debian)
-V : debian version : jessie, wheezy, ... (default : wheezy)
La imagen Debian Wheezy (“-V”) de 64 bits (“-a”) en formato bruto (“-f”) a 5G (“-s”) se genera desde el servidor “ftp.debian.org” (“- S “) y tiene el mismo nombre que la máquina host (“-n”).
El kernel instalado en la VM es la distribución de kernel estándar (“k”).
El directorio utilizado para la construcción se crea en “/tmp” (“-o”) y se requiere la contraseña de administrador para el usuario durante la construcción de la VM (“-p”).
Antes de usar la imagen, la raíz tiene que "dársela" al usuario (a través de "chown"):
aaricia ~ # chown fhh.users ~fhh/VirtualBox\ VMs/firstvm.raw
Luego, la imagen se usa directamente a través de QEMU/KVM:
fhh@aaricia ~ $ qemu-system-x86_64 VirtualBox\ VMs/firstvm.raw &
[1] 32766
Nota :
- La máquina virtual generada, de forma predeterminada, no está conectada a Internet y no tiene cliente DHCP.
- El teclado es QWERTY.
- Esta es realmente una máquina mínima, tiene todas las opciones relacionadas con los componentes existentes (sin editor de texto predeterminado instalado, sin administrador de registros, sin MTA, etc.).
Máquina virtual avanzada
En este segundo ejemplo, instalaremos una lista de paquetes adicionales en nuestra máquina. También usaremos la opción “-t” para ejecutar el directorio de scripts “~/scripts.genvm” durante y después de la generación de la imagen. La máquina virtual generada se utilizará en VirtualBox.
Lista de paquetes adicionales
Los paquetes que se agregarán a la instalación básica se pueden notificar en un archivo de texto a razón de un paquete por línea. Luego, el archivo se pasa al script mediante la opción "-l" (como lista)
aaricia ~ # cat > ~/scripts.genvm/lst.txt
openssh-server
vim
ifupdown
console-setup
^d
Otra solución es utilizar la opción “-A” seguida de la lista de paquetes para agregar separados por comas (si no hay demasiados paquetes para agregar).
scripts de personalización de VM
Para personalizar la máquina virtual, es posible ejecutar scripts contenidos en el directorio pasado a “genvm” mediante la opción “-t”. Los nombres de los scripts en formato “. Chroot {DD | anfitrión | post} .nom_du_script” proporciona información sobre sus órdenes y sus contextos de ejecución:
3rd/
|- 01.chroot.norecommends
|- 01.host.java
...
|- 01.post.chown
`- 02.host.rc.local
Secuencias de comandos “XX.chroot. *” y “AA.host. *”Se ejecutará primero y en orden. Los scripts con el prefijo “XX.chroot. *”Se ejecutará en la VM. Los scripts con el prefijo “XX.host. *”Se ejecutará en la máquina que genera la imagen del disco.
Los scripts marcados con "publicación" se ejecutarán en orden después de la generación de la VM (cuando se elimina la imagen del disco).
Nota: Los archivos en el directorio pasado como argumento a genvm pero que no respeten el nombre del formato descrito anteriormente no se aplicarán.
Se pueden utilizar varias variables y funciones para scripts de personalización, como por ejemplo:
- $ {MOUNT_POINT}: punto de montaje de la raíz de la imagen generada;
- $ {HD_IMG}: el nombre del archivo de imagen de disco generado;
- set_passwd_to pwd foo: función que asigna la contraseña “Password” al usuario “foo”;
Iniciar la red durante el arranque de la VM
El primer script aplicado a la máquina virtual tenía como objetivo iniciar la red y configurar DHCP. El archivo “/etc/network/interfaces” de la máquina virtual será el adecuado para la construcción de la imagen del disco:
aaricia ~ # mkdir ~/scripts.genvm
aaricia ~ #
cat > ~/scripts.genvm/01.host.networkcat > "${MOUNT_POINT}/etc/network/interfaces <<_eof_
auto lo eth0
iface lo inet loopback
iface eth0 inet dhcp
_eof_
^d
El script se ejecuta desde la máquina host y se escribe en “mountpoint /etc/network/interfaces”.
Desactivar la instalación de los paquetes recomendados
Para mantener un sistema mínimo, es necesario desactivar la instalación automática de los paquetes recomendados.
aaricia ~ # cat > ~/scripts.genvm/01.chroot.norecommends
cat > /etc/apt/apt.conf.d/02norecommends <<_eof_
APT::Install-Recommends False;
_eof_
^d
Creación de una contraseña de usuario “FHH” “TRUC”
Crearemos el usuario en la máquina virtual:
aaricia ~ # cat > ~/scripts.genvm/02.chroot.createuser
useradd -c FHH -g users -m -s /bin/bash fhh
Para inicializar la contraseña del usuario haremos lo mismo:
aaricia ~ # cat > ~/scripts.genvm/02.host.setpasswd2user
set_passwd_to fhh truc
^d
Chown aplicado después de la generación de la imagen asume esa fiesta. Ahora cambiaremos los derechos de la imagen del disco:
aaricia ~ # cat > ~/scripts.genvm/01.post.chown
chown fhh.users "${HD_IMG}"
^d
Ten cuidado: chroot contiene muy pocas acciones predeterminadas; entonces, si desea crear un “wget” para la máquina virtual, instale wget y si desea extraer un “tar.bz2”, instale bzip2, etc.
Generación de la máquina virtual.
Una vez que se configuran los scripts de personalización completos y la lista de paquetes, se invoca el script:
aaricia ~ # genvm -a amd64 -A isc-dhcp-client -f vmdk -l ~/scripts.genvm/lst.txt \
> -n vm -p toor -s 10G -S http://ftp.fr.debian.org/debian -t ~/scripts.genvm/ -v \
> -V jessie ~fhh/vm.vmdk
checking for "qemu-img"... Ok
...
delete temporary mount point (if needed)
/home/root/scripts.genvm/01.post.chown
Running /home/root/scripts.genvm/01.post.chown after all
Agregando a los paquetes del archivo “~/scripts.genvm/lst.txt” se utiliza la opción “-A” para agregar el cliente dhcp. La imagen Debian Jessie (“-V”) 10G se genera en formato “vmdk” para ser compatible con VirtualBox. La máquina generada se llama “vm” (opción “-n”). La contraseña de root está configurada en "toor" (opción "-p").
Lanzamiento de la Máquina Virtual
QEMU/KVM
En Qemu/KVM, la VM puede, como se vio anteriormente, iniciarse directamente:
fhh@aaricia ~ $ qemu-system-x86_64 ~/vm.vmdk &
[1] 6556
CAJA VIRTUAL
En VirtualBox, debe crear una nueva máquina virtual y asociar el formato de disco VMDK generado. Luego abra VirtualBox y haga clic en el botón "Nuevo". Seleccione los parámetros adaptados a la nueva imagen y seleccione la imagen de disco recién creada antes de crear la VM. Finalmente, inicie la máquina virtual como cualquier VM VirtualBox.
Características avanzadas
Además de las funciones ya presentadas, el script ofrece otras posibilidades para ayudar a personalizar o depurar los scripts de instalación.
Modo interactivo
La opción “-i” le permite controlar después de la instalación para realizar acciones adicionales:
aaricia ~ # genvm -A isc-dhcp-client -p toor -f vmdk -i ~fhh/vm.vmdk
*** ENTERING IN INTERACTIVE SHELL ***
You are here : /home/root
Virtual machine is monted here : /tmp/tmp.qxiJkmmgvC
Press "Ctrl+d" or "exit" to exit
bash-4.2# # all the wanted commands...
bash-4.2# # Possibility of chrooting in the VM
bash-4.2# exit
exit
*** END OF INTERACTIVE SEQUENCE ***
Lanzar scripts adicionales
Lo más largo en la construcción de una máquina virtual de este tipo es la descarga e instalación de paquetes. Para depurar scripts personalizados, la reconstrucción de una máquina virtual completa rápidamente se vuelve tediosa. La “-T” soluciona este problema.
La opción se utiliza en la misma línea en la que se genera la VM. Por ejemplo, para una imagen de disco generada por el siguiente comando:
aaricia ~ # genvm -p toor -l scripts.genvm/lst.txt -t scripts.genvm/ -f vmdk ~fhh/vm.vmdk
La ejecución de scripts de personalización únicamente se obtiene añadiendo una “-T” al comando:
aaricia ~ # genvm -T -p toor -l scripts.genvm/lst.txt -t scripts.genvm/ -f vmdk ~fhh/vm.vmdk
Para depurar agregue "-v" y verá la ejecución de los scripts:
aaricia ~ # genvm -T -v -p toor -l scripts.genvm/lst.txt -t scripts.genvm/ -f vmdk ~fhh/vm.vmdk
...
En realidad, sólo es necesario el archivo de la imagen generada según el tamaño de la imagen y la ubicación de los scripts:
aaricia ~ # genvm -T -v -t scripts.genvm/ -f vmdk ~fhh/vm.vmdk
...
Montando una VM generada
Al combinar la opción "-i" para interactividad y "-T" para scripts de personalización de aplicaciones, es posible montar y acceder automáticamente a la VM a través de genvm.
El truco consiste en utilizar “-i” y “-T” y reemplazar el directorio de scripts de personalización con “/dev/null” (opción “-f”).
aaricia ~ # genvm -T -i -t /dev/null -f vmdk ~fhh/vm.vmdk
*** ENTERING IN INTERACTIVE SHELL ***
You are here : /home/root
Virtual machine is monted here : /tmp/tmp.T9mWjcLTNs
Press "Ctrl+d" or "exit" to exit
bash-4.2# exit
*** END OF INTERACTIVE SEQUENCE ***
Una vez más, sólo se necesita el formato de la imagen (“-f”) y el archivo de imagen.
Conclusión
El script permite generar rápida y/o automáticamente muchas máquinas virtuales para la realización de pruebas en banco o la distribución de algunos proyectos. La gestión de las imágenes de disco de partición debe permitir que el script genere máquinas virtuales basadas en servidor que puedan ponerse en producción. directamente. Para otros desarrollos no dudes en preguntar y/o colaborar.
Fuente traducida: http://www.admin-linux.fr/?p=9109