Páginas

sábado, 25 de septiembre de 2021

Virtualizacion bhyve zfs FreeBSD 13.0

Virtualización BSD bhyve zfs FreeBSD 13.0

https://wiki.freebsd.org/bhyve
https://github.com/churchers/vm-bhyve

FreeBSD como anfitrión con bhyve

De forma predeterminada, bhyve proporciona acceso a la consola serie y no emula una consola gráfica. 

Comprobar si el procesador Intel soporta virtualización:

# dmesg | grep vt
[drm]   - kern.vt.fb.modes.DP-1
[drm]   - kern.vt.fb.default_mode
...

El primer paso para crear una máquina virtual en bhyve es configurar el sistema host cargando  el módulo del kernel de bhyve.

# kldload vmm

# kldstat|grep vmm
26    1 0xffffffff83200000   53a420 vmm.ko

El módulo se cargará automáticamente al iniciar el sistema agregando vmm a la linea kld_list del archivo /etc/rc.conf.

# sysrc kld_list+="vmm"

kld_list="fusefs /boot/modules/i915kms.ko vmm"

El siguiente paso es instalar bhyve virtual machine vm-bhyve, bhyve-firmware y grub2-bhyve. Este último para entornos linux o máquinas virtuales que requieran grub.

# pkg install vm-bhyve bhyve-firmware grub2-bhyve

Crear un conjunto de datos zfs llamado vm donde estarán almacenadas las máquinas virtuales. El grupo de almacenamiento se llama zroot.

# zfs create zroot/vm

# zfs list

NAME                               USED  AVAIL     REFER  MOUNTPOINT
zroot                             16.9G  88.6G       96K  /zroot
zroot/ROOT                        8.60G  88.6G       96K  none
zroot/ROOT/default                8.60G  88.6G     8.56G  /
zroot/ROOT/system_freebsd_180921     8K  88.6G     8.53G  /
zroot/export                       416K  88.6G       96K  /zroot/export
zroot/tmp                          312K  88.6G      192K  /tmp
zroot/usr                         7.65G  88.6G       96K  /usr
zroot/usr/home                    6.84G  88.6G     1.76G  /usr/home
zroot/usr/home/carlos             3.40G  88.6G     3.40G  /usr/home/carlos
zroot/usr/ports                    832M  88.6G      832M  /usr/ports
zroot/usr/src                      104K  88.6G       96K  /usr/src
zroot/var                         1.78M  88.6G       96K  /var
zroot/var/audit                    104K  88.6G       96K  /var/audit
zroot/var/crash                    104K  88.6G       96K  /var/crash
zroot/var/log                     1.10M  88.6G      752K  /var/log
zroot/var/mail                     216K  88.6G      128K  /var/mail
zroot/var/tmp                      164K  88.6G      100K  /var/tmp
zroot/vm                           686M  88.6G      133M  /zroot/vm
Habilitar vm-bhyve en /etc/rc.conf y configurar el conjunto de datos que se utilizará

# sysrc vm_enable="YES"
# sysrc vm_dir="zfs:zroot/vm"

En este punto guardar y reiniciar el sistema.

Debe tener los módulos vmm ejecutándose en segundo plano:

# kldstat | grep vmm
26    1 0xffffffff83200000   53a420 vmm.ko

Ejecutar el comando vm init crea los directorios necesarios en $vm_dir.

# vm init

Crear un directorio llamado .templates

# mkdir -p /vm/.templates
# ls /vm/.templates/

Listando los archivos de configuración para todos los posibles sistemas operativos compatibles que pueden ejecutarse como invitado:
# ls /usr/local/share/examples/vm-bhyve/
alpine.conf       coreos.conf       freepbx.conf      ubuntu.conf
arch.conf         debian.conf       linux-zvol.conf   windows.conf
centos6.conf      default.conf      netbsd.conf
centos7.conf      dragonfly.conf    openbsd.conf
config.sample     freebsd-zvol.conf resflash.conf

Crear un conmutador virtual (switch) llamado public y adjuntar la interfaz de 
red Ethernet a él.
# vm switch create public # vm switch add public re0 # vm switch list NAME TYPE IFACE ADDRESS PRIVATE MTU VLAN PORTS public standard vm-public - no - - re0

Firewall IPFW:

Permitir el paso de paquetes bhyve

net.link.bridge.ipfw=1
# sysctl net.link.bridge.ipfw=1

Hacer el cambio permanente
net.link.bridge.ipfw=1

Instalar y ejecutar sistemas operativos invitados virtualizados

FreeBSD virtualizacion vm-bhyve - Arch Linux

Descargar Arch Linux

# vm iso https://mirror.cyberbits.eu/archlinux/iso/2022.06.01/archlinux-2022.06.01-x86_64.iso

Copiar la plantilla para Arch Linux - arch.conf
# cp /usr/local/share/examples/vm-bhyve/arch.conf /zroot/vm/.templates/

# vm iso
DATASTORE           FILENAME
default             archlinux-2022.06.01-x86_64.iso
default             fetch.out

Importante: Cambiar los parámetros vmlinuz, archiso y archisobasedir a sus valores correctos:

# cat /zroot/vm/.templates/arch.conf
loader="grub"
cpu=1
memory=512M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
grub_install0="linux /arch/boot/x86_64/vmlinuz-linux archisobasedir=arch archisolabel=ARCH_202206 ro"
grub_install1="initrd /arch/boot/x86_64/initramfs-linux.img"

Crear vm -t template -s size nombre
# vm create -t arch -s 9G arch

Instalar en primer plano vm -f dentro de arch una vm con arhivo iso
# vm install -f arch archlinux-2021.09.01-x86_64.iso

Particionar el disco:

