viernes, diciembre 21, 2018

Instalación y configuración de VM Ubuntu 18.x en VirtualBox para Mac OS X

Aunque Mac OS X es una plataforma poderosa y flexible, ampliamente recomendada para desarrollo web, en ocasiones queremos usar un entorno lo más cercano posible al de producción sin tener que abandonar la comodidad del sistema operativo de Apple. Una de las opciones es usar un producto como VMWare o VirtualBox para montar en Mac una máquina virtual (o VM por la sigla en inglés) que contenga el entorno de pruebas o pre-producción (como por ejemplo Linux o Windows Server).

En esta guía paso a paso vamos a poner a funcionar una máquina virtual Ubuntu Server 18.10 en Mac OS X High Sierra (versión 10.13 o superior) usando Oracle VirtualBox 5.2.22.

  1. Descargar e instalar VirtualBox
  2. Crear la máquina virtual en VirtualBox
  3. Creación de una nueva máquina virtual desde cero
  4. Creación a partir de una máquina preconfigurada
  5. Configuración de la red de la máquina virtual
  6. Verificación de que todo funcione correctamente

1. Descargar e instalar VirtualBox

Si VirtualBox  todavía no está instalado en el Mac, es necesario descargarlo de https://www.virtualbox.org/wiki/Downloads:


Como en esta guía estamos trabajando con Mac OS X, dar click en "OS X host", el cual descarga un archivo de nombre "VirtualBox-5.2.22-126460-OSX.dmg" o similar de 95.7MB. Una vez descargado, dar doble click sobre el archivo para iniciar la instalación. Se abre una ventana con el instalador:


Dar doble click sobre el icono de la esquina superior izquierda marcado como "1 Double click in this icon". Se abre la ventana del asistente de instalación, cuyo primer paso es verificar si el software cumple con las condiciones técnicas necesarias. Dar click en "Continue":


Si todo está en orden, pasa al siguiente paso que es seleccionar dónde se va a instalar. La opción predeterminada es suficiente. Dar click en "Continue":


El siguiente paso pregunta si se desea instalar el paquete opcional de línea de comandos de VirtualBox. Se puede dejar, pero si se desea una instalación mínima se desmarca el tercer módulo (ahorra 5KB de espacio) y se da click en "Install":


Una vez finalizado el proceso de instalación, el asistente pregunta si se desea eliminar el archivo de instalación (click en "Move to Trash") o si se desea conservarlo (click en "Keep"). Es recomendable la segunda opción en caso de que haya algún problema y se deba desinstalar VirtualBox y volver a repetir el proceso:


Ya habiendo instalado VirtualBox en Mac OS X, se puede ejecutar desde el lanzador o la carpeta de Aplicaciones.

2. Crear la máquina virtual en VirtualBox

Para crear una máquina virtual desde cero dar click en "New". Aparece una pantalla para definir el nombre de la máquina, el tipo y la versión.

Name es el nombre de la máquina virtual es cualquier nombre que sea significativo para identificarla de otras máquinas que puedan configurarse en el Mac; no tiene nada qué ver con el nombre que identificará internamente a la máquina en la red. Por ejemplo "Ubuntu18" o "DjangoMachine".
Type corresponde a la familia del sistema operativo que se va a a ejecutar en la máquina virtual, como "Linux".
Version lista las opciones disponibles de distribución y arquitectura para el sistema operativo seleccionado en el campo anterior. Por ejemplo "Ubuntu (64 bit)".

Después de seleccionar las opciones apropiadas, click en "Continue":


El siguiente paso es definir cuánta de la Memoria RAM (física) del anfitrión Mac se va a asignar a la máquina virtual cuando esté en funcionamiento. Esto significa que si el Mac tiene 8GB y está usando 3GB, solo quedan disponibles 5GB (la franja verde).

En teoría se podría asignar toda la RAM disponible a la máquina virtual, pero con el riesgo de que el Mac la pueda necesitar mientras se está ejecutando la máquina virtual. Por esa razón es recomendable crear la máquina virtual con 1GB (1024MB) o 2GB (2048MB) y si su funcionamiento es excesivamente lento, apagarla y reconfigurarla con un poco más de RAM hasta que mejore el desempeño o no quede más RAM disponible. 

