logo

Acerca de

Bienvenido a mi blog, el sitio perfecto para mis inquietudes, experiencias e idas de olla sobre temas de hoy en día.

Historia al azar

Categorías

Últimas entradas

Últimos comentarios

Enlaces

Meta

photo Luis PeraltaEstado Jabber
Ziritione
Castellón Spain
39.997638, -0.064030

Sindica

Sindícame, por cortesía del subliminal Atom.

2 diciembre 2008

¿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 (descargar):

{
  Description     = "VirtualBox VM boot launcher";
  Provides        = ("VBoxLauncher");
  Uses            = ("VirtualBox");
  OrderPreference = "None";
}

Y por último editamos /Library/StartupItems/VBoxLauncher/VBoxLauncher (descargar):

#!/bin/sh
#
# VBoxLauncher - luis peralta
# http://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.