OpenBSD comme client sous Bhyve

SmartOS supporte la virtualisaion avec KVM depuis le départ mais la version qui a été importée depuis Linux est complètement datée et n’évolue plus :

# qemu-system-x86_64 --version
QEMU emulator version 0.14.1 (qemu-kvm-devel), Copyright (c) 2003-2008 Fabrice Bellard

A titre de comparaison, sur mon pc sous ubuntu 20.04 :

QEMU emulator version 4.2.0 (Debian 1:4.2-3ubuntu6)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers

Mais ça n’est plus la seule alternative depuis un petit moment avec le portage de Bhyve depuis FreeBSD, qui en plus d’offrir de meilleures performances, bénéficie d’une meilleure intégration et d’un meilleur suivi.

L’idée de passer ma machine virtuelle OpenBSD sous cet hyperviseur n’est donc pas totalement incongrue. Je me suis inspiré de ce message pour la procédure à suivre. La première chose à faire est de créer une nouvelle machine virtuelle de type Bhyve :

{
  "brand": "bhyve",
  "autoboot": "false",
  "alias": "obsd",
  "ram": "512",
  "vcpus": "2",
  "nics": [
    {
      "nic_tag": "admin",
      "ip": "dhcp",
      "model": "virtio",
      "primary": false
    },
        {
        "nic_tag": "external",
        "ip": "dhcp",
        "primary": true,
        "model": "virtio"
        }
  ],
  "disks": [
    {
      "boot": true,
      "size": 30720,
      "model": "virtio"
    }
  ]
}

J’ai utilisé la même taille de disque comme indiqué par Mike mais comme je souhaite conserver l’ancienne machine virtuelle au cas où, plutôt que de renommer le dataset, je fais un snapshot du ZVOL que j’envoie avec pour destination le nouveau disque

zfs snapshot -r zones/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-disk0@copievm
zfs send zones/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-disk0@copievm | zfs receive -F zones/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/disk0

Il n’y a plus qu’à démarrer la machine virtuelle :

# vmadm start afa47ad8-1d8a-ecc2-d01d-c2aa70b95a72 && zlogin -C afa47ad8-1d8a-ecc2-d01d-c2aa70b95a72
>> OpenBSD/amd64 BOOT 3.46
boot> 
booting hd0a:/bsd: 12797256+2741264+340000+0+716800 [798136+128+1015800+742813]=0x12467d0
entry point at 0xffffffff81001000
[ using 2557904 bytes of bsd ELF symbol table ]
Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2019 OpenBSD. All rights reserved.  https://www.OpenBSD.org

OpenBSD 6.6-current (GENERIC.MP) #493: Wed Nov 27 22:27:15 MST 2019
    deraadt@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
real mem = 495947776 (472MB)                                            
avail mem = 468578304 (446MB)
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 3.0 @ 0x1fb6d000 (10 entries)
bios0: vendor BHYVE version "1.00" date 03/14/2014
bios0: Joyent SmartDC HVM
acpi0 at bios0: ACPI 4.0
acpi0: sleep states S5
acpi0: tables DSDT FACP HPET APIC MCFG SPCR
acpi0: wakeup devices
acpitimer0 at acpi0: 3579545 Hz, 32 bits
acpihpet0 at acpi0: 16777216 Hz
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Xeon(R) CPU E3-1220L V2 @ 2.30GHz, 2296.97 MHz, 06-3a-09
cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,SS,HTT,PBE,SSE3,PCLMUL,DTES64,DS-CPL,SSSE3,CX16,xTPR,PCID,SSE4.1,SSE4.2,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,HV,NXE,LONG,LAHF,FSGSBASE,ERMS,MD_CLEAR,ARAT,XSAVEOPT,MELTDOWN
cpu0: 256KB 64b/line 8-way L2 cache
cpu0: smt 0, core 0, package 0
mtrr: CPU supports MTRRs but not enabled by BIOS
cpu0: apic clock running at 134MHz
cpu1 at mainbus0: apid 1 (application processor)
cpu1: Intel(R) Xeon(R) CPU E3-1220L V2 @ 2.30GHz, 2295.02 MHz, 06-3a-09
cpu1: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,SS,HTT,PBE,SSE3,PCLMUL,DTES64,DS-CPL,SSSE3,CX16,xTPR,PCID,SSE4.1,SSE4.2,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,HV,NXE,LONG,LAHF,FSGSBASE,ERMS,MD_CLEAR,ARAT,XSAVEOPT,MELTDOWN
cpu1: 256KB 64b/line 8-way L2 cache
cpu1: smt 0, core 0, package 1     
ioapic0 at mainbus0: apid 2 pa 0xfec00000, version 11, 32 pins, remapped
acpimcfg0 at acpi0
acpimcfg0: addr 0xe0000000, bus 0-255
acpiprt0 at acpi0: bus 0 (PC00)
acpipci0 at acpi0 PC00: _OSC failed
acpicmos0 at acpi0
cpu0: using VERW MDS workaround
pvbus0 at mainbus0: bhyve
pci0 at mainbus0 bus 0
0:4:0: mem address conflict 0xc0000000/0x2000
0:6:0: mem address conflict 0xc0002000/0x2000

[NOTICE: Zone halted]

Oups. Apparemment, ça ne fonctionne pas et c’est connu et ce message semble indiquer que c’est un problème dans Bhyve, pourtant il y a plusieurs rapports de succès dans FreeBSD et FreeNAS.