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.
- dlaszlo blogja
- A hozzászóláshoz be kell jelentkezni
- 265 megtekintés