Crear una box base de OS X Mountain Lion en VMware Fusion 5
Aprende a crear una box base de Vagrant para OS X Mountain Lion con VMware Fusion 5. Esta guía completa recorre todo el proceso, desde la configuración de la máquina virtual hasta el empaquetado, para disponer de entornos de desarrollo homogéneos en Mac OS X. Ideal para desarrolladores que necesitan hacer pruebas en el sistema operativo de Apple con la comodidad del flujo de trabajo de Vagrant.

Antes de empezar
Algunas advertencias que conviene tener en cuenta:
- Una máquina virtual con OS X va a ser grande. Una box base de OS X ocupará aproximadamente 5.65GB, lo que supera el tamaño de box que Vagrant recomienda por motivos de portabilidad. Es inevitable. Tenlo presente y asegúrate de que dispones de espacio en disco, además de paciencia al levantar boxes: las boxes más grandes tardan más en descargarse y clonarse. Como lo hago con fines de desarrollo y administración, los tiempos de arranque son aceptables a cambio de poder repetir las pruebas. Para reducir los tiempos de descarga, puedes alojar la box en un servidor HTTP local dentro de tu red en lugar de en la nube, aunque es opcional.
- Tu versión de Vagrant DEBE ser la 1.3.0 o superior. Antes de la 1.3.0 no había compatibilidad con OS X sin recurrir a apaños y trucos.
Comprobación previa
Este artículo se ha probado con lo siguiente:
- Apple OS X Mountain Lion (Host y Guest)
- VMware Fusion 5.0.3
- Vagrant 1.3.5
- Plugin de Vagrant vagrant-vmware-fusion 2.0.8
Nota: con OS X Mavericks como Host y Guest se siguen los mismos pasos, pero se necesita como mínimo VMware Fusion 6.x.
Crear una máquina virtual de OS X en VMware Fusion
Crea una nueva máquina virtual en VMware Fusion.
Si no sabes cómo crear una máquina virtual de OS X en VMware Fusion, deja un comentario pidiendo un tutorial. Por ahora, voy a dar por hecho que sabes hacerlo. Aspectos a tener en cuenta al crear la máquina virtual en VMware Fusion:
- Al guardar la máquina virtual, cambia el nombre del archivo a mountain64-1_vmware.vmwarevm.
- Cambia la configuración del disco duro de la máquina virtual para que no se divida en archivos de 2GB.
- En el primer arranque del sistema, rellena los campos del usuario inicial Full Name, Username y Password con
vagrant.
Configurar el sistema operativo invitado
Salvo que se indique lo contrario, todos los pasos se realizan en el sistema operativo invitado.
Instalar VMware Tools
Como primer paso, instalaremos VMware Tools para poder copiar y pegar entre el Host y el Guest.
En el Host, con VMware Fusion seleccionado:
- En la barra de menús de Apple, selecciona Virtual Machine > Update VMware Tools… La opción del menú también puede aparecer como Install VMware Tools, Reinstall VMware Tools o Update VMware Tools.
- Haz clic en Install en el cuadro de diálogo que se abre.
En el Guest:
- Cuando se monte la imagen de disco, haz doble clic en el paquete Install Vmware Tools.
- Sigue las indicaciones predeterminadas hasta que termine la instalación. Ten en cuenta que la instalación te pedirá la contraseña de administrador.
- Reinicia cuando termine la instalación.
- Vuelve a iniciar sesión cuando se te pida.
A partir de ahora puedes copiar y pegar comandos entre el Host y el Guest durante el resto del artículo, si lo deseas.
Actualizar el sistema operativo
Para reducir el número de actualizaciones necesarias cada vez que se levanta la box, ejecuta las actualizaciones de software.
- Abre el Terminal y ejecuta:
$ sudo softwareupdate --install --all
- Espera a que terminen las actualizaciones. Reinicia. Repite tantas veces como sea necesario, hasta que no haya más actualizaciones disponibles.
Desactivar el cortafuegos en OS X
OS X tiene el cortafuegos desactivado por defecto. Asegúrate de que es así comprobando los ajustes de Security & Privacy.
- Ve a System Preferences > Security & Privacy.
- Selecciona la pestaña Firewall.
- Asegúrate de que el cortafuegos está desactivado (Off).
Este artículo no trata sobre la seguridad de una box, así que, por simplicidad, el cortafuegos debe estar desactivado. Si tienes requisitos más estrictos, experimenta con Firewall Options… cuando quieras.
Activar el inicio de sesión remoto
Para que Vagrant pueda conectarse por SSH a una box de OS X, solo hay que activar Remote Login.
- Ve a System Preferences > Sharing.
- Marca Remote Login para activarlo
- Opcional. Cambia los permisos de acceso según sea necesario. Por defecto está seleccionado All Users. Si cambias esta opción a Only these users:, añade el usuario vagrant que creaste.
Descargar la clave insegura de Vagrant
Nuestro usuario vagrant usará una clave SSH para obtener acceso autorizado a la box.
$ mkdir -p /Users/vagrant/.ssh
$ chmod 0700 /Users/vagrant/.ssh
$ curl -o /Users/vagrant/.ssh/authorized_keys --url https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
$ chmod 0600 /Users/vagrant/.ssh/authorized_keys
$ chown -R vagrant /Users/vagrant/.ssh
Configurar sudo sin contraseña
El usuario vagrant necesita permisos de sudo sin contraseña. Ejecuta lo siguiente en el Terminal:
$ sudo visudo
Añade o modifica las siguientes líneas según sea necesario:
Defaults env_keep += 'SSH_AUTH_SOCK'
Defaults:vagrant !requiretty
# Add the vagrant user at the end of the file
vagrant ALL=NOPASSWD: ALL
Guarda y sal.
Optimizar el sistema invitado
Si consultáramos ahora el tamaño de nuestro archivo de VMware, veríamos que ronda los 16.26GB o los 14.11GB, con la máquina en marcha o apagada respectivamente. Apagar la máquina virtual y reducirla en este momento apenas haría mella en su tamaño: solo lo disminuiría en 0.02GB.
Sin embargo, si rellenamos con ceros el espacio libre del disco del invitado y lo reducimos, podemos dejar la máquina virtual en aproximadamente 7.48GB.
- Abre un Terminal y escribe:
$ diskutil secureErase freespace 0 Macintosh HD
$ sudo halt
Finalizar la box
A partir de aquí, todo se hace en el Host.
- Abre un Terminal y cambia al directorio donde se guardó la máquina virtual. Normalmente es ~/Documents/Virtual Machines/.
- Entra en el archivo .vmwarevm de tu máquina virtual.
Crear un metadata.json
- Ejecuta lo siguiente en el Terminal:
$ vi metadata.json
- Escribe el siguiente contenido en el editor:
{ "provider": "vmware_fusion" }
- Guarda el archivo.
- Sal del editor.
Reducir la máquina virtual
- Abre el Terminal y escribe:
$ /Applications/VMware Fusion.app/Contents/Library/vmware-vdiskmanager -k
- Escribe un ’espacio’ y la ruta al archivo de disco virtual de tu máquina virtual.
- Pulsa Intro.
Con esto, el disco virtual debería haberse reducido a unos 7.48GB.
Empaquetar la máquina virtual
Empaquetar la máquina virtual con tar y gzip reduce el tamaño de la box. Una vez empaquetada, la máquina virtual debería ocupar unos 5.63GB.
- Ejecuta lo siguiente en el Terminal:
$ tar -cvzf mountain64-1_vmware.box ./*
Cuando termine la compresión, mueve el archivo .box a un directorio de trabajo más adecuado para el proyecto o a un servidor web. En este ejemplo usaremos ~/workspace/vagrant-example. Lo más probable es que esta carpeta no exista en tu sistema, así que, obviamente, créala antes de intentar mover el archivo.
Arrancar la box base de OS X con Vagrant
En el Terminal, cambia al directorio de trabajo de nuestro proyecto, ~/workspace/vagrant-example, y ejecuta lo siguiente:
$ vagrant box add mountain64 mountain64-1_vmware.box
$ vagrant init mountain64 mountain64-1_vmware.box
En este punto, si queremos ejecutar la máquina virtual en modo headless (sin interfaz gráfica), basta con ejecutar:
$ vagrant up --provider=vmware_fusion
Si, en cambio, queremos ejecutarla en modo GUI, modificamos el Vagrantfile generado en el directorio de trabajo del proyecto y añadimos las siguientes líneas:
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.provider :vmware_fusion do |v|
v.gui = true
end
# Existing Vagrantfile generated template...
Y después ejecutamos:
$ vagrant up --provider=vmware_fusion
Si todo ha ido bien, verás la siguiente salida en el Terminal:
Bringing machine 'default' up with 'vmware_fusion' provider...
[default] Cloning VMware VM: 'mountain64'. This can take some time...
[default] Verifying vmnet devices are healthy...
[default] Preparing network adapters...
[default] Fixed port collision for 22 => 2222. Now on port 2200.
[default] Starting the VMware VM...
[default] Waiting for the VM to finish booting...
[default] The machine is booted and ready!
[default] Forwarding ports...
[default] -- 22 => 2200
[default] Configuring network adapters within the VM...
[default] Enabling and configuring shared folders...
[default] -- /Users/username/workspace/vagrant-example: /vagrant