jueves, 11 de diciembre de 2008

VirtualBox. Puertos USB en Ubuntu.

En este artículo vamos a ver cómo se activan los puertos USB para que puedan ser utilizados en las máquinas virtuales que hemos creado con VirtualBox. El sistema anfitrión es Linux Ubuntu 8.04.

VirtualBox tiene dos versiones: OSE (Open Source Edition) y PUEL (Personal Use and Evaluation License). Yo siempre he trabajado con las versiones OSE. La versión PUEL no es libre y, por lo tanto, no es gratuita, aunque existe una versión de evaluación para uso personal (PUEL). En la página oficial de VirtualBox indica cómo se descarga esta versión junto con la clave de utilización del producto.

Cuando se me ha planteado la necesidad de utilizar los puertos USB en mis máquinas virtuales, he encontrado información en internet sobre la forma de realizar la configuración, pero , ¡sorpresa: los puertos USB sólo se pueden utilizar con la versión PUEL!.

Como, en esto de la informática, además de tener tiempo, hay que ser algo intrépido, he decidido probar la información que he encontrado en internet en la versión OSE, para no tener que cambiar a la versión PUEL, y ha ocurrido algo que no suele ser muy habitual: ¡HA FUNCIONADO!. La prueba la he realizado con las versiones 2.0.6 (que es la última en el momento de escribir este artículo) y 1.6.0 y con máquinas virtuales con Linux Ubuntu 8.04 y Windows XP en ambas versiones y todo ha funcionado correctamente. Los dispositivos que he utilizado han sido una impresora, un disco duro externo y un pendrive.

He aquí las acciones a realizar para utilizar los puertos USB en VirtualBox OSE (se supone que en la versión PUEL también funcionaría, pero no le probado; mi intrepidez tiene un límite).

En primer lugar, tenemos que editar el archivo /etc/init.d/mountdevsubfs.sh y buscar el siguiente párrafo:

#
# Magic to make /proc/bus/usb work
#
# mkdir -p /dev/bus/usb/.usbfs
# domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
# ln -s .usbfs/devices /dev/bus/usb/devices
# mount --rbind /dev/bus/usb /proc/bus/usb

El archivo /etc/init.d/mountdevsubfs.sh es un script que monta dispositivos especiales en nuestro sistema de archivos. El sistema lo trata como un servicio (está en el directorio /etc/init.d).

Tenemos que modificar el bloque anterior del archivo /etc/init.d/mountdevsubfs.sh quitando los comentarios a las líneas ejecutables, quedando como sigue:

#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb

A continuación, tenemos que editar el archivo /etc/udev/rules.d/40-permissions.rules y buscar el siguiente párrafo:

# USB serial converters
SUBSYSTEM=="usb_device", GOTO="usb_serial_start"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GOTO="usb_serial_start"
GOTO="usb_serial_end"
LABEL="usb_serial_start"
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", \
MODE="0660", GROUP="dialout"
LABEL="usb_serial_end"

En el archivo /etc/udev/rules.d/40-permissions.rules se definen los usuarios y los grupos que pueden acceder a los dispositivos del sistema, debiendo añadir el grupo vboxusers (este grupo es el que utiliza VirtualBox) para que podamos acceder desde nuestras máquinas virtuales a los puertos USB. La orden se añade en el bloque anterior, en la línea ATTRS{idVendor}, quedando como sigue (he escrito en negrita la modificación añadida) :

# USB serial converters
SUBSYSTEM=="usb_device", GOTO="usb_serial_start"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GOTO="usb_serial_start"
GOTO="usb_serial_end"
LABEL="usb_serial_start"
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", \
,GROUP="vboxusers",MODE="0660", GROUP="dialout"
LABEL="usb_serial_end"

Seguidamente, hay que editar el archivo /etc/udev/rules.d/40-basic-permissions.rules y buscar el siguiente párrafo:

# USB devices (usbfs replacement)
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664"
SUBSYSTEM=="usb_device", MODE="0664"

En el archivo /etc/udev/rules.d/40-basic-permissions.rules se definen los tipos de accesos a los dispositivos del sistema que se permiten a los usuarios y grupos. Nosotros tenemos que modificar los permisos para que todos los usuarios puedan leer y escribir en los puertos USB, quedando el párrafo como sigue (he escrito en negrita la modificación realizada) :

# USB devices (usbfs replacement)
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
SUBSYSTEM=="usb_device", MODE="0666"

Para que esta configuración tenga efecto hay que reiniciar el equipo (probablemente habrá servicios que, reiniciándose, activen esta configuración, pero los desconozco).

Una vez reiniciado el sistema, hay que configurar cada una de las máquinas virtuales para que activen los puertos USB al iniciarse. Para ello, hay que acceder, desde VirtualBox, a la configuración de la máquina virtual y abrir la opción USB, accediendo a una nueva ventana en la que hay que habilitar los puertos USB y pulsar sobre el icono para Agregar Filtro desde Dispositivo. Ver la Figura 1.

