# rm-rf.es

Cómo instalar debootstrap en RHEL / CentOS

Debootstrap es una herramienta que srive para crear un sistema Debian básico desde cero, sin la necesidad de utilizar dpkg o apt. Básicamente se descarga los archivos .deb para posteriormente desempaquetarlos en un directorio en el cual podemos posteriormente hacer “chroot“.

En mi caso era necesario para poder virtualizar un sistema Debian desde CentOS utilizando Xen. Utilizamos debootstrap para construir el sistema Debian en unas particiónes dentro de un volumen lógico y posteriormente ese volumen es el que utilizaremos como máquina virtual (pero esto es otro tema).

Para instalar deboostrap en RHEL / CentOS o Fedora previamente nos bajamos el rpm correspondiente (en este caso el de 32 bits):

wget ftp://ftp.muug.mb.ca/mirror/fedora/epel/5/i386/debootstrap-1.0.7-3.el5.noarch.rpm

Instalamos gettext ya que lo requiere como dependencia:

yum install gettext

Y finalmente instalamos debootstrap:

rpm -Uvh debootstrap-1.0.7-3.el5.noarch.rpm

Ya podemos hacer uso de la herramienta, en el siguiente ejemplo instalamos Debian Lenny para i386 desde el FTP de Debian dentro de un volumen lógico montado como /home/vm/debian/ :

debootstrap --arch i386 lenny /home/vm/debian/ http://ftp.us.debian.org/debian

Una vez finalizado el proceso ya podríamos acceder con chroot al sistema:

chroot /home/vm/debian/

xenconsole: Could not read tty from store: No such file or directory

En caso de recibir el siguiente error en entornos de virtualización Xen, debéis aseguraos que xenconsoled está corriendo:

# ps aux | grep xenconsoled
root      2511  0.0  0.7  12208   596 ?        Sl   Nov18   0:00 xenconsoled --log none --timestamp none --log-dir /var/log/xen/console

Si no está activo, no podréis acceder a las consolas de las máquinas virtuales, recibiendo el error que muestra el título de la entrada:

xenconsole: Could not read tty from store: No such file or directory

Para arrancar xenconsoled:

/usr/sbin/xenconsoled

Xen: Clonar una máquina virtual con virt-clone

En el sistema de virtualización Xen, y gracias a la utilidad virt-clone tenemos la posibilidad de duplicar una máquina virtual con un solo comando y de forma extremadamente sencilla.

Podemos hacerlo de dos formas, la primera utilizando el asistente y sin pasar ningún parámetro al comando, simplemente ejecutamos virt-clone –prompt y seguimos los pasos siguientes.

NOTA: La máquina virtual a clonar debe estar parada, sino recibiremos el error:

ERROR Domain with devices to clone must be paused or shutoff.

# virt-clone  --prompt
What is the name of the original virtual machine? mimaquinavirtual
 What is the name for the cloned virtual machine? clonmaquinavirtual
 What would you like to use as the cloned disk (file path) for '/home/mimaquinavirtual.img'? /home/clonmimaquinavirtual.img
Cloning /home/mimaquinavirtual.img           4% [===                                 ]  20 MB/s | 128 MB     07:59 ETA

Como podéis observar no tiene ningún misterio. Primero especificamos la máquina virtual a clonar, después el nombre de la que será el clon y la ruta al disco a utilizar para la imagen clonada.

También se puede especificar todo por línea de comandos, ejemplo:

# virt-clone \
     --original mimaquinavirtual \
     --name clonmimaquinavirtual \
     --file /home/clonmimaquinavirtual.img

Xen: Cómo suspender / activar una máquina virtual

Para la suspensión de máquinas virtuales en Xen utilizaremos la utilidad virsh. Virsh es una utilidad que utiliza la API de libvirt, y es una buena alternativa a la administración de máquinas virtuales a través de xm o cualquier aplicación gráfica.

El modo de suspender una máquina virtual utilizando virsh es el siguiente:

virsh suspend (nombre dominio | identificador dominio | uuid dominio) 

En este caso, si nuestra máquina virtual se llamara test01, podríamos suspenderla de este modo:

virsh suspend test01

Podemos utilizar también el ID de dominio (podemos verlo con un xm list) o el uuid (en el fichero de configuración de la máquina virtual).

Posteriormente, para activar la máquina virtual utilizaremos la opción resume:

