VirtualBox y Ubuntu Gutsy Gibbon
Visto que cada día a más gente le interesa la utilización de máquinas virtuales y que tras la aparición de las versiones 7.10 (Gutsy Gibbon) de Ubuntu y la 1.5.2 de VirtualBox y a que surgen una serie de "conflictos", me dispongo a recopilar aquí mis notas desperdigadas en libretas, enlaces etc...
Antes de nada dejar claras dos cosillas que a los menos experimentados suelen confundir:
La versión totalmente libre de VirtualBox llamada VirtualBox-OSE (Open Source Edition) disponible en los repositorios por defecto de las distribuciones, no dispone de soporte para USB ni de la utilidad VBoxGuestAdditions imprescindible para disponer de carpetas compartidas entre el sistema anfitrión (host, sistema operativo principal sobre el que está instalado VirtualBox) y el sistema invitado (guest, sistema operativo instalado en la máquina virtual). Esta utilidad (VBoxGuestAdditions) es tambien la que se encarga de permitir el copiar/pegar entre aplicaciones del anfitrión y el invitado.
Por lo tanto, solo el problema generado por algunos procesadores y que obstaculiza la compilación del módulo "vboxdrv" es el único aplicable a las dos variantes de virtualbox. El resto de mis notas son solo aplicables al caso de que utilicemos la versión "PUEL" (Personal User and Evaluation License) que podemos obtener de esta página: http://www.virtualbox.org/wiki/Downloads
Una vez instalado y creados los usuarios del grupo "vboxuser", comienza la tarea.
Contenido
Primer "conflicto" no compila el módulo "vboxdrv"
Este conflico surge en algunos procesadores (en mi caso concreto con un AMD Athlon XP) sospecho que debido a que probablemente (mi ignorancia sobre hard es supina) AMD en las modificaciones para mejorar el poco competitivo Athlon (por rendimiento en comparación con los Pentiun IV) introdujeron algun proceso a 64 bits, ya que el error que me arroja al intentar compilar es el propio de una arquitectura de 64 bits.
Vamos al caso, si nos sale el siguiente mensaje de error:
VirtualBox kernel driver not installed. The vboxdrv kernel module was either not loaded or /dev/vboxdrv was not created for some reason. Re-setup the kernel module by executing '/etc/init.d/vboxdrv setup' as root. VBox status code : -1908 (VERR_VM_DRIVER_NOT_INSTALLED) Result Code: 0x800004005
y tras ejecutar, como nos indican
# (ó sudo) /etc/init.d/vboxdrv setup
nos devuelve este otro mensaje:
Starting VirtualBox kernel module FATAL: Error inserting vboxdrv (/lib/modules/2.6.18.8-452-default/misc/vboxdrv.ko): Invalid argument failed (modprobe vboxdrv failed)
Para arreglar esto solo tenemos que modificar nuestro archivo menu.lst que encontraremos en /boot/grub. Aconsejo hacer una copia de este archivo en nuestra carpeta /home por ejemplo, por si algo sale mal. Para ello abrimos un terminal, entramos en modo root y editamos la configuración de "grub"
MUY IMPORTANTE: ESTO LO HACEMOS EN EL S.O. ANFITRIÓN
# (ó sudo) nano /boot/grub/menu.lst
Y añadimos en la entrada del nuestro Kernel:
nmi_watchdog=0
De modo que nos quede algo como esto:
kernel /boot/vmlinuz-2.6.20-16-generic root=UUID=005ec930-110e-4931-8e2a-eb8fff9e82db ro quiet splash locale=es_ES nmi_watchdog=0
ó según núcleo y S.O. como esto:
kernel /boot/vmlinuz-2.6.18.8-452-default root=/dev/hda1 vga=0x314 resume=/dev/hda2 splash=silent showopts nmi_watchdog=0
Reiniciamos el ordenador (reinicio completo, que alguno se despista y solo reinicia las X)
Ahora ya podremos ejecutar la orden que nos indicaba el informe de fallo inicial
# (ó sudo) /etc/init.d/vboxdrv setup
Segundo "conflicto" mensaje de error al montar un dispositivo USB
La gente de VirtualBox deja claro que esta es una opción no disponible por defecto, por lo que si intentamos montar un dispositivo USB nos devolverá el siguiente, o muy similar, mensaje:
“Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND). The service might be not installed on the host computer. Result Code: 0×80004005 Component: Host Interface: IHost {81729c26-1aec-46f5-b7c0-cc7364738fdb} Callee: IMachine {31f7169f-14da-4c55-8cb6-a3665186e35e}”.
En este caso la solución pasa por editar el archivo “mountdevsubfs.sh” y aunque esto se podría hacer después de instalar una máquina virtual, opté por hacerlo antes, para ello editamos
MUY IMPORTANTE: ESTO LO HACEMOS EN EL S.O. ANFITRIÓN
# (ó sudo) nano /etc/init.d/mountdevsubfs.sh”
archivo original:
(…) # # 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
solo descomentar las 4 líneas del final de este bloque, para que quede así:
(…) # # 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
Por supuesto guardamos, cerramos y listo. Al reiniciar, el soporte USB en las máquinas virtuales deberá estar funcionando, aunque en algunos casos no es así, sigue sin dejarme montar los USB, entonces, hay que editar el archivo “40-permissions.rules” para modificar permisos.
# (ó sudo) nano /etc/udev/rules.d/40-permissions.rules
Buscar la línea:
SUBSYSTEM==”usb_device”, MODE=”0664″
y modificar los permisos así:
SUBSYSTEM==”usb_device”, MODE=”0666″
En algún S.O. anfitrión, puede ser necesario, además (o en vez de lo anterior), modificar el "fstab"
# (ó sudo) /etc/fstab
buscamos la línea (o muy similar):
usbfs /proc/bus/usb usbfs noauto 0 0
la comentamos, para que quede así:
#usbfs /proc/bus/usb usbfs noauto 0 0
y creamos una nueva:
usbfs /proc/bus/usb usbfs defaults,devmode=666 0 0
los más avezados ya sabrán como simplificar este paso que acabamos de hacer.
Tercer "conflicto" en la carpeta compartida no puedo copiar/mover del invitado al anfitrión
Este conflicto solo se me presentó cuando el S.O. invitado es un S.O. GNU/Linux, por eso a ello me voy a referir.
Antes de nada dejar claro que la opción de disponer de "carpeta compartida" (pueden ser más de una) pasa por instalar las utilidades "VBoxGuestAdditions", así que vamos con ellas.
Con la máquina virtual arrancada, cargado y operativo el S.O invitado, hacemos click en el menú "Dispositivos" de la ventana de VirtualBox (recordar que para sacar el puntero del ratón del sistema invitado, debemos, por configuración original, suponiendo que no modificamos la "host key", pulsar una vez la tecla "Ctrl" de la derecha de nuestro teclado), como decía, nos dirigimos a "Dispositivos" elegimos la primera opción "Montar CD/DVD-ROM" y despues la última opción del nuevo desplegable "Imagen CD/DVD-ROM".
MUY IMPORTANTE: ESTO LO HACEMOS EN EL S.O. INVITADO
Ahora en nuestro S.O. invitado nos dirigimos a "/media/cdrom" ó a "/mnt/cdrom" (según cual sea el S.O. invitado) y abrimos el contenido de ese "cdrom.iso", además de otras cosas veremos un fichero con el siguiente nombre:
VBoxLinuxAdditions.run
Nos toca ejecutarlo, desde una terminal de nuestro S.O. invitado, para ello nos desplazamos al cdrom.iso, normalmente la orden será (solo dependerá de como el S.O. invitado haga los montajes)
$ cd /media/cdrom
puede ser /media/cdrom0 o /mnt/cdrom etc...
Una vez estemos en ese directorio ejecutamos como administrador:
# (ó sudo) sh ./VBoxLinuxAdditions.run
Ya solo queda montar la carpeta
# (ó sudo) mount -t vboxsf nombre_carpeta puntodemontaje
ejemplo: supongamos que tenemos (o creamos) para este menester la carpeta "Compartida" en el S.O. anfitrión y queremos disponer de ella en la zona de "usuario" del S.O. invitado: Situados como usuario en /home/usuario
$ mkdir Compartida # (ó sudo) mount -t vboxsf Compartida /home/usuario/Compartida
Si abrimos la carpeta veremos que ya tenemos disponibles los documentos/ficheros de la carpeta "Compartida" del anfitrión en el invitado, pero..., siempre hay un pero, no podremos mover/copiar/crear nada hacia ella (sí desde ella) a no ser que estemos trabajando como "root".
Podemos hacer que la carpeta no tenga el mismo nombre en los dos S.O. (anfitrión e invitado), supongamos que queremos que en el anfitrión queremos tener distintas carpetas para distintos S.O. invitados y creamos las carpetas:
- Debian_Etch
- Mandriva
- etc...
y en el invitado queremos simplemente llamarla "Carpeta_Anfitrion" (puede llevar espacios y tildes, pero como sabréis no es lo más recomendable), de esta manera la orden de montaje sería:
# (ó sudo) mount -t vboxsf Debian_Etch /home/usuario/Carpeta_Anfitrion
Como creo que lo "idóneo" es que se pueda acceder a la carpeta como "usuario", después de cientos de vueltas, con configuraciones del "fstab" del invitado, crear usuarios con permisos en el anfitrión, activar el "bit" de SUID etc, etc..., llegó nuestro amigo Andrés (a.k.a. Odo) se puso al tajo y encontró la solución, aqui la describo:
MUY IMPORTANTE: ESTO LO HACEMOS EN EL S.O. INVITADO
añadimos a "fstab" una línea con este contenido:
nombre_carpeta_en_anfitrión /punto/de/montaje/en/invitado vboxsf rw,gid=1000,uid=1000,auto 0 0
Los valores de GID y de UID los sabemos editando (solo lectura) el fichero "/etc/group/"
$ nano /etc/group
nos dirá que hay un error leyendo, pulsamos [Enter] y ya nos permite leer el fichero, buscamos en el al usuario "usuario" y veremos algo así:
usuario:x:1000:usuario
nos interesa el tercer campo (delimitados los campos por los ":" dos puntos)
- Podemos hacer dos cosas, permitir solo a usuario y/o permitir a "todos" los usuarios, para ello se utiliza el GID de usuario o (para todos) el GID de "users"
En el ejemplo, dejamos restringido el uso al usuario (por antonomasia)
En la mayoría de los casos ya debería montar esa carpeta en el inicio del S.O invitado y la montará con los permisos suficientes para que desde el invitado podamos crear, etc... ficheros en ella.
Seguimos con los pero... a veces no es así, ya que el S.O. invitado al cargarse, cuando procede al montaje de dispositivos aún no tiene "levantadas" las "GuestAdditions", por lo tanto nos dará (durante la carga) un mensaje de error, así que tendríamos que montarlo manualmente una vez arrancado, con el subsiguiente problema de que el montaje lo hará como "root", con lo que sería como una pescadilla que se muerde la cola.
Para solucionarlo, Andres, hizo lo siguiente:
Crear un script que "repita" el montaje de "este" dispositivos al final de la carga del S.O. y así, ya "levantadas" las GuestAdditions, lo reconozca sin problemas, así que manos a la obra:
MUY IMPORTANTE: ESTO LO HACEMOS EN EL S.O. INVITADO
# (ó sudo) nano /etc/init.d/remontaje
llamemosle como queramos, uso el termino "remontaje" para que os sirva de referencia. incluimos el siguiente script:
#!/bin/bash mount nombre_carpeta_en_anfitrión exit 0
nombre_carpeta_en_anfitrion debe ser exatamente el mismo parámetro que el de comienzo de la línea de "fstab" que creamos antes.
le damos permisos de ejecución
# (ó sudo) chmod 755 remontaje
actualizamos
# (ó sudo) update-rc.d remontaje default
Ya podemos reiniciar el S.O. invitado y todo debería funcionar sin contratiempos.
Sincronizar una Palm (PalmOS) con un invitado Windows mediante "HotSync"
Para poder emplear la sincronización HotSync es preciso:
Primero, crear el grupo "usbfs" con GID 1001 y asignarle el usuario (o usuarios)
Para ello editamos (como root) el fichero /etc/group y al final le añadimos la línea siguiente:
usbfs:x:1001:usuario1,usuario2,etc..
O podemos utilizar el metodo rápido, ejecutando la siguiente orden en la terminal:
# (ó sudo) echo usbfs:x:1001:usuario >> /etc/group
que ya nos añade esa línea en el fichero indicado
Segundo, procedemos a habilitar una línea de montaje en el "fstab" con el formato de fichero "usbfs" y los parámetros y las indicaciones de permisos necesarios para la sincronización.
Editamos (como root) el fichero /etc/fstab y añadimos una línea como la que sigue:
none /proc/bus/usb usbfs devgid=1001,devmode=664 0 0
O como en el caso anterior, la orden rápida desde terminal:
# (ó sudo) echo none /proc/bus/usb usbfs devgid=1001,devmode=664 0 0 >> /etc/fstab
Fuentes documentales:
http://howto.landure.fr/gnu-linux/ubuntu-gutsy-gibbon/virtualbox-ose-for-ubuntu-7-10-gutsy-gibbon
http://www.virtualbox.org/ticket/747
http://ubuntuforums.org/showthread.php?p=2507870
http://www.forosuse.org/forosuse/showpost.php?p=71642&postcount=1