Figura 1

Accedemos a la ventana de la Figura 2.

Figura 2

En esta ventana se muestran los dispositivos USB conectados en ese momento al sistema. Si no se muestra ningún dispositivo es porque no están conectados. Tenemos que seleccionar los dispositivos que queramos e irán insertándose en la ventana de la Figura 1, debiendo repetir esta operación para cada uno de los dispositivos. Una vez finalizada esta acción, se visualizará una ventana parecida a la de la Figura 3.

Figura 3

En este ejemplo se han agregado una impresora, un disco duro externo y un pendrive. Esto quiere decir que los dispositivos, desde este momento, se pueden utilizar en esta máquina virtual. Cada vez que se conecte uno de estos dispositivos y la máquina virtual esté ejecutándose, el dispositivo será accesible desde la máquina virtual, pero no desde el equipo anfitrión. Si no queremos utilizar uno de estos dispositivos desde la máquina virtual, tenemos que desactivar su casilla correspondiente en la ventana de la Figura 3 y, posteriormente, ejecutar la máquina. De esta forma, el dispositivo será accesible sólo desde el equipo anfitrión.

martes, 2 de diciembre de 2008

VirtualBox. Configurar la red en Linux.

Cuando se instala una máquina virtual con VirtualBox, la tarjeta de red se configura en modo NAT, que no dispone de funciones avanzadas de red y, por lo tanto, las prestaciones de la interfaz de red son muy limitadas. Con este modo, VirtualBox utiliza su propio enrutador y DHCP, permitiendo salir a internet desde la máquina virtual, pero impidiendo, entre otras acciones, comunicarnos con el equipo anfitrión o, si tenemos dos máquinas virtuales en el mismo equipo anfitrión, comunicarse entre ellas. Para conocer las limitaciones que tenemos con esta configuración, se puede consultar la ayuda de VirtualBox: Virtual networking -> Networking Address Translation -> NAT limitations.

En este artículo se va a configurar la tarjeta de red de la máquina virtual para que no tengamos estas limitaciones y, por ejemplo, podamos conectarnos con el equipo anfitrión y comunicar dos o más máquinas virtuales creadas en el mismo equipo anfitrión.

La correcta configuración consiste en crear un bridge (puente) para unir las interfaces de red del equipo anfitrión y de la máquina o máquinas virtuales. Vamos a ello (recuerdo que el equipo anfitrión tiene instalado una distribución de Linux; en mi caso, Linux Ubuntu 8.04).

Todas las operaciones las vamos a realizar desde un terminal. Al ser tareas administrativas, vamos a ejecutar la orden sudo su y escribir nuestra contraseña para no tener que escribir sudo delante de cada orden.

La configuración inicial de la tarjeta de red del equipo anfitrión podemos consultarla en el archivo /etc/network/interfaces:

root@elnuevo:/home/coralio# cat /etc/network/interfaces

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet dhcp


Las líneas referentes a la interfaz eth0 pueden no estar incluidas en este archivo si estamos utilizando el modo itinerante.

Si ejecutamos la orden ifconfig, se visualizará la información sobre las tarjetas de red:

root@elnuevo:/home/coralio# ifconfig

eth0 Link encap:Ethernet direcciónHW 00:1d:72:07:df:f0

inet dirección:192.168.1.33 Difusión:192.168.1.255 Máscara:255.255.255.0

dirección inet6: fe80::21d:72ff:fe07:dff0/64 Alcance:Vínculo

ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1

RX packets:9 errors:0 dropped:0 overruns:0 frame:0

TX packets:40 errors:0 dropped:0 overruns:0 carrier:0

colisiones:0 txqueuelen:1000

RX bytes:1254 (1.2 KB) TX bytes:6028 (5.8 KB)

Interrupción:16


lo Link encap:Bucle local

inet dirección:127.0.0.1 Máscara:255.0.0.0

dirección inet6: ::1/128 Alcance:Anfitrión

ARRIBA LOOPBACK CORRIENDO MTU:16436 Métrica:1

RX packets:1252 errors:0 dropped:0 overruns:0 frame:0

TX packets:1252 errors:0 dropped:0 overruns:0 carrier:0

colisiones:0 txqueuelen:0

RX bytes:62600 (61.1 KB) TX bytes:62600 (61.1 KB)


Para crear y utilizar el bridge hay que descargar e instalar el paquete bridge-utils:

root@elnuevo:/home/coralio# apt-get install bridge-utils

Este software nos instala las utilidades necesarias para administrar el bridge. Si ejecutamos la orden brctl se muestran algunas de estas utilidades:

root@elnuevo:/home/coralio# brctl

La siguiente acción a realizar es crear el bridge:

root@elnuevo:/home/coralio# brctl addbr br0