virsh resume (nombre dominio | identificador dominio | uuid dominio) 

Xen: Reducir cantidad de memoria reservada para Dom0

Por defecto, creo recordar que Xen reserva 256 MB de memoria RAM para el domain0. Esto puede suponer un problema en equipos con poca memoria. En el caso por ejemplo de querer añadir una máquina virtual con 256 MB en un sistema con 512 MB, es probable que salte un error similar a este:

Error: Error creating domain: I need XX MiB, but dom0_min_mem is XX and
shrinking to XX MiB would leave only XX MiB free.

Bien, no hay problema porque podemos reducir si lo deseamos la memoria reservada para el dom0. En el fichero de configuración xend-config.sxp podemos modificar este parámetro y adecuarlo a nuestras necesidades:

# Dom0 will balloon out when needed to free memory for domU.
# dom0-min-mem is the lowest memory level (in MB) dom0 will get down to.
# If dom0-min-mem=0, dom0 will never balloon out.
(dom0-min-mem 256)

Cambiad 256 por el valor que deseéis y reiniciar xend para reflejar los cambios (ahora mismo desconozco si hay otra forma de hacerlo sin tener que reiniciar el servicio).

Virt-install: Asistente para crear máquinas virtuales en Xen

El comando virt-install permite la creación de máquinas virtuales para Xen de forma sencilla, ya sea a través de un asistente desde la línea de comandos o del paso de parámetros con las distintas opciones al comando. El comando utiliza la librería “libvirt”.

A través de esta herramienta, podemos realizar tanto instalaciones en modo texto como gráficas, y las imagenes del sistema operativo pueden ser cargadas desde FTP, HTTP, NFS o local.

El paquete a instalar es python-virtinst.noarch:

yum install python-virtinst.noarch

No obstante, personalmente al instalar xen instalo los siguientes paquetes y automáticamente por dependencias los coge todos:

yum install xen.i386 xen-devel.i386 virt-manager.i386

Una vez instalado, el modo de utilización es sencillo, vamos a ver como crear una máquina virtual con 2GB de disco, 256 MB de RAM, sistema operativo CentOS, etc:

# virt-install
What is the name of your virtual machine? test01
 How much RAM should be allocated (in megabytes)? 256
 What would you like to use as the disk (file path)? /home/virtual/test01.img
 How large would you like the disk (/home/virtual/test01.img) to be (in gigabytes)? 2
 Would you like to enable graphics support? (yes or no) no
 What is the install location? http://ftp.udl.es/pub/centos/5.3/os/i386/

Starting install...
Retrieving file CentOS...
Retrieving file vmlinuz...
Retrieving file initrd.img...
Creating storage file ...

Y ya comenzará la instalación interactiva del sistema:

Welcome to CentOS                                                               

                   +---------+ Choose a Language +---------+
                   |                                       |
                   | What language would you like to use   |
                   | during the installation process?      |
                   |                                       |
                   |       Catalan                ^        |
                   |       Chinese(Simplified)    :        |
                   |       Chinese(Traditional)   #        |
                   |       Croatian               :        |
                   |       Czech                  :        |
                   |       Danish                 :        |
                   |       Dutch                  :        |
                   |       English                v        |
                   |                                       |
                   |                +----+                 |
                   |                | OK |                 |
                   |                +----+                 |
                   |                                       |
                   |                                       |
                   +---------------------------------------+                    

  / between elements  |  selects |  next screen

Si en vez de utilizar el asistente queremos pasar manualmente los parámetros a virt-install no hay ningún problema, revisamos la ayuda y nos informan de todas las posibilidades:

# virt-install --help

Ejemplo:

# virt-install \
     --paravirt \
     --name test01 \
     --ram 256 \
     --file /home/virtual/test01.img \
     --file-size 2 \
     --nographics \
     --location http://ftp.udl.es/pub/centos/5.3/os/i386/

Usar múltiples interfaces de red en virtualización Xen

El sistema de virtualización Xen, por defecto configura tanto la Dom0 como las DomU bajo la misma interfaz de red (eth0). En caso de necesitar configurar dos interfaces de red distintas dentro de una misma DomU, o separar cada DomU en una tarjeta de red distinta, hay que realizar ciertos cambios en la configuración.

En este caso vamos a configurar Xen para que una DomU pueda tener dos tarjetas de red virtuales. Para ello debemos crear un nuevo bridge que trabaje con la segunda interfaz de red (eth1).

