This is another entry that is sponsored by fme AG company. If You have multiple Lenovo ThinkServer systems to manage You may do that by hand with entering UEFI/BIOS setup and doing needed things by hand … or You can setup a Lenovo XClarity Administrator VM.The problem is that this VM from Lenovo comes by default in three versions … and none of them is by default suited for FreeBSD Bhyve hypervisor.VHD for Windows Hyper-V hypervisor.OVA for VirtualBox and others that support OVA format.QCOW2 for Linux KVM based hypervisors.As usual I decided not to give up at that point and tried harder … and that trying led me to some interesting conclusions.I downloaded the QCOW2 version listed as lnvgy_sw_lxca_120-4.3.0_kvm_x86-64.qcow2 file – its about 3.2 GB in size.Then I created the Bhyve VM for that Linux system.freebsd # vm create lxca As I had the Lenovo image in QCOW2 format I used qemu-img(1) from the emulators/qemu package to convert it to RAW format that is suitable for FreeBSD Bhyve hypervisor.freebsd # pkg which -o $( which qemu-img )/usr/local/bin/qemu-img was installed by package emulators/qemufreebsd # \ qemu-img convert -f qcow2 -O raw \ lnvgy_sw_lxca_120-4.3.0_kvm_x86-64.qcow2 \ /vm/lxca/disk0.imgI then investigated what actually is on that raw disk and FreeBSD md(4) driver helped here beautifully. We will also use my mdconfig.sh script to make it easier.freebsd # mdconfig.sh -c disk0.imgIN: created vnode at /dev/md0freebsd # lsblk md0DEVICE MAJ:MIN SIZE TYPE LABEL MOUNTmd0 1:183 192G MBR - - -:- 993K - - - md0s1 1:184 24G linux-data ext2fs/ELR - md0s2 1:205 8G linux-data ext2fs/ELR_VAR_LOG - md0s3 1:206 160G linux-data ext2fs/ELR_LXCA_DATA -So … now we know that its an MBR partitioning scheme … which means UEFI boot is not possible – and this is where it gets ugly because Bhyve is not VirtualBox (and I admit this is one of the Bhyve downsides) which means we now have to find needed parameters for Bhyve to boot that Linux VM.We can at least mount these partitions to check what is in them … and also check the GRUB config. We will use lklfuse(8) from the filesystems/lkl package for that – lets try with the 1st partition.freebsd # pkg which -o $( which lklfuse ) /usr/local/bin/lklfuse was installed by package filesystems/lklfreebsd # mkdir -p /mnt/tmpfreebsd # lklfuse -o type=ext4 /dev/md0s1 /mnt/tmpfreebsd # ls -l /mnt/tmptotal 76drwxr-xr-x 2 root wheel 4096 Feb 19 2025 bindrwxr-xr-x 3 root wheel 4096 Apr 9 2025 bootlrwxrwxrwx 1 root wheel 28 Jun 6 2025 chroot -> /opt/lenovo/lxca/data/chrootdrwxr-xr-x 2 root wheel 4096 Feb 19 2025 devlrwxrwxrwx 1 800 800 26 Jun 6 2025 dump -> /opt/lenovo/lxca/data/dumpdrwxr-xr-x 66 root wheel 4096 Aug 28 00:40 etcdrwxr-xr-x 12 root wheel 4096 Aug 28 00:40 homedrwxr-xr-x 8 root wheel 4096 Feb 19 2025 liblrwxrwxrwx 1 root wheel 3 Jun 6 2025 lib64 -> libdrwx------ 2 root wheel 16384 Jun 6 2025 lost+founddrwxr-xr-x 2 root wheel 4096 Feb 19 2025 mediadrwxrwxr-x 2 root wheel 4096 Feb 19 2025 mntdrwxr-xr-x 7 root wheel 4096 Jun 6 2025 optdr-xr-xr-x 2 root wheel 4096 Feb 19 2025 procdrwxr-xr-x 10 root wheel 4096 Jun 6 2025 rundrwxr-xr-x 2 root wheel 4096 Feb 19 2025 sbindr-xr-xr-x 2 root wheel 4096 Feb 19 2025 syslrwxrwxrwx 1 root wheel 8 Jun 6 2025 tmp -> /var/tmpdrwxr-xr-x 11 root wheel 4096 Feb 19 2025 usrdrwxr-xr-x 11 root wheel 4096 Jun 6 2025 varfreebsd # ls -l /mnt/tmp/bootdrwxr-xr-x root wheel 4.0 KB 2025/06/06 14:10 grublrwxrwxrwx root wheel 16 B 2025/06/06 14:10 bzImage ⇒ bzImage-5.15.178.rw-r--r-- root wheel 11 MB 2025/02/19 22:20 bzImage-5.15.178.rw-r--r-- root wheel 2.5 MB 2025/02/19 22:20 initrdfreebsd # cat /mnt/tmp/boot/grub/grub.confdefault=0timeout=1title System Management Platform root (hd0,0) kernel /boot/bzImage ro console=tty0 console=ttyS0 root=LABEL=ELR clocksource_failover=acpi_pm net.ifnames=0 clocksource_failover=acpi_pm initrd /boot/initrdfreebsd # cd /freebsd # umount /mnt/tmpfreebsd # mdconfig.sh -d 0IN: deleted vnode at /dev/md0So … we know what the GRUB config looks like – lets try to translate that into FreeBSD Bhyve VM config. After playing some time I settled on this lxca VM config as shown below.freebsd # env EDITOR=cat vm config lxcaloader="grub"grub_run_partition="msdos1"grub_run_dir="/boot/grub"grub_run0="linux /boot/bzImage ro console=tty0 console=ttyS0 root=LABEL=ELR clocksource_failover=acpi_pm net.ifnames=0 clocksource_failover=acpi_pm"grub_run1="initrd /boot/initrd"cpu=3memory=16Gnetwork0_type="e1000"network0_switch="public"network0_mac="58:9c:fc:06:2e:71"network1_type="e1000"network1_switch="public"network1_mac="58:9c:fc:02:3b:c0"disk0_type="virtio-blk"disk0_name="disk0.img"uuid="53211072-22f1-43f0-97c4-fae86903b2fc"Then we need to start the VM with usual command.freebsd # vm start lxcaYou may (and should) trace the boot process with vm console {VM} command of course.freebsd # vm console lxcaYou will see lots of Linux boot messages both first from the Linux kernel itself and later from the booting process of applications/daemons/databases needed to start Lenovo XClarity Administrator appliance. After some time – definitely longer then shorter – You will see something like that below.************************************************************** This interface is not for user or customer usage ***********************************************************************------------------------------------------Lenovo LXCA - Version 4.3.0 build 120------------------------------------------eth0: flags=4163 mtu 1500 inet 10.1.1.52 netmask 255.255.255.0 broadcast 10.1.1.255 inet6 fe80::5a9c:fcff:fe06:2e71 prefixlen 64 scopeid 0x20 ether 58:9c:fc:06:2e:71 txqueuelen 1000 (Ethernet) RX errors 0 dropped 0 overruns 0 frame 0eth1: Disabledlocalhost login: This means that You can how try to access https://10.1.1.52/ in Your browser … and after I tried that I (of course) needed to accept the self generated certificate and then I saw this.Voila! It works! Now You can configure it from the browser as needed.Guide that really helped me to setup all these things right was the Lenovo XClarity Administrator – Users Guide that has this in its contents.It shows TWO network interfaces here – eth0 and eth1 – not just one – and when I used only one – everything failed – after I added 2nd network interface – everything started to work as desired.I do not have anything more to add here – I am really glad that I persisted hard to try all available options here – take care EOF