LinuxParty
En la entrada “Virtualizar con Xen” aprendimos a instalar Xen project para posteriormente poder crear máquinas virtuales para-virtualizadas con lo que conseguiríamos un mejor rendimiento en nuestros guest. Es justo lo que vamos aprender ahora. Una vez tenemos todo previsto y Xen project funcionando, es el momento de crear nuestra primer DomU.
Requisitos
- Contamos con un servidor Debian 8 en el que corre un Xen, por lo tanto este es nuestro Domain-0
- Tenemos asignada una cierta memoria RAM (512 MB en nuestro caso) a Domain-0 y desactivado el ballooning de manera que Domain-0 nunca pueda asignar mas memoria de la que realmente tenemos, así nunca experimentaremos problemas de rendimiento en Domain-0.
- Hemos creado un puente de red (xenbr0) en Domain-0 al que conectar los dispositivos virtuales de cada DomU. Esto hace que los hosts virtuales tomen IP del mismo segmento de red que Domain-0, es decir serán tratados como hosts físicos.
- Nuestro Domain-0 tiene creado un grupo de volúmenes (xen_grp) y varios volúmenes lógicos. Nos centraremos en /dev/xen_grp/lv_images montado sobre /images ya que será aquí donde almacenaremos las imágenes de los sistemas virtuales.
Creando máquina virtual en Xen
Para crear la máquina virtual básicamente necesitaremos crea un disco virtual para swap, descargar la imagen del sistema operativo preparado para ser para-virtualizado (en nuestro caso utilizaremos CentOS 6.7 gnome Desktop 32 bits), crear un puente de red para que tome conexión, y copiar y editar el archivo de configuración /etc/xen/xlexample.pvlinux.
Descargamos CentOS 6.7:
# cd /images
# wget ftp://ftp.stacklet.com/archive/x86/CentOS/6.7/centos.6-7.gnome.x86.20150810.img.tar.bz2
Descomprimimos la imagen:
# tar -jxvf centos.6-7.gnome.x86.20150810.img.tar.bz2
Crear un disco swap:
# dd if=/dev/zero of=/images/centos-swap.6-7.img bs=1024k seek=512 count=0
Crear el sistema swap en el disco creado en el paso anterior:
# mkswap /images/centos-swap.6-7.img
Creamos un directorio temporal donde montar la imagen:
# mkdir -p /images/tmp/Centos67
Montamos la imagen:
# mount -t ext4 -o loop /images/centos.6-7.gnome.x86.20150810.img /images/tmp/Centos67/
Modificamos la password del usuario root de la imagen:
# chroot /images/tmp/Centos67/ /usr/bin/passwd
Modificar el archivo /etc/fstab de la imagen:
# vi /images/tmp/Centos67/etc/fstab /dev/xvda1 / ext4 defaults,errors=remount-ro 1 1 /dev/xvda2 none swap sw none /dev/shm tmpfs defaults 0 0
Damos un nombre a la nueva máquina:
# vi /images/tmp/Centos67/etc/sysconfig/network NETWORKING=yes HOSTNAME=Centos67
Añadimos la máquina al archivo /etc/hosts de la imagen:
# vi /images/tmp/Centos67/etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.246 Centos67
Configuramos la interfaz de red:
# vi /images/tmp/Centos67/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static IPADDR=192.168.1.246 NETMASK=255.255.255.0 BROADCAST=192.168.1.25 ONBOOT=yes TYPE=Ethernet
Creamos el archivo para los DNS:
# vi /images/tmp/Centos67/etc/resolv.conf
nameserver 192.168.1.1
Editamos el archivo /etc/inittab de manera que podamos utilizar la terminal virtual hvc0 (Xen Virtual Console 0), para ello agregaremos la siguiente línea al final del archivo:
# vi /images/tmp/Centos67/etc/inittab xvc0:2345:respawn:/sbin/mingetty xvc0
Nos aseguramos de que la TTY hvc0 aparezca en el archivo /etc/securetty del servidor principal Domain-0:
# cat /etc/securetty |grep hvc0 hvc0
Configuramos la zona horaria:
# cp /images/tmp/Centos67/usr/share/zoneinfo/Europe/Madrid /images/tmp/Centos67/etc/localtime
Instalamos el cliente NTP:
# chroot /images/tmp/Centos67/ yum install ntp
Comprobamos el nombre de los archivos kernel e initrd de la imagen CentOS67 pues nos harán falta para el próximo paso:
# ls -l /images/tmp/Centos67/boot/
-rw-r--r-- 1 root root 111790 jul 25 2015 config-2.6.32-573.1.1.el6.i686
drwxr-xr-x 3 root root 4096 ago 10 2015 efi
drwxr-xr-x 2 root root 4096 feb 25 00:22 grub
-rw------- 1 root root 14401638 ago 10 2015 initramfs-2.6.32-573.1.1.el6.i686.img
-rw-r--r-- 1 root root 202247 jul 25 2015 symvers-2.6.32-573.1.1.el6.i686.gz
-rw-r--r-- 1 root root 2034619 jul 25 2015 System.map-2.6.32-573.1.1.el6.i686
-rwxr-xr-x 1 root root 4081824 jul 25 2015 vmlinuz-2.6.32-573.1.1.el6.i686
Modificaremos el archivo /boot/grub/grub.conf de manera que sea utilizado por pygrub (gestor de arranque utilizado por Xen para iniciar las máquinas virtuales):
# vi /images/tmp/Centos67/boot/grub/grub.conf
default=0
timeout=10
title vmlinuz-2.6.32-573.1.1.el6.i686 root (hd0,0) kernel /boot/vmlinuz-2.6.32-573.1.1.el6.i686 console=hvc0 xencons=tty0 root=/dev/xvda1 ro initrd /boot/initramfs-2.6.32-573.1.1.el6.i686.img
Asignar dirección MAC a la interfaz predeterminada (eth0):
Importante: El siguiente script (macgen.py) no existe por lo que primero deberemos de crearlo
# vi /usr/local/sbin/macgen.py #! /usr/bin/python # # macgen.py script to generate a MAC address for Red Hat Virtualization guests # import random mac = [ 0x00, 0x16, 0x3e, random.randint(0x00, 0x7f), random.randint(0x00, 0xff), random.randint(0x00, 0xff) ] print ':'.join(map(lambda x: "%02x" % x, mac))
# chmod +x /usr/local/sbin/macgen.py
Ahora ya es posible generar la MAC:
# /usr/local/sbin/macgen.py
00:16:3e:19:a3:0a
Creamos el archivo de configuración para nuestra nueva máquina CentOS67. Es posible hacer una copia del que viene por defecto (/etc/xen/xlexample.pvlinux) o bien crear uno nuevo:
# vi /etc/xen/CentOS67.cfg name = 'CentOS67' bootloader = '/usr/lib/xen-4.4/bin/pygrub' vcpus = '1' memory = '256' root = '/dev/xvda1 ro' disk = ['tap:aio:/images/centos.6-7.gnome.x86.20150810.img,xvda1,w', 'tap:aio:/images/centos-swap.6-7.img,xvda2,w'] vif = ['mac=00:16:3e:19:a3:0a'] on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' extra = ''
IMPORTANTE: En este archivo hay que prestar especial atención a que el cargador de arranque se encuentre en la ruta indicada, que el nombre de las imágenes (tanto de CentOS como de Swap) correspondan con la ruta y con sus dispositivos (xvda1 y xvda2, respectivamente) y que la mac sea la que hemos generado en el paso anterior
Podemos aprender mas parámetros del archivo de configuración en este link
Desmontamos la partición:
# umount /images/tmp/Centos67
Iniciamos la máquina CentOS67:
# xl create /etc/xen/CentOS67.cfg
Conectar con la máquina:
Para conectar con la máquina podemos abrir una terminal y acceder vía SSH y acceder como root.
Otra forma posible es abrir un cliente VNC y conectar por entorno gráfico
Nota: Si por cualquier motivo no hemos configurado VNC en el archivo de configuración de la máquina antes de crearla, siempre cabe la posibilidad de acceder por SSH instalar el servidor VNC, iniciar el servicio y listo, a partir de ese momento podremos igualmente acceder por entorno gráfico
Listar dominios:
# xl list
Destruir máquina:
# xl destroy <domU>
-
Virtualización
- VirtualBox 7.1.4 agrega soporte inicial para Linux Kernel 6.12 y otros cambios de Linux
- VirtualBox 7.1 promete soporte Wayland para compartir portapapeles en Linux
- VirtualBox 7.0.20 presenta soporte inicial para los kernels openSUSE 15.6 y RHEL 9.5
- VirtualBox 7.0.16 lanzado con soporte inicial para los kernels Linux 6.8 y 6.9
- Instalar un Sistema Operativo Invitado en VirtualBox
- Publicación de QEMU 8.0 para Linux, Windows y Mac con más emulación ARM y RISC-V
- Realidad Virtual, una revolución para el modelo digital de ocio
- Cómo instalar QEMU/KVM en Ubuntu para crear máquinas virtuales
- Cómo instalar VirtualBox 7.0 en AlmaLinux
- Cómo ejecutar aplicaciones de Android en Linux mediante Anbox
- Multipass: ejecutar varias VMs Ubuntu Linux bajo Demanda para cualquier sistema Linux
- Cómo usar máquinas virtuales Virtualbox en KVM en Linux
- Cómo clonar y crear una plantilla de máquina virtual KVM
- Gestión de máquinas virtuales KVM con Cockpit Web Console en Linux
- Cómo crear máquinas virtuales en Linux usando KVM (máquina virtual basada en kernel)