FreeBSD, bhyve, cloud-init - további tapasztalatok

Az előző blogbejegyzéshez (https://hup.hu/node/185502) a további tapasztalatokat is szeretném feljegyezni, így teljesebb a kép. :)

Kipróbáltam, hogy mi történik, ha a vm-bhyve tool nélkül hozom létre a virtuális gépet. A vm-bhyve meglehetősen korlátozottan támogatja a cloud-init fájlokat, konkrétan csak 1-2 paramétert tud kicserélni a schell script-be behúzott template-ekben.

ZFS volume létrehozása

A zroot/vm datasetet átneveztem, amit a vm-bhyve miatt hoztam létre, és létrehoztam újra, üresen:

zfs create zroot/vm

Csináltam egy zfs volume-ot a virtuális gépnek:

zfs create -V 10G zroot/vm/ubuntuvm

Beleírtam az ubuntu cloud image-et (ezt már nem kell telepíteni):

qemu-img dd -O raw if=ubuntu-24.04-server-cloudimg-amd64.img of=/dev/zvol/zroot/vm/ubuntuvm bs=1M

Hálózat konfigurálás

Létrehoztam egy tap0 interfészt, és a bridge-hez adtam, amit korábban már létrehoztam:

ifconfig tap0 create
ifconfig bridge0 addm tap0

MAC cím:

A FreeBSD foundation-höz a 58:9C:FC:00:00:00 - 58:9C:FC:FF:FF:FF tartomány tartozik, az OUI (Organizationally Unique Identifier) az első 24 bit.
A második 24 bit a Device Identifier, de nem lehet 00:00:00, vagy FF:FF:FF (sys/net/ieee_oui.h)
A bhyve-es MAC address-ek így kezdődnek: 58:9c:fc:0 ezt a vm-bhyve forrásában találtam, a device id maradék része egy random szám:
58:9c:fc:0 0:00:01

Ezt a mac addresst be kell írni a network-config cloud-init fájlba is, és a VM létrehozásakor is kell.

Cloud-init

A cloud-init fájlokat a .cloud-init könyvtárba tettem.

meta_data:

instance-id: 6307d3d6-2b4f-11ef-a83c-74563cf76feb
local-hostname: ubuntu

user-data:

resize_rootfs: True
manage_etc_hosts: localhost
ssh_authorized_keys:
  - ssh-ed25519 xxx root

Az xxx a kliens publikus kulcsa.

network-config:

version: 2
ethernets:
  id0:
    set-name: eth0
    match:
      macaddress: 58:9c:fc:00:00:01
    addresses:
      - 192.168.4.230/24
    gateway4: 192.168.4.1
    nameservers:
      search: []
      addresses: [1.1.1.1]

A cloud init fájlokból generáltam egy ISO-t, amit fel kell majd csatolni a virtuális gépnek:

genisoimage -output /zroot/vm/ubuntu/seed.iso -volid cidata -joliet -rock /zroot/vm/ubuntu/.cloud-init/*

Gép indítása

bhyve -c 4 -m 2G -w -H \
-s 0,hostbridge \
-s 3,nvme,/dev/zvol/zroot/vm/ubuntuvm \
-s 4,ahci-cd,/zroot/vm/ubuntu/seed.iso \
-s 5,virtio-net,tap0,mac=58:9c:fc:00:00:01 \
-s 29,fbuf,tcp=0.0.0.0:5900,w=1280,h=1024 \
-s 30,xhci,tablet \
-s 31,lpc \
-l com1,stdio \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
ubuntu

Indítás után interaktív módon rögtön elkezdenek logolódni a boot üzeneteket, és ebben már vissza is tudok lapozni.

A cloud init tökéletesen kiírja az üzeneteit, és minden érthető belőle. A konfigurálás most sem sikerült elsőre, de mindent jól kiírt.

Amikor a vm-bhyve-val indítottam a virtuális gépet (előző blog), akkor mire a vnc-t elindítottam, vagy "vm console"-lal csatlakoztam, addigra kilapozódtak az üzenetek, és nem lehetett visszalapozni.

Próbaképpen, hogy mit ír ki, ha netmask nélkül adjuk meg a hálózati konfigurációt:

[    3.032477] cloud-init[746]: Cloud-init v. 24.1.3-0ubuntu3.2 running 'init-local' at Sun, 16 Jun 2024 01:06:30 +0000. Up 3.02 seconds.
[    3.129063] cloud-init[746]: 2024-06-16 01:06:30,911 - schema.py[WARNING]: Invalid network-config provided: Please run 'sudo cloud-init schema --system' to see the schema errors.
[    3.468047] cloud-init[746]: 2024-06-16 01:06:31,250 - util.py[WARNING]: failed stage init-local
[    3.470587] cloud-init[746]: failed run of stage init-local

Ezután egy python stacktrace következik, majd:

[    3.481403] cloud-init[746]: Exit code: 1
[    3.481619] cloud-init[746]: Reason: -
[    3.481825] cloud-init[746]: Stdout:
[    3.482049] cloud-init[746]: Stderr: /etc/netplan/50-cloud-init.yaml:10:13: Error in network definition: address '192.168.4.230' is missing /prefixlength
[    3.482640] cloud-init[746]:                     - 192.168.4.230

Gép lelövése

bhyvectl --destroy --vm ubuntu

 

Egy megjegyzés:

A vm-bhyve egyébként nagyon jól össze van rakva, akik készítették elég profin írnak shell scripteket, és érhető is a forrása, érdemes megnézni.