A continuación, hay que crear la interfaz virtual que se utilizará desde la máquina virtual (esta acción se realiza con la orden VBoxAddIF que proporciona VirtualBox; se puede consultar la ayuda de VirtualBox para más información sobre estas órdenes):

root@elnuevo:/home/coralio# VBoxAddIF vbox0 coralio br0

VirtualBox host networking interface creation utility, version 1.6.0

(C) 2005-2007 Sun Microsystems, Inc.

All rights reserved.


Creating the permanent host networking interface "vbox0" for user coralio.


La orden VBoxAddIF crea la interfaz virtual vbox0 que utilizará la máquina virtual, asigna permisos al usuario coralio para utilizar la interfaz (esto significa que esta interfaz no podrá utilizarla otro usuario) y la enlaza con el bridge br0 creado previamente.

Si queremos utilizar otra máquina virtual en el mismo equipo anfitrión, hay que crear otra interfaz virtual para esta nueva máquina, ya que cada máquina virtual debe disponer de su propia interfaz virtual. En la siguiente orden se crea la interfaz virtual vbox1 para que sea utilizada por el usuario coralio y se añade al bridge br0 creado anteriormente:

root@elnuevo:/home/coralio# VBoxAddIF vbox1 coralio br0

VirtualBox host networking interface creation utility, version 1.6.0

(C) 2005-2007 Sun Microsystems, Inc.

All rights reserved.


Creating the permanent host networking interface "vbox1" for user coralio.


Podemos ver la configuración del bridge con las dos interfaces virtuales que se le han añadido ejecutando la siguiente orden:

root@elnuevo:/home/coralio# brctl show

bridge name bridge id STP enabled interfaces

br0 8000.00ff09719902 no vbox0

vbox1


La siguiente acción es modificar el archivo /etc/network/interfaces para que la configuración del bridge y de las tarjetas de red real y virtuales tenga efecto cuando se encienda el sistema o se reinicie el servicio networking. El contenido de este archivo sería el siguiente:

root@elnuevo:/home/coralio# gedit /etc/network/interfaces

auto lo

iface lo inet loopback


auto eth0

iface eth0 inet dhcp


auto br0

iface br0 inet dhcp

bridge_ports eth0 vbox0 vbox1


El bloque relativo al bridge br0 obtiene la dirección IP para br0 del servicio DHCP e indica que toda la información que entre o salga por las interfaces eth0, vbox0 y vbox1 se dirigirá al bridge.

Para que todo funcione hay que levantar el bridge y reiniciar el servicio networking:

root@elnuevo:/home/coralio# ifconfig br0 up


root@elnuevo:/home/coralio# /etc/init.d/networking restart


Con esta configuración todo debería funcionar correctamente, pero no es así. El problema es que, tanto la tarjeta de red real como las virtuales, funcionan de forma intermitente: unas veces sí y otras veces no. Si ejecutamos la orden ifconfig veremos la configuración que hemos realizado:

root@elnuevo:/home/coralio# ifconfig

br0 Link encap:Ethernet direcciónHW 00:ff:09:71:99:02

inet dirección:192.168.1.33 Difusión:192.168.1.255 Máscara:255.255.255.0

dirección inet6: fe80::2ff:9ff:fe71:9902/64 Alcance:Vínculo

ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:25 errors:0 dropped:0 overruns:0 carrier:0

colisiones:0 txqueuelen:0

RX bytes:0 (0.0 B) TX bytes:5534 (5.4 KB)


eth0 Link encap:Ethernet direcciónHW 00:1d:72:07:df:f0

inet dirección:192.168.1.33 Difusión:192.168.1.255 Máscara:255.255.255.0

dirección inet6: fe80::21d:72ff:fe07:dff0/64 Alcance:Vínculo

ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1

RX packets:15 errors:0 dropped:0 overruns:0 frame:0

TX packets:43 errors:0 dropped:0 overruns:0 carrier:0

colisiones:0 txqueuelen:1000

RX bytes:1826 (1.7 KB) TX bytes:6379 (6.2 KB)

Interrupción:16

lo Link encap:Bucle local

inet dirección:127.0.0.1 Máscara:255.0.0.0

dirección inet6: ::1/128 Alcance:Anfitrión

ARRIBA LOOPBACK CORRIENDO MTU:16436 Métrica:1

RX packets:1270 errors:0 dropped:0 overruns:0 frame:0

TX packets:1270 errors:0 dropped:0 overruns:0 carrier:0

colisiones:0 txqueuelen:0

RX bytes:63500 (62.0 KB) TX bytes:63500 (62.0 KB)


vbox0 Link encap:Ethernet direcciónHW 00:ff:09:71:99:02

dirección inet6: fe80::2ff:9ff:fe71:9902/64 Alcance:Vínculo

ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:25 overruns:0 carrier:0

colisiones:0 txqueuelen:500

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)


vbox1 Link encap:Ethernet direcciónHW 00:ff:ca:ec:c2:8c