# cfdisk
Elegir dos para BIOS

 
root@archiso ~ # fdisk -l
Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 131072 bytes
I/O size (minimum/optimal): 131072 bytes / 131072 bytes
Disklabel type: dos
Disk identifier: 0xae1d35ff

Device     Boot    Start      End  Sectors  Size Id Type
/dev/vda1  *        2048  1050623  1048576  512M 83 Linux
/dev/vda2        1050624 16779263 15728640  7.5G 83 Linux
/dev/vda3       16779264 17827839  1048576  512M 82 Linux swap / Solaris

Disk /dev/loop0: 662.69 MiB, 694882304 bytes, 1357192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Crear los sistemas de ficheros:

root@archiso ~ # mkfs.ext2 /dev/vda1
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem with 262144 1k blocks and 65536 inodes
Filesystem UUID: 0b6850ec-379f-4be5-ac4f-fcafae08fbbc
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729, 204801, 221185

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done 

root@archiso ~ # mkfs.ext4 /dev/vda2
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem with 2555648 4k blocks and 638976 inodes
Filesystem UUID: 34353334-88c2-40b9-930a-8c788705545e
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@archiso ~ # mkswap /dev/vda3
root@archiso ~ # swapon /dev/vda3

Montando las particiones:

root@archiso ~ # mount /dev/vda2 /mnt
root@archiso ~ # mkdir -p /mnt/boot
root@archiso ~ # mount /dev/vda1 /mnt/boot

El comando pacstrap para indicar donde queremos instalar los paquetes desde los repositorios arch, y lo que queremos instalar

root@archiso ~ # pacstrap /mnt base base-devel grub ntfs-3g networkmanager xdg-user-dirs linux linux-firmware vim dhcpcd openssh

Generar fstab
root@archiso ~ # genfstab -pU /mnt >> /mnt/etc/fstab

Entrar en arch chroot

root@archiso ~ # arch-chroot /mnt
[root@archiso /]#

Establecer la zona horaria:
[root@archiso /]# ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime

[root@archiso /]# echo rioarch > /etc/hostname

[root@archiso /]# nano /etc/locale.gen
es_ES.UTF-8 UTF-8

[root@archiso /]# echo LANG=es_ES.UTF-8 > /etc/locale.conf

Generar el archivo locale.gen con el siguiente comando:
[root@archiso /]# locale-gen

Cuando GNU/Linux arranca, el sistema está configurado para leer el reloj interno del equipo, después el reloj del sistema, que es independiente. Usaremos el comando hwclock -w para ajustar el reloj interno.
[root@archiso /]# hwclock -w

Configurar distribución de teclado
[root@archiso /]# echo KEYMAP=la-latin1 > /etc/vconsole.conf

Instalar grub

Ahora procedamos a instalar el grub y usar el comando correcto, sin UEFI
[root@archiso /]# grub-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.

Actualizar grub

Creamos el archivo grub.cfg
[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg

[root@archiso /]# passwd
New password:
Retype new password:
passwd: password updated successfully

Agregar usuario no privilegiado
useradd -m -g users -G storage,wheel,power -s /bin/bash carlos

Establecer contraseña del usuario
[root@archiso /]# passwd carlos

Antes de salir de root:

[root@arch ~]# cat /boot/grub/grub.cfg |grep vmlinuz-linux
	linux	/vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw  loglevel=3 quiet
		linux	/vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw  loglevel=3 quiet
		linux	/vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw  loglevel=3 quiet


Este UUID lo necesitará:
781ccb0f-c524-402e-a2a8-e32a50371223 rw
para sustituirlo por el creado por la vm en esta ruta /zroot/vm/arch/arch.conf en el host FreeBSD.

root@freebsd:/zroot/vm/arch # cat arch.conf

loader="grub"
cpu=1
memory=512M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
grub_install0="linux /arch/boot/x86_64/vmlinuz-linux archisobasedir=arch archisolabel=ARCH_202109 ro"
grub_install1="initrd /arch/boot/x86_64/initramfs-linux.img"
uuid="a923082e-1deb-11ec-9f91-fc3fdbd15275"
network0_mac="58:9c:fc:0e:36:e4"
grub_run0="linux /vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw"
grub_run1="initrd /initramfs-linux.img"
uuid="9eb191c3-1e01-11ec-a508-fc3fdbd15275" 
Saliendo de chroot
Ya terminado esto, salimos de chroot
[root@archiso /]# exit

Desmontar particion /boot
# umount /mnt/boot/

Desmontar particion Raíz
# umount /mnt

# dhcpcd enp0s5

dhcpcd-9.4.0 starting
DUID 00:04:a9:23:08:2e:1d:eb:11:ec:9f:91:fc:3f:db:d1:52:75
enp0s5: waiting for carrier
enp0s5: carrier acquired
enp0s5: IAID fc:0e:36:e4
enp0s5: adding address fe80::f2ad:f194:fe94:3e97
enp0s5: soliciting a DHCP lease
enp0s5: soliciting an IPv6 router
enp0s5: offered 192.168.88.165 from 192.168.88.1
enp0s5: probing address 192.168.88.165/24
enp0s5: leased 192.168.88.165 for 600 seconds
enp0s5: adding route to 192.168.88.0/24
enp0s5: adding default route via 192.168.88.1
forked to background, child pid 242
Reiniciar
# reboot

[root@arch ~]# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s5:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 58:9c:fc:0e:36:e4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.88.165/24 brd 192.168.88.255 scope global dynamic noprefixroute enp0s5
       valid_lft 329sec preferred_lft 254sec
    inet6 fe80::f2ad:f194:fe94:3e97/64 scope link 
       valid_lft forever preferred_lft forever










FreeBSD es genial!

No hay comentarios:

Publicar un comentario