"Después del juego es antes del juego"
Sepp Herberger

sábado, 24 de septiembre de 2016

VirtualBoxing Windows (Parte II)

En la anterior entrada vimos como virtualizar Windows dentro de nuestros Xubuntu para satisfacer en nuestros Infolab las necesidades de todos, les haga falta Windows o no.

Con el sistema ya en despliegue tuve que hacer varias correciones menores que cuento aquí:

1. Cambios en la BIOS para que funcione VirtualBox.

Los PC usados son HP ProDesk 600 G2 SFF, que tienen Secure Boot activado en la BIOS por defecto. Los últimos kernel de Ubuntu están viniendo configurados para que si se detecta Secure Boot activado los drivers de terceros deban estar firmados para cargarlos en memoria. El driver de virtualbox es un problema aquí y firmarlo es un proceso complicado que habría que repetir con frecuencia con cada actualización.

La solución mas rápida es entrar con la tecla F10 en la BIOS durante el arranque, desactivar Secure Boot, borrando las claves del mismo y poniendo que el arranque sea solo en modo Legacy. Al guardar y reiniciar nos pedirá un código numérico a modo de CAPTCHA cutre para confirmar que lo hemos hecho a propósito y ya está. El driver de virtualbox podrá cargarse sin problema. Todo esto ya lo contamos en el apartado 2 de esta entrada.

También será necesario en la parte Avanzada de la BIOS activar el VTx para permitir la virtualización, ya que si no el virtualbox se queja al arrancar y aborta.

2. Cambios en el script de arranque.

Para poder arrancar la máquina virtual cpm un click del usuario, verificando que ya no había otra corriendo y mapear la carpeta $HOME del usuario dentro de la máquina virtual usábamos un script.

Tras varias pruebas apareció el problema de que la carpeta compartida se quedaba mapeada en la máquina virtual, lo cual daba problemas al cambiar de usuario. Con la línea en negrita que añado en el script se soluciona el problema: desmapeamos la carpeta compartida antes de mapearla de nuevo.
# cat /opt/VirtualBox\ VMs/run_vbox 
#!/bin/bash

#Poniendo esto  /etc/environment
#export VBOX_USER_HOME="/mnt/VirtualBox VMs/VirtualBox"
#en el arranque lo tendremos para todos los usuarios. Maquinas virtuales en local.

#Si cierran la ventana a lo bruto se hace un shutdown de la máquina. Esto al .vbox de 
#la máquina
#    

machine="Win10"

running=$(VBoxManage list runningvms | grep $machine)
if  [ -n "$running" ]
then
   zenity --error --text "La máquina $machine ya está funcionando"  
else
  #Si cierran la ventana a lo bruto se hace un shutdown de la máquina. Esto al .vbox de la máquina
  #    
  #o bien VBoxManage...
  VBoxManage setextradata $machine "GUI/LastCloseAction" "Shutdown"
  VBoxManage sharedfolder remove "$machine" --name "compartido"
  VBoxManage sharedfolder add "$machine" --name "compartido" --hostpath "$HOME" --automount
  VirtualBox --startvm $machine
fi

3. Problemas de permisos.

Como la máquina virtual completa es compartida por todos los usuarios y está en una carpeta común (/opt/VirtualBox VMs) hay varios ficheros que deben tener como propietario al usuario actual, para que pueda ejecutarla sin problema.

Para ello hace falta meter un script que se ejecute en el inicio de sesión y que lo haga como root (hay que cambiar permisos a unos ficheros de los que no somos propietarios). Está ultima condición descarta el uso de /etc/xdg/autostart/* y /etc/X11/Xsession.d/*. Para ejecutar un script en el inicio de sesión como root tenemos que usar la configuración de ligthdm, nuestro gestor de sesiones, metiendo un fichero en /etc/lightdm/lightdm.conf.d/ como.
# cat /etc/lightdm/lightdm.conf.d/15-vbox.conf 
[SeatDefaults]
# Seat defaults
# display-setup-script = Script to run when starting a greeter session (runs as root)
# greeter-setup-script = Script to run when starting a greeter (runs as root)
# session-setup-script = Script to run when starting a user session (runs as root)
# session-cleanup-script = Script to run when quitting a user session (runs as root)
session-setup-script=/opt/VirtualBox\ VMs/vbox_permisos
El script llamado es vbox_permisos, que hace:
# cat vbox_permisos 
#!/bin/bash
#Cambia el propietario de las ficheros de VirtualBox, para permitir el acceso al usuario que hace login
chown $USER:$USER "/opt/VirtualBox VMs/VirtualBox/VirtualBox.xml"
chown $USER:$USER "/opt/VirtualBox VMs/Win10/Win10.vbox"
Como se puede ve, hace se propietario al usuario que inicia sesión de "/opt/VirtualBox VMs/VirtualBox/VirtualBox.xml" y "/opt/VirtualBox VMs/Win10/Win10.vbox", que son los dos ficheros necesarios para arrancar la máquina virtual.

Con esto ya está todo solucionado y funciona sin problemas.... de momento.

Por último, recordemos la conveniencia de tener una copia de estos 2 últimos ficheros, los scripts y el fichero .vdi con la máquina virtual en lugar seguro de la máquina física, para hacer una restauración rápida si algún usuario avanzado de Windows nos desconfigura o borra algo.

No hay comentarios:

Publicar un comentario