Variádico

Instalar Ubuntu con xhyve

16 de octubre de 2016

Una de las características de OS X Yosemite que quizá no conozcas es el Hypervisor Framework. Esto es interesante porque quiere decir que, en algunos casos, ¡quizá ya no necesites que instalar VirtualBox para usar Linux en tu Mac! 😊

En este tutorial, vamos a instalar Ubuntu 16.04 en macOS Sierra, usando xhyve 0.2.0.

Instalar xhyve

Para usar el hipervisor en tu Mac, tenemos que instalar una herramienta que se llama xhyve. Esto es como VirtualBox—pero muchísimo más sencillo.

brew install xhyve

Descargar ISO de Linux

Vayan a descargar Ubuntu server. Esto debería de funcionar con cualquier tipo de Linux, pero aquí vamos a usar Ubuntu.

Arrancar

Como dije antes: xyhve es muy sencillo. No tiene ni BIOS ni EFI. Así que no puede leer el ISO directamente para ejecutar el núcleo de Linux. Tú tienes que hacer eso.

Extraer archivos de arranque

Vamos a extraer el núcleo de Linux con estas ordenes.

# Crear archivo de 2k de ceros.
dd if=/dev/zero bs=2k count=1 of=tmp.iso

# Anexar el ISO a esa imagen.
dd if=~/Downloads/ubuntu-16.04.1-server-amd64.iso bs=2k skip=1 >> tmp.iso

# Montar imagen.
hdiutil attach tmp.iso

# Copiar núcleo y disco RAM inicial.
cp "/Volumes/Ubuntu-Server 16/install/vmlinuz" .
cp "/Volumes/Ubuntu-Server 16/install/initrd.gz" .

# Desmontar y limpiar.
hdiutil eject "/Volumes/Ubuntu-Server 16"
rm tmp.iso

Ahora deberías de tener dos archivos, vmlinuz, el núcleo de Linux y initrd.gz, el disco RAM inicial.

Crear almacenamiento

Tu máquina virtual necesita una unidad de almacenamiento. Esto va a crear un disco virtual de 16GB.

dd if=/dev/zero of=disco.img bs=1g count=16

Arrancar al instalador

Ahora sí tenemos todo los elementos necesarios para arrancar un sistema. Usa este comando para arrancar tu sistema nuevo.

sudo xhyve \
    -A \
    -c 1 \
    -m 2G \
    -s 0,hostbridge \
    -s 2,virtio-net \
    -s 3,ahci-cd,~/Downloads/ubuntu-16.04.1-server-amd64.iso \
    -s 4,virtio-blk,disco.img \
    -s 31,lpc \
    -l com1,stdio \
    -f "kexec,vmlinuz,initrd.gz,earlyprintk=serial console=ttyS0"

Aquí la explicación.

Después de ejecutar el comando anterior, vas a iniciar una instalación normal de Ubuntu server.

Sigue las instrucciones. Cuando veas la próxima pregunta, responde “yes”.

Install the GRUB boot loader to the master boot record?

Extraer núcleo más nuevo

Antes de terminar la instalación, vamos a extraer un núcleo más nuevo para arrancar.

Cuando llegues al último paso y veas “Installation complete”, elige “Go Back”. Luego, elige “Execute a shell”.

Ahora tenemos que encontrar la IP de la máquina virtual. Vamos a usar el comando ip.

/sbin/ip addr show enp0s2
2: enp0s2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    inet 192.168.64.8/24 brd 192.168.64.255 scope global enp0s2

Copia estos dos archivos. Dependiendo en la versión de Ubuntu, las versiones pueden variar un poco. Aquí vamos a usar el comando nc, de netcat.

En el sistema invitado, ejecuta esto.

cd /target/boot
cat initrd.img-4.4.0-31-generic | nc -l -p 1234
cat vmlinuz-4.4.0-31-generic | nc -l -p 1234

En el sistema anfitrión, ejecuta esto.

nc 192.168.64.8 1234 > initrd.img-4.4.0-31-generic
nc 192.168.64.8 1234 > vmlinuz-4.4.0-31-generic

Después de copiar los archivos, regresa al instalador. Introduce exit y finaliza la instalación.

Arrancar el nuevo sistema invitado

Ejecuta este comando para iniciar Ubuntu. Esto le dará 1 CPU y 2GB de memoria a la máquina virtual. Dependiendo en los recursos disponibles en tu compu, quizá quieras cambiar estos valores.

sudo xhyve \
    -A \
    -c 1 \
    -m 2G \
    -s 0,hostbridge \
    -s 2,virtio-net \
    -s 4,virtio-blk,disco.img \
    -s 31,lpc \
    -l com1,stdio \
    -f "kexec,vmlinuz-4.4.0-31-generic,initrd.img-4.4.0-31-generic,earlyprintk=serial console=ttyS0 root=/dev/vda1 ro"

Ojo, aquí cambie vmlinuz a vmlinuz-4.4.0-31-generic y también initrd a initrd.img-4.4.0-31-generic. Estos son archivos que copiamos anteriormente. También eliminé la unidad de CD que contenía la imagen de Ubuntu.

Despues de instalar

Una vez que inicies sesión, te recomiendo que ejecutes lo siguiente.

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y
sudo apt-get install -y xterm
echo "export TERM=xterm-256color" >> $HOME/.bashrc

Instalar el paquete xterm es importante por dos razones.

Primero, el paquete xterm contiene el comando resize. Ese comando es importante porque tienes que avisarle a la terminal cada vez que cambies el tamaño de la ventana. No estoy exactamente seguro por qué, pero quizá tenga algo que ver con que estamos usando un TTY en serie.

Segundo, la terminal instalada por defecto es vt220. Esa terminal no puede mostrar colores. Probablemente es algo que quieras y quizá estés acostumbrado a xterm.

Listo

Ya tienes tu máquina virtual con Ubuntu—y mucho más ligera que con VirtualBox. Para apagar la máquina virtual usa el comando normal.

sudo poweroff

Te recomiendo que guardes el comando de xhyve en un script o alias. Así podrás arrancar la máquina más fácil.