Creación de domUs en la Plataforma XEN
Se indican a continuación secuencias de pasos a seguir para la creación de máquinas virtuales en la plataforma XEN. En ellas se asume que el servidor de virtualización tienen la siguiente configuración:
- Sistema operativo Debian lenny, arquitectura x86_64.
- Manejo del almacenamiento en disco mediante volúmenes lógicos (LVM2)
- Partición / en un volúmen lógico.
- Partición /boot en una partición primaria con sistema de archivos ext2.
El proceso de creación de las máquinas virtuales (dominios huesped o domU) depende del sistema operativo que vayan a utilizar. En la siguiente sección se muestran los procesos correspondientes para el sistema operativo debian, arquitectura x86_64.
Creación de domU con SO Debian wheezy x86_64
- Requerimientos de espacio en disco.
- Esquema de particiones.
- Requerimientos de memoria RAM y número de vcpus.
- Esquema de conexiones de red.
Procedimiento
- Crear LV
lvcreate --name nombre --size tamaño volumegroupname
- Crear tabla de particiones en LV:
parted /dev/vgname/lvname mklabel msdos
- Crear 2 particiones en LV (Para /boot y para el PV)
parted /dev/vgname/lvname unit s mkpart primary ext2 1024s 262143s parted /dev/vgname/lvname unit s mkpart primary ext2 262144s 25165823s
- Preparar la configuración de la máquina virtual (xmdomain.cfg). Usar como plantilla el archivo xm-debian.cfg publicado en la dirección:
http://ftp.??.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/xen/debian.cfg
- Descargar el núcleo y el disco RAM de inicio, en la ruta indicada en las variables kernel y ramdisk de la configuración de la máquina virtual:
wget http://ftp.xx.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/xen/initrd.gz wget http://ftp.xx.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/xen/vmlinuz
- Eliminar el mapeado de las particiones del LV del domU:
kpartx -d /dev/vgname/lvname
- Arrancar MV con el instalador de Debian activado, conectándo el terminal de trabajo a su consola:
xm create -c xm-debian.cfg
- Cambiar configuración de la MV para desactivar el instalador y activar arranque normal. Iniciar máquina virtual:
xm create -c xmdomain.cfg
- Realizar configuración básica del domU, en los archivos:
/mnt/debinst/etc/inittab /mnt/debinst/etc/network/interfaces /mnt/debinst/etc/hosts (ojo direccion ip del host, usar 127.0.1.1 para la línea que indica nombre de host) /mnt/debinst/etc/resolv.conf
- Configurar archivo /etc/apt/sources.list.
- Preparar aptitude:
aptitude update
- Si estuvieran presentes, se deben eliminar las siguientes de /root/.profile abajo listadas. Ellas podrían haber quedado allí si el instalador de Debian/wheezy para Xen no hubiese manejado correctamente los idiomas, localizaciones y codificaciones de caracteres:
# Installed by Debian Installer: # no localization for root because C # cannot be properly displayed at the Linux console LANG=C LANGUAGE=C
- Reconfigurar locales, para establecer las configuraciones de idioma y localización:
dpkg-reconfigure locales
- Seleccionar sha512 como hash para almacenar las claves, deshabilitar el uso de claves nulas e incrementar el número de iteraciones de las reseñas de contraseñas a 524288:
- En /etc/pam.d/common-password
- Cambiar:
password [success=1 default=ignore] pam_unix.so obscure sha512
Por:password [success=1 default=ignore] pam_unix.so obscure sha512 rounds=524288
- Cambiar contraseña de administrador:
passwd
- Cambiar contraseña de usuario
passwd <usuario>
- Instalar servidor ssh:
aptitude install openssh-server
- Configurar sshd_config:
- Sólo recibir conexiones en la interface de administración:
ListenAddress X.X.X.X
- No permitir entrada a root:
PermitRootLogin no
- Sólo permitir entrada al usuario creado en la IP quese asigne a la estación de trabajo designada para administrar el domU:
AllowUsers username@Y.Y.Y.Y
- Sólo recibir conexiones en la interface de administración:
- Reiniciar el servicio ssh
invoke-rc.d ssh restart
- Eliminar cliente nfs y rpc-bind (para no dejar sus puertos abiertos):
aptitude purge nfs-common rpc-bind
- Instalar y configurar agente snmp
aptitude install snmpd
- En default/snmp:
- Cambiar la opción "-Lsd" por "-LS5d" en la variable SNMPDOPTS
- En snmp/snmpd.conf
- Cambiar línea:
agentAddress udp:127.0.0.1:161
- por:
agentAddress udp:xx.xx.xx.xx:161 (ip de monitoreo del DomU)
- Cambiar líneas:
# system + hrSystem groups only view systemonly included .1.3.6.1.2.1.1 view systemonly included .1.3.6.1.2.1.25.1
- por:
# system + hrSystem + interfaces groups only view systemonly included .1.3.6.1.2.1.1 view systemonly included .1.3.6.1.2.1.25.1 view systemonly included .1.3.6.1.2.1.2.2.1 view systemonly included .1.3.6.1.2.1.31.1.1.1 view systemonly included .1.3.6.1.2.1.4.20.1.2 view systemonly included .1.3.6.1.4.1.2021
- Modificar línea:
rocommunity public default -V systemonly
- de la forma:
(red de monitorio del DomU) v rocommunity public xx.xx.xx.240/28 -V systemonly
- Modificar línea:
rouser authOnlyUser
- en la forma:
# rouser authOnlyUser
- Cambiar líneas:
# At least one 'mountd' process proc mountd # No more than 4 'ntalkd' processes - 0 is OK proc ntalkd 4 # At least one 'sendmail' process, but no more th an 10 proc sendmail 10 1
- por:
# At least one 'sshd' process proc sshd # No more than 4 'ntalkd' processes - 0 is OK #proc ntalkd 4 # At least one 'sendmail' process, but no more than 10 #proc sendmail 10 1
- Cambiar líneas:
# send SNMPv1 traps trapsink localhost public
- por:
# send SNMPv1 traps # trapsink localhost public
- Cambiar líneas:
# Remember to activate the 'createUser' lines above iquerySecName internalUser rouser internalUser # generate traps on UCD error conditions defaultMonitors yes # generate traps on linkUp/Down linkUpDownNotifications yes
- por:
# Remember to activate the 'createUser' lines above iquerySecName internalUser #rouser internalUser # generate traps on UCD error conditions #defaultMonitors yes # generate traps on linkUp/Down #linkUpDownNotifications yes
- Cambiar líneas:
extend test1 /bin/echo Hello, world! extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35
- por:
# extend test1 /bin/echo Hello, world! # extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35
- Cambiar líneas:
# Run as an AgentX master agent master agentx
- por:
# Run as an AgentX master agent # master agentx
- En snmp/snmptrapd:
- Agregar línea:
(ip de monitoreo del DomU) v snmpTrapdAddr udp:xx.xx.xx.xx
- Reiniciar snmpd
- Verificar que sólo están abiertos puertos ssh en la interfaz de administración y snmp en la interfaz de monitoreo:
netstat -an
- Limpiar cache de paquetes
aptitude clean
- Agregar las siguientes lineas al archivo /etc/profile, para eliminar los límites a los historiales de comandos de todos los usuarios del sistema. Como alternativa se pueden agregar por separado a los .bashrc de root y otros usuarios.
unset HISTSIZE unset HISTFILESIZE export HISTSIZE export HISTFILESIZE export HISTTIMEFORMAT="%s "
- Configurar logrotate para los archivos de historial: (Por investigar y redactar...)
- Rearrancar máquina virtual:
halt xm create -c xmdomain.cfg
- Agregar máquina virtual a la lista de arranque automático del dom0:
cd /etc/xen/auto ln -s ../xmdomain.cfg
Creación de domU con SO Debian squeeze x86_64
Antes de crear la máquina virtual, se necesita tener especificados:
- Requerimientos de espacio en disco.
- Esquema de particiones.
- Requerimientos de memoria RAM y número de vcpus.
- Esquema de conexiones de red.
Procedimiento
- Crear LV
lvcreate --name nombre --size tamaño volumegroupname
- Crear tabla de particiones en LV:
parted /dev/vgname/lvname mklabel msdos
- Crear 2 particiones en LV (Para /boot y para el PV)
parted /dev/vgname/lvname unit s mkpart primary ext2 63s 524287s parted /dev/vgname/lvname unit s mkpart primary ext2 524288s 25165823s
- Preparar la configuración de la máquina virtual (xmdomain.cfg), colocando el arranque mediante un kernel e initrd externos. Es importante que el initrd tenga incorporado soporte para uso de LVM en LV del /. Usar como plantilla el archivo xm-debian.cfg publicado en la ruta:
/debian/dists/squeeze/main/installer-amd64/current/images/netboot/xen/xm-debian.cfg
- En el archivo .cfg preparado para la máquina virtual se deberá cambiar las líneas:
kernel, _ = urlopener.retrieve(kernelurl) print "Fetching %s" % ramdiskurl ramdisk, _ = urlopener.retrieve(ramdiskurl)
a :kernel, _ = urlopener.retrieve(kernelurl,'/tmp/vmlinuz') print "Fetching %s" % ramdiskurl ramdisk, _ = urlopener.retrieve(ramdiskurl,'/tmp/initrd.gz')
Ello para subsanar un problema de sincronización entre los scripts que inicializan la máquina virtual. - Cuando el Dom0 usa Debian Lenny, en el archivo .cfg preparado cambiar las líneas:
if not xm_vars.env.get('install'): bootloader="pygrub"
a:if not xm_vars.env.get('install'): bootloader="/usr/lib/xen-3.2-1/bin/pygrub"
- Eliminar el mapeado de las particiones del LV del domU:
kpartx -d /dev/vgname/lvname
- Arrancar MV con el instalador de Debian activado, conectándo el terminal de trabajo a su consola:
xm create -c xm-debian.cfg install=true install-mirror=ftp://ftp.XX.debian.org/debian
- Una vez terminada la instalación base, si el dom0 usa debian Lenny:
- Desde la partición /boot de la MV copiar a /tmp los archivos:
vmlinuz-2.6.32-5-amd64 initrd.img-2.6.32-5-amd64
- En el archivo .cfg de la MV cambiar las líneas:
if not xm_vars.env.get('install'): bootloader="/usr/lib/xen-3.2-1/bin/pygrub"
a:if not xm_vars.env.get('install'): kernel = '/tmp/vmlinuz-2.6.32-5-amd64' ramdisk = '/tmp/initrd.img-2.6.32-5-amd64' extra = 'console=hvc0' root = '/dev/mapper/<dispositivo del SF raiz en el domU>' #bootloader="/usr/lib/xen-3.2-1/bin/pygrub"
- Desde la partición /boot de la MV copiar a /tmp los archivos:
- Arrancar máquina virtual
xm create -c xmdomain.cfg
- Realizar configuración básica del domU, en los archivos:
/mnt/debinst/etc/inittab /mnt/debinst/etc/network/interfaces /mnt/debinst/etc/hostname /mnt/debinst/etc/hosts (ojo direccion ip del host, usar 127.0.1.1 para la línea que indica nombre de host) /mnt/debinst/etc/resolv.conf
- Configurar archivo /etc/apt/sources.list.
- Preparar aptitude:
aptitude update
- En el instalador de Debian/squeeze para Xen no parece manejar correctamente los idiomas, localizaciones y codificaciones de caracteres. Para solventar ese problema se deben eliminar las siguientes líneas de /root/.profile y reconfigurar los locales según lo indicado posteriormente:
# Installed by Debian Installer: # no localization for root because C # cannot be properly displayed at the Linux console LANG=C LANGUAGE=C
- Reconfigurar locales
dpkg-reconfigure locales
- Si el dom0 está en debian Lenny, instalar grub-legacy:
aptitude install grub grub-install --no-floppy /dev/xvda update-grub
- Configurar menu.lst:
timeout 3 kopt=root=/dev/mapper/domuVgname-nombreRoot ro console=hvc0
- Actualizar grub:
update-grub
- Configurar menu.lst:
- Seleccionar sha512 como hash para almacenar las claves y deshabilitar el uso de claves nulas:
- En /etc/pam.d/common-password
- Cambiar:
password [success=1 default=ignore] pam_unix.so obscure sha512
Por:password [success=1 default=ignore] pam_unix.so obscure sha512 rounds=524288
- Cambiar password de root:
passwd
- Cambiar password usuario
passwd <usuario>
- Instalar ssh server:
aptitude install openssh-server
- Configurar sshd_config:
- Sólo recibir conexiones en la interface de administración:
ListenAddress X.X.X.X
- No permitir entrada a root:
PermitRootLogin no
- Sólo permitir entrada al usuario creado en la IP quese asigne a la estación de trabajo designada para administrar el domU:
AllowUsers username@Y.Y.Y.Y
- Sólo recibir conexiones en la interface de administración:
- Reiniciar el servicio ssh
/etc/init.d/ssh restart
- Eliminar cliente nfs y portmapper (para no dejar sus puertos abiertos):
aptitude purge nfs-common portmap
- Instalar y configurar agente snmp
aptitude install snmpd
- En default/snmp:
- Cambiar la opción "-Lsd" por "-LS5d" en la variable SNMPDOPTS
- En snmp/snmpd.conf
- Cambiar línea:
agentAddress udp:127.0.0.1:161
- por:
agentAddress udp:xx.xx.xx.xx:161 (ip de monitoreo del DomU)
- Cambiar líneas:
# system + hrSystem groups only view systemonly included .1.3.6.1.2.1.1 view systemonly included .1.3.6.1.2.1.25.1
- por:
# system + hrSystem + interfaces groups only view systemonly included .1.3.6.1.2.1.1 view systemonly included .1.3.6.1.2.1.25.1 view systemonly included .1.3.6.1.2.1.2.2.1 view systemonly included .1.3.6.1.2.1.31.1.1.1 view systemonly included .1.3.6.1.2.1.4.20.1.2 view systemonly included .1.3.6.1.4.1.2021
- Modificar línea:
rocommunity public default -V systemonly
- de la forma:
(red de monitorio del DomU)
v
rocommunity public xx.xx.xx.240/28 -V systemonly
- Modificar línea:
rouser authOnlyUser
- en la forma:
# rouser authOnlyUser
- Cambiar líneas:
# At least one 'mountd' process proc mountd # No more than 4 'ntalkd' processes - 0 is OK proc ntalkd 4 # At least one 'sendmail' process, but no more th an 10 proc sendmail 10 1
- por:
# At least one 'sshd' process proc sshd # No more than 4 'ntalkd' processes - 0 is OK #proc ntalkd 4 # At least one 'sendmail' process, but no more than 10 #proc sendmail 10 1
- Cambiar líneas:
# send SNMPv1 traps trapsink localhost public
- por:
# send SNMPv1 traps # trapsink localhost public
- Cambiar líneas:
# Remember to activate the 'createUser' lines above iquerySecName internalUser rouser internalUser # generate traps on UCD error conditions defaultMonitors yes # generate traps on linkUp/Down linkUpDownNotifications yes
- por:
# Remember to activate the 'createUser' lines above #iquerySecName internalUser #rouser internalUser # generate traps on UCD error conditions #defaultMonitors yes # generate traps on linkUp/Down #linkUpDownNotifications yes
- Cambiar líneas:
extend test1 /bin/echo Hello, world! extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35
- por:
# extend test1 /bin/echo Hello, world! # extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35
- Cambiar líneas:
# Run as an AgentX master agent master agentx
- por:
# Run as an AgentX master agent # master agentx
- En snmp/snmptrapd:
- Agregar línea:
(ip de monitoreo del DomU)
v
snmpTrapdAddr udp:xx.xx.xx.xx
- Reiniciar snmpd
- Verificar que sólo están abiertos puertos ssh en la interfaz de administración y snmp en la interfaz de monitoreo:
netstat -an
- Limpiar cache de paquetes
aptitude clean
- Agregar las siguientes lineas al archivo /etc/profile, para eliminar los límites a los historiales de comandos de todos los usuarios del sistema. Como alternativa se pueden agregar por separado a los .bashrc de root y otros usuarios.
unset HISTSIZE unset HISTFILESIZE export HISTSIZE export HISTFILESIZE export HISTTIMEFORMAT="%s "
- Configurar logrotate para los archivos de historial: (Por investigar y redactar...)
- Editar el archivo .cfg de la máquina virtual para eliminar el código que hace el llamado al instalador de debian y habilitar el kernel interno.
- Rearrancar máquina virtual:
halt xm create -c xmdomain.cfg
- Agregar máquina virtual a la lista de arranque automático del dom0:
cd /etc/xen/auto ln -s ../xmdomain.cfg
Creación de domU con SO Debian lenny x86_64
El debian-installer de lenny no da soporte para esta arquitectura bajo la plataforma Xen. El siguiente procedimiento permite reproducir manualmente la operación del debian-installer y además configurar los elementos básicos de administración y supervisión remota del domU. Antes de crear la máquina virtual, se necesita tener especificados:
- Requerimientos de espacio en disco.
- Esquema de particiones.
- Requerimientos de memoria RAM y número de vcpus.
- Esquema de conexiones de red.
Procedimiento
- Crear LV
lvcreate --name nombre --size tamaño volumegroupname
- Crear tabla de particiones en LV:
parted /dev/vgname/lvname mklabel msdos
- Crear 2 particiones en LV (Para /boot y para el PV)
parted /dev/vgname/lvname unit s mkpart primary ext2 63s 524287s parted /dev/vgname/lvname unit s mkpart primary ext2 524288s 25165823s
- Crear fs ext2 en LV-p1 (para /boot)
mkfs.ext2 /dev/mapper/vgname-lvnamep1
- Crear PV en LV-p2:
pvcreate /dev/mapper/vgname-lvnamep2
- Crear VG con el PV en LV-p2
vgcreate domuVgname /dev/mapper/vgname-lvnamep2
- Crear LVs en el VG del domU:
lvcreate --name nombre1 --size tamaño1 domuVgname
(...)
lvcreate --name nombreN --size tamañoN domuVgname
- Crear FS en LVs del domU:
mkfs.??? [option list] /dev/domuVgname/nombre1
(...)
mkfs.??? [option list] /dev/domuVgname/nombreN
- Preparar swap en LV del domU (cuando sea aplicable):
mkswap /dev/domuVgname/nombreSwap
- Crear /mnt/debinst en dom0 y montar allí el LV creado para el directorio / del domU:
mkdir /mnt/debinst
mount /dev/domuVgname/nombre1 /mnt/debinst #el LV para el directorio /
- Crear los directorios para el /boot del domU y demás particiones del mismo:
mkdir /mnt/debinst/boot
mkdir /mnt/debinst/var #por ejemplo
(...)
- Montar la partición para /boot y los LVs del domU en los directorios creados:
mount /dev/mapper/vgname-lvnamep1 /mnt/debinst/boot
mount /dev/domuVgname/nombreX /mnt/debinst/var #por ejemplo
(...)
- Ejecutar debootstrap para instalar el sistema base:
debootstrap --arch amd64 lenny /mnt/debinst http://ftp.br.debian.org/debian
- Realizar configuración básica del domU, en los archivos:
/mnt/debinst/etc/fstab
/mnt/debinst/etc/inittab (dejar un único proceso getty en hvc0)
/mnt/debinst/etc/network/interfaces
/mnt/debinst/etc/hostname
/mnt/debinst/etc/hosts
/mnt/debinst/etc/resolv.conf
- Copiar /lib/modules/domUXenkernelversion al domU: (cuando se necesite montar sistemas de archivo no integrados al kernel, como por ejemplo xfs, ext2)
cp -r /lib/modules/domUXenkernelversion /mnt/debinst/lib/modules/
- Desmontar LV-p1 y LVs del domU:
umount /mnt/debinst/boot
umount /mnt/debinst/var #por ejemplo
(...)
umount /mnt/debinst
- Preparar la configuración de la máquina virtual (xmdomain.cfg), colocando el arranque mediante un kernel e initrd externos. Es importante que el initrd tenga incorporado soporte para uso de LVM y LV para el sistema de archivos /.
- Desactivar vg del domU en el dom0:
vgchange -an domuVgname
- Eliminar el mapeado de las particiones del LV del domU:
kpartx -d /dev/vgname/lvname
- Arrancar MV, conectándo el terminal de trabajo a su consola:
xm create -c xmdomain.cfg
- Configurar archivo /etc/apt/sources.list.
- Preparar aptitude:
aptitude update
- Instalar manejador de LVM
aptitude install lvm2
- Eliminar /lib/modules/domUXenkernelversion (cuando por algún módulo haya sido copiado manualmente este directorio)
rm -rf /lib/modules/domUXenkernelversion
- Instalar kernel (con soporte Xen):
aptitude install linux-image-XXXX-XXX-XXX
- Rearrancar máquina virtual
halt
xm create -c xmdomain.cfg
- Configurar timezone:
vim /etc/default/rcS (UTC=yes)
dpkg-reconfigure tzdata
- Instalar locales y console-data
aptitude install locales console-data
dpkg-reconfigure locales
- Instalar sistema standard:
tasksel --new-install
- Instalar utilidades para administrar sistemas de archivos distintos a ext2/ext3, si fuera necesario (por ejemplo para xfs):
aptitude install xfsprogs
- Instalar grub:
aptitude install grub
grub-install --no-floppy /dev/xvda
update-grub
- - Configurar menu.lst:
timeout 3
kopt=root=/dev/mapper/domuVgname-nombreRoot ro console=hvc0
update-grub
- Seleccionar sha512 como hash para almacenar las claves y deshabilitar el uso de claves nulas:
- En /etc/pam.d/common-password
- Cambiar:
password required pam_unix.so nullok obscure md5
- Por:
password required pam_unix.so obscure sha512 rounds=524288
- Colocar password de root:
passwd
- Crear usuario
adduser
- Instalar ssh server:
aptitude install openssh-server
- Configurar ssd_config:
- Sólo recibir conexiones en la interface de administración:
ListenAddress X.X.X.X
- No permitir entrada a root:
PermitRootLogin no
- Sólo permitir entrada al usuario creado en la IP quese asigne a la estación de trabajo designada para administrar el domU:
AllowUsers username@Y.Y.Y.Y
/etc/init.d/ssh restart
- Sólo recibir conexiones en la interface de administración:
- Eliminar cliente nfs y portmapper (para no dejar sus puertos abiertos):
aptitude purge nfs-common portmap
- Instalar y configurar agente snmp
aptitude install snmpd
- En default/snmp:
- Eliminar 127.0.0.1 de la variable SNMPDOPTS
- Cambiar la opción "-Lsd" por "-LS5d" en la variable SNMPDOPTS
- En snmp/snmpd.conf
- Agregar líneas:
rocommunity public
agentaddress udp:xx.xx.xx.xx (ip de monitoreo del DomU)
- Modificar línea:
com2sec paranoid default public
- de la forma:
(red de monitorio del DomU)
v
com2sec paranoid xx.xx.xx.240/28 public
- En snmp/snmptrapd:
- Agregar línea:
(ip de monitoreo del DomU)
v
snmpTrapdAddr udp:xx.xx.xx.xx
- Reiniciar snmpd
- En default/snmp:
- Verificar que sólo están abiertos puertos ssh en la interfaz de administración y snmp en la interfaz de monitoreo:
netstat -an
- Limpiar cache de paquetes
aptitude clean
- Rearrancar máquina virtual, ahora con el kernel interno (modificar xmdomain.cfg):
halt
xm create -c xmdomain.cfg
- Agregar máquina virtual a la lista de arranque automático del dom0:
cd /etc/xen/auto
ln -s ../xmdomain.cfg