Para asignar la RAM que va a usar la máquina virtual mientras esté en funcionamiento (ésta se libera al apagar la máquina) deslizar el marcador hasta la posición deseada que indica los MB a los que corresponde. Click en "Continue".


Si se desea crear una máquina virtual a partir de una imagen preconfigurada, saltar el paso 3 e ir directamente al paso 4.

3. Creación de una nueva máquina virtual desde cero

Crear una nueva máquina virtual desde cero es equivalente a instalar y configurar todo como si tuviera un disco duro vacío. Aunque es posible crear y usar una máquina SIN disco duro (podría trabajar con una unidad de DVD o una unidad de almacenamiento conectada al puerto USB) el caso más común es en el que se configura una unidad de disco.

En este caso, seleccionar la segunda opción (Create a virtual hard disk now)  y dar click en "Create":


En la siguiente pantalla el asistente pregunta el tipo de archivo que se usará para representar el disco duro de la máquina virtual. Como en este caso solamente vamos a usar una máquina que se pueda transportar a otros computadores que también usan VirtualBox, la primera opción (VirtualBox Disk Image) está bien. En caso de que se quisiera trabajar con otros productos diferentes a VirtualBox, sería necesario seleccionar alguna de las otras opciones según el caso para asegurar la compatibilidad. Dar click en "Continue":


La siguiente pantalla permite elegir la forma como se administrará el espacio de almacenamiento en la máquina virtual. La primera opción (Dynamically allocated) es útil cuando se está experimentando y no se está seguro de cuánto espacio se pueda llegar a necesitar; permitiendo ahorrar espacio. La segunda opción (Fixed size) ofrece una mayor velocidad a cambio de ocupar siempre el mismo espacio incluso si la máquina virtual no lo está usando. Tras seleccionar la opción deseada, dar click en "Continue".


En la siguiente pantalla se asigna un nombre al archivo de almacenamiento (la opción predeterminada es el mismo nombre de la máquina), se selecciona una ubicación en el sistema de archivos del anfitrión Mac y se le asigna un tamaño máximo. Dar click en "Create":



4. Creación a partir de una máquina preconfigurada

Si no se quiere instalar y configurar una nueva máquina virtual desde cero, es posible descargar una máquina ya preconfigurada con uno de muchos sistemas operativos y versiones. En esta guía se utilizó una máquina Linux Ubuntu Server 18.10 descargada de https://www.osboxes.org/ubuntu-server/:


OSBoxes provee dos versiones de cada máquina: una en formato de VirtualBox (que es nuestra opción predeterminada) y otra en formato VMWare en la pestaña correspondiente. Damos click en el botón "Download" de la primera opción para descargar el archivo comprimido en formato 7z.

Una vez descargado y descomprimido el paquete 7z, entramos a una carpeta que contiene el archivo "Ubuntu Server 18.10 (64bit).vdi". Es recomendable guardar una copia de este archivo antes de usarlo en caso de que sea necesario volver a restaurar la máquina virtual a su estado original descartando los cambios que se le puedan haber hecho durante su funcionamiento.

Copiar el archivo en la ubicación deseada, que puede ser una carpeta en el disco duro del Mac o en una unidad de almacenamiento externa. La segunda opción es ideal si solo se va a usar la máquina virtual ocasionalmente y solo requiere que la unidad de almacenamiento externa esté conectada al Mac cada vez que se vaya a trabajar con la máquina virtual.

En la pantalla de selección de definición del disco duro, seleccionar la tercera opción (Use an existing virtual hard disk file) y dar click en el icono de la carpeta para localizar el archivo en el sistema de carpetas del Mac. Dar click en "Create":


5. Configuración de la red de la máquina virtual

Después de haber definido cualquiera de los dos tipos de almacenamiento de los pasos 3 y 4, queda creada la nueva máquina virtual.

5.1. Configuración global a través del Host Network Manager

Para configurar la red, dar click en el menú File > Host Network Manager. También se puede acceder a dicha pantalla dando click en el icono Global Tools en la esquina superior derecha y seleccionando el menú desplegable Host Network Manager:


En la pantalla, dar click en el icono "Create" de la esquina superior izquierda. Aparece una nueva configuración de adaptador de red con el nombre "vboxnet0". En la parte inferior, en la pestaña "Adapter" y bajo la opción "Configure Adapter Manually" aparecen los campos de configuración del adaptador.

El campo IPv4 Address muestra una dirección IP local con la que VirtualBox va a identificar a la máquina virtual que se conecte a través del adaptador "vboxnet0". En este ejemplo, la dirección predeterminada es 192.168.99.1, pero puede ser cualquier IP que sea consistente con la red local a la que está conectado el anfitrión Mac. Para asegurarlo, el campo IPv4 Network Mask debe quedar 255.255.255.0 como viene predeterminado, a menos que la red local tenga una configuración diferente, que no es nuestro caso.

Como en este ejemplo se está definiendo manualmente una IP estática para el adaptador, el campo "Enabled" debajo de la columna "DHCP Server" en la esquina superior derecha debe quedar vacío. Esto significa que las opciones de la pestaña "DHCP Server" en la parte inferior se dejan vacías porque no se necesita dicha configuración. Dar click en "Apply" y "Close":


Una vez definida la configuración global de VirtualBox, se configuran los adaptadores específicos de la nueva máquina virtual. Estando resaltada la máquina nueva (en este ejemplo llamada "UbuntuDjangoBox"), dar click en el icono "Settings" de la esquina superior izquierda de la ventana de VirtualBox. En la ventana que aparece, ir hasta la sección "Network".

5.2. Configuración del adaptador NAT

En la pestaña "Adapter 1", marcar la opción "Enable Network Adapter" para que se desbloqueen los campos del adaptador. Este es el adaptador que permitirá a la máquina virtual recibir datos de la red.

En Attached to seleccionar "NAT" de la lista desplegable.
Dar click en "Advanced" para desplegar las opciones ocultas.
En Adapter Type seleccionar "Intel PRO/1000 MT Desktop (82540EM)" de la lista desplegable.
La opción Cable Connected debe estar marcada para que el adaptador se pueda usar.
Dar click en el botón "Port Forwarding":


Se abre una pantalla donde se definen los puertos que serán usados para intercambiar datos entre el anfitrión Mac y la máquina virtual Ubuntu. En este ejemplo, se usarán dos puertos: uno para conectarse vía consola a través de SSH y otro para poder acceder a un servidor Django dentro de la máquina virtual desde un navegador en el anfitrión Mac:

Dar click en el icono "+" en el extremo derecho.
En la línea que aparece, llenar la columna Name con un nombre que identifique el servicio para el que se va a usar el puerto. En la columna Protocol, dejar la opción predeterminada "TCP". En la columna Host Port, escribir el puerto a usar desde el anfitrión y en Guest Port escribir el puerto real que internamente se va a usar en la máquina Ubuntu.
Una vez realizada la operación para los servicios que se desea usar, dar click en OK:


5.3. Configuración del adaptador Host-only Adapter

El siguiente paso es configurar el segundo adaptador, que es el que permitirá al anfitrión Mac recibir datos desde la máquina virtual. Dar click en la pestaña "Adapter 2", marcar la opción "Enable Network Adapter" para que se desbloqueen los campos del adaptador.

En Attached to seleccionar "Host-only Adapter" de la lista desplegable.
En Name seleccionar "vboxnet0" de la lista desplegable.
Dar click en "Advanced" para desplegar las opciones ocultas.
En Adapter Type seleccionar "Intel PRO/1000 MT Desktop (82540EM)" de la lista desplegable.
En Promiscuous Mode seleccionar "Deny".
La opción Cable Connected debe estar marcada para que el adaptador se pueda usar.
Dar click en OK para finalizar.


Y eso es todo. VirtualBox ya tiene todas las configuraciones que necesita para que la máquina virtual tenga acceso a Internet (a través del adaptador 1) y que el anfitrión Mac tenga acceso a la máquina virtual (a través del adaptador 2).

6. Verificación de que todo funcione correctamente

Una vez configurada la máquina virtual, solo resta iniciarla. Seleccionar la máquina deseada (en este ejemplo llamada "UbuntuDjangoBox") y dar click en el icono "Start" (flecha verde en la parte superior de la ventana de VirtualBox). Aparece una nueva ventana con la pantalla de la máquina virtual mostrando todas las comprobaciones de hardware y servicios que hace al iniciar (deberían estar todas en OK).