dirección inet6: fe80::2ff:caff:feec:c28c/64 Alcance:Vínculo

ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:25 overruns:0 carrier:0

colisiones:0 txqueuelen:500

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)


Después de probar varias configuraciones, he llegado a la conclusión de que el problema surge porque la tarjeta de red real (eth0) y el bridge (br0) comparten la misma dirección IP (podemos verlas en la salida anterior de la orden ifconfig).

La solución que he encontrado consiste en levantar la interfaz eth0 sin asignarle ninguna dirección IP y que sólo el bridge br0 obtenga la dirección IP. El nuevo contenido del archivo /etc/network/interfaces sería el siguiente:

root@elnuevo:/home/coralio# gedit /etc/network/interfaces

auto lo

iface lo inet loopback


auto eth0

iface eth0 inet manual


auto br0

iface br0 inet dhcp

bridge_ports eth0 vbox0 vbox1


El único cambio que he realizado en este archivo es cambiar la línea iface eth0 inet dhcp por la línea iface eth0 inet manual, consiguiendo así que la interfaz eth0 se levante pero no se le asigne ninguna dirección IP. Esta configuración la he estado probando con dos máquinas virtuales (con arranque dual en Windows y Linux las dos) más el equipo anfitrión y ha funcionado de forma estable durante bastantes días.

Para que esta configuración tenga efecto, hay que reiniciar el servicio networking:

root@elnuevo:/home/coralio# /etc/init.d/networking restart


Si ejecutamos la orden ifconfig veremos que todas las interfaces están levantadas pero la interfaz eth0 no tiene dirección IP:

root@elnuevo:/home/coralio# ifconfig

br0 Link encap:Ethernet direcciónHW 00:1d:72:07:df:f0

inet dirección:192.168.1.33 Difusión:192.168.1.255 Máscara:255.255.255.0

dirección inet6: fe80::21d:72ff:fe07:dff0/64 Alcance:Vínculo

ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1

RX packets:8 errors:0 dropped:0 overruns:0 frame:0

TX packets:27 errors:0 dropped:0 overruns:0 carrier:0

colisiones:0 txqueuelen:0

RX bytes:1042 (1.0 KB) TX bytes:4565 (4.4 KB)


eth0 Link encap:Ethernet direcciónHW 00:1d:72:07:df:f0

dirección inet6: fe80::21d:72ff:fe07:dff0/64 Alcance:Vínculo

ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1

RX packets:8 errors:0 dropped:0 overruns:0 frame:0

TX packets:27 errors:0 dropped:0 overruns:0 carrier:0

colisiones:0 txqueuelen:1000

RX bytes:1186 (1.1 KB) TX bytes:4697 (4.5 KB)

Interrupción:16


lo Link encap:Bucle local

inet dirección:127.0.0.1 Máscara:255.0.0.0

dirección inet6: ::1/128 Alcance:Anfitrión

ARRIBA LOOPBACK CORRIENDO MTU:16436 Métrica:1

RX packets:1288 errors:0 dropped:0 overruns:0 frame:0

TX packets:1288 errors:0 dropped:0 overruns:0 carrier:0

colisiones:0 txqueuelen:0

RX bytes:64400 (62.8 KB) TX bytes:64400 (62.8 KB)


vbox0 Link encap:Ethernet direcciónHW 00:ff:09:71:99:02

dirección inet6: fe80::2ff:9ff:fe71:9902/64 Alcance:Vínculo

ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:55 overruns:0 carrier:0

colisiones:0 txqueuelen:500

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)


vbox1 Link encap:Ethernet direcciónHW 00:ff:ca:ec:c2:8c

dirección inet6: fe80::2ff:caff:feec:c28c/64 Alcance:Vínculo

ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:33 overruns:0 carrier:0

colisiones:0 txqueuelen:500

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)


Si vemos la configuración del bridge, obtendremos la siguiente salida:

root@elnuevo:/home/coralio# brctl show

bridge name bridge id STP enabled interfaces

br0 8000.001d7207dff0 no eth0

vbox0

vbox1


Esta salida indica que las interfaces eth0, vbox0 y vbox1 están utilizando el puente br0.

Seguidamente, hay que asignar permisos a los usuarios sobre el directorio /dev/net/tun que utiliza el sistema para gestionar las interfaces virtuales.

root@elnuevo:/home/coralio# chmod 0666 /dev/net/tun


Para finalizar, hay que indicar en la configuración de la red de la máquina virtual (desde VirtualBox) que se va a utilizar la configuración de la interfaz anfitrión y la interfaz virtual que se ha creado. Esta acción se muestra en la ventana de la Figura 1.

Figura 1

En esta ventana se ha seleccionado la opción Interface Anfirtión en el apartado Conectar a y se ha incluido vbox0 en el apartado Nombre de la Interface. Para la segunda máquina virtual habría que incluir vbox1 en el apartado Nombre de la Interface y mantener el resto de parámetros de la Figura 1.

