jueves, octubre 15, 2009

Hacer funcionar USB en VirtualBox sobre Ubuntu 9.04

Buenos días hackers!

Hoy toca una guía rápida para lograr hacer funcionar tus dispositivos USB en una sistema operativo que está corriendo en una máquina virtual usando el software VirtualBox, a partir de ahora vbox, (ya saben, kubuntu virtualizado sobre ubuntu y cosas de esas... no estarás usando otro sistema, no?!?!).

¿Por alguna razón necesitas hacerlos funcionar y te has empapado montón de howto's por internet que dicen todos lo mismo y que la mayoría son para ubuntu 8.10 u 8.04?, deja de buscar, yo también sufrí lo mismo y conseguí, después de dejar de leer y con ese conocimiento adquirido y mirando un poco por dentro del sistema, hacer funcionar mi "penedrive de 512 centímetros" y sí, te voy a decir cómo.

Antes de empezar asumiré que no tienes instalado vbox, si lo tuvieras instalado desinstalalo con synaptic, apt-get, aptitude, dpkg... no me dentendré en esto, tal vez no sea necesario, pero yo describo mi situación y la que creo que funcionará.

Pongámonos en situación, lo primero que debes saber es que la versión OSE (Open Source Edition) no creo que sea software libre (open source sí, software libre no), lo segundo es que por desgracia esa versión que es la que aparece en los repositorios, no tiene soporte para USB. Muy listos los de Sun (Oracle?), te dejan el soporte en la versión que ni siquiera es open source. Bueno, debido a esto, te tienes que bajar una versión de VirtualBox que sí tenga soporte, en mi caso cuando redacté ésto, en la web de vbox ofrecían vbox 3.0.8. Otro detalle es que si estás corriendo nativamente un OS de 64 bits tienes que bajarte la versión "amd64", aunque tu procesador no sea un AMD64, hay una pequeña nota justo encima pero yo no la leí hasta que me baje la versión i386 y me escupió en la consola que me bajara la otra y que leyera las cabeceras jejeje.

Una vez tengas el paquete .deb, lo instalamos escribiendo en una consola:

sudo dpkg -i paquete.deb

Esto probablemente te diga que la instalación ha ido mal, es debido a las dependencias, vbox en sí mismo está instalado pero no lo podrás correr (no creo) porque te faltan ciertas bibliotecas, si has tenido otro vbox antes casi seguro que no te dice nada. Si te faltan las bibliotecas lee cuales son (dpkg te lo dice) e instalalas desde los respositorios:

sudo apt-get install paquetes

O con el synaptic o como más rabia te de (también voy a suponer que tienes los respositorios actualizados).

Ya tenemos vbox instalado, creamos una nueva máquina virtual, le metemos el sistema que queremos (no voy a describir cómo). Ahora, antes de arrancar ese sistema lo seleccionamos en la ventana principal de vbox y le damos al botón configuración de la parte superior. En la parte izquierda una de las opciones es USB, vamos allí y marcamos los checkbuttons de habilitar el controlador USB y el de habilitar USB 2.0. Aceptamos y hasta aquí es lo que en general solíamos encontrar en howto's para 9.04... para versiones anteriores de ubuntu había que ir al /etc/init.d/mountdevfs.sh, /etc/fstab y empezar a trastocar... bla bla bla. Lo que nos queda por un lado es añadir nuestro usuario al grupo vboxusers, yo lo hice con:

sudo vim /etc/group

Y buscando el grupo (probablemente el último) y añadiéndome al final:

vboxusers:x:124:nombre_usuario

AHORA VIENE EL TRUCO DE VERDAD, el que hace que todo funcione, resulta que aunque te añadas al grupo vboxusers, sólo el root tiene permisos para montar los USB, no lo he probado pero sería capaz de apostar a que si ejecutamos vbox con sudo o con gksu sí permitirá montarlos... pero eso es una chanada que no me gusta, vamos a cambiarlo. ¿Quién da acceso a los dispositivos? udev, entonces investiguemos... resulta que udev da esos permisos a vbox por lo descrito en el fichero /etc/udev/rules.d/10-vboxdrv.rules. Si lo abren, verán algo como:

KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600"
SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="vboxusers", MODE="0664"

Aquí está el problema, los subsistemas sí tienen permisos de lectura/escritura para el grupo vboxusers... pero y el driver?! el dueño es root y el grupo es root... y los permisos son 0600... incluso aunque tu usuario esté en el grupo root, no te iba a dejar detectar los dispositivos. Este es el motivo de que esté casi seguro de que si ejecutamos vbox con root, sí deje manipular los USB. Editémoslo y pongamos algo más coherente... como por ejemplo:

KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"

De forma que el grupo ya no sea root, sino vboxusers y los permisos de grupos tengan lectura y escritura, así siempre que añadamos un usuario al grupo, podrá montar USB. He visto algunas soluciones (para 7.10) que comentaban que "poniendo MODE=0666 se soluciona!" pues claro! le estas dando permisos de lectura y escritura a todo el mundo... en el ordenador de tu casa está bien porque sólo lo usas tu... pero en otros entornos eso no es seguro.

En fín, espero haberles quitado un problema de encima y haberles hecho entender por qué esta solución funciona (no basta con solucionar el problema).

Happy Hacking!