Lanzando VirtualBox en el arraque con OSX
Por Luis Peralta
¿Cómo hacer un Mac un poco más útil (de hecho, el doble)? Pues instalándole una máquina virtual con un Linux dentro. Que sí, que OSX es muy bonito y para eso lo tengo (para ver pelis en el salón), pero para otro tipo de tareas necesito un jugador de verdad. Así que no mordáis.
La solución de virtualización que he probado es la única que conozco gratuita para Mac: VirtualBox, que bien me recomendó calavering. Instalas sin problema: siguiente, siguiente, aceptar. Montas la máquina virtual (un intrepid de Ubuntu), la configuras, va todo como la seda. Pero ahora quieres que la máquina virtual arranque cuando se inicia OSX y además que no te moleste con un icono en el dock.
Solución: un
StartupItem
de OSX. La primera cosa que pensé levantaba mi máquina virtual única y
exclusivamente, pero intentando hacer las cosas mejor me dije que por qué no
hacerlo un poco más genérico. Puesto que VirtualBox permite definir atributos
o propiedades sobre cada una de las VMs que maneja, qué mejor que
aprovecharlas. Añadamos la propiedad ‘launchatboot’ a la VM micro
:
$ VBoxManage guestproperty set micro launchatboot true
$ VBoxManage guestproperty get micro lauchatboot
VirtualBox Command Line Management Interface Version 2.0.6
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.
Value: true
Siguiente paso: crear el directorio /Library/StartupItems/VBoxLauncher
:
$ sudo mkdir /Library/StartupItems/VBoxLauncher
Ahora editamos el archivo
/Library/StartupItems/VBoxLauncher/StartupParameters.plist
y le atizamos lo
siguiente:
{
Description = "VirtualBox VM boot launcher";
Provides = ("VBoxLauncher");
Uses = ("VirtualBox");
OrderPreference = "None";
}
Y por último editamos /Library/StartupItems/VBoxLauncher/VBoxLauncher
:
#!/bin/sh
#
# VBoxLauncher - luis peralta
# https://www.ziritione.org
. /etc/rc.common
# Set this to the user who created the VMs
USER=peralta
PROPERTY="launchatboot"
StartService()
{
UUIDS=`sudo -i -u $USER /usr/bin/VBoxManage list vms|grep "^UUID:"|cut -d" " -f 13`
for uuid in $UUIDS
do
ConsoleMessage "launching $uuid vm"
sudo -i -u $USER /usr/bin/VBoxManage guestproperty get $uuid $PROPERTY > /dev/null && sudo -i -b -u $USER /usr/bin/VBoxHeadless -startvm $uuid > /dev/null
done
}
StopService()
{
UUIDS=`sudo -i -u $USER /usr/bin/VBoxManage list runningvms|tail +5`
for uuid in $UUIDS
do
sudo -i -u $USER /usr/bin/VBoxManage controlvm "$uuid" poweroff > /dev/null
ConsoleMessage "$uuid stopped"
done
}
RestartService()
{
StopService
StartService
}
RunService "$1"
Y zás, al siguiente arranque tenemos las máquinas virtuales que tengan la
propiedad launchatboot
en marcha sin hacer nada. En la web de Apple
recomiendan usar launchd
en vez de StartupItems
para estas cosas, que es
el futuro. Desde luego será cosa del futuro porque el script de launchd lo
hará otro, no me cabe duda, en el futuro.