Tag Archives: libvirt

Cambiar la imagen ISO del CDROM en una máquina virtual con virsh

Introducción

Manejando máquinas virtuales GNU/Linux basadas en KVM utilizo Libvirt como capa adicional para su gestión.  Esto provee herramientas prácticas para su administración local y remota como virsh (consola) y virt-manager (GUI).

Instalando la versión 5.6 de Scientific Linux me encontré con una situación que venía evitando resolver desde hacía unos días: para finalizar la instalación era necesario cambiar el "cdrom" de la máquina virtual del ISO del primer DVD de la distribución al segundo.

Para hacer esto remotamente utilicé virsh y el comando descrito a continuación.

Conexión remota a la consola de administración

El primer paso por supuesto, si es que no se ha hecho aún, es realizar la conexión remota a través de SSH a la consola de administración de las máquinas virutales.  Esto se logra mediante la ejecución del siguiente comando.

$ virsh –connect qemu+ssh://servidor/system

Modificar el "cdrom" de la máquina virtual

Una vez en la consola de administración, para hacer esto sólo es necesario ejecutar la siguiente instrucción.

virsh # attach-disk –type cdrom –mode readonly scientificlinux_56_x86-64_generic /b1/ISO/SL.56.061711.DVD.x86_64.disc2.iso hdc

En este caso se está "montando" la imagen ISO contenida en el archivo /b1/ISO/SL.56.061711.DVD.x86_64.disc2.iso como primer CDROM de la máquina virtual scientificlinux_56_x86-64_generic.

Configurar una interfaz de red en puente (bridge) en ArchLinux

Introducción

En este procedimiento se establecen los pasos necesarios para configurar una interfaz de red (br0) en puente con la interfaz de la red alámbrica (eth0) para permitir el acceso directo a la red LAN de las máquinas virtualizadas con KVM instalado previamente.

Para este montaje se utilizó ArchLinux en su versión mas reciente, la 2011.08.19, en la cual se observaron algunos cambios en los archivos de configuración, especialmente en los relacionados con la configuración de redes lo cual impacta directamente con lo descrito a continuación.  Para versiones anteriores del sistema operativo se ofrece una alternativa de configuración que no ha sido probada en producción.

Instalar los paquetes necesarios

Para la configuración de múltiples interfaces de red.

$ sudo pacman -S netcfg

Para la creación del puente entre las interfaces de red.

$ sudo pacman -S bridge-utils

Desactivar la configuración original de red

En esta versión de ArchLinux la configuración de una interfaz de red se realiza de manera diferente a múltiples interfaces de red.  En este caso partimos de una única interfaz de red (eth0) a tener dos (eth0 + br0), por este motivo es necesario desactivar la configuración actual para implementar la otra aproximación.

Comentar las líneas relacionadas con la configuración de la interfaz de red actual.

$ sudo vi /etc/rc.conf

## interface=eth0
## address=192.168.1.250
## netmask=255.255.255.0
## broadcast=192.168.1.255
## gateway=192.168.1.254

Remover la invocación de network de la variable DAEMONS.

Configurar las múltiples interfaces de red

En este paso se deberá configurar la interfaz de red removida en el paso anterior junto con la interfaz correspondiente al puente a crearse con ella.

$ sudo vi /etc/rc.conf

  1. Agregar la invocación de net-profiles en la variable DAEMONS.
  2. Agregar la referencia de las nuevas interfaces en la variable NETWORKSde la siguiente manera.

    NETWORKS=(eth0 br0)

Crear la especificación de la configuración de las nuevas interfaces bajo /etc/network.d.  Para mayor información al respecto consultar los ejemplos ubicados en /etc/network.d/examples.

$ sudo vi /etc/network.d/eth0

INTERFACE="eth0"
CONNECTION="ethernet"
DESCRIPTION="Wired network interface"
IP='static'

$ sudo vi /etc/network.d/br0

