====== Installing and Running a Gentoo Linux guest in bhyve ======
This guide will help you install and run a Gentoo Linux guest in bhyve. I assume you have familiarity installing Gentoo, and have read the Handbook section [[https://www.freebsd.org/doc/handbook/virtualization-host-bhyve.html|FreeBSD as a Host with bhyve]].
===== Setup =====
- You must be root.
- Setup bhyve and a network interface as described in the handbook under "Preparing the Host." I assume ''%%tap0%%'' and ''%%bridge0%%'' for this guide.
- Create a zfs volume to store the Gentoo disk. In the handbook see "Using ZFS with bhyve Guests." For example, to create a 32 GB volume under the zroot zpool, do this: ''%%zfs create -V32G -o volmode=dev zroot/gentoo%%''
- install grub-bhyve ''%%pkg install grub-bhyve%%''
- create a directory on the host for all of your Gentoo bhyve-specific stuff: I assume ''%%/root/gentoo%%'' for this guide.
- download the Gentoo minimal install CD. The file path should be something like ''%%/root/gentoo/install-amd64-minimal-20190129T214502Z.iso%%''
===== Configuring grub-bhyve =====
Create ''%%/root/gentoo/device.map%%''. Do not use ~ in your paths, it doesn't work correctly with grub-bhyve.
(cd0) /root/gentoo/install-amd64-minimal-20190129T214502Z.iso
(hd0) /dev/zvol/zroot/gentoo
===== Running the Gentoo installer =====
- now run grub-bhyve. In this example I'm giving the guest 8GB RAM, and calling the vm ''%%gentoo%%''
''%%grub-bhyve -m /root/gentoo/device.map -r cd0 -M 8192M -d /grub gentoo%%''
- select the first boot option in grub or let the timeout expire. If you see a grub prompt and no boot options, something is wrong.
- grub-bhyve will return you to a terminal: that's good.
- now that we've loaded the installer kernel via Grub, run bhyve. For this command I'm giving the guest 6 cores and 8GB RAM, and continuing to call the vm ''%%gentoo%%''
''%%bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,/dev/zvol/zroot/gentoo -s 4:0,ahci-cd,/root/gentoo/install-amd64-minimal-20190129T214502Z.iso -l com1,stdio -c 6 -m 8192M gentoo%%''
- at this point you should be sitting at a livecd prompt, ready to install Gentoo.
===== Tips for configuring the Gentoo guest =====
By default, Gentoo's /etc/inittab has the serial consoles commented out. Make sure you uncomment s0 and s1 or you will not be able to login to your Gentoo guest with bhyve!
- When partitioning the disk, the ZFS disk volume in Linux is ''%%/dev/vda%%''.
- Make sure you open your firewall on the host for the guest with something like this:
pass quick on tap0 all
pass quick on bridge0 all
- Helpful config options for the kernel:
- Set the config options recommended in the Gentoo handbook first. [[https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel#Activating_required_options]]
- Add these options for a Virtualized Linux guest: [[https://wiki.gentoo.org/wiki/QEMU/Linux_guest#Kernel]]
- If you want the hardware random number generator from your host machine: ''%%Y Device Drivers->Character Devices->Hardware Random Number Generator Core Support->VirtIO Random Number Generator support%%''
- For the clock to be the same on both the host and the guest, do this.
- set your timezone to the same timezone as the host, as described in the Gentoo handbook.
- edit ''%%/etc/conf.d/hwclock%%'':
clock="local"
clock_hctosys="YES"
clock_systohc="NO"
- The terminal size defaults to 80x25 which is horrible when you're trying to configure kernel options with make menuconfig. Since Linux thinks this is a serial console, we can set the size like this:
stty rows 50 cols 100
dmesg
the dmesg seems to help it expand.
- Some helpful info here: [[https://github.com/churchers/vm-bhyve/issues/186]]
===== Grub2 Install on Gentoo Guest =====
- we're using BIOS, not UEFI, so edit /etc/portage/make.conf: ''%%GRUB_PLATFORMS="pc efi-64"%%''
- install grub2 and make sure it got the options right: ''%%emerge --ask --verbose sys-boot/grub:2%%''
- install grub to the "disk" ''%%grub-install /dev/vda%%''
- edit /etc/default/grub:
GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text
- run mkconfig: ''%%grub-mkconfig -o /boot/grub.cfg%%''
===== Running Gentoo guest with bhyve =====
- exit out of your chroot as described in the Gentoo handbook, and shutdown the installer environment cleanly.
- kill the vm: ''%%bhyvectl --destroy --vm=gentoo%%''
- Startup grub-bhyve and point it to the /boot partition on your Gentoo drive. I created my /boot on partition 2 of the disk, so it is ''%%-r hd0,2%%''. I'm giving the vm 8GB of RAM.
''%%grub-bhyve -m /root/gentoo/device.map -M 8192M -r hd0,2 -d /grub gentoo%%''
- Startup bhyve with 6 cores and 8 GB of RAM: ''%%bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,/dev/zvol/zroot/gentoo -s 4:0,virtio-rnd,/dev/random -l com1,stdio -c 6 -m 8192M gentoo%%''
----
{{tag>HowTo}}