La configuración inicial de xen es tener un bridge xenbr0 trabajando con la interfaz eth0. Lo que vamos a hacer es crear un nuevo bridge para que trabaje con la interfaz eth1 (xenbr1). Para ello, creamos un nuevo
script dentro de “/etc/xen/scripts/” que levante los dos bridges en el arranque de xen:

$ vim /etc/xen/scripts/network-interfaces

#!/bin/sh
"/etc/xen/scripts/network-bridge" "$@" vifnum=0 netdev=eth0 bridge=xenbr0
"/etc/xen/scripts/network-bridge" "$@" vifnum=1 netdev=eth1 bridge=xenbr1

Modificamos el fichero /etc/xen/xend-config.sxp para que utilice este nuevo script:

#(network-script network-bridge)
  (network-script network-interfaces)

Reiniciamos xen para que coja los cambios:

$ /etc/init.d/xend restart

Y vemos que ya ha levantado el nuevo bridge:

eth0      Link encap:Ethernet  HWaddr 00:0D:60:0F:DE:D6
          inet addr:192.168.0.152  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20d:60ff:fe0f:ded6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:955 errors:0 dropped:0 overruns:0 frame:0
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:133768 (130.6 KiB)  TX bytes:10239 (9.9 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0D:60:0F:DE:D7
          inet addr:192.168.0.106  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20d:60ff:fe0f:ded7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4738 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2545 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:460725 (449.9 KiB)  TX bytes:382897 (373.9 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

peth0     Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:1148 errors:0 dropped:0 overruns:0 frame:0
          TX packets:188 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:165286 (161.4 KiB)  TX bytes:26313 (25.6 KiB)
          Interrupt:16 Memory:ed6f0000-ed700000

peth1     Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:4795 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2569 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:494437 (482.8 KiB)  TX bytes:395195 (385.9 KiB)
          Interrupt:17 Memory:ed4f0000-ed500000

vif0.0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:31 errors:0 dropped:0 overruns:0 frame:0
          TX packets:955 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:10239 (9.9 KiB)  TX bytes:133768 (130.6 KiB)

vif0.1    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:2589 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4782 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:389945 (380.8 KiB)  TX bytes:463629 (452.7 KiB)

vif2.0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:157 errors:0 dropped:0 overruns:0 frame:0
          TX packets:837 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:32
          RX bytes:12788 (12.4 KiB)  TX bytes:111812 (109.1 KiB)

vif2.1    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:605 errors:0 dropped:348 overruns:0 carrier:0
          collisions:0 txqueuelen:32
          RX bytes:580 (580.0 b)  TX bytes:88879 (86.7 KiB)

virbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:9812 (9.5 KiB)

xenbr0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:985 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:130103 (127.0 KiB)  TX bytes:0 (0.0 b)

xenbr1    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:1119 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:150720 (147.1 KiB)  TX bytes:0 (0.0 b)

Una vez levantado el bridge, ya podemos configurarlo en la máquina virtual que queramos, accedemos a su fichero de configuración y cambiamos la línea del vif (los ficheros de configuración de las máquinas virtuales por defecto los tenemos en /etc/xen o /etc/xen/auto):

Antes:

vif = [ "mac=00:16:3e:01:d0:7a,bridge=xenbr0" ]

Después:

vif = [ "mac=00:16:3e:01:d0:7a,bridge=xenbr0", "mac=00:16:3e:01:d1:7a,bridge=xenbr1" ]

Tras esta modificación, si arrancamos la máquina virtual ya podremos configurar la segunda interfaz de red.

Cómo convertir una imagen VMware a Virtualbox

La mayoría de vosotros conoceréis estos dos sistemas de virtualización, VMWare y Virtualbox. En el caso de necesitar migrar una máquina virtual o imagen de un sistema de virtualización al otro, hay que hacer lo siguiente:

Instalar qemu:

sudo apt-get install qemu

Convertir la imagen VMWare a una imagen VirtualBox con qemu:

Migraremos la imagen centos.vmdk de VMWare al formato de imagen /tmp/centos.bin

qemu-img convert centos.vmdk /tmp/centos.bin

Finalmente usaremos VBoxManage para convertir el fichero de imagen .bin al nativo de virtualbox .vdi:

VBoxManage convertdd /tmp/centos.bin centos.vdi

Fuente en inglés | www.cyberciti.biz