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