INTERFACE="br0"
CONNECTION="bridge"
DESCRIPTION="KVM Bridge connection"
BRIDGE_INTERFACES="eth0"
POST_UP='brctl setfd br0 0'
IP='static'
ADDR='192.168.1.250'
GATEWAY='192.168.1.254'
DNS=('8.8.8.8', '8.8.4.4')

Versiones anteriores

 Otra aproximación a la implementación de esta solución que aparentemente era útil en versiones anteriores del sistema operativo consiste en realizar los ajustes necesarios al archivo /etc/conf.d/bridges de la siguiente manera.

$ sudo vi /etc/conf.d/bridges

bridge_br0="eth0"
config_br0="brctl setfd br0 0"
BRIDGE_INTERFACES=(br0)

Finalmente se actualiza el archivo /etc/rc.conf para incluir a br0 como una nueva interfaz de red.

$ sudo vi /etc/rc.conf

eth0="eth0 up"
br0="br0 192.168.1.250 netmask 255.255.255.0 up"
INTERFACES=(lo eth0 br0)

Enlaces

Instalando libvirt en ArchLinux

Introducción

Libvirt es un API de código abierto y una herramienta de administración para diferentes sistemas de virtualización entre los que se encuentran Xen, OpenVZ, Virtualbox, VMWare, Microsoft Hyper-V y por supuesto KVM/Qemu instalado en el servidor de desarrollo previamente.

Este software es ideal para la gestión de las máquinas virtuales y su administración remota a través de conexiones seguras con SSH.  Además incluye una librería en C para el desarrollo de aplicaciones e incluye además interfaces para diversos lenguajes como Python, Perl, Ruby, Java y PHP.

Instalación del software

Instalar los paquetes del repositorio oficial.

# pacman -S libvirt urlgrabber dnsmasq bridge-utils

Inicio automático del demonio

Configurar el demonio de libvirtd para que se inicie automáticamente junto con el sistema operativo.

# vi /etc/rc.conf

DAEMONS = (… libvirtd …)

Debe tenerse en cuenta que el demonio libvirtd requiere ser invocado después de dbus y avahi-daemon.

Autorizar la administración a usuarios sin privilegios

Si se desea que usuarios sin privilegios (diferentes de root) administren las máquinas virtuales, estos deberán ser explícitamente autorizados de la siguiente manera.

# vi /etc/polkit-1/localauthority/50-local.d/org.libvirt.unix.manage.pkla

[Allow a user to manage virtual machines]
Identity=unix-user:jimezam
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes

Si en lugar de administración se desea conceder la autorización para monitorear las máquinas se deberá especificar la siguiente acción.

org.libvirt.unix.monitor

Permitir el acceso a través de SSH

Para permitir el acceso a las máquinas virtuales a través de herramientas como virsh o virt-viewer a través del protocolo SSH (qemu+ssh) es necesario contar con paquete netcat de OpenBSD instalado de la siguiente manera.

$ sudo pacman -S openbsd-netcat

Si se cuenta adicionalmente con el paquete netcat convencional instalado es posible que este se haya apoderado del enlace /usr/bin/nc y libvirt intente utilizarlo erróneamente generando el siguiente mensaje de error.

error: server closed connection: nc: invalid option — 'U'
Try `nc –help' for more information.
error: failed to connect to the hypervisor

En ese caso es necesario indicarle a libvirt cual es la versión de netcat que debe utilizar.  Esto se puede realizar desde los parámetros extra del URI en cada invocación de acceso de la siguiente manera.

$ virsh -d 0 –connect qemu+ssh://usuario@servidor/system?netcat=/usr/bin/nc.openbsd

O de manera permanente modificando en el servidor el enlace /usr/bin/nc de la siguiente manera.

$ sudo mv /usr/bin/nc /usr/bin/nc.orig

$ sudo ln -s /usr/bin/nc.openbsd /usr/bin/nc

Enlaces