VirtualBox es un conocido sistema de virtualización dentro del mundo Linux, en este artÃculo aprenderemos como instalarlo y configurarlo bajo FreeBSD. Cabe destacar que solo recomiendo su instalación en sistemas de escritorio ya que en servidores tenemos soluciones mucho mas idóneas como IOCage o vm-bhyve y si lo sé VirtualBox también puede instalarse sin soporte gráfico y gestionarse desde la CLI pero la experiencia resulta muy deficiente y dependiendo del hardware utilizado puede dar problemas de estabilidad.
Este artÃculo está basado en la guÃa del handbook de FreeBSD con algunas anotaciones adicionales.
Primero nos aseguramos de que nuestro micropocesador disponga de los registros Intel-VT/AMD-v, en mi caso se trata de un Intel Core i7-6700K.
VT-x: PAT,HLT,MTF,PAUSE,EPT,UG,VPID
VT-x: PAT,HLT,MTF,PAUSE,EPT,UG,VPID
Se ha dado el caso en el que la CPU contaba con dichos registros, la opción estaba habilitada en la BIOS pero le presentaba de forma incorrecta dicha información al sistema operativo:
VT-x: (disabled in BIOS) HLT,PAUSE
VT-x: (disabled in BIOS) HLT,PAUSE
En tal caso se solventó actualizando la BIOS a la última versión.
Ahora que estamos seguros de que nuestra CPU es compatible procedemos con la instalación de VirtualBox:
Cargamos el módulo del kernel:
Nos aseguramos de que en el próximo arranque sea cargado de nuevo:
vboxdrv_load="YES"
Habilitamos el servicio y lo arrancamos:
service vboxnet start
Añadimos el usuario con el que administraremos las máquinas virtuales, al grupo vboxusers:
Si vamos a utilizar bridges en la red de VirtualBox debemos darle permisos al grupo vboxusers:
chmod 0660 /dev/vboxnetctl
Para que los permisos sean perpetuos debemos configurar devfs del siguiente modo:
own vboxnetctl root:vboxusers
perm vboxnetctl 0660
Si además queremos que las máquinas virtuales tengan acceso a los puertos USB del equipo padre debemos añadir el usuario al grupo operator:
Y definir las siguientes reglas devfs:
[system=10]
add path 'usb/*' mode 0660 group operator
NOTA: Destacar que los permisos de devfs se han configurado en el fichero devfs.conf mientras que las reglas en devfs.rules.
Le indicamos al sistema operativo que cargue nuestras reglas devfs:
service devfs restart
Puede que algunas máquinas virtuales tengan problema adquiriendo ip por DHCP, para que esto funcione debemos habilitar la opción:
Settings -> Network -> Adapter1 -> Promiscous mode: Allow all
Troubleshooting:
Otro sistema de virtualización activo:
Si tenemos otros sistemas de virtualización como
CBSD
o similar, debemos tener en cuenta que si se carga el módulo vmm las máquinas virtuales de VirtualBox inician pero se quedan en una ventana en negro, no llega a aparecer ni la BIOS ni el boot del sistema.
Los últimos Windows no son capaces de instalar la última versión(6.1.32) de las “Guest Additional Tools”, por ejemplo Win8 y XP no lo permiten, en tal caso debemos bajarnos una versión anterior:
https://download.virtualbox.org/virtualbox/6.1.26/VBoxGuestAdditions_6.1.26.iso
Tema QT problemático:
En algunas ocasiones el tema QT configurado en el sistema puede dar problemas con VirtualBox, este error es muy dificil de debugear ya que VirtualBox simplemente crashea:
Segmentation fault (core dumped)
Y en los logs no aparece ninguna información útil al respecto:
Feb 17 21:41:55 Garrus kernel: pid 69543 (VirtualBox), jid 0, uid 1001: exited on signal 10 (core dumped)
Instalamos el configurador y configuramos un tema mas o menos estandar:
Módulo desactualizado respecto al sistema:
FreeBSD siempre evita romper la compatibilidad con versiones anteriores, pero esto implica que haya paquetes(normalmente módulos del kernel) que no funcionen en la última versión del sistema operativo teniendo que compilarlos desde los ports, VirtualBox es uno de ellos. Podemos leer la
discusión entera en este hilo del foro
.
Packages are build for 13.0, kernel modules for 13.1 need to be build from ports.
That will be three months from now, then 13.0-RELEASE will be officially End-of-Life and packages will be built for 13.1-RELEASE.
I think the version mismatch issue will go away when 13.0 reaches EOL (3 months from the release of 13.1) and 13.1 becomes the lowest version. Till then, the solution may be to use the port instead of the binary package. I do not think the port could be broken as a binary package exists, but I am no expert in ports.
Como vemos hasta que la versión 13.0 no llegue a su EOL a finales de Agosto, no se compilará el módulo para 13.1, por esta razón recomiendo actualizar a la siguiente versión de FreeBSD solo cuando la anterior haya llegado a su EOL a no ser que necesitemos con urgencia alguna funcionalidad de la nueva versión.
Si intentamos cargar el módulo instalado desde paquetes binarios:
Veremos el siguiente error en dmesg:
KLD vboxdrv.ko: depends on kernel - not available or version mismatch
linker_load_file: /boot/modules/vboxdrv.ko - unsupported file type
Eliminamos todos los paquetes relacionados con VirtualBox:
Compilamos e instalamos los módulos de VirtualBox:
cd /usr/ports
make fetchindex
git -C /usr/ports branch –list -r
git -C /usr/ports rev-parse –abbrev-ref HEAD
cd /usr/ports/emulators/virtualbox-ose-kmod
make clean
make
make reinstall
Reinstalamos VirtualBox desde binarios:
Ahora ya podemos cargar el módulo sin problema:
TRUSS:
Como último recurso siempre podemos utilizar
TRUSS
para intentar deducir la causa del problema:
security.bsd.unprivileged_proc_debug: 0 -> 1
Un usuario regular ya podrá ejecutar TRUSS: