Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch bhyve Excluding Merge-Ins
This is equivalent to a diff from 0b669eb036 to 8ce3666331
2023-11-09
| ||
01:54 | merge bhyve - use a makefile - UEFI boot instead of bhyveload - support rebooting - support CURRENT check-in: cef3e91bc3 user: patmaddox tags: old-trunk | |
01:49 | bhyve: UEFI boot instead of using bhyveload Closed-Leaf check-in: 8ce3666331 user: patmaddox tags: bhyve | |
01:48 | bhyve: making the VM does not require an iface, only booting does check-in: 0561e4111d user: patmaddox tags: bhyve | |
2023-05-14
| ||
05:44 | bhyve: start a script that just loads `vmm.ko` on demand check-in: cf96a69cb4 user: patmaddox tags: bhyve | |
05:16 | sh: alias j=just in home dir; t=open new terminal tab check-in: 09269c0e06 user: patmaddox tags: old-trunk | |
2023-05-13
| ||
05:48 | fossil: `just branch` to make / switch to a branch checkout check-in: 0b669eb036 user: patmaddox tags: old-trunk | |
03:49 | fossil: ignore backup fossil files check-in: 7d74576efa user: patmaddox tags: old-trunk | |
Added experiments/bhyve/Makefile.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | VM= newhost VERS= 13.2-RELEASE DOWNLOAD= https://download.freebsd.org/releases/amd64/${VERS} .if ${VERS} == CURRENT DOWNLOAD= https://download.freebsd.org/snapshots/amd64/15.0-CURRENT .endif .PHONY: new-vm dist dist: dist/${VERS}-base.txz dist/${VERS}-kernel.txz dist/${VERS}-base.txz: fetch -o ${.TARGET} ${DOWNLOAD}/base.txz dist/${VERS}-kernel.txz: fetch -o ${.TARGET} ${DOWNLOAD}/kernel.txz new-vm: dist ./bhyve.sh new ${VM} |
Added experiments/bhyve/bhyve.sh.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | #!/bin/sh set -e # to mount and access the disk on the host: # mdconfig -a -t vnode -f guest.img # zpool import -f -R /mnt/myguest -N 16143602688976745622 -t zguest # zfs mount -a # zpool export zguest # mdconfig -d -u 0 # configure a new disk # truncate -s 10G new.img # mdconfig -a -t vnode -f new.img # gpart create -s gpt /dev/md0 # gpart add -a 4k -t freebsd-zfs /dev/md0 # zpool create -m none -o altroot=/mnt/myguest -o autoexpand=on -O atime=off -t zguest zroot /dev/md0p1 # this relies on host networking and NAT ## /etc/rc.conf: # ifconfig_bridge1_name="bhyves" # ifconfig_bhyves="inet 192.168.3.1/24 up" # ## /etc/pf.conf: # bhyve_if = "bhyves" # bhyve_net = $bhyve_if:network # # set skip on lo # scrub in # # nat on $ext_if from $bhyve_net -> ($ext_if:0) # # pass out # # block in # # pass in proto tcp to port { 22 } # pass in inet proto icmp icmp-type { echoreq } # pass on $bhyve_if from $bhyve_net ## load_vmm() { if ! kldstat | awk '{print $5}' | grep '^vmm.ko$'; then kldload vmm fi } _ifconfig() { iface=tap-${1} if ! ifconfig $iface > /dev/null; then ifconfig tap create name $iface fi (ifconfig bhyves | grep "member: $iface" > /dev/null) || ifconfig bhyves addm $iface } usage() { cat<<EOF Usage: ./bhyve.sh boot <vm> ./bhyve.sh new <vm> ./bhyve.sh mount <vm> ./bhyve.sh unmount <vm> EOF exit 1 } boot() { vm=$1 img=vms/${vm}.img if [ ! -f $img ]; then echo "error: $img not found" exit 1 fi load_vmm > /dev/null _ifconfig $vm bhyveload -c stdio -m 4096M -d $img $vm bhyve -c 4 -m 4096M -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,${iface} -s 3:0,virtio-blk,${img} -H -A -P -l com1,stdio $vm } new_vm() { vm=$1 img=vms/${vm}.img root=/mnt/bhyve-${vm} vers=${VERS:-13.2-RELEASE} base=dist/${vers}-base.txz kernel=dist/${vers}-kernel.txz if [ ! -f $base -o ! -f $kernel ]; then echo "error: make sure $base and $kernel are present" echo "suggestion: make dist" exit 1 fi mkdir -p vms truncate -s 24G $img mdconfig -a -t vnode -f $img gpart create -s gpt /dev/md0 gpart add -a 4k -t freebsd-zfs /dev/md0 zpool create -m / -o altroot=${root} -o autoexpand=on -O atime=off -t bhyve-${vm} zroot /dev/md0p1 tar -C $root -xzf $base tar -C $root -xzf $kernel touch ${root}/etc/fstab sysrc -f ${root}/etc/rc.conf hostname="${vm}" sysrc -f ${root}/etc/rc.conf zfs_enable="YES" sysrc -f ${root}/boot/loader.conf zfs_load="YES" unmount $vm } unmount() { vm=$1 zpool export bhyve-${vm} md=$(mdconfig -l -f vms/${vm}.img | sed -e 's/^md//') mdconfig -d -u $md rmdir /mnt/bhyve-${vm} } _mount() { vm=$1 img=vms/${vm}.img if [ ! -f $img ]; then echo "error: $img not found" exit 1 fi md=$(mdconfig -a -f $img) zid=$(zpool import -d /dev/${md}p1 | grep '^[[:space:]]* id: [[:digit:]]*' | awk '{print $2}') zpool import -f -R /mnt/bhyve-${vm} -t $zid bhyve-${vm} } case $1 in boot) if [ -z "$2" ]; then usage; fi boot $2 ;; new) if [ -z "$2" ]; then usage; fi new_vm $2 ;; mount) if [ -z "$2" ]; then usage; fi _mount $2 ;; unmount) if [ -z "$2" ]; then usage; fi unmount $2 ;; *) usage ;; esac |
Added experiments/bhyve/bin/boot.sh.
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/bin/sh vm=$1 iface=tap-${vm} img=vms/${vm}.img if [ ! -f $img ]; then echo "error: $img not found" exit 1 fi bhyve_exit=0 while [ $bhyve_exit -eq 0 ]; do bhyve -c 4 -m 4096M \ -s 0:0,hostbridge \ -s 1:0,lpc \ -s 2:0,virtio-net,${iface} \ -s 3:0,virtio-blk,${img} \ -H -A -P \ -l com1,stdio \ -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \ $vm bhyve_exit=$? done |
Added experiments/bhyve/bin/bridge.sh.
> > > > > | 1 2 3 4 5 | #!/bin/sh set -e if ! ifconfig $1 > /dev/null ; then ifconfig bridge create inet $2 name $1 up fi |
Added experiments/bhyve/bin/config.sh.
> > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/sh rc=${1}-rc.conf root=/mnt/bhyve-${1} vm_rc=${root}/etc/rc.conf if [ ! -f $rc ]; then echo "error: missing $rc" exit 1 fi sysrc -f ${root}/boot/loader.conf zfs_load="YES" sysrc -f ${vm_rc} zfs_enable="YES" commands=$(sed -e "s|^|sysrc -f $vm_rc |" $rc) eval "$commands" |
Added experiments/bhyve/bin/mount.sh.
> > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/sh vm=$1 img=vms/${vm}.img if [ ! -f $img ]; then echo "error: $img not found" exit 1 fi md=$(mdconfig -a -f $img) zid=$(zpool import -d /dev/${md}p1 | grep '^[[:space:]]* id: [[:digit:]]*' | awk '{print $2}') zpool import -f -R /mnt/bhyve-${vm} -t $zid bhyve-${vm} |
Added experiments/bhyve/bin/new-vm.sh.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #!/bin/sh set -e vm=$1 img=vms/${vm}.img root=/mnt/bhyve-${vm} boot=${root}-boot vers=${VERS:-13.2-RELEASE} base=dist/${vers}-base.txz kernel=dist/${vers}-kernel.txz if [ ! -f $base -o ! -f $kernel ]; then echo "error: make sure $base and $kernel are present" echo "suggestion: make dist" exit 1 fi mkdir -p vms truncate -s 24G $img md=$(mdconfig -a -t vnode -f $img) disk=/dev/${md} # boot partition gpart create -s gpt $disk gpart add -a 4k -s 40M -t efi $disk newfs_msdos -F 32 -c 1 ${disk}p1 # root partition gpart add -a 4k -t freebsd-zfs $disk zpool create -m / -o altroot=${root} -o autoexpand=on -O atime=off -t bhyve-${vm} zroot ${disk}p2 tar -C $root -xzf $base tar -C $root -xzf $kernel touch ${root}/etc/fstab # copy boot loader mount -t msdosfs -o longnames ${disk}p1 $boot mkdir -p ${boot}/EFI/BOOT cp ${root}/boot/loader.efi ${boot}/EFI/BOOT/BOOTX64.efi umount $boot |
Added experiments/bhyve/bin/tap.sh.
> > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 | #!/bin/sh set -e iface=tap-${1} bridge=$2 if ! ifconfig $iface > /dev/null; then ifconfig tap create name $iface fi (ifconfig $bridge | grep "member: $iface" > /dev/null) || ifconfig $bridge addm $iface |
Added experiments/bhyve/bin/unmount.sh.
> > > > > > > | 1 2 3 4 5 6 7 | #!/bin/sh vm=$1 zpool export bhyve-${vm} md=$(mdconfig -l -f vms/${vm}.img | sed -e 's/^md//') mdconfig -d -u $md rmdir /mnt/bhyve-${vm} |
Added experiments/bhyve/example-rc.conf.
> > > | 1 2 3 | hostname="example" ifconfig_vtnet0="192.168.6.2/24" defaultrouter="192.168.6.1" |
Added experiments/bhyve/example.mk.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | .PHONY: vm bridge iface boot vm: vms/example.img bridge: ./bin/bridge.sh bh2 192.168.5.1/24 iface: bridge ./bin/tap.sh example bh2 vms/example.img: example-rc.conf if [ -f ${.TARGET} ]; then ./bin/mount.sh example; else ./bin/new-vm.sh example; fi ./bin/config.sh example ./bin/unmount.sh example boot: vms/example.img iface ./bin/boot.sh example destroy: if [ -f /dev/vmm/example ]; then bhyvectl --destroy --vm=example; fi |