Finalmente, pide el nombre de usuario y contraseña. Como en esta guía usamos una máquina Ubuntu 18.10 Server preconfigurada descargada de OSBoxes (ver paso 4), usamos los datos de acceso suministrados en el sitio de descarga:
En login escribir osboxes
En Password: escribir osboxes.org

La pantalla debería mostrar que el ingreso fue exitoso con un texto como este:


6.1. Verificación del acceso a Internet


El primer indicador de que la configuración de la red en VirtualBox es correcta es que los dos adaptadores de red definidos fueron reconocidos por la máquina virtual y se encuentran activos. Para ello escribir el comando ifconfig -a que debería mostrar un texto similar al siguiente:


Como se configuraron dos adaptadores en VirtualBox, la máquina virtual debería haberlos reconocido como "enp0s3" (correspondiente al adaptador 1 o NAT) y "enp0s8" (correspondiente al adaptador 2 o Host-only). El tercer adaptador "lo" ya viene con el sistema operativo y corresponde a la conexión del servidor consigo mismo.

Si hasta aquí todo se ve en orden, usar el comando ping www.google.com para corroborar que la máquina virtual sí tiene acceso a Internet. Después de recibir tres o cuatro paquetes de datos, se puede interrumpir el comando pulsando en el teclado Control-C:


Si todas las líneas producidas por el comando ping inician con "64 bytes from...", significa que el adaptador 1 funciona correctamente, ya que el servidor llamado "www.google.com" fue identificado por el servidor DNS (externo a la máquina virtual), se le enviaron paquetes de 64 bytes y éstos fueron recibidos de vuelta. Este mecanismo es el equivalente a un submarino enviando una señal de radar a un objeto para conocer su posición.

6.2. Verificación del acceso a la máquina virtual desde el anfitrión

Para probar el acceso desde el anfitrión Mac usaremos la Terminal. Desde el lanzador de Mac OS X se encuentra en la carpeta Other (Launchpad > Other > Terminal). También se puede abrir directamente desde la carpeta Applications > Utilities > Terminal.app:


De manera similar como ya hicimos desde la máquina virtual, vamos a comprobar si el anfitrión es capaz de contactarla desde fuera. Escribir en la terminal del anfitrión Mac el comando ifconfig -a. El resultado muestra la lista de adaptadores de red reconocidos por Mac OS X, donde el último de ellos debería verse como esto:


El adaptador vboxnet0 fue el que se configuró al inicio del paso 5 a través del Host Network Manager de VirtualBox. En la práctica esto equivale a que la máquina virtual fuera en realidad un computador real que está conectado por un cable de red a un puerto de red del Mac, el cual tiene asignada la dirección IP 192.168.99.1. Con esta IP es que vamos a poder probar la conexión a través del comando ping. En la terminal usar el comando ping 192.168.99.1


Si todas las líneas producidas por el comando ping inician con "64 bytes from...", significa que el adaptador "vboxnet0" funciona correctamente, ya que se le enviaron paquetes de 64 bytes a la IP 192.168.99.1 y éstos fueron recibidos de vuelta.

6.3. Ingreso a la máquina virtual desde el anfitrión Mac

Para ingresar a la máquina virtual desde la terminal del anfitrión vamos a usar el comando ssh. En esta guía seguiremos usando los ejemplos ya empleados, como nombre de usuario (osboxes), la IP de la interfaz "vboxnet0" a través de la cual nos conectamos (192.168.99.1) y el puerto que usamos en la redirección SSH configurada al final del paso 5.2 (2281).

En la terminal del anfitrión Mac escribir osboxes@192.168.99.1 -p 2281


Después de escribir la contraseña, la terminal del Mac debería verse como en la imagen anterior. Esto comprueba que la máquina virtual sí es accesible desde el anfitrión.

En caso de que no haya respuesta, puede deberse a que la máquina virtual todavía no tiene el servicio ssh instalado. Para hacerlo, ingresar a la máquina virtual y usar el comando

sudo apt-get install openssh-server 

Después de escribir la contraseña de administrador (en este ejemplo es la misma que la del usuario "osboxes"), el paquete queda instalado y funcionando.