Si sólo se va a utlizar una máquina virtual en el equipo anfitrión, habría que omitir toda la configuración realizada para la interfaz virtual vbox1.

Conviene recordar que el usuario que va a ejecutar las máquinas virtuales debe ser miembro del grupo vboxusers.

Un último apunte. Si vamos a utilizar las máquinas virtuales con otros usuarios, hay que crear las interfaces virtuales para estos usuarios. Hay que tener en cuenta que el permiso de utilización de la interfaz virtual se asigna cuando es creada, utilizando la orden VBoxAddIF vbox0 coralio br0. Por ejemplo, si el usuario pepe utilizara una máquina virtual, no podría usar las interfaces virtuales creadas para otro usuario y tendría que utilizar la suya propia. Para ello, habría que ejecutar la orden VBoxAddIF vbox2 pepe br0. Además, en la configuración de red de su máquina virtual (Figura 1), habría que incluir vbox2 en el apartado Nombre de la Interface. No olvidar modificar el archivo /etc/network/interfaces y añadir la interfaz vbox2 en el bloque de la interfaz bridge br0, quedando como sigue: bridge_ports eth0 vbox0 vbox1 vbox2.

Como no podía se de otra forma, Sun Microsystems, a partir de la versión 2.1.2 de VirtualBox, ha simplificado esta configuración de la red. En este artículo he publicado el nuevo método.

jueves, 27 de noviembre de 2008

VirtualBox. Clonar máquinas virtuales

Si queremos hacer una copia de una máquina virtual ya creada y con el/los sistema/s operativo/s ya instalado/s, hay que utilizar el comando que proporciona VirtualBox para clonar discos duros. En realidad, lo que se clona es el disco duro y no la máquina completa. El nuevo disco duro se podrá agregar a una nueva máquina al ser creada o a una máquina ya existente.

Cuando se crea una máquina virtual, VirtualBox asigna un identificador al disco duro agregado a la máquina. Si este disco duro se copia, el nuevo disco duro mantiene el mismo identificador que el original, por lo que, al intentar agregarlo a otra máquina desde VirtualBox, se genera un error porque el identificador de disco ya existe. Este es el motivo por el que hay que clonar, y no copiar, el disco duro con la utilidad que proporciona VirtualBox.

Al clonar un disco duro, VirtualBox asigna al disco clonado un nuevo identificador y una nueva dirección MAC.

Cuando se instala VirtualBox se crea un directorio oculto, llamado .VirtualBox, en el directorio home del usuario, que contiene las carpetas Machines, donde se crea una carpeta para cada máquina existente con sus ficheros logs y sus características, y VDI, que contiene los discos duros creados desde VirtualBox. A no ser que se indique lo contrario, este directorio oculto es el que emplea VirtualBox para realizar todas sus operaciones.

Para clonar un disco duro se utiliza la orden VBoxManage clonevdi, que recibe como argumentos el nombre del disco duro a clonar y el nombre del nuevo disco duro. Si ejecutamos la orden VBoxManage desde un terminal, se mostrarán todas sus opciones. En la ayuda de VirtualBox podemos consultar las acciones que se pueden realizar con VBoxManage.

A modo de ejemplo, vamos a clonar un disco duro, llamado Proyecto.vdi, en un nuevo disco duro, llamado Proyecto1.vdi.

La siguiente orden visualiza el disco duro original y su ubicación:

coralio@elnuevo:~$ ls .VirtualBox/VDI
Proyecto.vdi

Para clonar este disco duro se utiliza la siguiente orden:

coralio@elnuevo:~$ VBoxManage clonevdi Proyecto.vdi Proyecto1.vdi
VirtualBox Command Line Management Interface Version 1.6.0
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.

0%...10%...20%...30%...40%...50%...60%.....70%...80%...90%...100%

La siguiente orden muestra el nuevo disco duro y su ubicación:

coralio@elnuevo:~$ ls .VirtualBox/VDI
Proyecto1.vdi Proyecto.vdi

En este ejemplo vemos que todas las acciones se han realizado en el directorio que VirtualBox utiliza de forma predeterminada. Si queremos utilizar otro directorio, hay que indicar la ruta completa en el nombre del disco duro original y en el nombre del disco duro clonado.

A partir de este momento, el disco duro clonado se puede agregar a una nueva máquina sin generarse ningún error y podremos utilizar todas nuestras máquinas virtuales simulando una red, junto con el equipo anfitrión. Ver el artículo, en este mismo blog, para configurar la red de VirtualBox en Linux.

martes, 25 de noviembre de 2008

VirtualBox. Mensaje de error: spawning session.

Cuando vamos a iniciar una máquina virtual desde VirtualBox, se puede generar el mensaje de error spawning session, quedando bloqueada la máquina virtual, sin posibilidad de ejecutarse.

Este problema es debido a que el módulo del kernel de VirtualBox no está compilado bajo el kernel del sistema operativo anfitrión. El errror puede surgir cuando instalamos VirtualBox por primera vez o cuando actualizamos el kernel del equipo anfitrión.

Para solucionar el problema hay que ejecutar, desde un terminal, la siguiente orden:

sudo /etc/init.d/vboxdrv setup

Este comando recompila el módulo de VirtualBox en el kernel del sistema anfitrión.

Las máquinas virtuales que ya estaban creadas se pueden seguir utilizando.

lunes, 27 de octubre de 2008

Instalar y configurar ROSEGARDEN

En este artículo se va a instalar el editor de partituras rosegarden, el servidor jack (Jack Audio Connection Kit), para que rosegarden reproduzca sonido, que consiste en un servidor de audio que permite dirigir los datos de las aplicaciones de sonido a las entradas y salidas hardware del sistema, y la aplicación qsynth, que se utiliza para que las tarjetas ALSA (Advanced Linux Sound Architecture) tomen como entrada los datos de un dispositivo MIDI (rosegarden utiliza estos datos aunque no tenga conectados instrumentos MIDI) y, mediante las fuentes .sf2 (que son fuentes de sonido de alta calidad), los reproduzca en el dispositivo de salida de audio. Además, hay que instalar un conversor de archivos digitales para que rosegarden sea capaz de reproducir cualquier formato digital. Todos estos paquetes son necesarios para un correcto funcionamiento de rosegarden.

Para instalar todas estas aplicaciones, hay que proceder de la siguiente forma:

  • Instalar rosegarden desde Synaptic.

  • Instalar qjackctl (es el nombre del servidor jack) desde Synaptic.

  • Instalar qsynth desde Synaptic.

  • Instalar las fuentes de sonido .sf2 desde la dirección http://www.personalcopy.com/linuxfiles.htm. Desde esta página podemos descargar estas fuentes. Yo he descargado las llamadas Unison.sf2 (ver el enlace en la parte inferior izquierda de la ventana). Al descargarlas las he almacenado en /opt y, posteriormente, las he descomprimido en este mismo directorio, creándose el archivo Unison.sf2.

  • Instalar, desde Synaptic, el paquete awesfx, que es una utilidad que nos proporciona distintos programas para cargar las fuentes de sonido desde las aplicaciones, como, por ejemplo, rosegarden. El programa que vamos a utilizar para que la tarjeta ALSA cargue las fuentes de sonido desde rosegarden se llama asfxload (esta configuración se describe más adelante).

  • Instalar, desde Synaptic, la utilidad sox, que es un conversor de archivos en formato digital a prácticamente cualquier otro formato. Esta herramienta se utilizará desde rosegarden para que sea capaz de reproducir cualquier archivo en formato digital.

Una vez realizadas las instalaciones, accederemos al menú Aplicaciones->Sonido y vídeo y ejecutaremos las opciones JACK Control, para lanzar el servidor jack, Qsynth, para lanzar la aplicación qsynth, y Rosegarden (se generan avisos que tenemos que ignorar), para lanzar el editor de partituras. La aplicación Rosegarden es mucho más que un editor de partituras, aunque yo lo utilizo, casi exclusivamente, para escribir música y escucharla sin utilizar instrumentos MIDI.

A continuación, hay que configurar todo para que funcione correctamente. He aquí los pasos a seguir:

  1. Configurar rosegarden para que la tarjeta ALSA utilice las fuentes de sonido descargadas anteriormente. Para ello, una vez abierto rosegarden, hay que ejecutar la opción Settings->Configure Rosegarden y, en la ventana a la que accedemos, seleccionar, en el panel izquierdo, el icono MIDI. Seguidamente, hay que configurar la ventana según se muestra en la Figura 1.

Figura 1

En esta Figura vemos que hemos indicado que se utilice el programa asfxload para que la tarjeta ALSA cargue las fuentes de sonido Unison.sf2, ubicadas en el directorio /opt, que es donde las hemos descomprimido, anteriormente, después de descargarlas de internet.

Cerrar rosegarden.

  1. Lanzar el servidor jack e iniciarlo pulsando el botón Start. Observar que, después de iniciarlo, se muestran los números 0(0) debajo del texto Started. Estos valores van creciendo contínuamente, por lo que es necesario configurar el servidor para que no se quede bloqueado. Estos números se denominan xruns y son pérdidas de audio. Para estabilizarlos a 0(0) ver el punto 7.

Figura 2
  1. Lanzar la aplicación qsynth.

Figura 3

  1. Indicar en la aplicación qsynth el cliente MIDI que se va a utilizar para la tarjeta ALSA. Para ello, hay que pulsar el botón Setup en la Figura 3 y seleccionar qsynth en la lista ALSA Sequencer Client ID (ver la Figura 4). Este nombre es el que hay que elegir desde rosegarden para que el sonido se reproduzca por la tarjeta de sonido (ver la Figura 8).

Figura 4
  1. Indicar en la aplicación qsynth que se va a utilizar el servidor jack como salida. Para ello, hay que pulsar el botón Setup en la Figura 3 y, en la nueva ventana, abrir la ficha Audio. La Figura 5 muestra la configuración que hay que realizar en esta ventana.

Figura 5

  1. Indicar en la aplicación qsynth las fuentes de sonido que se van a utilizar. Para ello, hay que abrir la ficha Soundfonts en la Figura 4 y configurar la ventana según se muestra en la Figura 6.

Figura 6

En esta ventana hemos seleccionado la carpeta y las fuentes de sonido descargadas anteriormente.

  1. Configurar el servidor jack para que los sonidos se reproduzcan correctamente. Para ello, hay que acceder a la ventana de jack (ver el punto 2) y pulsar el botón Setup. En la ventana a la que se accede hay que configurar los valores que se muestran en la Figura 7.

Figura 7

Con estos valores, los sonidos se reproducirán correctamente y se estabilizarán los xruns (ver el punto 2). Hay que tener en cuenta que estos valores variarán entre distinto hardware, por lo que hay que ir probando hasta conseguir estabilizar los xruns, consiguiendo el valor 0(0) de forma contínua.

Con estas configuraciones ya se puede ejecutar rosegarden. Conviene señalar que, antes de ejecutar rosegarden, hay que lanzar, en este orden, las aplicaciones jack y qsynth.

Antes de que los sonidos se reproduzcan por la tarjeta de sonido, hay que hacer una última configuración en rosegarden. Para ello, hay que ejecutar la opción Estudio->Gestionar dispositivos MIDI y configurar la ventana según se muestra en la Figura 8.


Figura 8

La configuración realizada en esta ventana consiste en seleccionar el valor 129:0 Synth input port (qsynth:0) (write) en la lista del apartado Conexión para el dispositivo General MIDI Device (ver el punto 4). Si rosegarden no reproduce ningún sonido, debemos asegurarnos que esta configuración se ha realizado para el archivo que se intenta reproducir.

Como vemos en este artículo, esta configuración es algo compleja, pero acaba funcionando. Yo “sólo” he tardado un par de días en hacerla funcionar y eso es lo que me ha animado a publicar mi experiencia. Durante mis investigaciones, he descubierto un sistema operativo Linux orientado exclusivamente a aficionados y/o profesionales de la edición de audio y vídeo. Se basa en KDE y consiste en que, además de todas las aplicaciones que se instalan en una versión “normal”, se instalan y se configuran, automáticamente, las mejores aplicaciones libres para realizar cualquier tarea con audio y vídeo. Ni qué decir tiene que la instalación y configuración descritas anteriormente ya están realizadas en este sistema, además de otras muchas que, obviamente, no me ha dado tiempo a probar.

El sistema operativo está traducido al castellano y existen numerosos manuales, ya incluidos en la instalación, del software que se puede utilizar. Algunos manuales también están en castellano. Las aplicaciones incluidas no tienen nada que envidiar a las de pago y algunas incluso las superan.

El inconveniente es que hay que instalar un nuevo sistema operativo en el ordenador, pero, según mi parecer, las ventajas que se ofrecen superan a este único inconveniente. También es posible iniciar el equipo con un CD Live y probar las aplicaciones. Este fué el primer paso que yo di y, finalmente, acabé instalándolo. Ahora tengo dos particiones de sistema Linux en mi ordenador y arranco cada una de ellas según la tarea que quiera realizar.

Este sistema se llama Musix GNU Linux y lo podéis descargar en la dirección http://musix.org.ar. Yo he utilizado el servidor de la Universidad de Creta, Grecia, porque es el único en el que he encontrado la última versión existente al publicar este artículo, que es la MusixGNU+Linux1.0R4_DVD_Stable.iso. Es conveniente que leáis tranquilamente la información publicada en la dirección antes indicada (por ejemplo, en la dirección http://musix.org.ar/wiki-static/index.php/Manual_de_Usuario.html encontraréis un manual en castellano del sistema operativo, incluida la instalación).

Si no queréis instalaros un nuevo sistema, siempre os queda la posibilidad de configurar rosegarden siguiendo este artículo.

¡¡Ánimo y a disfrutar del audio y del vídeo... con Linux!!

viernes, 19 de septiembre de 2008

Instalar códecs mp3

El extractor que se instala con Ubuntu es Sound Juicer. Por defecto, Ubuntu no instala los códecs mp3, por lo que, en principio, no es posible extraer música a este formato.

Si abrimos el extractor
Sound Juicer, accedemos a Editar->Preferencias y desplegamos la lista Formato de salida en el apartado Formato, comprobaremos que no existe la opción Calidad de CD, MP3 (audio MP3).

Para instalar los códecs mp3 hay que ejecutar la siguiente orden:

$sudo apt-get install gstreamer0.10-plugins-ugly-multiverse

Si, a continuación, volvemos a abrir el extractor Sound Juicer, accedemos a Editar->Preferencias y desplegamos la lista Formato de salida en el apartado Formato, comprobaremos que ahora sí disponemos de la opción Calidad de CD, MP3 (audio MP3), que deberemos seleccionar antes de realizar la extracción de la música.

Consultar este artículo y este otro artículo para instalar más códecs multimedia.

miércoles, 14 de mayo de 2008

Restaurar GDM después de instalar KDE4

Cuando se instala KDE4, estoy hablando de Ubuntu 8.04, la gestión del entorno la toma KDE, aunque se inicie sesión con GNOME. Esto significa que hay aplicaciones de GNOME que no se inician, insisto, aunque se haya iniciado una sesión con GNOME.

Para volver a restaurar el entorno de GNOME, hay que editar el archivo /etc/gdm/gdm.conf y cambiar la línea AutomaticLoginEnable=false por AutomaticLoginEnable=true. Después, hay que reiniciar el servidor X (Ctrl+Alt+Retroceso) o reiniciar el sistema. Conviene aclarar que, después de realizar esta acción, se puede seguir utilizando KDE.

martes, 13 de mayo de 2008

Instalar KDE4 en Ubuntu

Instalar kde4 en Ubuntu.

Antes de instalar KDE4 hay que realizar algunas operaciones para no tener problemas posteriormente. Por ejemplo, si queremos habilitar el usuario root (consultar este proceso en este mismo blog) hay que hacerlo antes de instalar KDE4.

Para instalar KDE4, hay que seguir los siguientes pasos:

  • Editar el archivo sources.list para actualizar los repositorios correctamente:
gedit /etc/apt/sources.list
  • Añadir en el archivo sources.list la siguiente línea:
deb http://ppa.launchpad.net/kubuntu-members-kde4/ubuntu gutsy man
  • Actualizar los respositorios:
apt-get update
  • Instalar:
apt-get install kde4-core

Para entrar en KDE, reiniciar la sesión. Yo lo he probado y no he tenido ningún problema.


martes, 6 de mayo de 2008

Instalar fuentes de Windows en Linux

Instalar fuentes de Windows en Linux.

Es muy sencillo. Basta con ejecutar la orden apt-get install ttf-mscorefonts-installer desde un terminal o descargar e instalar el paquete msttcorefonts desde un gestor de paquetes.

Crear usuarios con privilegios administrativos

Usuarios sudoers.UNIDAD DE TRABAJO Nº 5

Cuando se instala el sistema, sólo el usuario creado durante la instalación puede realizar tareas administrativas, siempre que se ejecute la orden sudo. Si no queremos ejecutar la orden sudo contínuamente, se puede ejecutar sudo su una sóla vez, en cada sesión, y, a partir de ese momento, realizar las tareas administrativas.

Si queremos utilizar el usuario root, hay que habilitarlo de la forma descrita en la entrada Linux Ubuntu. Habilitar la cuenta de usuario root en este mismo blog.

Por cuestiones de seguridad, no es conveniente iniciar una sesión con el usuario root para trabajar normalmente. Es más seguro iniciar una sesión con cualquier otro usuario y ejecutar la orden sudo o sudo su cuando se quieran realizar tareas administrativas.

Cuando se crean nuevos usuarios, estos no pueden realizar tareas administrativas con la orden sudo, debido a que sólo los usuarios incluidos en el grupo admin pueden ejecutar la orden sudo para administrar el sistema. Esta configuración se realiza en el archivo /etc/sudoers, cuyo contenido se muestra a continuación:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults
Defaults !lecture,tty_tickets,!fqdn
# User privilege specification
root ALL=(ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

La última línea de este archivo es la que indica que todos los usuarios miembros del grupo admin pueden realizar tareas administrativas con la orden sudo.

Si consultamos el archivo /etc/group, que es el archivo que contiene los grupos creados, y sus miembros, creados en el sistema, veremos una línea parecida a la siguiente:

admin:x:117:coralio,root

Esta línea indica que los usuarios coralio y root son los únicos usuarios miembros del grupo admin y, por lo tanto, sólo estos usuarios pueden realizar tareas administrativas con la orden sudo.

Para incluir un usuario en el grupo admin, se puede ejecutar la orden adduser usuario admin, donde usuario es la cuenta que se quiere agregar al grupo admin. Las siguientes líneas muestran la salida de esta orden:

root@servidor2dai:~# adduser usuario admin

Añadiendo usuario 'usuario' al grupo 'admin' ...

Terminado.

Si visualizamos el contenido del archivo /etc/group, veremos la siguiente línea:

admin:x:117:coralio,usuario

En esta línea observamos que el usuario con nombre usuario se ha añadido al grupo admin y, por lo tanto, podrá realizar tareas administrativas con la orden sudo.