Páginas

sábado, 3 de septiembre de 2022

Virtual Machine Linux en FreeBSD 13.1 con bhyve UEFI

Instalar Debian en una máquina virtual en FreeBSD 13.1 bhyve

Levantar (up) el dispositivo de túnel tap por defecto, agregando la siguiente línea al archivo /etc/sysctl.conf

echo "net.link.tap.up_on_open=1" >> /etc/sysctl.conf
sysctl net.link.tap.up_on_open=1

Firewall reglas pf

# Reglas para vm bhyve
pass in quick on bridge0 all keep state
pass in quick on tap0 all keep state
pass out quick on bridge0 all keep state
pass out quick on tap0 all keep state

Reiniciar pf

service pf restart

Cargar el controlador como módulo en el momento del arranque

# /boot/loader.conf
echo 'vmm_load="YES"' >> /boot/loader.conf
echo 'nmdm_load="YES"' >> /boot/loader.conf
echo 'if_tap_load="YES"' >> /boot/loader.conf
echo 'if_bridge_load="YES"' >> /boot/loader.conf

Crear un bridge

ifconfig bridge create
bridge0

Añadir como miembro del puente la interfaz em0

ifconfig bridge0 addm em0

Cambiar el nombre de la interfaz bridge0

ifconfig bridge0 name em0bridge
em0bridge

Activar la interfaz

ifconfig em0bridge up

Crear una nueva interfaz de tap de nombre tap0

ifconfig tap0 create

Agregar la interfaz a em0bridge0

ifconfig em0bridge0 addm tap0

Activar la interfaz tap0

ifconfig tap0 up

Habilitar los dispositivos de red para su arranque automático

# byhve /etc/rc.conf
cloned_interfaces = "bridge0 tap0"
ifconfig_bridge0_name = "em0bridge"
ifconfig_em0bridge = "addm em0 addm tap0 up"

Crear un volumen de 20 Gb zfs

zfs create -V20G -o volmode=dev zroot/debianvm

Descargar la imagen debian-11.4.0

cd /tmp/
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-11.4.0-amd64-netinst.iso

Instalar paquetes necesarios y sus dependencias

pkg install grub2-bhyve bhyve-firmware
New packages to be INSTALLED:
	bhyve-firmware: 1.0_1
	edk2-bhyve: g202202_1
	grub2-bhyve: 0.40_8
	uefi-edk2-bhyve-csm: 0.2_3,1

Instalar la VM debian 11.4.0 bajo FreeBSD

bhyve -c 4 -m 1G -w -H \
-s 0,hostbridge \
-s 3,ahci-cd,/tmp/debian-11.4.0-amd64-netinst.iso \
-s 4,virtio-blk,/dev/zvol/zroot/debianvm \
-s 5,virtio-net,tap0 \
-s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait \
-s 30,xhci,tablet \
-s 31,lpc -l com1,stdio \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd debianvm

man bhyve

-m memsize[K|k|M|m|G|g|T|t] Establece el tamaño de la memoria física del huésped

-H: sistema de archivos host para exportar al cargador

-l: el cargador del sistema operativo que se utilizará - uefi

-s: configure una ranura PCI virtual y otras funciones, como disco duro, cdrom y otros dispositivos.

-c Número de CPUs virtuales invitadas y/o la topología de la CPU. El valor por defecto de para cada uno de numcpus, sockets, cores y hilos es 1

-W Forzar las emulaciones de dispositivos PCI de virtio para que usen las interrupciones MSI en lugar de las interrupciones MSI-X.

-l lpcdev,conf Permite configurar los dispositivos detrás del puente LPC PCI-ISA. Los únicos dispositivos soportados son los de clase TTY com1, com2, com3 y com4

-l help Imprimir una lista de dispositivos LPC soportados.

bhyve -l help
bootrom
com1
com2
com3
com4
pc-testdev

-s help Imprimir una lista de dispositivos PCI soportados.

bhyve -s help
ahci
ahci-hd
ahci-cd
e1000
dummy
hda
fbuf
amd_hostbridge
hostbridge
lpc
nvme
passthru
virtio-9p
virtio-blk
virtio-console
virtio-net
virtio-rnd
virtio-scsi
uart
xhci

Instalar un cliente vnc

pkg install tigerviewer

Script que inicia la vm debian

#!/bin/sh
#
bhyve -c 1 -m 1G -w -H \
-s 0,hostbridge \
-s 4,virtio-blk,/dev/zvol/zroot/debianvm \
-s 5,virtio-net,tap0 \
-s 29,fbuf,tcp=0.0.0.0:5900,w=1024,h=768 \
-s 30,xhci,tablet \
-s 31,lpc -l com1,stdio \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd debianvm

Llegados a este punto accedemos al instalador de Debian 11 Linux, iniciando la máquina virtual y el cliente VNC TigerVnc viewer. Escriba la dirección del servidor y el puerto, en mi caso

192.168.88.51:5900

clic en Conectar para empezar con la instalación

Al finalizar la instalación haga clic en Retroceder y

ejecute un shell para instalar el cargador de arranque uefi

sino la vm no se iniciará y eso no es lo que quiere

Ejecutar un shell

Crear el directorio BOOT

mkdir /target/boot/efi/EFI/BOOT/

Copiar grubx64.efi a /targe/boot/efi/EFI/BOOT/bootx64.efi

cp /target/boot/efi/EFI/debian/grubx64.efi /target/boot/efi/EFI/BOOT/bootx64.efi
exit

Terminar la instalación

Continuar

Iniciar la vm debian

Usando un script para iniciar la VM

#!/bin/sh
bhyve -c 4 -m 1G -w -H \
-s 0,hostbridge \
-s 3,ahci-cd,/tmp/debian-11.4.0-amd64-netinst.iso \
-s 4,virtio-blk,/dev/zvol/zroot/debianvm \
-s 5,virtio-net,tap0 \
-s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait \
-s 30,xhci,tablet \
-s 31,lpc -l com1,stdio \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
debianvm
chmod +x /usr/home/carlos/scripts/startdebian.sh
cd /usr/home/carlos/scripts
./startdebian.sh

Permitir acceso ssh a la vm debian

Archivo de configuracion de ssh /etc/ssh/sshd_conf

PermitRootLogin no
AllowUsers carlos@192.168.88.*
Reiniciar servicio
systemctl restart sshd

Acceder via ssh a la vm debian

% ssh carlos@192.168.88.101
The authenticity of host '192.168.88.101 (192.168.88.101)' can't be established.
ED25519 key fingerprint is SHA256:/vYJensJh11xpGCdbwe2pLNGTPtRlkw1y0bsABU3XtE.
No matching host key fingerprint found in DNS.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

FreeBSD es genial!.

No hay comentarios:

Publicar un comentario