From 42df5930fed5058239ea71080c0029188e17ac1f Mon Sep 17 00:00:00 2001 From: michaeldexter Date: Sat, 23 Aug 2014 08:34:14 -0700 Subject: [PATCH] Revert c590c6d..33555c3 This rolls back to commit c590c6dc3c405943ebc71308b50aea69427ee9ba. --- README.md | 2 - install-snapshot.sh | 29 - known-issues.txt | 19 - mkvm.sh | 732 ++----- mkvm.sh.functions | 503 ++--- remove-most-vmrc.sh | 48 - remove-vmrc.sh | 47 - templates/install-templates.sh | 60 + templates/t_centos65 | 52 + templates/t_freebsd10 | 40 + templates/t_freebsd10malloc | 40 + templates/t_freebsd10zfs | 40 + templates/t_freebsd11current | 40 + templates/t_freebsd11currentzfs | 40 + templates/t_freebsd92 | 40 + templates/t_freebsd92stable | 40 + templates/t_freebsd92stablezfs | 40 + templates/t_freebsd92zfs | 40 + templates/t_freenas | 47 + templates/t_freenas-fetch.sh | 173 ++ templates/t_master_template | 47 + templates/t_openbsd | 27 + templates/t_openbsd-fetch.sh | 44 + templates/t_pfsense | 47 + templates/t_pfsense-fetch.sh | 195 ++ templates/t_ubuntu1304 | 29 + templates/t_ubuntu1310 | 29 + templates/virtio21pf/if_vtnet.ko | Bin 0 -> 41184 bytes templates/virtio21pf/virtio.ko | Bin 0 -> 18144 bytes templates/virtio21pf/virtio_balloon.ko | Bin 0 -> 11280 bytes templates/virtio21pf/virtio_blk.ko | Bin 0 -> 18544 bytes templates/virtio21pf/virtio_pci.ko | Bin 0 -> 21752 bytes templates/virtio21pf/virtio_scsi.ko | Bin 0 -> 34648 bytes templates/virtio83/if_vtnet.ko | Bin 0 -> 42312 bytes templates/virtio83/virtio.ko | Bin 0 -> 17592 bytes templates/virtio83/virtio_balloon.ko | Bin 0 -> 11208 bytes templates/virtio83/virtio_blk.ko | Bin 0 -> 18672 bytes templates/virtio83/virtio_pci.ko | Bin 0 -> 22760 bytes templates/virtio83/virtio_scsi.ko | Bin 0 -> 34136 bytes templates/virtio83pf/if_vtnet.ko | Bin 0 -> 41224 bytes templates/virtio83pf/virtio.ko | Bin 0 -> 18072 bytes templates/virtio83pf/virtio_balloon.ko | Bin 0 -> 11288 bytes templates/virtio83pf/virtio_blk.ko | Bin 0 -> 18560 bytes templates/virtio83pf/virtio_pci.ko | Bin 0 -> 20184 bytes templates/virtio84/if_vtnet.ko | Bin 0 -> 40224 bytes templates/virtio84/if_vtnet.ko.symbols | Bin 0 -> 129616 bytes templates/virtio84/virtio.ko | Bin 0 -> 18408 bytes templates/virtio84/virtio.ko.symbols | Bin 0 -> 89136 bytes templates/virtio84/virtio_balloon.ko | Bin 0 -> 11504 bytes templates/virtio84/virtio_balloon.ko.symbols | Bin 0 -> 45384 bytes templates/virtio84/virtio_blk.ko | Bin 0 -> 18752 bytes templates/virtio84/virtio_blk.ko.symbols | Bin 0 -> 68768 bytes templates/virtio84/virtio_pci.ko | Bin 0 -> 21960 bytes templates/virtio84/virtio_pci.ko.symbols | Bin 0 -> 94376 bytes templates/virtio84/virtio_scsi.ko | Bin 0 -> 34824 bytes templates/virtio84/virtio_scsi.ko.symbols | Bin 0 -> 149864 bytes templates/virtio91/if_vtnet.ko | Bin 0 -> 48728 bytes templates/virtio91/if_vtnet.ko.symbols | Bin 0 -> 138440 bytes templates/virtio91/virtio.ko | Bin 0 -> 21608 bytes templates/virtio91/virtio.ko.symbols | Bin 0 -> 92792 bytes templates/virtio91/virtio_balloon.ko | Bin 0 -> 15656 bytes templates/virtio91/virtio_balloon.ko.symbols | Bin 0 -> 49520 bytes templates/virtio91/virtio_blk.ko | Bin 0 -> 24360 bytes templates/virtio91/virtio_blk.ko.symbols | Bin 0 -> 74608 bytes templates/virtio91/virtio_pci.ko | Bin 0 -> 25168 bytes templates/virtio91/virtio_pci.ko.symbols | Bin 0 -> 97456 bytes templates/virtio91/virtio_scsi.ko | Bin 0 -> 47856 bytes templates/virtio91/virtio_scsi.ko.symbols | Bin 0 -> 166200 bytes usr/local/etc/rc.d/vm | 1345 ------------- .../vmrc/templates/dyn_fbsd10amd64_snap_raw | 56 - usr/local/vmrc/templates/dyn_flashrdamd64raw | 59 - usr/local/vmrc/templates/err_bitrigamd64iso | 58 - usr/local/vmrc/templates/err_centos65amd64iso | 58 - usr/local/vmrc/templates/err_centos7amd64iso | 58 - usr/local/vmrc/templates/err_coreosamd64iso | 58 - .../vmrc/templates/err_flashrd20140405i386raw | 59 - .../vmrc/templates/err_m0n0wall181amd64raw | 56 - .../vmrc/templates/err_ubuntu1404amd64iso | 58 - .../templates/fbsd10amd64_img_gpt_ufs_dist | 57 - .../templates/fbsd10amd64_img_gpt_zfs_dist | 59 - .../templates/fbsd10amd64_img_mbr_ufs_dist | 57 - .../templates/fbsd10amd64_malloc_gpt_ufs_dist | 57 - .../templates/fbsd10i386_img_gpt_ufs_dist | 57 - .../templates/fbsd11amd64_img_gpt_ufs_dist | 57 - .../templates/fbsd11amd64_img_gpt_zfs_dist | 57 - .../templates/fbsd11amd64_zvol_gpt_ufs_dist | 57 - .../templates/fbsd92amd64_img_gpt_ufs_dist | 57 - .../templates/fbsd93amd64_img_gpt_ufs_dist | 57 - .../templates/fbsd93amd64_img_gpt_zfs_dist | 58 - .../templates/fbsd93amd64_img_mbr_ufs_dist | 57 - usr/local/vmrc/templates/fbsd93amd64_iso | 58 - .../templates/fbsd93i386_img_gpt_ufs_dist | 57 - .../templates/fbsd93i386_img_mbr_ufs_dist | 57 - usr/local/vmrc/templates/fnas9217amd64raw | 56 - usr/local/vmrc/templates/master_template | 53 - usr/local/vmrc/templates/obsd55amd64iso | 58 - usr/local/vmrc/templates/obsd56amd64iso | 58 - usr/local/vmrc/templates/pfsense214amd64raw | 56 - .../vmrc/templates/reqtty_bsdrp151amd64raw | 59 - .../vmrc/templates/reqtty_mfsbsd10amd64raw | 59 - .../templates/reqtty_nas4free9201amd64raw | 59 - .../vmrc/templates/reqtty_pcbsd10amd64_iso | 58 - .../templates/reqtty_trueos10snapamd64_iso | 58 - .../reqvt_fbsd91amd64_img_gpt_ufs_dist | 57 - vm | 1769 +++++++++++++++++ usr/local/etc/vm.conf => vm.conf | 2 +- vmrc-instructions.txt | 398 ++-- 107 files changed, 3455 insertions(+), 4559 deletions(-) delete mode 100755 install-snapshot.sh delete mode 100644 known-issues.txt delete mode 100755 remove-most-vmrc.sh delete mode 100755 remove-vmrc.sh create mode 100755 templates/install-templates.sh create mode 100755 templates/t_centos65 create mode 100755 templates/t_freebsd10 create mode 100755 templates/t_freebsd10malloc create mode 100755 templates/t_freebsd10zfs create mode 100755 templates/t_freebsd11current create mode 100755 templates/t_freebsd11currentzfs create mode 100755 templates/t_freebsd92 create mode 100755 templates/t_freebsd92stable create mode 100755 templates/t_freebsd92stablezfs create mode 100755 templates/t_freebsd92zfs create mode 100755 templates/t_freenas create mode 100755 templates/t_freenas-fetch.sh create mode 100755 templates/t_master_template create mode 100755 templates/t_openbsd create mode 100755 templates/t_openbsd-fetch.sh create mode 100755 templates/t_pfsense create mode 100755 templates/t_pfsense-fetch.sh create mode 100755 templates/t_ubuntu1304 create mode 100755 templates/t_ubuntu1310 create mode 100755 templates/virtio21pf/if_vtnet.ko create mode 100755 templates/virtio21pf/virtio.ko create mode 100755 templates/virtio21pf/virtio_balloon.ko create mode 100755 templates/virtio21pf/virtio_blk.ko create mode 100755 templates/virtio21pf/virtio_pci.ko create mode 100755 templates/virtio21pf/virtio_scsi.ko create mode 100644 templates/virtio83/if_vtnet.ko create mode 100644 templates/virtio83/virtio.ko create mode 100644 templates/virtio83/virtio_balloon.ko create mode 100644 templates/virtio83/virtio_blk.ko create mode 100644 templates/virtio83/virtio_pci.ko create mode 100644 templates/virtio83/virtio_scsi.ko create mode 100755 templates/virtio83pf/if_vtnet.ko create mode 100755 templates/virtio83pf/virtio.ko create mode 100755 templates/virtio83pf/virtio_balloon.ko create mode 100755 templates/virtio83pf/virtio_blk.ko create mode 100755 templates/virtio83pf/virtio_pci.ko create mode 100755 templates/virtio84/if_vtnet.ko create mode 100755 templates/virtio84/if_vtnet.ko.symbols create mode 100755 templates/virtio84/virtio.ko create mode 100755 templates/virtio84/virtio.ko.symbols create mode 100755 templates/virtio84/virtio_balloon.ko create mode 100755 templates/virtio84/virtio_balloon.ko.symbols create mode 100755 templates/virtio84/virtio_blk.ko create mode 100755 templates/virtio84/virtio_blk.ko.symbols create mode 100755 templates/virtio84/virtio_pci.ko create mode 100755 templates/virtio84/virtio_pci.ko.symbols create mode 100755 templates/virtio84/virtio_scsi.ko create mode 100755 templates/virtio84/virtio_scsi.ko.symbols create mode 100755 templates/virtio91/if_vtnet.ko create mode 100755 templates/virtio91/if_vtnet.ko.symbols create mode 100755 templates/virtio91/virtio.ko create mode 100755 templates/virtio91/virtio.ko.symbols create mode 100755 templates/virtio91/virtio_balloon.ko create mode 100755 templates/virtio91/virtio_balloon.ko.symbols create mode 100755 templates/virtio91/virtio_blk.ko create mode 100755 templates/virtio91/virtio_blk.ko.symbols create mode 100755 templates/virtio91/virtio_pci.ko create mode 100755 templates/virtio91/virtio_pci.ko.symbols create mode 100755 templates/virtio91/virtio_scsi.ko create mode 100755 templates/virtio91/virtio_scsi.ko.symbols delete mode 100755 usr/local/etc/rc.d/vm delete mode 100755 usr/local/vmrc/templates/dyn_fbsd10amd64_snap_raw delete mode 100755 usr/local/vmrc/templates/dyn_flashrdamd64raw delete mode 100755 usr/local/vmrc/templates/err_bitrigamd64iso delete mode 100755 usr/local/vmrc/templates/err_centos65amd64iso delete mode 100755 usr/local/vmrc/templates/err_centos7amd64iso delete mode 100755 usr/local/vmrc/templates/err_coreosamd64iso delete mode 100755 usr/local/vmrc/templates/err_flashrd20140405i386raw delete mode 100755 usr/local/vmrc/templates/err_m0n0wall181amd64raw delete mode 100755 usr/local/vmrc/templates/err_ubuntu1404amd64iso delete mode 100755 usr/local/vmrc/templates/fbsd10amd64_img_gpt_ufs_dist delete mode 100755 usr/local/vmrc/templates/fbsd10amd64_img_gpt_zfs_dist delete mode 100755 usr/local/vmrc/templates/fbsd10amd64_img_mbr_ufs_dist delete mode 100755 usr/local/vmrc/templates/fbsd10amd64_malloc_gpt_ufs_dist delete mode 100755 usr/local/vmrc/templates/fbsd10i386_img_gpt_ufs_dist delete mode 100755 usr/local/vmrc/templates/fbsd11amd64_img_gpt_ufs_dist delete mode 100755 usr/local/vmrc/templates/fbsd11amd64_img_gpt_zfs_dist delete mode 100755 usr/local/vmrc/templates/fbsd11amd64_zvol_gpt_ufs_dist delete mode 100755 usr/local/vmrc/templates/fbsd92amd64_img_gpt_ufs_dist delete mode 100755 usr/local/vmrc/templates/fbsd93amd64_img_gpt_ufs_dist delete mode 100755 usr/local/vmrc/templates/fbsd93amd64_img_gpt_zfs_dist delete mode 100755 usr/local/vmrc/templates/fbsd93amd64_img_mbr_ufs_dist delete mode 100755 usr/local/vmrc/templates/fbsd93amd64_iso delete mode 100755 usr/local/vmrc/templates/fbsd93i386_img_gpt_ufs_dist delete mode 100755 usr/local/vmrc/templates/fbsd93i386_img_mbr_ufs_dist delete mode 100755 usr/local/vmrc/templates/fnas9217amd64raw delete mode 100755 usr/local/vmrc/templates/master_template delete mode 100755 usr/local/vmrc/templates/obsd55amd64iso delete mode 100755 usr/local/vmrc/templates/obsd56amd64iso delete mode 100755 usr/local/vmrc/templates/pfsense214amd64raw delete mode 100755 usr/local/vmrc/templates/reqtty_bsdrp151amd64raw delete mode 100755 usr/local/vmrc/templates/reqtty_mfsbsd10amd64raw delete mode 100755 usr/local/vmrc/templates/reqtty_nas4free9201amd64raw delete mode 100755 usr/local/vmrc/templates/reqtty_pcbsd10amd64_iso delete mode 100755 usr/local/vmrc/templates/reqtty_trueos10snapamd64_iso delete mode 100755 usr/local/vmrc/templates/reqvt_fbsd91amd64_img_gpt_ufs_dist create mode 100755 vm rename usr/local/etc/vm.conf => vm.conf (88%) diff --git a/README.md b/README.md index a2a97a9..25448b3 100644 --- a/README.md +++ b/README.md @@ -2,5 +2,3 @@ vmrc ==== vmrc is a Virtual Machine rc(8) script for managing bhyve, jail and QEMU virtual machines. - -As this is a work in progress, please consider feature requests before submitting patches. \ No newline at end of file diff --git a/install-snapshot.sh b/install-snapshot.sh deleted file mode 100755 index 5dfd9ba..0000000 --- a/install-snapshot.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -echo "Running: mkdir -p /usr/local/etc/rc.d/" -mkdir -p /usr/local/etc/rc.d/ -echo "Running: cp usr/local/etc/rc.d/vm /usr/local/etc/rc.d/" -cp usr/local/etc/rc.d/vm /usr/local/etc/rc.d/ - -echo "Running: chmod a+x /usr/local/etc/rc.d/vm" -chmod a+x /usr/local/etc/rc.d/vm -echo "Running: chmod a-w /usr/local/etc/rc.d/vm" -chmod a-w /usr/local/etc/rc.d/vm - -echo "Running: cp usr/local/etc/vm.conf /usr/local/etc/" -cp usr/local/etc/vm.conf /usr/local/etc/ - -echo "Creating /usr/local/vmrc directories" -mkdir -p /usr/local/vmrc/vm -mkdir -p /usr/local/vmrc/distributions -mkdir -p /usr/local/vmrc/templates/virtio - -echo "Running: cp -rp usr/local/vmrc/templates/* /usr/local/vmrc/templates/" -cp -rp usr/local/vmrc/templates/* /usr/local/vmrc/templates/ - -#echo "Running: cp -rp templates/virtio* /usr/local/vmrc/templates/" -#cp -rp templates/virtio* /usr/local/vmrc/templates/ - -echo -echo "At a minimum, verify the network device in /usr/local/etc/vm.conf" -echo diff --git a/known-issues.txt b/known-issues.txt deleted file mode 100644 index 1a5e491..0000000 --- a/known-issues.txt +++ /dev/null @@ -1,19 +0,0 @@ - -Welcome brave soul, - -This has a few know issues and concerns but I am attending to them ASAP: - -1. Templates prefixed with err_ (esp. Linux) need attention. -2. Templates prefixed with dyn_ need frequent updating i.e. snapshots. -3. There may be a limit to the number of arguments (VMs) that can be fed into an - rc script: TEST -4. ZFS VMs have a naming limit of approximately 28 characters (to which "pool" - is appended) and this appears to be a bhyveload bug. -5. Whatever else you find. - -Spell checking and spaces to tabs all to come. - -Thanks! - -Michael Dexter - diff --git a/mkvm.sh b/mkvm.sh index f8f680b..eaa362b 100755 --- a/mkvm.sh +++ b/mkvm.sh @@ -1,9 +1,9 @@ #!/bin/sh -# -################################################################ LICENSE -# + +# Version v.0.5 + # Copyright (c) 2012-2014 Michael Dexter -# +# # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. @@ -15,16 +15,9 @@ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -############################################################ INFORMATION -# -# Title: make VM script -# Version: v.0.7 -# + # Script to provision FreeBSD Virtual Machines for use with vmrc -# -################################################################## USAGE -# + # Usage: # # Interactive: sh mkvm.sh @@ -33,75 +26,56 @@ vm_mountpoint="" # Initialize to be safe -echo -echo Reading the /usr/local/etc/vm.conf config file - . /usr/local/etc/vm.conf || \ - echo vm.conf config file failed to source. Exiting # ; exit 1 - -echo -echo Reading ./mkvm.sh.functions - . ./mkvm.sh.functions || \ - echo ./mkvm.sh.functions failed to source. Exiting # ; exit 1 +. /usr/local/etc/vm.conf +. ./mkvm.sh.functions -### STEP ONE : template to config file conversion and customization ### - -echo -echo Verifying that $host_vmdir exists and generating a new VM ID if [ ! $host_vmdir ]; then - echo The VM directory was not sourced from /usr/local/etc/vm.conf + echo "The VM directory was not sourced from /usr/local/etc/vm.conf" exit else - echo - echo Generating a new VM ID number vm_id=$( f_getnextid $host_vmdir ) - echo The resulting VM ID is $vm_id fi if [ $# -gt 0 ]; then # Non-interactive mode - echo ------------------------------------------------------------- - echo -------------- Running in non-interactive mode -------------- - echo ------------------------------------------------------------- - echo The requested template is $1 template=$1 vm_name=$2$vm_id else # Interactive mode - echo - echo Listing VMs in $host_vmdir + echo "Listing VMs in $host_vmdir" echo ls $host_vmdir echo - echo Listing templates in $host_templates + echo "Listing templates in $host_templates" echo ls $host_templates echo while : do - echo Enter a template to use: + echo "Enter a template to use:" echo read template # Better test? if [ "$template" = "" ]; then - echo No template entered. + echo "No template entered." echo - elif [ ! -f $host_templates/$template ]; then - echo Template $host_templates/$template \ -does not exist. + elif [ ! -f ${host_templates}/$template ]; then + echo "Template ${host_templates}/$template \ +does not exist." echo else break fi done - if [ ! -f $host_templates/$template ]; then - echo Template $host_templates/$template does not exist. - exit 1 + if [ ! -f ${host_templates}/$template ]; then + echo "Template ${host_templates}/$template does not exist." + exit fi vm_name=vm$vm_id - echo VM will be $vm_name by default. + echo "VM will be $vm_name by default." echo - echo Enter a custom name without ID or leave blank to keep $vm_name + echo "Enter a custom name without ID or leave blank to keep $vm_name" echo read vm_new_name if [ ! "$vm_new_name" = "" ]; then @@ -109,73 +83,75 @@ does not exist. fi fi - echo - echo The resulting VM will be named $vm_name + echo "The VM is named $vm_name" + +echo "debug: echoing template name" +echo $template if [ ! -f ${host_templates}/$template ]; then - echo Template $host_templates/$template does not exist. - exit 1 + echo "Template ${host_templates}/$template does not exist." + exit fi -echo -echo Verifying if the VM already exists and making -echo $host_vmdir/$vm_name/mnt -if [ -f $host_vmdir/$vm_name ]; then - echo $vm_name already exists. Exiting. - exit 1 +if [ -f ${host_vmdir}/${vm_name} ]; then + echo "$vm_name already exists. Something when wrong. Exiting." + exit else - echo Running mkdir -p $host_vmdir/$vm_name/mnt - mkdir -p $host_vmdir/$vm_name/mnt - if [ ! -d $host_vmdir/$vm_name/mnt ]; then - echo $host_vmdir/$vm_name/mnt was not created. Exiting. - exit 1 + mkdir -p ${host_vmdir}/${vm_name}/mnt + if [ ! -d ${host_vmdir}/${vm_name}/mnt ]; then + echo "${host_vmdir}/${vm_name}/mnt was not created. Exiting." + exit fi fi -echo -echo Running cp $host_templates/$template $host_vmdir/$vm_name/${vm_name}.conf -cp $host_templates/$template $host_vmdir/$vm_name/${vm_name}.conf +echo "Running: cp ${host_templates}/$template ${host_vmdir}/${vm_name}/${vm_name}.conf" +cp ${host_templates}/$template ${host_vmdir}/${vm_name}/${vm_name}.conf -echo -echo Listing the contents of $host_vmdir/$vm_name/ -ls $host_vmdir/$vm_name +echo "Listing the contents of ${host_vmdir}/${vm_name}" +ls ${host_vmdir}/${vm_name} -# Ideally we do this after the malloc vm_device is added to the template +# Ideally we do this after the malloc vm_device is set if [ $# = 0 ]; then # Interactive mode echo - echo Do you want to edit the configuration file in vi? y or n - echo - echo At this point you can set an existing VM boot device. + echo "Do you want to edit the configuration file in vi? y or n" + echo "At this point you can set an existing VM boot device." echo read edit_in_vi - case $edit_in_vi in + case "$edit_in_vi" in y) - vi $host_vmdir/$vm_name/${vm_name}.conf + vi ${host_vmdir}/${vm_name}/${vm_name}.conf + ;; + n) + continue ;; *) continue + ;; esac fi -echo -echo Reading the $host_vmdir/$vm_name/${vm_name}.conf config file - . $host_vmdir/$vm_name/${vm_name}.conf || \ - echo $vm_name config file failed to source. Exiting # ; exit 1 +# Hmm, create VM-specific iSCSI targets? (triggered from here) -### STEP TWO : VM Storage Preparation ### +echo "Sourcing the configuration file ${host_vmdir}/${vm_name}/${vm_name}.conf" +. ${host_vmdir}/${vm_name}/${vm_name}.conf -echo -echo Preparing VM storage - -# This WAS an option to override with an existing zvol -# was vm_zvol in the config file - reimplement -#if [ "vm_dev_type" = "zvol" ]; then -# echo Overriding vm_zvol with $vm_name -# vm_zvol=$vm_name -#fi -# keep around? lose? -#echo JustInCase-export-zvol??? WTF? -# The zvol could be mounted on the mount point! +echo "Overriding vm_pool with $vm_name" +vm_pool=$vm_name + +echo "Checking vm_dev_util from the config file to see if sourced correctly:" +if [ "$vm_os_type" = "" ]; then + echo "The configuration file was not sourced correctly. Exiting." + exit +else + echo "Configuration file read." +fi + +echo "The mount point will be ${host_vmdir}/${vm_name}/mnt/" +vm_mountpoint=${host_vmdir}/${vm_name}/mnt/ + +#echo JustInCase-export-pool +# The POOL could be mounted on the mount point! +# export $vm_pool #echo JustInCase-destroy-memory-dev #mdconfig -du $vm_device #echo JustInCase-ls-dev @@ -183,332 +159,63 @@ echo Preparing VM storage #echo JustInCase-remove-${host_vmdir}/vm${nextid}/vm${nextid}.img #rm ${host_vmdir}/vm${nextid}/vm${nextid}.img -if [ ! "$install_method" = "rawimg" ]; then -case $vm_dev_type in - device) # Use the device specified in the configuration file - return - ;; - malloc) # Create the malloc device - echo Creating the malloc device - md_device=$( mdconfig -a -t malloc -s $vm_dev_size ) - echo Running mdconfig -lv - mdconfig -lv - sed -i '' -e "s/vm_device=\"\"/vm_device=\"${md_device}\"/" ${host_vmdir}/${vm_name}/${vm_name}.conf - ;; - img) # Create a disk image - if [ ! -f $host_vmdir/$vm_name/${vm_name}.img ]; then - echo - echo Truncating $host_vmdir/$vm_name/${vm_name}.img -# BUG: Add a dd option because truncated files to not tar well - truncate -s $vm_dev_size $host_vmdir/$vm_name/${vm_name}.img - echo - echo Listing the contents of $host_vmdir/$vm_name/ - ls -lh $host_vmdir/$vm_name/${vm_name}.img - if [ ! -f $host_vmdir/$vm_name/${vm_name}.img ]; then - echo Disk image failed to create. Exiting - exit 1 - fi - fi - ;; - zvol) # Create a zvol - if [ ! -e /dev/zvol/$host_zpool/$vm_name ]; then - echo Creating zvol $host_zpool/$vm_name - zfs create -V $vm_dev_size $vm_dev_flags $host_zpool/$vm_name - zfs list | grep $vm_name - else - echo $host_zpool does not exist. Exiting - echo Compare your zpool name to /usr/local/etc/vm.conf - exit 1 - fi - ;; - *) # Something went wrong - echo vm_dev_type was not specified correctly. Exiting - exit 1 - # FYI: Provisioning master_template will fail here if crawled -esac -fi # end install_method=rawimg test - -# At this stage we should have a block device we can point the install at - -# May need to set vm_device to it? or, any mdconfig is later... - - -### STEP THREE : Fetch raw image, ISO or distribution sets ### - -# SIMPLIFICATION -# we know the payload name and could parse its ending for img|iso & xz|gz|other -# we could also parse a full url to a file but that would make for long config -# file entries and the parsing would have to be air-tight -# I swear I saw gunzip work on an xz file... easy to test -# With that, we just case/if it for the known endings (though, may not be compressed) -# I can gunzip .gz, .xz, .bz, .Z, ... is this libarchive at work? -# DON'T expand the dist sets... -# How about them 8.4 dist sets? HA HA HA HA -# pv? - - -echo -echo Fetching install media if not present in $host_distdir - -# This blindly fetches everything in $site_payload, reagardless of install type -for distset in $site_payload; do - if [ -f $host_distdir/$site_path$distset ]; then # File is present - echo - echo $host_distdir$site_path$distset already exists locally - else - mkdir -p $host_distdir$site_path # Harmless if present - echo - echo $host_distdir$site_path$distset is missing. Fetching -# Consider fetch -m mirror mode which verifies payload size BUT would not -# allow for offline use - fetch -m $install_site$site_path$distset -o \ - $host_distdir/$site_path/ - if [ ! -f $host_distdir/$site_path$distset ]; then - echo Distribution set did not fetch. Exiting - exit 1 - fi - fi -done - -# HOW THE HECK DO I TEST IF THIS OR THAT? -# TRY if [ foo -o bar ] -#if [ "$install_method" = "rawimg" ]; then -# extension=img -#elif [ "$install_method" = "isoimg" ]; then -# extension=iso -#if [ $install_method = rawimg ] | $install_method = isoimg ]; then # OR ISOIMG! -# case $install_method in -# rawimg) extension=img ;; -# isoimg) extension=iso -# esac - -# echo Extracting $site_payload to ${vm_name}.$extension -# gunzip -c $host_distdir/$site_path/$site_payload > \ -# $host_vmdir/$vm_name/${vm_name}.$extension -# if [ ! -f $host_vmdir/$vm_name/${vm_name}.$extension ]; then -# echo ${vm_name}.$extension Failed to extract. Exiting -# exit 1 -# fi -#fi - -echo -echo Expanding or copying the payload as necessary -case $install_method in # Note that gunzip will take .xz, .gz, .bz2, .Z! -# CHECK IF EITHER IS COMPRESSED FIRST!!! MOST ISO'S ARE NOT! -# Note that gunzip will ignore endings that it does not recognize - rawimg) - case $payload_compressed in - yes) echo ; echo Extracting $site_payload to ${vm_name}.img - gunzip -c $host_distdir/$site_path/$site_payload > \ - $host_vmdir/$vm_name/${vm_name}.img - ;; - "") echo ; echo Copying $site_payload to ${vm_name}.img - cp $host_distdir/$site_path/$site_payload \ - $host_vmdir/$vm_name/${vm_name}.img - esac - - if [ ! -f $host_vmdir/$vm_name/${vm_name}.img ]; then - echo - echo ${vm_name}.img Failed to extract or copy. Exiting - exit 1 - fi - - echo - echo Checking if a tty change is requested - if [ "$requires_tty" = "yes" ]; then - echo - echo Attaching ${vm_name}.img for tty change - vm_mountpoint=$host_vmdir/$vm_name/mnt/ - vm_device=$( mdconfig -af $host_vmdir/$vm_name/${vm_name}.img ) || - { echo ${vm_name}.img failed to attach. Exiting ; exit 1 ; } - echo - echo Running fsck on $vm_device$vm_dev_root - fsck_ufs -y $vm_device$vm_dev_root - - echo - echo Mounting $vm_device$vm_dev_root on $vm_mountpoint - mount /dev/$vm_device$vm_dev_root $vm_mountpoint - - echo - echo Verifying that VM mounted on its mount point - ( mount | grep -qw $vm_name/mnt ) || \ - { echo $1 did not mount. Exiting ; exit 1 ; } -# BUG: Note that the md will remain - - echo - echo Performing the tty change - f_config_ttys_preflight $vm_name # mount grep vm_name - f_config_ttys $vm_mountpoint - f_config_ttys_debug $vm_mountpoint - - echo - echo Unmounting $vm_mountpoint - umount -f $vm_mountpoint - - echo - echo Detaching memory device $vm_device - mdconfig -du $vm_device - fi - - echo - echo Directory structure ready and raw VM image fetched - echo - echo You can boot your VM with: - echo /usr/local/etc/rc.d/vm onestart $vm_name - echo - exit 1 - - ;; - isoimg) - case $payload_compressed in - yes) echo ; echo Extracting $site_payload to ${vm_name}.iso - gunzip -c $host_distdir/$site_path/$site_payload > \ - $host_vmdir/$vm_name/${vm_name}.iso -# BUG: Need a suffix-removal routine to link uncompressed ISOs. Or put in cfg -# Note: Who is shipping uncompressed ISOs? - ;; - "") echo ; echo Linking $site_payload to ${vm_name}.iso - ln -sf $host_distdir/$site_path/$site_payload \ - $host_vmdir/$vm_name/${vm_name}.iso - esac - - if [ ! -f $host_vmdir/$vm_name/${vm_name}.iso ]; then - echo ${vm_name}.iso Failed to extract or link. Exiting - exit 1 - fi - echo - echo Directory structure ready and ISO fetched. - echo - echo Note that FreeBSD ISO installations may require - echo this modication to /etc/ttys to boot properly: - echo - echo "ttyu0 \"/usr/libexec/getty 3wire.9600\" vt100 on secure" - echo - echo You can boot your VM with: - echo /usr/local/etc/rc.d/vm oneiso $vm_name - echo - exit 1 - -esac # ISO image installs are done at this point - -# The remainder of this script is the FreeBSD manually installation - -echo -echo Verifying that we are continuing with an artisnal FreeBSD provision - -echo -echo Verifying that we are continuing with an artisnal FreeBSD provision -if [ "$vm_os_type" = "freebsd" ]; then - case $install_method in - distset) continue ;; - obj) continue ;; - iso) exit 1 ;; - rawimg) exit 1 ;; - *) echo How did you get this far? ; exit 1 - esac -fi - -# Initialize vm_device variable - -echo Continuing with FreeBSD artisnal provisioning -echo -echo Initializing the vm_device variable -case $vm_dev_type in - device) # Use the device specified in the configuration file - return - ;; - malloc) # Continue with the attached malloc device - vm_device=$md_device - ;; - img) # Attach the disk image - vm_device=$( mdconfig -af $host_vmdir/$vm_name/${vm_name}.img ) || - { echo ${vm_name}.img failed to attach. Exiting ; exit 1 ; } - ;; - zvol) # Use the zvol that was created - vm_device=zvol/$host_zpool/$vm_name -esac - -echo -echo Prefixing $vm_device as /dev/$vm_device -vm_device=/dev/$vm_device - -echo -echo The resulting VM device is $vm_device -echo -echo Verifying that $vm_device exists -if [ -e $vm_device ]; then - echo Using $vm_device +echo "Preparing storage..." + +if [ ! $vm_device = "" ]; then + continue +elif [ $vm_dev_type = "malloc" ]; then + md_device=$( mdconfig -a -t malloc -s $vm_dev_size ) + sed -i '' -e "s/vm_device=\"\"/vm_device=\"${md_device}\"/" ${host_vmdir}/${vm_name}/${vm_name}.conf + vm_device="/dev/$md_device" + mdconfig -lv + echo "Looking at ${host_vmdir}/${vm_name}/${vm_name}.conf" + cat ${host_vmdir}/${vm_name}/${vm_name}.conf | grep vm_device else - echo VM device $vm_device failed to initialize. Exiting - exit 1 + truncate -s $vm_dev_size ${host_vmdir}/${vm_name}/${vm_name}.img + md_device=$( mdconfig -af "${host_vmdir}/${vm_name}/${vm_name}.img" ) + vm_device="/dev/$md_device" + mdconfig -lv fi -echo -echo Initializing the vm_mountpoint variable as -echo $host_vmdir/$vm_name/mnt/ -vm_mountpoint=$host_vmdir/$vm_name/mnt/ +echo "Running file ${host_vmdir}/vm${nextid}/vm${nextid}.img" +file ${host_vmdir}/${vm_name}/${vm_name}.img -echo -echo Running f_${vm_dev_util}_${vm_dev_layout}_layout -f_${vm_dev_util}_${vm_dev_layout}_layout_preflight $vm_device -f_${vm_dev_util}_${vm_dev_layout}_layout $vm_device -f_${vm_dev_util}_${vm_dev_layout}_layout_debug $vm_device +echo "Running: f_"$vm_dev_util"_"$vm_dev_layout"_layout_preflight $vm_device" +f_"$vm_dev_util"_"$vm_dev_layout"_layout_preflight $vm_device +f_"$vm_dev_util"_"$vm_dev_layout"_layout $vm_device +f_"$vm_dev_util"_"$vm_dev_layout"_layout_debug $vm_device +file ${host_vmdir}/${vm_name}/${vm_name}.img -# pointless here if a zvol move to function, need to test either way -echo -echo Running file on $host_vmdir/$vm_name/${vm_name}.img -file $host_vmdir/$vm_name/${vm_name}.img - -echo -echo Running f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_boot -f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_boot_preflight $vm_device -f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_boot $vm_device -f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_boot_debug $vm_device - -# again, pointless here -echo -echo Running file on $host_vmdir/$vm_name/${vm_name}.img -file $host_vmdir/$vm_name/${vm_name}.img -# Push test to function? +f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_boot_preflight $vm_device +f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_boot $vm_device +f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_boot_debug $vm_device +file ${host_vmdir}/${vm_name}/${vm_name}.img #f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_bootmgr_preflight $vm_device #f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_bootmgr $vm_device #f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_bootmgr_debug $vm_device #file ${host_vmdir}/${vm_name}/${vm_name}.img -echo debug -ls ${vm_device}* -zfs list +if [ $vm_dev_fs = "zfs" ]; then + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_part_preflight $vm_device + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_part $vm_device + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_part_debug $vm_device -echo -echo Formatting ZFS or UFS storage as appropriate -if [ "$vm_dev_fs" = "zfs" ]; then - # Name the VM's pool in a non-conflicting way - # One pool name for all VM's would be a dissaster when mounted on host - vm_pool=${vm_name}pool - - echo - echo Running f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_part - f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_part_preflight $vm_device - f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_part $vm_device - f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_part_debug $vm_device - - echo - echo Destroying the pool just in case + echo JustInCase-destroy-pool zpool destroy $vm_pool - case $vm_dev_layout in + case "$vm_dev_layout" in mbr) - echo Destroying the gnop just in case + echo JustInCase-destroy-gnop gnop destroy -f ${vm_device}s1a.nop ;; gpt) - echo Destroying the gnop just in case + echo JustInCase-destroy-gnop gnop destroy -f ${vm_device}p2.nop ;; *) - echo Invalid VM device layout + info "Invalid VM device layout" return esac @@ -516,159 +223,105 @@ if [ "$vm_dev_fs" = "zfs" ]; then #echo manually-adding-boot-code #dd if=/boot/zfsboot of=${vm_device}s1a skip=1 seek=1024 - echo - echo Running f_${vm_dev_util}_${vm_dev_layout}_zpool - f_${vm_dev_util}_${vm_dev_layout}_zpool_preflight $vm_device $vm_pool $vm_mountpoint - f_${vm_dev_util}_${vm_dev_layout}_zpool $vm_device $vm_pool $vm_mountpoint - f_${vm_dev_util}_${vm_dev_layout}_zpool_debug $vm_device $vm_pool $vm_mountpoint - echo Running file on ${host_vmdir}/${vm_name}/${vm_name}.img + f_"$vm_dev_util"_"$vm_dev_layout"_zpool_preflight $vm_device $vm_pool $vm_mountpoint + f_"$vm_dev_util"_"$vm_dev_layout"_zpool $vm_device $vm_pool $vm_mountpoint + f_"$vm_dev_util"_"$vm_dev_layout"_zpool_debug $vm_device $vm_pool $vm_mountpoint file ${host_vmdir}/${vm_name}/${vm_name}.img - # Push test to function? - echo - echo Running zpool import + echo zpool-import zpool import - echo - echo Running zpool import -o cachefile=none -R $vm_mountpoint $vm_pool + echo zpool-import-pool zpool import -o cachefile=none -R $vm_mountpoint $vm_pool - echo - echo Running zpool list pipe grep $vm_pool + echo zpool-zfs-list-mount zpool list | grep $vm_pool zfs list | grep $vm_pool - echo Running mount pip grep $vm_pool mount | grep $vm_pool +else + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs_preflight $vm_device + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs $vm_device + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs_debug $vm_device -else # UFS - -# BUG: Missing MBR variant. Does this even belong here? -# echo -# echo Running f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs -# f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs_preflight $vm_device -# f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs $vm_device -# f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs_debug $vm_device - - case $vm_dev_layout in + case "$vm_dev_layout" in mbr) - echo - echo Running f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_newfs_bootable - f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_newfs_bootable_preflight $vm_device - f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_newfs_bootable $vm_device - f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_newfs_bootable_debug $vm_device + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs_bootable_preflight $vm_device + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs_bootable $vm_device + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs_bootable_debug $vm_device ;; gpt) - echo - echo Running f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_newfs - f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_newfs_preflight $vm_device - f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_newfs $vm_device - f_${vm_dev_util}_${vm_dev_layout}_${vm_dev_fs}_newfs_debug $vm_device + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs_preflight $vm_device + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs $vm_device + f_"$vm_dev_util"_"$vm_dev_layout"_"$vm_dev_fs"_newfs_debug $vm_device ;; *) - echo Invalid VM device layout + info "Invalid VM device layout" return esac - echo - echo Running ls $vm_device asterisk ls ${vm_device}* -echo -echo Mounting UFS-based storage if requested -# fsck is pointless as a test on a new device -# Note s1a/p2 - push or pull to/from config - case $vm_dev_layout in +# fsck is pointless as a test on a new device AND his sometimes +# hard-crashing PC-BSD + case "$vm_dev_layout" in mbr) # echo runningfsck # fsck_ufs -y ${vm_device}s1a - echo Mounting ${vm_device}s1a on $vm_mountpoint + echo runningMount mount ${vm_device}s1a $vm_mountpoint ;; - gpt) # echo runningfsck # fsck_ufs -y ${vm_device}p2 - echo Mounting ${vm_device}p2 on $vm_mountpoint + echo runningMount mount ${vm_device}p2 $vm_mountpoint ;; *) - echo Invalid VM device layout + info "Invalid VM device layout" return esac - echo Running ls $vm_mountpoint + echo running-ls ls $vm_mountpoint -# BUG: Could check for .snap on UFS filesystems -fi # end ZFS|UFS check +fi -# Safety belt but we could proabably use more -echo -echo Running mountpoint checks to avoid extracting to root -if [ "$vm_mountpoint" = "" ]; then - echo We do not want to install to root. Exiting - exit 1 -elif [ "$vm_mountpoint" = "/" ]; then - echo We do not want to install to root. Exiting - exit 1 + +if [ ! -d ${host_distdir}/${vm_os_ver} ]; then # Missing + echo "${host_distdir}/${vm_os_ver} is missing. Creating it." + mkdir -p ${host_distdir}/${vm_os_ver} fi -echo -echo Determining if install method is distribution set or src/obj -if [ "$install_method" = "distset" ]; then - echo - echo Running distribution set extraction loop - for distset in $site_payload; do - f_installset_preflight $host_distdir/$site_path/$distset \ - $vm_mountpoint - f_installset $host_distdir/$site_path/$distset $vm_mountpoint - f_installset_debug $host_distdir/$site_path/$distset $vm_mountpoint - done -elif [ "$install_method" = "obj" ]; then - echo - echo Verifying that sources and a built world and kernel are present - if [ ! -f $obj_srcdir/Makefile ]; then - echo Sources are not present in ${obj_srcdiri}. Exiting - exit 1 - elif [ ! -d /usr/obj/usr ]; then - echo Built world not present in /usr/obj/. Exiting - exit 1 - elif [ ! -d /usr/obj/usr/src/sys ]; then - echo Built kernel not present in /usr/obj/. Exiting - exit 1 - fi +# PUSH THESE TO THE FUNCTIONS AS APPROPRIATE ONCE WORKING - echo - echo Changing to the source directory for an obj installation - cd $obj_srcdir - echo - echo Running make installworld to $vm_mountpoint - make installworld DESTDIR=$vm_mountpoint - echo - echo Running make installkernel to $vm_mountpoint - make installkernel DESTDIR=$vm_mountpoint - echo - echo Running make distribution to $vm_mountpoint - make distribution DESTDIR=$vm_mountpoint -else - echo - echo Install method not set. Exiting - exit 1 +# todo: if vm_os_type=freebsd8... fetch segments and re-package + +for distset in $vm_distsets; do +if [ ! -f ${host_distdir}/${vm_os_ver}/$distset ]; then # Missing + echo "${host_distdir}/${vm_os_ver}/$distset is missing. Fetching." + + fetch ${dist_site}/${distset} -o ${host_distdir}/${vm_os_ver}/ fi -echo -echo Running ls $vm_mountpoint +if [ ! -e ${host_distdir}/${vm_os_ver}/$distset ]; then # Still missing + echo "$distset did not fetch. Exiting." + exit +fi + + f_installset_preflight ${host_distdir}/${vm_os_ver}/$distset \ + $vm_mountpoint + f_installset ${host_distdir}/${vm_os_ver}/$distset $vm_mountpoint + f_installset_debug ${host_distdir}/${vm_os_ver}/$distset $vm_mountpoint +done + +echo "Running ls $vm_mountpoint" ls $vm_mountpoint -echo -echo Configuring loader f_config_loader_conf_preflight $vm_mountpoint f_config_loader_conf $vm_mountpoint f_config_loader_conf_debug $vm_mountpoint -echo -echo Configuing fstab -if [ "$vm_dev_fs" = "zfs" ]; then +if [ $vm_dev_fs = "zfs" ]; then f_config_zfs_fstab_preflight $vm_mountpoint f_config_zfs_fstab $vm_mountpoint f_config_zfs_fstab_debug $vm_mountpoint @@ -678,72 +331,85 @@ else f_config_"$vm_dev_layout"_fstab_debug $vm_mountpoint fi -echo -echo Checking if a tty change is requested -if [ "$requires_tty" = "yes" ]; then - f_config_ttys_preflight $vm_name - f_config_ttys $vm_mountpoint - f_config_ttys_debug $vm_mountpoint -fi +f_config_ttys_preflight $vm_mountpoint +f_config_ttys $vm_mountpoint +f_config_ttys_debug $vm_mountpoint -echo -echo Configuring time zone f_config_tz_preflight $vm_mountpoint $vm_timezone f_config_tz $vm_mountpoint $vm_timezone f_config_tz_debug $vm_mountpoint $vm_timezone -echo -echo Configuring rc.conf f_config_rc_conf_preflight $vm_mountpoint $vm_hostname $vm_ipv4 $vm_gw f_config_rc_conf $vm_mountpoint $vm_hostname $vm_ipv4 $vm_gw f_config_rc_conf_debug $vm_mountpoint $vm_hostname $vm_ipv4 $vm_gw -echo -echo Configuring resolv.conf -if [ ! "$vm_ipv4" = "" ]; then f_config_resolv_conf_preflight $vm_mountpoint $vm_searchdomain $vm_dns f_config_resolv_conf $vm_mountpoint $vm_searchdomain $vm_dns f_config_resolv_conf_debug $vm_mountpoint $vm_searchdomain $vm_dns -fi -echo -echo Enabling ssh root access f_config_sshd_root_preflight $vm_mountpoint f_config_sshd_root $vm_mountpoint f_config_sshd_root_debug $vm_mountpoint -echo -echo Setting root password f_set_password_preflight $vm_password $vm_mountpoint f_set_password $vm_password $vm_mountpoint f_set_password_debug $vm_password $vm_mountpoint +#ls ${vm_device}* + ### LAST CHANCE TO MODIFIY THE VM FILESYSTEM ### ### Modify or copy in files as appropriate ### -echo -echo Exporting or unmounting -if [ "$vm_dev_fs" = "zfs" ]; then - echo - echo Exporting pool $vm_pool + + +if [ $vm_dev_fs = "zfs" ]; then + echo exporting-pool zpool export $vm_pool else - echo - echo Unmounting $vm_mountpoint + echo unmounting-vm-mount-point umount -f $vm_mountpoint fi -if [ "$vm_dev_type" = "malloc" ]; then - echo - echo Leaving memory device $md_device attached for use +if [ $vm_dev_type = "malloc" ]; then + echo "Leaving malloc device $vm_device attached for use" else - echo - echo Detaching memory device $vm_device + echo detaching-md mdconfig -du $vm_device fi echo -echo You can boot your VM with: -echo /usr/local/etc/rc.d/vm onestart $vm_name +echo "$vm_name Provisioned with IP address $vm_ipv4" echo + +if [ $# = 0 ]; then # Interactive mode + echo + echo "Do you want to start it? y or n" + echo + read startvm + case "$startvm" in + y) + service vm start $vm_name + ;; + n) + exit + ;; + *) + exit + ;; + esac +fi + +# Optional rename syntax +# if [ ! vm_new_name = "" ]; then +# mv ${host_vmdir}/${vm_name} ${host_vmdir}/${vm_new_name} +# mv ${host_vmdir}/${vm_new_name}/${vm_name}.conf \ +# ${host_vmdir}/${vm_new_name}/${vm_new_name}.conf +# if [ -f ${host_vmdir}/${vm_new_name}/${vm_name}.img ]; then +# mv ${host_vmdir}/${vm_new_name}/${vm_name}.img \ +# ${host_vmdir}/${vm_new_name}/${vm_new_name}.img +# fi +# fi + + + diff --git a/mkvm.sh.functions b/mkvm.sh.functions index 6c38f74..6e844f6 100755 --- a/mkvm.sh.functions +++ b/mkvm.sh.functions @@ -1,66 +1,43 @@ #!/bin/sh -# -################################################################ LICENSE -# -# Copyright (c) 2012-2014 Michael Dexter -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -############################################################ INFORMATION -# -# Title: make VM script function library -# Version: v.0.7 -# -# Functions used by the mkvm.sh Virtual Machine provisioning script -# -################################################################## USAGE - -f_timestamp() # A simple timestamp function -{ -echo $( date "+%Y%m%d-%H%M%S" ) -} - -# md(4) functions from vm and may be useful after mid-provision exits -f_getmdname() # vm_name # Retrieve md(4) IDs associated with $1 ($vm_name) -{ -# mdconfig -lv | awk -v vm_name="$1" \ -# '$0 ~ "^[^/]*/" vm_name "\.img$" { print $1 }' - local local_img_name=$1 # Takes vm_name, lacks `.img' suffix - mdconfig -lv | awk -v local_vmname="$local_img_name" ' - { - md=$1 - sub("^[^/]*", "") - if ($0 ~ "/" local_vmname "\.img$") - print md - }' -} - -f_mddestroy() # $1 ($vm_name) Destroy multiple md(4) IDs of $vm_name -{ - echo Destroying all memory devices associated with $1 - for dev in $( f_getmdname $1 ); do - echo Destroying mdconfig device $dev - mdconfig -du "$dev" - done -} +# FUNC OVERLOAD + +# BUG: loader.conf timeout is not working +# BUG: WRONG BOOT LOADER? ........................ +# Templates! +# vmrc dist options... tar without cat +# Test above all, check for clean zfs mountpoint! +# TESTS! VALIDATE INPUT (DOES DEV EXIST?), exit codes. graph it all? +# FUTURE: What labling? Serial number when available? +# FUTURE: more than ONE FILESYSTEM PER DEVICE FOR VM USE, swap, raidz +# ... encryption +# NOTE FREENAS storage fs's want swap! +# How to align UFS block sizes? +# NO fdiskmbr for 4k devices! +# FSCK 'EM as a test +# Is the PC-BSD service manager suppose to stop svcs when you disable them? +# dd should have a -u units flag: MB, GB... +#[ ! -e $1] && echo "$1 not found"; exit +# simple alignment test utility! +# logging with debug functions? +# typeset man page? +# http://www.allanjude.com/bsd/zfs-advanced.html +# http://svnweb.freebsd.org/base/head/usr.sbin/bsdinstall/scripts/zfsboot?view=markup&pathrev=259598 +# https://github.com/freenas/freenas/blob/master/gui/middleware/notifier.py#L1055 +# +# http://daemon-notes.com/articles/system/install-zfs/gpart +# http://daemon-notes.com/articles/system/advanced-format +# http://www.wonkity.com/~wblock/docs/html/disksetup.html +# https://wiki.freebsd.org/RootOnZFS/GPTZFSBoot/9.0-RELEASE +# http://daemonforums.org/showthread.php?t=8032 +# https://forums.freebsd.org/viewtopic.php?t=19093 f_wipe_dev() ## $1 dev ## - Wipe everything possible from a device { # NOTE /dev/label/ # CONSIDER SWAP OFF AND JOURNAL OFF, pool membership? # PC-BSD -# for i in `swapctl -l | grep "$DISK | awk '{print $1}'` +# for i in `swapctl -l | grep "$DISK" | awk '{print $1}'` # do # swapoff ${i} >/dev/null 2>/dev/null # done @@ -91,20 +68,14 @@ f_wipe_dev() ## $1 dev ## - Wipe everything possible from a device # PARTITIONING # How about a check-alignment function? -# Optional data partitions would require sizes for all - -# Steps: - -# Create layout -# Create boot slice/partition -# Create data slice/partition and newfs it (bootable for mbr) +# Data partitions would require sizes for all # Create a traditional fdisk/MBR layout f_fdisk_mbr_layout_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." +# EXIT! } f_fdisk_mbr_layout() ## $1 dev ## @@ -114,8 +85,7 @@ f_fdisk_mbr_layout() ## $1 dev ## f_fdisk_mbr_layout_debug() ## $1 dev ## { - echo - echo Running ls on the $1 asterisk + echo "Simple debug output" ls ${1}* # /dev/md0s1 # test: file diska.img: x86 boot sector; partition 1: ID=0xa5, active, starthead 1, startsector 63, 2088387 sectors, code offset 0x31 @@ -127,9 +97,8 @@ f_fdisk_mbr_layout_debug() ## $1 dev ## # Create a gpart/MBR layout f_gpart_mbr_layout_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_mbr_layout() ## $1 dev ## @@ -156,27 +125,24 @@ f_gpart_mbr_layout() ## $1 dev ## f_gpart_gpt_layout_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." + echo CreatingLayout } f_gpart_gpt_layout() ## $1 dev ## { - echo Creating Layout gpart create -s gpt $1 } f_gpart_gpt_layout_debug() ## $1 dev ## { - echo - echo Running ls on $1 asterisk + echo "Simple debug output" # file ls ${1}* - echo - echo Running gpart show $1 + echo "Running gpart show $1" gpart show $1 -# echo Running gpart show ${1}p1 +# echo "Running gpart show ${1}p1" # gpart show ${1}p1 # gpart show #=> 34 2097085 md1 GPT (1.0G) @@ -190,9 +156,8 @@ f_gpart_gpt_layout_debug() ## $1 dev ## # Install boot code to an fdisk/MBR layout f_fdisk_mbr_ufs_boot_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_fdisk_mbr_ufs_boot() ## $1 dev ## @@ -203,8 +168,8 @@ f_fdisk_mbr_ufs_boot() ## $1 dev ## f_fdisk_mbr_ufs_boot_debug() ## $1 dev ## { - echo Running ls $1 - ls $1 + echo "Simple debug output" + ls ${1} # Should this have created /dev/mdNs1a ? } @@ -213,22 +178,19 @@ f_fdisk_mbr_ufs_boot_debug() ## $1 dev ## # Will this only give the menu if there are multiple slices/drives? f_fdisk_mbr_ufs_bootmgr_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_fdisk_mbr_ufs_bootmgr() ## $1 dev ## Same as fdisk -B -b /boot/boot0 { - bsdlabel -w -B -b /boot/boot0 ${1}s1 + bsdlabel -w -B -b /boot/boot0 "${1}s1" # creates /dev/md0s1a surprisingly why? } f_fdisk_mbr_ufs_bootmgr_debug() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple debug output" } @@ -236,9 +198,8 @@ f_fdisk_mbr_ufs_bootmgr_debug() ## $1 dev ## # Install boot code to a gpart/MBR/UFS layout f_gpart_mbr_ufs_boot_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_mbr_ufs_boot() ## $1 dev ## no freebsd-boot! @@ -252,7 +213,7 @@ f_gpart_mbr_ufs_boot() ## $1 dev ## no freebsd-boot! f_gpart_mbr_ufs_boot_debug() ## $1 dev ## { - echo Running ls $1 asterisk + echo "Simple debug output" ls ${1}* gpart show $1 } @@ -261,9 +222,8 @@ f_gpart_mbr_ufs_boot_debug() ## $1 dev ## # Install the boot0 boot manager to a gpart/MBR/UFS layout f_gpart_mbr_ufs_bootmgr_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_mbr_ufs_bootmgr() ## $1 dev ## @@ -275,9 +235,8 @@ f_gpart_mbr_ufs_bootmgr() ## $1 dev ## f_gpart_mbr_ufs_bootmgr_debug() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple debug output" + echo } @@ -285,31 +244,29 @@ f_gpart_mbr_ufs_bootmgr_debug() ## $1 dev ## # Install the boot0 boot manager to a gpart/MBR/UFS layout f_gpart_gpt_ufs_boot_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_gpt_ufs_boot() ## $1 dev ## active by default? boot0 mgr? { -# Note alignment. Change? +# Note alignment gpart add -s 512k -a 4k -t freebsd-boot $1 gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 $1 } f_gpart_gpt_ufs_boot_debug() ## $1 dev ## { - echo Running gpart show $1 - gpart show $1 + echo "Simple debug output" + echo } # Install the boot0 boot manager to a gpart/GPT/UFS layout f_gpart_gpt_ufs_bootmgr_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_gpt_ufs_bootmgr() ## $1 dev ## active by default? boot0 mgr? @@ -321,9 +278,9 @@ f_gpart_gpt_ufs_bootmgr() ## $1 dev ## active by default? boot0 mgr? gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 $1 } -f_gpart_gpt_ufs_bootmgr_debug() ## $1 dev ## +f_gpart_gpt_ufs_bootmgr() ## $1 dev ## { - echo Simple debug output + echo "Simple debug output" echo } @@ -331,14 +288,13 @@ f_gpart_gpt_ufs_bootmgr_debug() ## $1 dev ## # Install boot code to a gpart/MBR/ZFS layout f_gpart_mbr_zfs_boot_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." + echo AddingBootCode } f_gpart_mbr_zfs_boot() ## $1 dev ## { - echo Adding Boot Code gpart bootcode -b /boot/mbr $1 #CHECK THIS ONE: gpart set -a active -i 1 $1 @@ -352,7 +308,7 @@ f_gpart_mbr_zfs_boot() ## $1 dev ## f_gpart_mbr_zfs_boot_debug() ## $1 dev ## { - echo Running ls and gpart show on $1 + echo "Simple debug output" #file 2gb.img ls ${1}* gpart show $1 @@ -364,9 +320,8 @@ f_gpart_mbr_zfs_boot_debug() ## $1 dev ## # Install the boot0 boot manager to a gpart/MBR/ZFS layout f_gpart_mbr_zfs_bootmgr_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_mbr_zfs_bootmgr() ## $1 dev ## @@ -382,7 +337,7 @@ f_gpart_mbr_zfs_bootmgr() ## $1 dev ## f_gpart_mbr_zfs_bootmgr_debug() ## $1 dev ## { - echo Simple debug output + echo "Simple debug output" echo } @@ -390,9 +345,8 @@ f_gpart_mbr_zfs_bootmgr_debug() ## $1 dev ## # Install boot code to a gpart/GPT/ZFS layout - active by default? boot0 mgr? f_gpart_gpt_zfs_boot_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_gpt_zfs_boot() ## $1 dev ## @@ -405,7 +359,7 @@ f_gpart_gpt_zfs_boot() ## $1 dev ## f_gpart_gpt_zfs_boot_debug() ## $1 dev ## { - echo Running ls and gpart show on $1 + echo "Simple debug output" #file 2gb.img ls ${1}* gpart show $1 @@ -417,9 +371,8 @@ f_gpart_gpt_zfs_boot_debug() ## $1 dev ## # Install the boot0 boot manager to a gpart/GPT/ZFS layout f_gpart_gpt_zfs_bootmgr_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_gpt_zfs_bootmgr() ## $1 dev ## active by default? boot0 mgr? @@ -441,7 +394,7 @@ f_gpart_gpt_zfs_bootmgr() ## $1 dev ## active by default? boot0 mgr? f_gpart_gpt_zfs_bootmgr_debug() ## $1 dev ## { - echo Running ls on $1 asterisk + echo "Simple debug output" ls ${1}* } @@ -449,19 +402,18 @@ f_gpart_gpt_zfs_bootmgr_debug() ## $1 dev ## # Create a new fdisk/MBR/UFS bootable filesystem (better name) f_fdisk_mbr_ufs_newfs_bootable_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_fdisk_mbr_ufs_newfs_bootable() ## $1 dev ## { - newfs -U ${1}s1a + newfs -U "${1}s1a" } f_fdisk_mbr_ufs_newfs_bootable_debug() ## $1 dev ## { - echo Running ls and fdisk on $1 + echo "Simple debug output" ls ${1}* fdisk $1 } @@ -470,36 +422,34 @@ f_fdisk_mbr_ufs_newfs_bootable_debug() ## $1 dev ## # Create a new fdisk/MBR/UFS data filesystem (better name) f_fdisk_mbr_ufs_newfs_data_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_fdisk_mbr_ufs_newfs_data() ## $1 dev ## { - newfs -U ${1}s1 # IF A DATA DISK WITH NO BOOT! + newfs -U "${1}s1" # IF A DATA DISK WITH NO BOOT! } # Create a new gpart/MBR/UFS partition and filesystem f_gpart_mbr_ufs_newfs_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_mbr_ufs_newfs() ## $1 dev ## { # Note alignment gpart add -t freebsd-ufs -a 1m ${1}s1 - newfs -U ${1}s1a + newfs -U "${1}s1a" # was giving: gpart: autofill: No space left on device } f_gpart_mbr_ufs_newfs_debug() ## $1 dev ## { - echo Running ls and gpart show on $1 + echo "Simple debug output" ls ${1}* gpart show $1 } @@ -508,21 +458,20 @@ f_gpart_mbr_ufs_newfs_debug() ## $1 dev ## # Create a new gpart/GPT/UFS partition and filesystem f_gpart_gpt_ufs_newfs_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_gpt_ufs_newfs() ## $1 dev ## { # Note alignment gpart add -t freebsd-ufs -a 1m $1 - newfs -U ${1}p2 + newfs -U "${1}p2" } f_gpart_gpt_ufs_newfs_debug() ## $1 dev ## { - echo Running ls and gpart show on $1 + echo "Simple debug output" ls ${1}* gpart show $1 } @@ -531,9 +480,9 @@ f_gpart_gpt_ufs_newfs_debug() ## $1 dev ## # Create a new gpart/MBR/ZFS partition f_gpart_mbr_zfs_part_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." + echo AddingPartition } f_gpart_mbr_zfs_part() ## $1 dev ## @@ -544,7 +493,7 @@ f_gpart_mbr_zfs_part() ## $1 dev ## f_gpart_mbr_zfs_part_debug() ## $1 dev ## { - echo Running ls and gpart show on $1 + echo "Simple debug output" ls ${1}* gpart show $1 } @@ -553,9 +502,8 @@ f_gpart_mbr_zfs_part_debug() ## $1 dev ## # Create a new gpart/GPT/ZFS partition f_gpart_gpt_zfs_part_preflight() ## $1 dev ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." } f_gpart_gpt_zfs_part() ## $1 dev ## @@ -566,8 +514,8 @@ f_gpart_gpt_zfs_part() ## $1 dev ## f_gpart_gpt_zfs_part_debug() ## $1 dev ## { - echo Running ls and gpart show on $1 - ls ${1}* + echo "Simple debug output" +ls ${1}* gpart show $1 } @@ -582,13 +530,11 @@ f_gpart_gpt_zfs_part_debug() ## $1 dev ## # Create a new gpart/GPT/zpool f_gpart_mbr_zpool_preflight() ## $1 dev $2 pool name $3 mount point ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } - [ -e $3 ] || \ - { echo Mount point $3 does not exist. Exiting ; exit 1 ; } + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." + [ -e $1 ] || echo "Mount point $3 does not exist." ls $3 - echo You entered $2 and $3 + echo "You entered $2 and $3" } f_gpart_mbr_zpool() ## $1 dev $2 pool name $3 mount point ## @@ -596,8 +542,8 @@ f_gpart_mbr_zpool() ## $1 dev $2 pool name $3 mount point ## #kldload zfs # Note alignment gnop create -S 4096 ${1}s1a - echo debug: check for nop *s1a.nop ; ls ${1}s1a* - zpool create $vm_dev_flags -o cachefile=none -R $3 -m / $2 ${1}s1a.nop + echo "debug: check for nop *s1a.nop" ; ls ${1}s1a* + zpool create -o cachefile=none -R $3 -m / $2 ${1}s1a.nop # Allan: -R $3 (no mount point, no cache file, see man page) # -O canmount=off ? -m none -o altroot zpool export $2 @@ -607,21 +553,19 @@ f_gpart_mbr_zpool() ## $1 dev $2 pool name $3 mount point ## f_gpart_mbr_zpool_debug() ## $1 dev $2 pool name $3 mount point ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } - [ -e $3 ] || \ - { echo Mount point $3 does not exist. Exiting ; exit 1 ; } + echo "Simple debug output" + [ -e $1 ] || echo "Device $1 does not exist." + [ -e $1 ] || echo "Mount point $3 does not exist." ls $3 ls ${1}* gpart show $1 zpool import # zpool list | grep $2 # zfs list | grep $2 -# echo debug: zpool list | grep $2 ; zpool list | grep $2 -# echo debug: zfs list | grep $2 ; zfs list | grep $2 +# echo "debug: zpool list | grep $2" ; zpool list | grep $2 +# echo "debug: zfs list | grep $2" ; zfs list | grep $2 # needs to be imported first: -# echo debug: checking sector size ; zdb -C $pool | grep ashift +# echo "debug: checking sector size" ; zdb -C $pool | grep ashift } @@ -629,14 +573,11 @@ f_gpart_mbr_zpool_debug() ## $1 dev $2 pool name $3 mount point ## # Create a new gpart/GPT/zpool f_gpart_gpt_zpool_preflight() ## $1 dev $2 pool name $3 mount point ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } - [ -e $3 ] || \ - { echo Mount point $3 does not exist. Exiting ; exit 1 ; } - [ -e $1 ] || echo Mount point $3 does not exist. + echo "Simple preflight output" + [ -e $1 ] || echo "Device $1 does not exist." + [ -e $1 ] || echo "Mount point $3 does not exist." ls $3 - echo You entered $2 and $3 + echo "You entered $2 and $3" echo CreatingPool } @@ -645,8 +586,8 @@ f_gpart_gpt_zpool() ## $1 dev $2 pool name $3 mount point ## #kldload zfs # Note alignment gnop create -S 4096 ${1}p2 - echo inline debug: check for nop *p2.nop ; ls ${1}p2* - zpool create $vm_dev_flags -o cachefile=none -R $3 -m / $2 ${1}p2.nop + echo "inline debug: check for nop *p2.nop" ; ls ${1}p2* + zpool create -o cachefile=none -R $3 -m / $2 ${1}p2.nop # -O canmount=off ? -m none -o altroot zpool export $2 gnop destroy -f ${1}p2.nop @@ -655,22 +596,19 @@ f_gpart_gpt_zpool() ## $1 dev $2 pool name $3 mount point ## f_gpart_gpt_zpool_debug() ## $1 dev $2 pool name $3 mount point ## { - echo Verifying that $1 exists - [ -e $1 ] || \ - { echo Device $1 does not exist. Exiting ; exit 1 ; } - [ -e $3 ] || \ - { echo Mount point $3 does not exist. Exiting ; exit 1 ; } - [ -e $1 ] || echo Mount point $3 does not exist. + echo "Simple debug output" + [ -e $1 ] || echo "Device $1 does not exist." + [ -e $1 ] || echo "Mount point $3 does not exist." ls $3 ls ${1}* gpart show $1 zpool import # zpool list | grep $2 # zfs list | grep $2 -# echo debug: zpool list | grep $2 ; zpool list | grep $2 -# echo debug: zfs list | grep $2 ; zfs list | grep $2 +# echo "debug: zpool list | grep $2" ; zpool list | grep $2 +# echo "debug: zfs list | grep $2" ; zfs list | grep $2 # needs to be imported first: -# echo debug: checking sector size ; zdb -C $pool | grep ashift +# echo "debug: checking sector size" ; zdb -C $pool | grep ashift } @@ -715,7 +653,7 @@ f_gpart_gpt_zpool_debug() ## $1 dev $2 pool name $3 mount point ## # fdisk: invalid fdisk partition table found BUT creates /dev/md0s1 # test: file 2gb.img # 2gb.img: x86 boot sector; partition 1: ID=0xa5, active, starthead 1, startsector 63, 4192902 sectors, code offset 0x31 -#bsdlabel -wB ${1}s1 # bsdlabel -wB md0 creates md0a (DON'T WANT) +#bsdlabel -wB "${1}s1" # bsdlabel -wB md0 creates md0a (DON'T WANT) # test: bsdlabel md0s1 # test: bsdlabel -A md0s1 # copy off your labels? @@ -748,11 +686,11 @@ f_gpart_gpt_zpool_debug() ## $1 dev $2 pool name $3 mount point ## # gpart show ... freebsd(-boot) should start at a sane number # first partition -b 2048 ? then -b xxx/8 ? # other partions: use M and G and should be fine -#gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 $1 +#gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 "$1" #gpart add -a 1m -s 2g -t freebsd-swap $1 #gpart add -a 1m -s 1g -t freebsd-ufs $1 # -l label #gpart add -b 1m ??? -#newfs -U -S 4096 ${1}p2 # -L label +#newfs -U -S 4096 "${1}p2" # -L label # -b 4096 block size? -f 4096 frag-size? # want? gpart set -a active -i 1 ad0 # want? gpart set -a active -i 1 ad0 @@ -763,7 +701,7 @@ f_gpart_gpt_zpool_debug() ## $1 dev $2 pool name $3 mount point ## #/sbin/gnop create -S $BLOCKSIZE /dev/${1}p2 # /boot/zfs/zpool.cache # /data/zfs/zpool.cache -#/sbin/zpool create $vm_dev_flags -o cachefile=$ZCACHE/zpool.cache -O aclmode=passthrough -O aclinherit=passthrough -f -m $PATH -o altroot=/mnt $POOL /dev/$DEVICE"p2.nop" +#/sbin/zpool create -o cachefile=$ZCACHE/zpool.cache -O aclmode=passthrough -O aclinherit=passthrough -f -m $PATH -o altroot=/mnt $POOL /dev/$DEVICE"p2.nop" # manual raidz /dev/da1p2.nop /dev/da2p2.nop... #/sbin/zfs inherit mountpoint $POOL #/sbin/zpool export $POOL @@ -787,18 +725,18 @@ f_gpart_gpt_zpool_debug() ## $1 dev $2 pool name $3 mount point ## f_installset_preflight() ## $1 set name and $2 destination ## { if [ ! -f $1 ]; then - echo Distribution set $1 does not exist. Exiting - exit 1 + echo " Distribution set $1 does not exist. Exiting." + exit fi if [ ! -d $2 ]; then - echo Mount destination directory $2 does not exist. Exiting - exit 1 + echo "Mount destination directory $2 does not exist. Exiting." + exit fi # CHECK IF EMPTY. UFS will show .snap and zfs will show nothing # if [ $( ls $2 * ) = "ls: No match." ]; then -# echo Destination directory is not empty. Exiting. +# echo "Destination directory is not empty. Exiting." # exit # fi @@ -806,14 +744,13 @@ f_installset_preflight() ## $1 set name and $2 destination ## f_installset() ## $1 set name and $2 destination ## { - echo Extracting distribution set $1 to $2 -# cat $1 | tar xpf - -C $2 +# cat "$1" | tar xpf - -C "$2" tar xpf $1 -C $2 } f_installset_debug() ## $1 set name and $2 destination ## { - if [ "$1" = "kernel.txz" ]; then + if [ $1 = kernel.txz ]; then ls ${2}/boot/ else ls $2 @@ -824,17 +761,13 @@ f_installset_debug() ## $1 set name and $2 destination ## # Configure loader.conf, takes in $1 mount point f_config_loader_conf_preflight() ## $1 mount point ## { - echo Backing up loader.conf if it exists - if [ -f ${1}/boot/loader.conf ]; then - local timestamp=$( f_timestamp ) - cp ${1}/boot/loader.conf ${1}/boot/loader.conf.$timestamp - fi + echo loder_conf } f_config_loader_conf() ## $1 mount point ## { - cat >> ${1}/boot/loader.conf <<-EOF -autoboot_delay="3" + cat >> "${1}/boot/loader.conf" <<-EOF +loader_delay="3" zfs_load="YES" # Seems fine without: vfs.root.mountfrom="zfs:$pool/ROOT/default" EOF @@ -856,16 +789,12 @@ f_config_loader_conf_debug() ## $1 mount point ## # Configure a VirtIO MBR fstab, takes in $1 mount point f_config_mbr_fstab_preflight() ## $1 mount point ## { - echo Backing up fstab if it exists - if [ -f ${1}/etc/fstab ]; then - local timestamp=$( f_timestamp ) - cp ${1}/etc/fstab ${1}/etc/fstab.$timestamp - fi + echo fstab } f_config_mbr_fstab() ## $1 mount point ## { - cat > ${1}/etc/fstab <<-EOF + cat > "${1}/etc/fstab" <<-EOF # Device Mountpoint FStype Options Dump Pass# /dev/ada0s1a / ufs rw 1 1 EOF @@ -880,16 +809,12 @@ f_config_mbr_fstab_debug() ## $1 mount point ## # Configure a VirtIO GPT fstab, takes in $1 mount point f_config_gpt_fstab_preflight() ## $1 mount point ## { - echo Backing up fstab if it exists - if [ -f ${1}/etc/fstab ]; then - local timestamp=$( f_timestamp ) - cp ${1}/etc/fstab ${1}/etc/fstab.$timestamp - fi + echo fstab } f_config_gpt_fstab() ## $1 mount point ## { - cat > ${1}/etc/fstab <<-EOF + cat > "${1}/etc/fstab" <<-EOF # Device Mountpoint FStype Options Dump Pass# /dev/ada0p2 / ufs rw 1 1 EOF @@ -903,15 +828,11 @@ f_config_gpt_fstab_debug() ## $1 mount point ## f_config_zfs_fstab_preflight() ## $1 mount point ## { - echo Backing up fstab if it exists - if [ -f ${1}/etc/fstab ]; then - local timestamp=$( f_timestamp ) - cp ${1}/etc/fstab ${1}/etc/fstab.$timestamp - fi + echo fstab } f_config_zfs_fstab() ## $1 mount point ## { - cat > ${1}/etc/fstab <<-EOF + cat > "${1}/etc/fstab" <<-EOF # Device Mountpoint FStype Options Dump Pass# EOF } @@ -922,121 +843,54 @@ f_config_zfs_fstab_debug() ## $1 mount point ## } -# Configure bhyve-friendly /etc/ttys, takes in $1 vm_name (NOT vm_mountpoint) +# Configure bhyve-friendly /etc/ttys, takes in $1 mount point f_config_ttys_preflight() ## $1 mount point ## { - echo - echo Verifying that VM is mounted on its mount point - ( mount | grep -qw $1/mnt ) || \ - { echo $1 is not mounted. Exiting ; exit 1 ; } - - echo - echo Verifying that $1/etc/ttys exists - [ -f $1/etc/ttys ] && \ - { echo $1/etc/ttys does not exist. Exiting ; exit 1 ; } + echo ttys } f_config_ttys() ## $1 mount point ## { -echo -echo Determining if a NanoBSD or generic layout -if [ -f $1/etc/diskless ]; then - echo - echo Assuming a NanoBSD layout - echo - echo Backing up $1/conf/base/etc/ttys - local timestamp=$( f_timestamp ) - cp $1/conf/base/etc/ttys $1/conf/base/etc/ttys.orig.$timestamp - - echo - echo Verifying if FreeNAS or generic NanoBSD - if [ ! $( grep -qw freenas $1/conf/base/etc/ttys ) ]; then - echo - echo setting ttyu0 to vt100 for FreeNAS -cat >> $1/conf/base/etc/ttys <<-EOF -ttyu0 "/usr/libexec/getty freenas" vt100 on secure + cp "${1}/etc/ttys" "${1}/etc/ttys.orig" + cat >> "${1}/etc/ttys" <<-EOF +console "/usr/libexec/getty std.9600" vt100 on secure EOF - else - echo Exiting! No sure why it chokes on the cat - exit 1 -# BUG: With the cat, it reports "expecting fi" at the end of the function - echo - echo Appending the bhyve tty -#cat >> $1/conf/base/etc/ttys <<-EOF -#ttyu0 "/usr/libexec/getty 3wire.9600" vt100 on secure -#EOF - fi # Done with NanoBSD - -else # Not NanoBSD - echo - echo Backing up $1/etc/ttys -# it passes if the nested if is removed - local timestamp=$( f_timestamp ) - cp $1/etc/ttys $1/etc/ttys.orig.$timestamp - - echo - echo Appending the bhyve tty - cat >> $1/etc/ttys <<-EOF -#console "/usr/libexec/getty std.9600" vt100 on secure -ttyu0 "/usr/libexec/getty 3wire.9600" vt100 on secure -EOF -fi } -# tty Notes: -# We assume a serial-ready pfSense download! -# Tried for FreeNAS: sed -i '' -e "s/cons25/vt100/" $1/etc/ttys -# ttyv0 "/usr/libexec/getty freenas" cons25 on secure -# console "/usr/libexec/getty freenas" vt100 on secure -# ttyu0 "/usr/libexec/getty freenas" vt100 on secure - - f_config_ttys_debug() ## $1 mount point ## { - if [ -f $1/conf/base/etc/ttys ]; then - echo - echo tailing $1/conf/base/etc/ttys - tail $1/conf/base/etc/ttys - else - echo - echo $1/etc/ttys - tail $1/etc/ttys - fi + cat $1/etc/ttys } # Configure timezone f_config_tz_preflight() ## $1 mount point, $2 time zone ## { - echo Creating /var/db/zoneinfo and running tzsetup + echo timezone } f_config_tz() ## $1 mount point, $2 time zone ## { - echo $2 >> $1/var/db/zoneinfo - tzsetup -r -C ${1}/ + echo "$2" >> "${1}/var/db/zoneinfo" + tzsetup -r -C "${1}/" } f_config_tz_debug() ## $1 mount point, $2 time zone ## { - echo cat $1/var/db/timezone + echo } # Configure a bhyve-friendly rc.conf f_config_rc_conf_preflight() ## $1 mount point ## { -echo Backing up rc.conf if it exists -if [ -f ${1}/etc/rc.conf ]; then - local timestamp=$( f_timestamp ) - cp ${1}/etc/rc.conf ${1}/etc/rc.conf.$timestamp -fi + echo rc_conf } f_config_rc_conf() ## $1 mount point $2 hostname $3 IP $4 GW ## { -if [ ! "$3" = "" ]; then # if an IP is set - cat > ${1}/etc/rc.conf <<-EOF +if [ ! $3 = "" ]; then # if an IP is set + cat > "${1}/etc/rc.conf" <<-EOF hostname="$2" ifconfig_vtnet0="$3 netmask 255.255.255.0" @@ -1049,7 +903,7 @@ sendmail_msp_queue_enable="NO" EOF else - cat > ${1}/etc/rc.conf <<-EOF + cat > "${1}/etc/rc.conf" <<-EOF hostname="$2" ifconfig_vtnet0="DHCP" @@ -1071,16 +925,12 @@ f_config_rc_conf_debug() ## $1 mount point ## # Configure resolv.conf f_config_resolv_conf_preflight() ## $1 mount point ## { - echo Backing up rc.conf if it exists - if [ -f ${1}/etc/resolv.conf ]; then - local timestamp=$( f_timestamp ) - cp ${1}/etc/resolv.conf ${1}/etc/resolv.conf.$timestamp - fi + echo resolv.conf } f_config_resolv_conf() ## $1 mount point $2 searchdomain $3 nameserver ## { -cat > ${1}/etc/resolv.conf <<-EOF +cat > "${1}/etc/resolv.conf" <<-EOF search $2 nameserver $3 EOF @@ -1100,7 +950,7 @@ f_config_sshd_root_preflight() ## $1 mount point ## f_config_sshd_root() ## $1 mount point ## { - echo PermitRootLogin yes >> ${1}/etc/ssh/sshd_config + echo "PermitRootLogin yes" >> "${1}/etc/ssh/sshd_config" } f_config_sshd_root_debug() ## $1 mount point ## @@ -1111,7 +961,7 @@ f_config_sshd_root_debug() ## $1 mount point ## f_set_password_preflight() ## ## { - echo set_password_pre + echo set_password } f_set_password() ## $1 password $2 mount point ## @@ -1121,7 +971,7 @@ f_set_password() ## $1 password $2 mount point ## f_set_password_debug() ## $1 mount point ## { - echo set_password_post + echo } @@ -1129,18 +979,18 @@ f_set_password_debug() ## $1 mount point ## # # Get the next available VMID in ~/vmrc/vm/ # -# BUG: Is this triple digit safe? f_getnextid() ## $1 vhost_vmdir from /usr/local/etc/vm.conf { - local nextid=0 # Initialize to 0 + local nextid="0" # Initialize to 0 - if [ $( ls $1 | wc -l ) = 0 ]; then # None exist. A better test? + if [ $( ls $1 | wc -l ) = 0 ]; then # A better test? echo $nextid # Use the initialized zero exit else - for vm_found in ${1}/*; do # Full path name + for vm_found in ${1}/*; do # Full path name vm_foundname="${vm_found##*/}" # Strip path - vm_foundid="${vm_foundname##*[!0-9]}" +# fails with 10+ vm_foundid="${vm_foundname#${vm_foundname%[0-9]*}}" + vm_foundid=$( echo $vm_foundname | tr -d '/a-z,A-Z/' ) if [ $vm_foundid -gt $nextid ]; then nextid=$vm_foundid fi @@ -1150,3 +1000,10 @@ f_getnextid() ## $1 vhost_vmdir from /usr/local/etc/vm.conf echo $nextid } + +f_hello_world() +{ +echo "hello world!" +echo "happy world!" +echo "funny world!" +} diff --git a/remove-most-vmrc.sh b/remove-most-vmrc.sh deleted file mode 100755 index 607ba8d..0000000 --- a/remove-most-vmrc.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -# -################################################################ LICENSE -# -# Copyright (c) 2012-2014 Michael Dexter -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -############################################################ INFORMATION -# -# Title: virtual machine rc script "most" removal script -# Version: v.0.7 -# -# Script to remove the vmrc rc script and most supporting files -# -################################################################## USAGE -# -# As root: sh remove-most-vmrc.sh -# -######################################################################## - -echo -echo Running rm /usr/local/etc/rc.d/vm -rm /usr/local/etc/rc.d/vm - -echo -echo Running rm /usr/local/etc/vm.conf -rm /usr/local/etc/vm.conf - -echo -echo Removing most of the /usr/local/vmrc directory, sans distributions -chflags -R noschg /usr/local/vmrc/ -rm -rf /usr/local/vmrc/vm -rm -rf /usr/local/vmrc/templates - -echo -echo Deletion complete within the limits of available permissions -echo diff --git a/remove-vmrc.sh b/remove-vmrc.sh deleted file mode 100755 index 2b7afe1..0000000 --- a/remove-vmrc.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -# -################################################################ LICENSE -# -# Copyright (c) 2012-2014 Michael Dexter -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -############################################################ INFORMATION -# -# Title: virtual machine rc script removal script -# Version: v.0.7 -# -# Script to remove the vmrc rc script and supporting files -# -################################################################## USAGE -# -# As root: sh remove-vmrc.sh -# -######################################################################## - -echo -echo Running rm /usr/local/etc/rc.d/vm -rm /usr/local/etc/rc.d/vm - -echo -echo Running rm /usr/local/etc/vm.conf -rm /usr/local/etc/vm.conf - -echo -echo Removing the /usr/local/vmrc directory -chflags -R noschg /usr/local/vmrc/ -rm -rf /usr/local/vmrc - -echo -echo Deletion complete within the limits of available permissions -echo diff --git a/templates/install-templates.sh b/templates/install-templates.sh new file mode 100755 index 0000000..be65325 --- /dev/null +++ b/templates/install-templates.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +echo +echo "This will populate /usr/local/vmrc/templates" +echo +echo "See instructions.txt for more information" + +if [ ! -d /usr/local/vmrc/templates ]; then + echo "Creating /usr/local/vmrc/templates" + mkdir -p /usr/local/vmrc/templates +fi + +echo "Running: cp -rp t_* /usr/local/vmrc/templates/" +cp -rp t_* /usr/local/vmrc/templates/ + +echo "Running: cp -rp virtio* /usr/local/vmrc/templates/" +cp -rp virtio* /usr/local/vmrc/templates/ + +exit + +# From the provision(ing) days: + +echo "Running: mkdir /usr/local/vmrc/vm/vm0" +mkdir -p /usr/local/vmrc/vm/vm0 +echo "Running: mkdir /usr/local/vmrc/vm/vm0/mnt" +mkdir -p /usr/local/vmrc/vm/vm0/mnt + +#echo "Running: cp templates/t_freebsd10 /usr/local/vmrc/vm/vm0/vm0.conf" +#echo +#cp templates/t_freebsd10 /usr/local/vmrc/vm/vm0/vm0.conf + +# Note that FreeNAS, pfSense and OpenBSD must be fetched first + +# All others default to "nmdm" consoles +mkdir /usr/local/vmrc/vm/vm1 +cp templates/t_freebsd92 /usr/local/vmrc/vm/vm1/vm1.conf + +mkdir /usr/local/vmrc/vm/vm2 +cp templates/t_freebsd92stable /usr/local/vmrc/vm/vm2/vm2.conf + +mkdir /usr/local/vmrc/vm/vm3 +cp templates/t_freebsd11current /usr/local/vmrc/vm/vm3/vm3.conf + +mkdir /usr/local/vmrc/vm/freenas4 +cp templates/t_freenas /usr/local/vmrc/vm/freenas4/freenas4.conf + +mkdir /usr/local/vmrc/vm/pfsense5 +cp templates/t_pfsense /usr/local/vmrc/vm/pfsense5/pfsense5.conf + +mkdir /usr/local/vmrc/vm/openbsd6 +cp templates/t_openbsd /usr/local/vmrc/vm/openbsd6/openbsd6.conf + +mkdir /usr/local/vmrc/vm/ubuntu7 +cp templates/t_ubuntu1310 /usr/local/vmrc/vm/ubuntu7/ubuntu7.conf + +mkdir /usr/local/vmrc/vm/ubuntu8 +cp templates/t_ubuntu1304 /usr/local/vmrc/vm/ubuntu8/ubuntu8.conf + +mkdir -p /usr/local/vmrc/vm/centos9 +cp templates/t_centos65 /usr/local/vmrc/vm/centos9/centos9.conf diff --git a/templates/t_centos65 b/templates/t_centos65 new file mode 100755 index 0000000..974b7f5 --- /dev/null +++ b/templates/t_centos65 @@ -0,0 +1,52 @@ +# Centos 6.5 VM configuration file +# NOTE: the "-w" flag was not included in 10.0-RELEASE. Can try without it. + +# VM operating system variables +vm_os_type="linux" # "freebsd", "openbsd", or "linux" (required) +vm_os_ver="centos6.5" # Exact OS version if auto-fetching (for distributions) +dist_site="" # Hostname and directory for binary distribution sets +iso_site="ftp://ftp.osuosl.org/.1/centos/6.5/isos/x86_64/" + # Hostname and directory for ISO image +iso_img="CentOS-6.5-x86_64-minimal.iso" + # ISO filename for remote fetch + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) +virtio_type="virtio-blk" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="-w" # Additional bhyve(8) flags +grub_boot_cmd="echo -e \"linux /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root\ninitrd /initramfs-2.6.32-431.el6.x86_64.img\nboot\" | /usr/local/sbin/grub-bhyve -r hd0,msdos1 -m "${host_vmroot}/${vm_name}/device.map" -M "$vm_ram" "$vm_name"" + # grub-bhyve command to boot from IMG +grub_iso_cmd="echo -e \"linux /isolinux/vmlinuz text\ninitrd /isolinux/initrd.img\nboot\" | /usr/local/sbin/grub-bhyve -r cd0 -m "${host_vmroot}/${vm_name}/device.map" -M "$vm_ram" "$vm_name"" + # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device +vm_devices="" # Additional full-path disk images or devices + +# Optional number of additional network VM virtual network interfaces +vm_addtl_nics="" # 1 through 7 (tap8<2 digit vm_id>[PCI unit 1-7] + +# FreeBSD-specific VM provisioning variables +vm_dev_type="" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="2G" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="" # VM ZFS pool name (FreeBSD only) +vm_install_type="" # "distset" or "makeinstall" +vm_distsets="" +vm_srcdir="" +vm_objdir="" +vm_timezone="" # VM timezone (FreeBSD only) +vm_hostname="" # VM hostname (FreeBSD only) +vm_ipv4="" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="" # VM password (clear text for now) (FreeBSD only) +#vm_pkgs="" +#vm_mac="" +# zpool template diff --git a/templates/t_freebsd10 b/templates/t_freebsd10 new file mode 100755 index 0000000..4be141d --- /dev/null +++ b/templates/t_freebsd10 @@ -0,0 +1,40 @@ +# FreeBSD 10.0-RELEASE Template + +# VM operating system variables +vm_os_type="freebsd" # freebsd, openbsd, or linux (required) +vm_os_ver="10.0-RELEASE" # Exact OS version if auto-fetching +dist_site="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/10.0-RELEASE/" +iso_site="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.0/" +iso_img="FreeBSD-10.0-RELEASE-amd64-disc1.iso" + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (required) +virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device (sans /dev/) + +# FreeBSD-specific VM provisioning variables +vm_dev_type="img" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="ufs" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="2G" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="cesspool" # VM ZFS pool name (FreeBSD only) +vm_timezone="America/Los_Angeles" # VM timezone (FreeBSD only) +vm_hostname="bhyve" # VM hostname (FreeBSD only) +vm_ipv4="192.168.2.210" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="192.168.2.1" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="bsd.lv" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="8.8.8.8" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="bsd" # VM password (clear text for now) (FreeBSD only) +vm_distsets="base.txz kernel.txz" +#vm_pkgs="" +# Additional NICs and DEVs +# zpool template diff --git a/templates/t_freebsd10malloc b/templates/t_freebsd10malloc new file mode 100755 index 0000000..764df7b --- /dev/null +++ b/templates/t_freebsd10malloc @@ -0,0 +1,40 @@ +# FreeBSD 10.0-RELEASE Template + +# VM operating system variables +vm_os_type="freebsd" # freebsd, openbsd, or linux (required) +vm_os_ver="10.0-RELEASE" # Exact OS version if auto-fetching +dist_site="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/10.0-RELEASE/" +iso_site="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.0/" +iso_img="FreeBSD-10.0-RELEASE-amd64-disc1.iso" + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (required) +virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device (sans /dev/) + +# FreeBSD-specific VM provisioning variables +vm_dev_type="malloc" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="ufs" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="2G" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="cesspool" # VM ZFS pool name (FreeBSD only) +vm_timezone="America/Los_Angeles" # VM timezone (FreeBSD only) +vm_hostname="bhyve" # VM hostname (FreeBSD only) +vm_ipv4="192.168.2.210" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="192.168.2.1" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="bsd.lv" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="8.8.8.8" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="bsd" # VM password (clear text for now) (FreeBSD only) +vm_distsets="base.txz kernel.txz" +#vm_pkgs="" +# Additional NICs and DEVs +# zpool template diff --git a/templates/t_freebsd10zfs b/templates/t_freebsd10zfs new file mode 100755 index 0000000..16cce64 --- /dev/null +++ b/templates/t_freebsd10zfs @@ -0,0 +1,40 @@ +# FreeBSD 10.0-RELEASE Template + +# VM operating system variables +vm_os_type="freebsd" # freebsd, openbsd, or linux (required) +vm_os_ver="10.0-RELEASE" # Exact OS version if auto-fetching +dist_site="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/10.0-RELEASE/" +iso_site="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.0/" +iso_img="FreeBSD-10.0-RELEASE-amd64-disc1.iso" + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (required) +virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device (sans /dev/) + +# FreeBSD-specific VM provisioning variables +vm_dev_type="img" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="zfs" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="2G" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="cesspool" # VM ZFS pool name (FreeBSD only) +vm_timezone="America/Los_Angeles" # VM timezone (FreeBSD only) +vm_hostname="bhyve" # VM hostname (FreeBSD only) +vm_ipv4="192.168.2.210" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="192.168.2.1" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="bsd.lv" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="8.8.8.8" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="bsd" # VM password (clear text for now) (FreeBSD only) +vm_distsets="base.txz kernel.txz" +#vm_pkgs="" +# Additional NICs and DEVs +# zpool template diff --git a/templates/t_freebsd11current b/templates/t_freebsd11current new file mode 100755 index 0000000..85ea88c --- /dev/null +++ b/templates/t_freebsd11current @@ -0,0 +1,40 @@ +# FreeBSD 11.0-CURRENT/snapshots/amd64/amd64/11.0-CURRENT" Template + +# VM operating system variables +vm_os_type="freebsd" # freebsd, openbsd, or linux (required) +vm_os_ver="11.0-CURRENT" # Exact OS version if auto-fetching +dist_site="ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/amd64/amd64/11.0-CURRENT" +iso_site="" +iso_img="" + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (required) +virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device (sans /dev/) + +# FreeBSD-specific VM provisioning variables +vm_dev_type="img" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="ufs" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="2G" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="cesspool" # VM ZFS pool name (FreeBSD only) +vm_timezone="America/Los_Angeles" # VM timezone (FreeBSD only) +vm_hostname="bhyve" # VM hostname (FreeBSD only) +vm_ipv4="192.168.2.213" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="192.168.2.1" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="bsd.lv" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="8.8.8.8" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="bsd" # VM password (clear text for now) (FreeBSD only) +vm_distsets="base.txz kernel.txz" +#vm_pkgs="" +# Additional NICs and DEVs +# zpool template diff --git a/templates/t_freebsd11currentzfs b/templates/t_freebsd11currentzfs new file mode 100755 index 0000000..7ea72a1 --- /dev/null +++ b/templates/t_freebsd11currentzfs @@ -0,0 +1,40 @@ +# FreeBSD 11.0-CURRENT/snapshots/amd64/amd64/11.0-CURRENT" Template + +# VM operating system variables +vm_os_type="freebsd" # freebsd, openbsd, or linux (required) +vm_os_ver="11.0-CURRENT" # Exact OS version if auto-fetching +dist_site="ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/amd64/amd64/11.0-CURRENT" +iso_site="" +iso_img="" + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (required) +virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device (sans /dev/) + +# FreeBSD-specific VM provisioning variables +vm_dev_type="img" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="zfs" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="2G" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="cesspool" # VM ZFS pool name (FreeBSD only) +vm_timezone="America/Los_Angeles" # VM timezone (FreeBSD only) +vm_hostname="bhyve" # VM hostname (FreeBSD only) +vm_ipv4="192.168.2.213" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="192.168.2.1" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="bsd.lv" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="8.8.8.8" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="bsd" # VM password (clear text for now) (FreeBSD only) +vm_distsets="base.txz kernel.txz" +#vm_pkgs="" +# Additional NICs and DEVs +# zpool template diff --git a/templates/t_freebsd92 b/templates/t_freebsd92 new file mode 100755 index 0000000..287f094 --- /dev/null +++ b/templates/t_freebsd92 @@ -0,0 +1,40 @@ +# FreeBSD 9.2-RELEASE Template + +# VM operating system variables +vm_os_type="freebsd" # freebsd, openbsd, or linux (required) +vm_os_ver="9.2-RELEASE" # Exact OS version if auto-fetching +dist_site="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/9.2-RELEASE/" +iso_site="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/" +iso_img="FreeBSD-9.2-RELEASE-amd64-disc1.iso" + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (required) +virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device (sans /dev/) + +# FreeBSD-specific VM provisioning variables +vm_dev_type="img" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="ufs" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="2G" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="cesspool" # VM ZFS pool name (FreeBSD only) +vm_timezone="America/Los_Angeles" # VM timezone (FreeBSD only) +vm_hostname="bhyve" # VM hostname (FreeBSD only) +vm_ipv4="192.168.2.211" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="192.168.2.1" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="bsd.lv" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="8.8.8.8" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="bsd" # VM password (clear text for now) (FreeBSD only) +vm_distsets="base.txz kernel.txz" +#vm_pkgs="" +# Additional NICs and DEVs +# zpool template diff --git a/templates/t_freebsd92stable b/templates/t_freebsd92stable new file mode 100755 index 0000000..2c0ac7a --- /dev/null +++ b/templates/t_freebsd92stable @@ -0,0 +1,40 @@ +# FreeBSD 9.2-STABLE Template + +# VM operating system variables +vm_os_type="freebsd" # freebsd, openbsd, or linux (required) +vm_os_ver="9.2-RELEASE" # Exact OS version if auto-fetching +dist_site="ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/amd64/amd64/9.2-STABLE" +iso_site="" +iso_img="" + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (required) +virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device (sans /dev/) + +# FreeBSD-specific VM provisioning variables +vm_dev_type="img" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="ufs" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="2G" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="cesspool" # VM ZFS pool name (FreeBSD only) +vm_timezone="America/Los_Angeles" # VM timezone (FreeBSD only) +vm_hostname="bhyve" # VM hostname (FreeBSD only) +vm_ipv4="192.168.2.212" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="192.168.2.1" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="bsd.lv" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="8.8.8.8" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="bsd" # VM password (clear text for now) (FreeBSD only) +vm_distsets="base.txz kernel.txz" +#vm_pkgs="" +# Additional NICs and DEVs +# zpool template diff --git a/templates/t_freebsd92stablezfs b/templates/t_freebsd92stablezfs new file mode 100755 index 0000000..977f231 --- /dev/null +++ b/templates/t_freebsd92stablezfs @@ -0,0 +1,40 @@ +# FreeBSD 9.2-STABLE Template + +# VM operating system variables +vm_os_type="freebsd" # freebsd, openbsd, or linux (required) +vm_os_ver="9.2-RELEASE" # Exact OS version if auto-fetching +dist_site="ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/amd64/amd64/9.2-STABLE" +iso_site="" +iso_img="" + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (required) +virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device (sans /dev/) + +# FreeBSD-specific VM provisioning variables +vm_dev_type="img" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="zfs" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="2G" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="cesspool" # VM ZFS pool name (FreeBSD only) +vm_timezone="America/Los_Angeles" # VM timezone (FreeBSD only) +vm_hostname="bhyve" # VM hostname (FreeBSD only) +vm_ipv4="192.168.2.212" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="192.168.2.1" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="bsd.lv" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="8.8.8.8" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="bsd" # VM password (clear text for now) (FreeBSD only) +vm_distsets="base.txz kernel.txz" +#vm_pkgs="" +# Additional NICs and DEVs +# zpool template diff --git a/templates/t_freebsd92zfs b/templates/t_freebsd92zfs new file mode 100755 index 0000000..868ee3d --- /dev/null +++ b/templates/t_freebsd92zfs @@ -0,0 +1,40 @@ +# FreeBSD 9.2-RELEASE Template + +# VM operating system variables +vm_os_type="freebsd" # freebsd, openbsd, or linux (required) +vm_os_ver="9.2-RELEASE" # Exact OS version if auto-fetching +dist_site="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/9.2-RELEASE/" +iso_site="ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/" +iso_img="FreeBSD-9.2-RELEASE-amd64-disc1.iso" + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (required) +virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device (sans /dev/) + +# FreeBSD-specific VM provisioning variables +vm_dev_type="img" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="zfs" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="2G" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="cesspool" # VM ZFS pool name (FreeBSD only) +vm_timezone="America/Los_Angeles" # VM timezone (FreeBSD only) +vm_hostname="bhyve" # VM hostname (FreeBSD only) +vm_ipv4="192.168.2.211" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="192.168.2.1" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="bsd.lv" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="8.8.8.8" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="bsd" # VM password (clear text for now) (FreeBSD only) +vm_distsets="base.txz kernel.txz" +#vm_pkgs="" +# Additional NICs and DEVs +# zpool template diff --git a/templates/t_freenas b/templates/t_freenas new file mode 100755 index 0000000..271f75d --- /dev/null +++ b/templates/t_freenas @@ -0,0 +1,47 @@ +# FreeNAS VM configuration file + +# VM operating system variables +vm_os_type="freebsd" # "freebsd", "openbsd", or "linux" (required) +vm_os_ver="" # Exact OS version if auto-fetching (for distributions) +dist_site="" # Hostname and directory for binary distribution sets +iso_site="" # Hostname and directory for ISO image +iso_img="" # ISO filename for remote fetch + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="4096" # VM RAM Allocation in MB (required) +vm_console="nmdm" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) +virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device +vm_devices="" # Additional full-path disk images or devices + +# Optional number of additional network VM virtual network interfaces +vm_addtl_nics="" # 1 through 7 (tap8<2 digit vm_id>[PCI unit 1-7] + +# FreeBSD-specific VM provisioning variables +vm_dev_type="img" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="mbr" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="" # VM ZFS pool name (FreeBSD only) +vm_install_type="" # "distset" or "makeinstall" +vm_distsets="" +vm_srcdir="" +vm_objdir="" +vm_timezone="" # VM timezone (FreeBSD only) +vm_hostname="" # VM hostname (FreeBSD only) +vm_ipv4="" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="" # VM password (clear text for now) (FreeBSD only) +#vm_pkgs="" +#vm_mac="" +# zpool template diff --git a/templates/t_freenas-fetch.sh b/templates/t_freenas-fetch.sh new file mode 100755 index 0000000..ccafd22 --- /dev/null +++ b/templates/t_freenas-fetch.sh @@ -0,0 +1,173 @@ +#!/bin/sh +# Version: v.0.6 + +# Copyright (c) 2013-2014 Michael Dexter +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + +# This script downloads and prepares a recent FreeNAS bootable "img" image +# for use with bhyve. + +# USAGE +# +# sh t_freenas-fetch.sh +# +# CAUTION: This will forcibly unmount and use /mnt + +# TO DO +# Read in vm.conf, use proper variables + +# Read the host's vm.conf +. /usr/local/etc/vm.conf + +# March 2014 Scheme: +#http://download.freenas.org/9.2.1.3/RELEASE/x64/FreeNAS-9.2.1.3-RELEASE-x64.iso +echo +echo "Recent releases: 8.3.2 9.2.1.5" +echo +echo "Enter a release to fetch:" +echo +read release + +echo "Existing VMs:" +ls /usr/local/vmrc/vm/ +echo +echo "Enter a new VM name with ID: i.e. vm0" +echo +read vm_name + +IMGSITE="http://download.freenas.org/${release}/RELEASE/x64/" +IMG="FreeNAS-${release}-RELEASE-x64.img.xz" +EXPANDED=${IMG%.xz} +MNT=/mnt/ + +if [ ! -d $host_distdir ]; then + mkdir -p $host_distdir +fi + +if [ ! -f $host_distdir/$IMG ]; then + echo "Fetching $IMGSITE$IMG" + fetch $IMGSITE$IMG -o $host_distdir +fi + +if [ ! -f ${host_distdir}/$IMG ]; then + echo "$IMG failed to fetch. Exiting." + exit +fi + +if [ ! -f ${host_distdir}/$EXPANDED ]; then + echo "Expanding $IMG" + unxz --keep ${host_distdir}/$IMG +fi + +mkdir -p ${host_vmdir}/${vm_name}/mnt + +echo "Copying ${host_distdir}/$EXPANDED to $vm_name" +cp ${host_distdir}/$EXPANDED ${host_vmdir}/${vm_name}/${vm_name}.img + +if [ ! -d $MNT ]; then + echo "$MNT is missing. Creating." + mkdir -p $MNT +fi + +echo +echo "Force unmounting $MNT" +echo + +umount -f $MNT + +echo "Preparing disk image ${vm_name}.img" +echo +MD=$( mdconfig -af ${host_vmdir}/${vm_name}/${vm_name}.img ) +echo "md device is $MD" +echo +echo "Running mdconfig -lv" +echo +mdconfig -lv + +if [ ! -e /dev/${MD}s1a ]; then + echo "Image does not appear to be attached. Exiting." + exit +fi + +echo +echo "Running fsck_ufs on /dev/${MD}s1a" +echo +fsck_ufs -y /dev/${MD}s1a +echo +echo "Mounting /dev/${MD}s1a on $MNT" +echo +mount /dev/${MD}s1a $MNT + +echo "Running mount" +echo +mount | grep $MD + +echo "Backing up the original /etc/ttys" +echo "Running cp $MNT/etc/ttys $MNT/etc/ttys.orig" +echo +cp $MNT/etc/ttys $MNT/etc/ttys.orig + +echo "Enabling the required console" +echo + +cat >> $MNT/etc/ttys << EOF +console "/usr/libexec/getty freenas" vt100 on secure +EOF + +echo "Running tail $MNT/etc/ttys" +echo +tail $MNT/etc/ttys + +if [ "$release" = "8.3.2" ]; then + echo "Copying in 8.x VirtIO kernel modules" + cp ./virtio83R/* ${MNT}/boot/kernel/ + echo "Listing the kernel modules" + ls ${MNT}/boot/kernel/ + + cat >> ${MNT}/boot/loader.conf << EOF +virtio_load="YES" +virtio_pci_load="YES" +virtio_blk_load="YES" +if_vtnet_load="YES" +EOF + + echo "Showing the loader.conf" + cat ${MNT}/boot/loader.conf +echo +echo "WARNING: 8.3.2 does not appear to like the if_vtnet driver" +fi + +echo +echo "Unmounting $MNT" +umount $MNT +echo + +echo "Running mount" +mount | grep $MD +echo + +echo "Destroying $MD" +mdconfig -du $MD +echo + +echo "Running mdconfig -lv" +mdconfig -lv +echo + +echo "Copying in the configuration template" +cp ${host_templates}/t_freenas ${host_vmdir}/${vm_name}/${vm_name}.conf +echo + +echo "Listing the contents of ${host_vmdir}/${vm_name}/" +ls ${host_vmdir}/${vm_name}/ + diff --git a/templates/t_master_template b/templates/t_master_template new file mode 100755 index 0000000..cbc0da1 --- /dev/null +++ b/templates/t_master_template @@ -0,0 +1,47 @@ +# Blank configuration file for a VM + +# VM operating system variables +vm_os_type="" # "freebsd", "openbsd", or "linux" (required) +vm_os_ver="" # Exact OS version if auto-fetching (for distributions) +dist_site="" # Hostname and directory for binary distribution sets +iso_site="" # Hostname and directory for ISO image +iso_img="" # ISO filename for remote fetch + +# VM boot variables +vm_cpus="" # Number of VM virtual CPUs (max 16) (required) +vm_ram="" # VM RAM Allocation in MB (required) +vm_console="" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) +virtio_type="" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device +vm_devices="" # Additional full-path disk images or devices + +# Optional number of additional network VM virtual network interfaces +vm_addtl_nics="" # 1 through 7 (tap8<2 digit vm_id>[PCI unit 1-7] + +# FreeBSD-specific VM provisioning variables +vm_dev_type="" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="" # VM ZFS pool name (FreeBSD only) +vm_install_type="" # "distset" or "makeinstall" +vm_distsets="" +vm_srcdir="" +vm_objdir="" +vm_timezone="" # VM timezone (FreeBSD only) +vm_hostname="" # VM hostname (FreeBSD only) +vm_ipv4="" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="" # VM password (clear text for now) (FreeBSD only) +#vm_pkgs="" +#vm_mac="" +# zpool template diff --git a/templates/t_openbsd b/templates/t_openbsd new file mode 100755 index 0000000..4c20346 --- /dev/null +++ b/templates/t_openbsd @@ -0,0 +1,27 @@ +# Example configuration file for a pre-fetched OpenBSD VM named "openbsd6": +# /usr/local/vm/openbsd6/openbsd6.conf + +vm_cpus="1" # Number of VM virtual CPUs (max 16) +vm_ram="1024" # VM RAM Allocation in MB +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (sysutils/tmux) +vm_os_type="openbsd" # freebsd, openbsd, or linux +vm_os_ver="" # Exact OS version if auto-fetching +vm_dev_layout="mbr" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_type="img" # "img" for image, "zvol" or blank for other device +vm_device="" # An existing device (sans /dev/) i.e. "ada1" +vm_dev_size="" # M or G for raw "img" volumes +vm_hostname="" # VM hostname (FreeBSD only) +vm_timezone="" # VM timezone (FreeBSD only) +vm_ipv4_addr="" # Experimental for jail use +vm_searchdomain="" # (FreeBSD only) Commented out below +vm_dns_addr="" # (FreeBSD only) Commented out below +dist_site="" # Hostname and directory for binary distribution sets +iso_site="" # Hostname and directory for ISO image +iso_img="" # ISO filename for remote fetch +grub_boot_cmd="echo -e \"kopenbsd -h com0 (hd0,openbsd1)/bsd\nboot\" | /usr/local/sbin/grub-bhyve -r hd0 -m ${host_vmroot}/${vm_name}/device.map -M $vm_ram $vm_name" + # grub-bhyve command to boot from IMG +grub_iso_cmd="echo -e \"kopenbsd -h com0 (cd0)/5.4/amd64/bsd\nboot\" | /usr/local/sbin/grub-bhyve -r cd0 -m ${host_vmroot}/${vm_name}/device.map -M $vm_ram $vm_name" + # grub-bhyve command to boot from ISO +vm_hostbridge="amd_" # "amd_" for the AMD hostbridge +bhyve_flags="-W" # Additional bhyve(8) flags +virtio_type="virtio-blk" # "ahci-hd" or "virtio-blk" diff --git a/templates/t_openbsd-fetch.sh b/templates/t_openbsd-fetch.sh new file mode 100755 index 0000000..d837ca2 --- /dev/null +++ b/templates/t_openbsd-fetch.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# $Version: v.1.0-BETA15$ + +# Copyright (c) 2013-2014 Michael Dexter +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + +# USAGE +# +# sh openbsd-fetch.sh +# +# Very quick, very dirty + +IMGSITE="http://people.freebsd.org/~grehan/" +IMG="flashimg.amd64-20131014.bz2" +EXPANDED="flashimg.amd64-20131014" + +mkdir -p /usr/local/vmrc/vm/distributions/openbsd + +if [ ! -f /usr/local/vmrc/vm/distributions/openbsd/$IMG ]; then + echo "$IMG not present. Fetching $IMG" + fetch $IMGSITE$IMG -o /usr/local/vmrc/vm/distributions/openbsd/ +fi + +if [ ! -f /usr/local/vmrc/vm/distributions/openbsd/$EXPANDED ]; then + echo "Expanded $IMG not present. Expanding $IMG" + bunzip2 --keep /vmrc/usr/local/vmrc/vm/distributions/openbsd/$IMG +fi + +echo "Copying "$EXPANDED" to /usr/local/vmrc/vm/openbsd6/openbsd6.img" +cp -p "/usr/local/vmrc/vm/distributions/openbsd/$EXPANDED" /usr/local/vm/openbsd6/openbsd6.img + +echo +echo "The root password is test123" +echo diff --git a/templates/t_pfsense b/templates/t_pfsense new file mode 100755 index 0000000..7b6486c --- /dev/null +++ b/templates/t_pfsense @@ -0,0 +1,47 @@ +# pfSense VM configuration file + +# VM operating system variables +vm_os_type="freebsd" # "freebsd", "openbsd", or "linux" (required) +vm_os_ver="" # Exact OS version if auto-fetching (for distributions) +dist_site="" # Hostname and directory for binary distribution sets +iso_site="" # Hostname and directory for ISO image +iso_img="" # ISO filename for remote fetch + +# VM boot variables +vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) +vm_ram="1024" # VM RAM Allocation in MB (required) +vm_console="nmdm" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) +virtio_type="virtio-blk" # "ahci-hd" or "virtio-blk" (required) +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +grub_boot_cmd="" # grub-bhyve command to boot from IMG +grub_iso_cmd="" # grub-bhyve command to boot from ISO + +# Optional existing boot device in /dev/ i.e. "ada2" +vm_device="" # Existing bootable block device +vm_devices="" # Additional full-path disk images or devices + +# Optional number of additional network VM virtual network interfaces +vm_addtl_nics="1" # 1 through 7 (tap8<2 digit vm_id>[PCI unit 1-7] + +# FreeBSD-specific VM provisioning variables +vm_dev_type="img" # "img", "malloc", "zvol" or blank for other device +vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (FreeBSD only) +vm_dev_layout="mbr" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_fs="" # "ufs" or "zfs" (FreeBSD only) +vm_dev_size="" # M or G for raw "img" volumes (FreeBSD only) +vm_pool="" # VM ZFS pool name (FreeBSD only) +vm_install_type="" # "distset" or "makeinstall" +vm_distsets="" +vm_srcdir="" +vm_objdir="" +vm_timezone="" # VM timezone (FreeBSD only) +vm_hostname="" # VM hostname (FreeBSD only) +vm_ipv4="" # VM IPv4 address (blank for DHCP) (FreeBSD only) +vm_gw="" # VM IPv4 gateway (FreeBSD only) +vm_searchdomain="" # VM resolv.conf searchdomain (FreeBSD only) +vm_dns="" # VM resolv.conf IPv4 DNS server (FreeBSD only) +vm_password="" # VM password (clear text for now) (FreeBSD only) +#vm_pkgs="" +#vm_mac="" +# zpool template diff --git a/templates/t_pfsense-fetch.sh b/templates/t_pfsense-fetch.sh new file mode 100755 index 0000000..43290c5 --- /dev/null +++ b/templates/t_pfsense-fetch.sh @@ -0,0 +1,195 @@ +#!/bin/sh +# Version: v.0.5 + +# Copyright (c) 2013-2014 Michael Dexter +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + +# This script downloads and prepares a recent pfSense 2GB/serial bootable +# "img" image for use with bhyve. + +# USAGE +# +# sh t_pfsense-fetch.sh +# +# CAUTION: This will forcibly unmount and use /mnt +# Check for /mnt afterwards on PC-BSD to see if the automounter removed it + +# TO DO +# Perhaps configure the second partition in case people boot to it. + +# pfSense Steps +# /boot/loader.conf: change comconsole to userboot (does not show loader) +# /boot/loader.conf.local (or loader.conf): load VirtIO modules +# Serial image: No tty change +# VGA image: Add the proper tty +# Optionally, one can load all VirtIO modules at the loader prompt + +# Note: vtnet0 is not showing up for the "a" autodetection + +# Read the host's vm.conf +. /usr/local/etc/vm.conf + +# April 2014 Scheme: +#http://files.nyi.pfsense.org/mirror/downloads/pfSense-2.1.1-RELEASE-2g-amd64-nanobsd.img.gz + +echo +echo "Recent releases: 2.1, 2.1.2" +echo +echo "Enter a release to fetch:" +echo +read release + +echo "Existing VMs: (This script will overwrite an existing one if specified.)" +ls /usr/local/vmrc/vm/ +echo +echo "Enter a new VM name with ID: i.e. vm0" +echo +read vm_name + +IMGSITE="http://files.nyi.pfsense.org/mirror/downloads/" +IMG="pfSense-${release}-RELEASE-2g-amd64-nanobsd.img.gz" +EXPANDED=${IMG%.gz} +MNT=/mnt/ + +if [ ! -d $host_distdir ]; then + mkdir -p $host_distdir +fi + +if [ ! -f $host_distdir/$IMG ]; then + echo "Fetching $IMGSITE$IMG" + fetch $IMGSITE$IMG -o $host_distdir +fi + +if [ ! -f ${host_distdir}/$IMG ]; then + echo "$IMG failed to fetch. Exiting." + exit +fi + +if [ ! -f ${host_distdir}/$EXPANDED ]; then + echo "Expanding $IMG" + gunzip ${host_distdir}/$IMG +fi + +mkdir -p ${host_vmdir}/${vm_name}/mnt + +echo "Copying ${host_distdir}/$EXPANDED to $vm_name" +cp ${host_distdir}/$EXPANDED ${host_vmdir}/${vm_name}/${vm_name}.img + +if [ ! -d $MNT ]; then + echo "$MNT is missing. Creating." + mkdir -p $MNT +fi + +echo "Force unmounting $MNT" +echo + +umount -f $MNT + +# FYI + +# gpart show md0 +#=> 1 3886658 md0 MBR (1.9G) +# 1 62 - free - (31K) +# 63 1890945 1 freebsd [active] (923M) +# 1891008 63 - free - (32K) +# 1891071 1890945 2 freebsd (923M) +# 3782016 102816 3 freebsd (50M) +# 3884832 1827 - free - (914K) + +echo "Preparing disk image ${vm_name}.img" +echo +MD=$( mdconfig -af ${host_vmdir}/${vm_name}/${vm_name}.img ) +echo "md device is $MD" +echo +echo "Running mdconfig -lv" +echo +mdconfig -lv + +if [ ! -e /dev/${MD}s1a ]; then + echo "Image does not appear to be attached. Exiting." + exit +fi + +echo +echo "Running fsck_ufs on /dev/${MD}s1a" +echo +fsck_ufs -y /dev/${MD}s1a +echo +echo "Mounting /dev/${MD}s1a on $MNT" +echo +mount /dev/${MD}s1a $MNT + +echo +echo "Running mount" +echo +mount | grep $MD + +# Enable the following for the pfSense VGA image +# In theory this is not needed with the serial image +#echo "Backing up the original /etc/ttys" +#echo "Running cp $MNT/etc/ttys $MNT/etc/ttys.orig" +#echo +#cp $MNT/etc/ttys $MNT/etc/ttys.orig +#echo "Enabling the required console" +#echo +#cat >> $MNT/etc/ttys << EOF +#console "/usr/libexec/getty freenas" vt100 on secure +#EOF +#echo "Running tail $MNT/etc/ttys" +#echo +#tail $MNT/etc/ttys + +echo "Backing up the original /boot/loader.conf" +echo "Running cp $MNT/etc/ttys $MNT/boot/loader.conf.orig" +echo +cp $MNT/boot/loader.conf $MNT/boot/loader.conf.orig + +sed -i '' -e "s/comconsole/"\"userboot\"/ $MNT/boot/loader.conf + +echo "Showing the /boot/loader.conf" +echo +cat ${MNT}/boot/loader.conf + +cat >> ${MNT}/boot/loader.conf.local << EOF +virtio_load="YES" +virtio_pci_load="YES" +virtio_blk_load="YES" +if_vtnet_load="YES" +EOF + +echo +echo "Showing the loader.conf.local" +echo +cat ${MNT}/boot/loader.conf.local + +echo +echo "Unmounting $MNT" +echo +umount $MNT + +echo "Running mount" +echo +mount | grep $MD + +echo "Destroying $MD" +mdconfig -du $MD + +echo "Running mdconfig -lv" +mdconfig -lv + +echo "Copying in the configuration template" +cp ${host_templates}/t_pfsense ${host_vmdir}/${vm_name}/${vm_name}.conf + +echo "Listing the contents of ${host_vmdir}/${vm_name}/" +ls ${host_vmdir}/${vm_name}/ + diff --git a/templates/t_ubuntu1304 b/templates/t_ubuntu1304 new file mode 100755 index 0000000..46d9b65 --- /dev/null +++ b/templates/t_ubuntu1304 @@ -0,0 +1,29 @@ +# Example configuration file for a pre-fetched OpenBSD VM named "ubuntu8": +# /usr/local/vm/ubuntu8/ubuntu8.conf + +vm_cpus="1" # Number of VM virtual CPUs (max 16) +vm_ram="1024" # VM RAM Allocation in MB +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (sysutils/tmux) +vm_os_type="linux" # freebsd, openbsd, or linux +vm_os_ver="ubuntu13.04" # Exact OS version if auto-fetching +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_type="img" # "img" for image, "zvol" or blank for other device +vm_device="" # An existing device (sans /dev/) i.e. "ada1" +vm_dev_size="3G" # M or G for raw "img" volumes +vm_hostname="" # VM hostname (FreeBSD only) +vm_timezone="" # VM timezone (FreeBSD only) +vm_ipv4_addr="" # Experimental for jail use +vm_searchdomain="" # (FreeBSD only) Commented out below +vm_dns_addr="" # (FreeBSD only) Commented out below +dist_site="" # Hostname and directory for binary distribution sets +iso_site="ftp://ftp.osuosl.org/pub/ubuntu-releases/13.04/" + # Hostname and directory for ISO image +iso_img="ubuntu-13.04-server-amd64.iso" + # ISO filename for remote fetch +grub_boot_cmd="/usr/local/sbin/grub-bhyve -r hd0,msdos1 -m ${host_vmroot}/${vm_name}/device.map -M $vm_ram $vm_name" + # grub-bhyve command to boot from IMG +grub_iso_cmd="/usr/local/sbin/grub-bhyve -r cd0 -m ${host_vmroot}/${vm_name}/device.map -M $vm_ram $vm_name" + # grub-bhyve command to boot from ISO +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +virtio_type="virtio-blk" # "ahci-hd" or "virtio-blk" diff --git a/templates/t_ubuntu1310 b/templates/t_ubuntu1310 new file mode 100755 index 0000000..cba47c3 --- /dev/null +++ b/templates/t_ubuntu1310 @@ -0,0 +1,29 @@ +# Example configuration file for a pre-fetched OpenBSD VM named "ubuntu7": +# /usr/local/vm/ubuntu7/ubuntu7.conf + +vm_cpus="1" # Number of VM virtual CPUs (max 16) +vm_ram="1024" # VM RAM Allocation in MB +vm_console="nmdm" # stdio, nmdm, tmux or tmux-detached (sysutils/tmux) +vm_os_type="linux" # freebsd, openbsd, or linux +vm_os_ver="ubuntu13.10" # Exact OS version if auto-fetching +vm_dev_layout="gpt" # "gpt" or "mbr" volume layout (FreeBSD only) +vm_dev_type="img" # "img" for image, "zvol" or blank for other device +vm_device="" # An existing device (sans /dev/) i.e. "ada1" +vm_dev_size="3G" # M or G for raw "img" volumes +vm_hostname="" # VM hostname (FreeBSD only) +vm_timezone="" # VM timezone (FreeBSD only) +vm_ipv4_addr="" # Experimental for jail use +vm_searchdomain="" # (FreeBSD only) Commented out below +vm_dns_addr="" # (FreeBSD only) Commented out below +dist_site="" # Hostname and directory for binary distribution sets +iso_site="ftp://ftp.osuosl.org/pub/ubuntu-releases/13.10/" + # Hostname and directory for ISO image +iso_img="ubuntu-13.10-server-amd64.iso" + # ISO filename for remote fetch +grub_boot_cmd="/usr/local/sbin/grub-bhyve -r hd0,msdos1 -m ${host_vmroot}/${vm_name}/device.map -M $vm_ram $vm_name" + # grub-bhyve command to boot from IMG +grub_iso_cmd="/usr/local/sbin/grub-bhyve -r cd0 -m ${host_vmroot}/${vm_name}/device.map -M $vm_ram $vm_name" + # grub-bhyve command to boot from ISO +vm_hostbridge="" # "amd_" for the AMD hostbridge +bhyve_flags="" # Additional bhyve(8) flags +virtio_type="virtio-blk" # "ahci-hd" or "virtio-blk" diff --git a/templates/virtio21pf/if_vtnet.ko b/templates/virtio21pf/if_vtnet.ko new file mode 100755 index 0000000000000000000000000000000000000000..891785eb0d5650818d7a65e5c11b2ef040ade7c9 GIT binary patch literal 41184 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 GD*Jyg@11=B literal 0 HcmV?d00001 diff --git a/templates/virtio21pf/virtio.ko b/templates/virtio21pf/virtio.ko new file mode 100755 index 0000000000000000000000000000000000000000..8821130cbb78c43bbb738df6658c41c50328c39f GIT binary patch literal 18144 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

uL%CRBKVh! z;NK{M4-~tMO~$iDfao|o9FKJ6F?e~_ z@l;yM;CpZ)o)^V)LnVxF(C*jlFub~l5e(;FzDdp9dMX`*GwU~R6rAi0UGO;!K$_{) z0f0keJc%!izE!KbqG5-?We~&PqJQ}wVTcf&x6gF4poA+dR0Ss$GAta`lX^VLSnvLH z7>`29eX3-Va9*K@#gVxpCG@!S(ITyH!1IeVYrvrg22)R^GD(Oc(cmF^7!Jc@aS>Rj zyErG2N48-+vV~DMGV%6sxc0+~KU62vBdQybOs9z_`bKO6(!iOzY+Rp7!^ac&6aXm| zYX>EckjNqOn!c@I%~708q|Ia^E(}dcB0&rXTFpHCk&Q4Y}GE{{;M?3PT z(=wIQn5P|(uH=H$C4|K%n=nL(+v>O@B2&2Qj3AuX6^`xUI}nl6c03P^OA-ogZ};8vKsHz1w8V@N5(UT8=^MolA(_0-jx(-wN=Bklo?bXB zq&D)KFOy;v%tUf}lpR&VDB17)oa3R%bS0(W^ms}H`3nSnS{QL~d%9_b zJ&yl4Ii-2rG$tZG9ZDJ3v=&;Du;!bFGMx*UvyNSqk{e(jPDWC=U#Hh+j4<_}R;qP5 zNeL6pjBTKbkdDHq0a#dQdrj#ZV3~(`EcV#-_%%}5m{|X*Fnn;{2+NH#7>*tTWYQhN zvi#cY80KgZvq$Ji!0vB!!new(0_XId?eGoT(Tykg;toEzI(lGVO2`FGS)WLl&~<$x ztt&0z6@ixJjx>D4hPpp+XJgw^CD|28!p7TerXuh)T`0|;km2JyyhnBff!|0UtbkGL#OPKuE89(B(>@R{p%6Pcm z=NZoRzR2)9fLz*nj`1Td%SH5_i*exirG#TQu2*L`*W1bPk3%1+cN^nJT$axk!N16O zxZdX(&h@^?@Q(qx)O(KcBQDEDbUuUra{N-l-Tt;QoaV1jvBQA>v7bz&{FUKz+-0g2C!@1rx!`p#N>fOco5tn685ggCG zu(I`#lV8g44Gdqwc+lS);fG~4lV1&WX=mIeFNEPw zx`_PI*^UIp;cECv9&64t{$Ykc!Ei2r86Cl)zckeZ!Igv~KYkCC{M#8mpW&ZpJc!Hk zU=jRVjEAoeSJAZJK3?A|B0t3BqtIXad#s53EILm{ zd)6`e&k!!{AA>e57Q?ZREd7j!`!!TV{vgA}czGPABSm;#WB57{m42W{ zm-aUh|6@#^+j+_*-%av=E+T&oeQ=Zf`$&EP;qLLhmC5t*ZDsO&{cLCQIPdnu56ea- z&+Y#L!wry=@fl_~?xzwz%=q~}`+O1nB;$!No=g7@Dp1g0&R<11#)tFYTm<(q9?t&> zhJOmUr2R3*gZU%BLu_X9JU;)#l-|Da2L70EwTM1GLr^}s9RcJe(!jTkR({|UBkB$&J-jo(n5_o+z& z;CNaTi7&((C^TL2^2-T#TBms`24N*-y&L_d$I2 zz#{PtPF3lqtHjY~EW4dcUOq$hJuZA3)%UsZUaAke@II;^bm3p5`ZF&4U#WhE;j`dg z{yzp`Ak?M((vEou5FU1J#b1@-$djb{;v#qh!!gd1e-*=#NB%#Fbqq)Ohv0`r>cM8t zBiC2N@z)POEPEMG$brOPxxQkv{I-n^gG|0sNIHLV4Cm|5L56dlXBb|~c#bpt;|w2X zIOjRT@DDM0G2x(&&37=ooaQm&oM#@xKfvTwhA&}w6~j4?Tvw3a&*U4Jd<(-hhI1ad z-XPDlOnx1c_c6SK;hd+N;Tn_Q!SMME-_3B&vxnhTOnxuJ`8mlxhI5`lhBq>v9K#zJ hevsju=NX1KG5O;RzmDPK49A$t|F3g~;Wse({{gPfm>mEB literal 0 HcmV?d00001 diff --git a/templates/virtio21pf/virtio_balloon.ko b/templates/virtio21pf/virtio_balloon.ko new file mode 100755 index 0000000000000000000000000000000000000000..b942a6e831a85a66093f4221d81f7c61a5ae4387 GIT binary patch literal 11280 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 LyYXp*2g|Y8Z literal 0 HcmV?d00001 diff --git a/templates/virtio21pf/virtio_blk.ko b/templates/virtio21pf/virtio_blk.ko new file mode 100755 index 0000000000000000000000000000000000000000..16f9cbb6b9104b175659ccdad6e4a54c1142ce13 GIT binary patch literal 18544 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 Mf`6~T6`#xg8==E@wEzGB literal 0 HcmV?d00001 diff --git a/templates/virtio21pf/virtio_pci.ko b/templates/virtio21pf/virtio_pci.ko new file mode 100755 index 0000000000000000000000000000000000000000..1001e0858981a4813eb0359c91b11dbe821c04a1 GIT binary patch literal 21752 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 Cg9Gyb literal 0 HcmV?d00001 diff --git a/templates/virtio21pf/virtio_scsi.ko b/templates/virtio21pf/virtio_scsi.ko new file mode 100755 index 0000000000000000000000000000000000000000..c1ef9a97c5c85bf41d9e9052ff4d43e87e241a57 GIT binary patch literal 34648 zcmcJ23w%_?+4l)VjcDEIYc<~2c2TSrv)~21W+A~{O=wy`X{~NzvLTU>gzPRCQ3-A~ za@?+_typ|K@-bOzbbIwCjCE0sFmRdSOw}KGj!gH~Wf%_J4)!KlQC19v&{Y>k2FF z`NchBNx8}t*ufNNDbPrqls7AAAA(E}mY4MrJ(yY+G&j|Jb7?T~bkX&@`YGL1hV?=I zcPT%?{=uOAlFpLM#6Ig;SM3|zRuDTP@ywV8yV@5_RTl@7dt!TosVPBw$MBwkXSH0T z64fuK&*JJ}axivS-~FgjFcmGM*rzB13b}sQz#R?U+1$cDvvg&?*GpAN?u%U?OntKm zjo35YOHE1T&kd#$#fSv$JJiL*iU;r94N76`lwj)0p#A4y&o)G@V9yS^_%pg@_Fhvg z%D=M=ata1^Xp?5;-bqw0c;I^ud&5|sbyrPlNM_>4`1j?+HFTqbZCBd{JT_3VFBkN$EN=8F>Rq~D4L&<%fxgAJ@*PK@Sb4ZZGQ0#Lw)xYBu#5ZB+Y3bW!cuK;G4V-iO1(mmL*55~M_)5P}>Q>*}U~)JX2&H4bnj98N|H{{aQb!`IMj$$^r`$IeFbddE zo$G5x8ycWHKNucH>X-7TUX6x8YR#BYH3_AD<=Y9#cuT>Z74sz%Dsx_oy_og9SST;ZpaJ)u)hnPq)?vHk?9ojnyzIr{?Sp zPX083@l%2;p5BQYH4JubCsF?x8XoRH2bNR$weQvQ?*{5tTaL$KDnF{bFHL>f!p(Zb%j=I*eIfgwYTQ=ZF<(ir z?t6blp_Qq5Qz}!7gD`*4eo>3G|I!dZvm8x!dQ-I?h{=q-J$9Tn(xU9nd zy~(UpC`}BV8uKNFCUnP6Cv76V!4&eRkTFF$Zc`0LOO8#Sr2_Yv+=0Yf1@Yg(MO67P zeRns&AIE%URJ}h8!e4vVRroM@zfN;{z^?EOJS^Lr=6%n)>n6p<(UNJ7%CF{o&${W8 zknIvel6&IkHYAo!vSPl$1kDZw@k@iLO&Q!#%c$`rmT82cmn3##`89pgK*rvk*jYde zhk+j{`RJVaXNpHCS=*1M&OtqO+J8uWsd;c)acpUY|BVX&-y0H}UPQ^3r}HQH2EWqo z4USE$L1e`%SVvj$QY`tfvMe4Wdpf_bBtN(t zpqf}VmMNAQQJ4z#Iv}v(R$nze!+1LHS6S{O;gvQ`QEG%ZuOV9OZr1}db)T-=4z>L4 zLH_KzH>E5SoUG={_&hx(BE2KWMJRP=h6>e7W|Wi)R?@P+JXKcB^K1Xj%3j%FA4uKn zQ;nI;V~7C|m0Ba(E3x03_yFe5I$k^o+0VzW#^PHQoxZIvVDGfw_7A42wFgY}6~wO5 z<7G^&#I4h#LhOwb?+?d+8BDF)NwwcoPLm7ODVrWl#ruHz_b`52pSl^?%>IUE1vr@n z=qm5R?Hu5RX2|}qGSyHNKfhyHjTM_k4p1#qjQ@joguze@{7eL@EEw9=|CRUfH0N16 zvqrCZ{h2BZu@S3#RWwPAKh_;cRr(qOsoB2zEyd7Sl|VBEwRi^oX5e09$=vwHf*8XS z?WmmMd%D9@XIK4yaE7n2GPS74lkA3|K*z1V`9*=vGz)s}e3OdstS$G=ANKtQ_d0TO zU^5jNSlQJ}msGj0KG3m+?yZ2`^>>9;`fAq0_gm$jioWEo*tL*yKTQ>$wcDm{^(4Lq z0TZ4Hti1naV4?IwPvNq~i?2Y(?>fx##N@%XOY?5^HN%AGYzx-uhVf?ti4O}r_h!=N z)|fz2J=?`DGyDqV>xIlp`|XO<-K5t@yV`|53=Hmy+HBqBb{{>TqdOfJNc^rWl)8Ox zZV9u6R+_ZlKj9sE0)M^Z*@9#SHGDn5?H@Z60xRtPDjQ3N{7du-yJa>F?jqHySS>?d z-htL1Kq1}1^p@Qyl$Z1UH=v0Fn@I^cPI;6-Tkd7L3ANGf92ml&@&M48<_dnYkX~Xm48UB zAk?Y>51Z$yM_7L7#yq2pQI3wU_Au&wMQS6%EDRD~C@t!n^cH#Km-;sH^-J##532?t zFnNHUVLi#^s8D6yk_Qcc@Xz7l!Re)i zu_F_k)IeB#hS89c>G_IP^mKk1c?RyQpp`MEr3y^Llv8tCMa)X>MW2E)HHb#`E|Q$2MSc#`L16w(7}X>t6BK;kwp zb|vz5#qEK?3Ouy_jTSrAPve+5t4ovQz{QO3mMs778R^q+}2w!1v_1#e~QDm=EnA4*;38|hHYthO4B8BA5| zu2P=Bxyuw(e&;fuVK0Gp?y?pjb#(h;{>hFkOhDN5QzHwjU-m?pQ5MxyrdmqkH>gSH zwZ3<#&CtkWY43}63Z0`&tp_VQ2V=ch$D&iLE{;FHx+uO!8Dw;Z{$u||{)tu=Z^P3* zi*1Sg*0@#GfEJth$Ma{6nS|)6iu zuLt|?!=rFwsNkeMiB~>MY%2`db7p5nbkgz``$PfzIeV*XtGtUodbwUh{tXITejJvQ zXdh2<0}`l+Z@kWR>cQe4dQzSIgXlqx5Psv7%5=?Hun4BPGS7WG{Cg5R3j40?r(ygO zwgWMGc`(1qqj)iz{3SJzwX>v!@?SzdSMeae$}xyPA{EZS3}~u_ah$vmEleZ!?@C2Q zITe=AHTrfm-ueqroy4KfZp6Lisn~|+u-W~GAxFoS{|4gqbkSA`8jyO1H2xS*=ZhHP z6{#vr(6r0u9Jpq{t_RDg1*RwY7WvT~$yE?ofa~{h9fRw`xDx&YTnba4q8OG!MT{H| zFPHowfml_o>v{**P7rcb|G$I8@i=!TQoY|9*x@~y0w%4(ggRMd%9NRn`HKMJ&JD<+0(TK-xPYfsG20D zr;F;P?q(>l{Xxi43#Eg7pGObNHh1T-XjRozSa9{awbp*L7DzM{KpV>MqkasM_So;| z5v4u$6{h`ffIcCbne)Fs=zkl+sQXsGmh%cPVK{5AFk{LlsvI1_`cUfH>YzPm4Hm4) zF#s?7Ozil}e49YEVn_M+U3O;tuuWvTs`RZsJ=i|#d*mO(!&Pwj69X&1>boeEev%p$ z^K)|nNueGdJ0g@)Xb9P+de)llyBnv3@bFNyk#_7W?T_G_GTFgOLf~%ZWKz?b$7gV# z$aHu*d!SRfXWg=+)#m2LX5wJ2f(y7+nN)zeLuH=Mm!YU<-StOf182DWoI_@Oc#?HU z2;o792Rc1V1n{CFHD^7x;n$Sg@1tpzNIh477iDH!I9ZL%W*2-5nS$)P8gn@JhtptU z@|IK4B>lgGQ$$M#>`bNIpTC`7e_u6;r?ZRp60r=~G#)||w|KD{S^{Wrny;{DnwLuQ zB!{3%DE(D3{Re875-r|${og5L)lRcq3EIDJ=n25zu~}~0sf~raJUC_DYlg9WLAg6e ztXS|2aIkL@=4X3*|2xpo^ywkD9#(?oD$hv=)ecqPy~y4F3al^^zK!6&QeElE^I+en zU^>`&TfA7cYeV^^%Z~9RPs2FU4LUo~n@Q|E*$$ZL1T*P$RAm#rhUmW&yuga8*)*Q3 z>>qUiqc&7E4g;IsS!H(TX$FzQMh&ntTwjIw?Se9Two{9?f{}B{g52Y$H6|^q9Vieg7 z-RKBs;CRk9q!c*=`vt5{SM-n)N~ivJ6#5Js^6CBBke=jr7^Qy<60`l3njXehYu~;@ zn4tQUA6^$uKU%E|vtGuAT&$Ni++PGMoA*?_Crw)p zmFam{g_>Q6LzSskwKPZBXcWAt!9cz86&fgdO9&5L*rqnyL$BeD!FO|lRSof0*z7{n z?gSPe*rlKy3KFST#kp;Z4G-sX`v=YHiS(_P2_LI(8H94lc=Zc??|FHIzEei(dvi`O z=hC~@pFr8RT-L0zv>fIAPrN@I4qU5uK+`vL;Jwil^ziI{VZ~1F8F)0o^Gl^YMU@{) zUt2`0m>pH=A5%98+InX#wOMVj=_X@lSFf_+tHB<%;TGyq05B_LcM(VPQdg)eH@CeN zM%hw^)NJ|LcWa^4=~-87zZ9~6qcf)FmQ>j<2iA|V3Nyi;t;lL^#A=XwK@fhZgaEoJ zRyX#GbYDdGJ%v8HC@EFxyXk>0u)fGD?2uAa-_Iw=MM~NKyA(DB`+mJwhyhOVVx{aB zXk8q#XW)5Xr=p`D4i_}Dw18cq10FL%R+fz??EAVgc}K zAdk_|M3mNSspJ~O5TW&1D!EEW=*gjP4W{bUee`7iYnsxNdu~4|@xhtv&&0iF<~Dl9 zDM&AYgQa;UU~i$Nlu}tYB|R(8n1V+U`%@a)N?NP${^S8-k|rEd-TmLBX7$ zO&vtaD~lJ3>Un=7*@E0jPjX34TnBFLWE;Lw0XVPZN+X!|Z+_!RR*{ilvO-UC9|T}y zu3A+&9dK#+!J%Pm21v-DC z>yJPR*suTgMLYpa-S6pq7od7vVPF005(qRcgU$5#&o}`+1>2CDu>#P^)N>ZWkR$=t)LVZ@h>k&%&=V=zaW(VOr|0r!UVJhWh_W^GIR~bsvwX>qLxP|GpsJP~m)o z{a4xt!h7Yzhp4DJtV5J(;>VPy>k5L2?f4ujj6a8MD9=6r4eM1T-|%$)5jRp%RfGPy z5Ih>42DBpeV=_loYGNR!>xN|T>ct1ZV#4fb+D`>VdCLDbVZ0rEoW8|UItXhtKRKXJJkNY9KmBx8xOXbE>rq;#z$j5u9)sXMI3 z;77aFJ(1TwfLk?yh_hPZboVpO&U)T8xg6_pt1O~+re@6bbp8^0ZYct69DuTMtaP-s zjvrxJ(E<8DfLTm-cAp_Tv+;OHRqEviD=o>sL(kcI&hQUnpl=`}bG4Ojq12WPvih+R zV;0JuB=zD@s*4f=>(Oo)Hd}Tg;vX!xw~DtSp3dV@qpbE=GO4Ezp)SNzMtYsDJt~Y! z00mlFXK>Bxx8XX6a;lRZiwb9pz-Ulv_rHtPXcm2o(JU}>(Dd(+WN7K%Csfq^)jWAP zUm^`W;wE$@+mXd>B&7+}*V@L+VdLJ3N2rrq`ePiH@t?O9!E^-39x9>JVt{e#>{^t7x<{ntV( zvtGget~a~?r(SrQ{l9?yr+}>wGoeRg$i}A8L92`^=0beq#pSZO6*k^&y)8OP>@w6L z-#dA=uFGwgPRhG+_;GphejJ;m*luL|=5`&89n`yjf5xmJ=WMvG2wIBuZs6L=^x`5~ zoS~|-u*}7*#ODCcp!e^z3A=-;X6&hs4E0TaiRNVd(D2n?_{)e|HbGqYLDeLhlGpv$vo?%Wf zbyW#g?fm!^A45mRrtGpE9^Nz<@s|^SSN~_8*8_l>;@=k*#iDi5rf_|GZBt8l(L#&k zb+s*Zk>+rFWMMoKjfvtoJ<@`Ncw{tz(_@Xbi^I{T1q(%1b(@vHAY2<=+EV9|UQY#o zjQqM<GgFO|2sdoZiqLiQE#&qamk9mPG2}F%ZZ&bqngVLQMXq=H_f- zI6AMniLJ!xv8Dx)`qp?X%P|5tz4oTo_E)U_@f!o8nPPG4itM^^rw+(v7{f3~-Fm zO@5=llVH-RKafqOY`W)kBcIJ#8=cPui2QA}vBq!{I(Ae0(ySOqeiVFmw ze0n|A} zKj#v!)f{P=7i;v6ulFkXRNnZgx<&CVtub$1d!#lN@siHE#1X}Kqp{jpJbL-~&n_8f zp+%r9+QwVo6s^6f+2|N)Z*OhCd^~Hc7_p|7d0z0xSvtnXNtE0-Bjy&?d)08XNA0#t#$LQ#>Er0$f zH%Aslnl1DT1COtFq~uuTl*6lYgsf}_roo008MRa?7+?!(Tk5@8v~mu_Yp2uFYW!N% zVsqCvH@DW2!SzrllY8r0TVn04&2$UxT4Ho#9HukdBGg|AhiN&jt+g%QOd?~A5iMZR z!fax;JQkSCmQ6vQ^D2?!xRV>fk}+Cf41J%oL0=U!8QUZC;Km~D-nrGYbuSp%*{CDw z4##*l!{R1%*6D#Nqe@uIrEcrA#PsRY##!-}Mi?JGQCA$D8@*8X5wB{VKz(f+G*KO< zuC+dL`S|!aE7bCZc+3j6#@d?W^Puzsi_8iSuP@5i%KI?mZFNo7{78EXdQc8IUuMd6 zH`I|G84nhbg`C3q@o4+`Z4I*`aD~zKy7Sd%Y4rRBt@ZKdNR*|XPrdH^i4*xB`t67W zQS?Nf0dpS33=9lN<#5#q)rL?m#H)IAZh+I+ZmNfYyirn$v{%t_%7^I*q6s7JmRg!F zy$!WZu={!N5Up)(G~A(FQ(a`@#EB{c>0zd&k>gwW6f^|66ieyj^aJ_xX+1>!VrqDi zml#<^rLW*=j|oz3J$WtI!MnJ&1)LslRd2qzLJe zO=p2Qn`@VwO=sV$Cl@B`h)zMlGh4m2i(q=vp6p7?Dh$6?m|u-XRe5}k8ZLn<7`{DT z7mLGM+2IUt9&htfKT^59O)VHL?eVr4C@MHds9J1cFg7>eR9iP+j=)%ZZ3}u@drXf- zvUjw#MGr}%)xYmb+Y}!coauOI``AEyXC9g1lcZzg=wm`LCA$_u2_L89|5UzZsjZk% z@=d;c*N;&)o3y^{Xp27I+oax$XYqg64IXKhe-c^2Q8oJ{x&A+Le7q#_SyxS;eu;O& zRWs+D<3v`3mT4kF&`nSO(1O^hyG0PllqtX*Fl%^lda z6JwDjF>9i_ZEvlwjnyKeu9U$)(LXXeMN?_XjJab$BnB@Rs|_QbONcIw((*nBPSj#= zibk!8w1S~k$G<0dA%>cY9%yAKexX?`NXAQ zuG9G5nZK8THysr-<(vH1a()NR+O2k#aF~}06T##+&=+x&ul`dKnz4k5RDU|&V)7gN z(_=E};w*oN%XhZ7$&V~5+>Gyh<*(uLOPNPO00H|2K%qw*bQw!9YsMCfoR=2d9! zi=0uu@_SAFSumA<6h6-K?_$hZ{;DZR;52=wzfFFF-Gdv`mIkA%$xo-*WN>onN0H95 ziT@Wa{{fj9_s;wjcbG`!7`j|%tT|3!shkFUjQ+;{)F%1LpIfc-y>pDdnr~U8 zFIA{zoz2$@#%nk}gReI-zJ}vGtSlNgB+mcp0lo=X@zpKOlYw<0tZU8?MCna_8t`{13Pie-+26{uExthxlul|AIm->qA_L-@$PspN^^#zneQx zHS6WYmH0Kxr$d+&=(Qo?)jFEB_Y9WP%Y*nUoPHhSW!xnUzKHQvjMLFY3Y|vI=X9Li zw{@Sv$@w9CSzoL*Mm{&JpK&^xrR?m$|H^oVaU=g-#t$%lKg&59dMW$R07F=%zAekg zc{3YWV z#?N5>(~S2rK7sKUSbo{3H87Fezn}TttS2X1|6<(Ba!k8>P(kVs>L~=G%sBlFic#%?{#H@xii zaNW<_Sia$(uka(XI^?Wlyo2##ma~iTRg9N1KEQad1AkxPxpfGlDjbO>q567xeAO^cm$7PvE&#qA zt5(kWaMSB^X(f*oX*SX-0F8C4`{A(`weJ=O|F8I$}@Xapx z9v6JT1^>teKMeD9KKmc*f}iGspX-88b-~MA@M;$v`|f%5T;_szy5Qe%!5?+OH@V=n zzR72|zq#Q3F8GiO?!h`KpM0+iUh0Bhfg_ z54hkTy5PsdQRlPsSuXfg7rfF1zrh7x=z=eI!S8axzu|)a&;@_O1%KKFf6fK}s|)_R z3x3E2KL%4yKKoB_!7p*a%U$s6T=01=_(B)_78m?Z7yKa?{AVusHWz%i3;v1=KIDRr z!_=G4&L_IyXS?8+yWlfi@atUg8W+6X1y8!*-*UkpcEKNa!Jl!#Uv$CWaKX(%4(yfd zm+gEoBN~skMOx}jGTxEJ7i3Sp(B?Y7YYR8WTMS9r^iI^=XHVdW zLs8}s%A$qQFwO(ak7Ua=M+dkxD;%CNXXfXSl}tix%Q!O|0F(stIx2Yy`;XDV(q|hR$>*s-rwgAt#JcqE63eq z)ZsRV%nL5M(5dv+dm0-g;BSneM-kjFabeWEihK!}N|aoP9~T zpxzvly^6sGk=mstr6YX^aGiL?_pS~ql2GqYm8Y_rm;vkmaR!F zjEcClKMr6wpdhOCGHS9|-2jcpj#r zXlp~Pj*d>^l$Wx$ax8k1%jK%A4>v8UZMW3HJ$3Y2EiJP7^fF63rDzN1ZoGwD2Amg8 z(>Bfz&x_Z#*IVf6b+P8KKH!ICQp-H0q&k%tuB*E#+|s(Z76TzyQmm2Ac!hbQH$`f% zs7qWBSy0!u)LIZ*LUEkBTxvxzV~1G}eJGRXbCaLb7N~+T9FUjRY~hCH+Idk!A_KM5 zE{Md%(9|ZxLPj6KR;8+;OS2T6X%Ev1V}$A0x@PTTj%9&;OT=OiU=B-aH!wowa9iWj zsCCmVk@i+&zS{cwaBEY&u##B^HPqs$ximYS=u;+E2bf_Uoa!^$Pw0~D*eT<66ZNN)Ldm7V7z)mRNMVic>$taWgXxv62P zYzoy3s;S~F`5TLSSIo2k>&u7eFc0CNE*-naNOWbL7zGx3UZiCaE#8!HOuX?n z8Xhota+r^}b0LmL8$BMl?3Tzpm=I@(!@OvKd(dt`i&IN(WqWmQhy^u8!+LDt z@x`cw-$EdDp{}P|+pBCXk;QtTEfW5MO|H+9^XijJrRS&IxQ1t-A33PeO(&_<=n3ob zNHNs3E<7*N3SWj3_qlxfYjYwcpB{_w<_JF?{fgI~AUB!Rfs|1tHds(=YIEBi+b9m6f36 zPJw^U1vl^Uj6NO6Lt!!V3Fljd-!A0HdOauj=3NqH*em$U5I1`E3A{nzLoRZL1^-^b zKYRKLPJSDLCspU*NJ{YX#nhe8&D;1>Pv|=NYH^vI@AftQQ4ew&NQD z|0#Gz{^58(O2H}TD8@;D*^Xxjycuamj^72J?t)hd{Ch$U{WUZSPJNmMU)Jjm7yey> zFZEyL!e1@;Qa-&`ra*T10Y0X_{}6J>we)@tUkHPO|6Rlle=Ob;Qy@A2iI2h05O`YP z7YY0>fzM>zX`i`*FYDVZ_!}X|gqYxO2Wa&9y1-Kce^}s)1pW(w%YOTu!0!}%55F)b zJJ2$%X- z2|R%`Q(t-yM}hdV-DmTJNcf}p82%!GuN3$Sfv*?%!vg=gz<(z2uM7Nffv*<0`a2tl zlRmc!oZeSaplXnPnkj;?SID^;aijmM0+;nY8t+jk7&(OF6RzF2~n51^#Ox{}Cadbn?;{!s7xbJ5U)EHV8SgpZrnMzu?WkkiCC*^^W}z^2bxr{v@FF>P<74z0=YoGu;Ix!5{F#iK{{M5NQJ5?EQqRW(J`X%2XF$jy zd#)iN2=55Klyejx>@)3R&Pg68aI)K0CB?E%WZY@D^925FaE(6I0>4e*3-}--$&r5Y zb{9O&IO$2Q*__Wj?s!BHjQ*?GZ=WP^vO_PC5WI{#^`9d6l$K#RR|=fu6fr*2Mb3?a zPjZYt5rLCEe~%A^W*0eLJ^*U!)yw6cEpXC@{$Ln|iHtkzRlo-p34a_P(=KZnH}boQ zfUsHMB)^a4KP}|Q{xkVRl}-5p*^cEd_?H+r?P$&wzb$Z5#mnUm30&$kEaXdlE-lIF zBga=W<5Vu$-<d+fye)9m&sqMki=1Om)(V??RkNHDffIBB+wBa- zN$gU5jGdnpxSTKc3Vey+7oLI$0?Cp1rHq??WzL^pC-}cY9#ih4g0HH|dOjg=(%+1) zjY5vp{}evZ?9^wX3w|-Tia>k#UkC>-C)A zOZj^RPI59V|0NeW{}lMQz&G{@@i}y|1Ig)TIn@HEa*h5G#+`aD6?~Fo!uJJ#89-C+ zlLD9PhphsCOz`)($bUib?-l%FJ}+6h<`gihCj`V2!i3) zGXKk71uOo;xHbG*fqzrrjf@*Pi&@T6!EX`#PJv7L_XvEQ;D1Np_X+$l#!b0j=W>7T zz#n9Mrvv{f<9`(RCMy?u87I3X@iBIIk8xA(BP^%rOpp)^uKp(*#E*60e_;N}0$-?d z>aVjHcb0pJ;8XiP&vIr8oW>*l8AuA(37q(*+!}$)a+?`pKZ%dgr&Hi^yrdX6?KOrnB0MPgvfpkH z`~vVYyzlc{!I$#?BKTzgPmLkz_?@BPOZj6ytJ6szlHbAdKg~F0m-5dNe3E|x%bz6p zQvMeOpXAf;NGP-jeg<)4x3s`l2>f>fe?Z{>6!JF$H(^-tZvklJALG*uWB;$P{--le zQ8_>Q1up&MI)|LgS z-~4WCf&(|do4Z2D|D`Cm(ZM&rBZ~?=s#R0p_X(WJHNOjcO5kIGpG;o}Jpw1b`Tg1- z7^mtyfsbj&Hw69@fgcib3W0a99S%DS5d@0Lb~%=DW4G6-aD+2l_~!{+j*H0-IXk%A zs|BC-42=Fa3qI*-LaX4*bwY>0H-K#9{8Zq-7Wf7spG@4x`aCQ6(he^P{6B@9BhE$y zf$SsoJeqM5E7u#R3chMuZr`&6UzR(`!H=cL!!u-`P{Ko};rzm%;z|#WX$GEdyUK4!TE{6pE10m4Xle5zXp9|~j7)mO3uiD+UuFKbw};V*D+%3V25Cye$E|;kHFn_(k@8Em7Wcc3L!Te5quM6HQa1#BWEPqJg zq>uSsxoRlHNj^~@XFmO}2NdYCif%Y~1x|80IBxW!D2dp>a^?#DJuHJRH3BC&t2l1t z89BRI&PoU0h%)&onJFr1jo_1r{VZp_z^U9`j%NgZxRRj1Ogbf#2=lyP-b)Zpa=hda z#Fg;P3ejH^IGu3%n7`X#-V+iQ(^U0s_6ZE%{N0H%A?GQ<4+@;}tRkflss+A4L+X33 Vz=>bXX*B}>k>EE9ocLZ&`#*3e;>G{~ literal 0 HcmV?d00001 diff --git a/templates/virtio83/if_vtnet.ko b/templates/virtio83/if_vtnet.ko new file mode 100644 index 0000000000000000000000000000000000000000..41b8c6fbfcbbfc3ec3f80f47a746891bfc439231 GIT binary patch literal 42312 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

h z$cz$KhTDG{K{k~AmMHyu$!JJajt&Ie?RSmBTw)CWMaV#+e?-rdF0ZjTUZ^fb8cBv;SbHcIIFhe9aE&hSokn;dt{zonz?(+2Q_FXD6og52k5eYz|2SK|2 z+W)C}-L?Z{tiO_e8^#B8e!`MlKFb>PI($gWki4NJ67F&~#c{Z3`9bVK?@|sVq+brB z*Y!ME;rd%YshbhKZhwt05co(#e`~v~SGfMx&u0~mhe#Sf1`6e%=aK(X(zq#b<=hOv zTH%^bKj}tOj&ax^J})cWttb7>5>YQ@YAydXh5KDN9rzKwn5{w|O@Fb%Ho7h(FnnlIHVAg?9Wf*f*foTe#OZT;r3gyEHX+HFiGLdGIMdKvUqwqb7k2pmE zMrS;f_9^;JjR*7T}@wH=;RxL*-=EBfCn{C$Og2*0F6^&q)^)qsCc^&L>SK>-J8qI?)5 z5dw&QuktrKaHMpy!t+)9K1bnSSNH~Hw~!<^rYpQ_j07r`+;1v;lQL+nqF<=+5>?+z z6ke(D^%O9Xu96R<0XVhGvFaPu5vfh#I!@{54;3Fn)$4ji|1*Ubx$N+m!t<5>KU4JG znvb$4-A<$QSB1Z?2KZYfZ2S{A#Tji!Rm?aV_8|OuMW_AiG=;agaQYmMcso=YE@o1L zbA}tLv%9i}8+0EgJI#VzW%{g)OFi(Y2VUoaukpZd^1$!*z#sC!>CWp=`akD^zwCkc zdEg&=;CYzD4kh<^54_L=pYDNQnEz@PHKcY5G| z^uS;Cz~Aw}4|w2*BTx+0j`<$A-vd9x1E-q;L-C*QfmeIrmIv;5;5U2V_j}+^c;LG{ z@K-(X{T{gQ@S*K+h6jF*2Y#UkzQ_Zw_rTYB;5T^Sw|n6CdEifY;J^34-}1osd*DZ6 z5jvD#(e;R-@H0H{DIWOw9{435c%=uv!UON{z#R|#ZV&t+51el84P}R&9{6q#yw3wq zdEldt99r(l9(a)lewGJ5*8^YbfyX@XbsqQ+Jn)Sk_`@FfRuB9o5ByCJ{GT59VOT#6 z)xIZs;1fLXnI3qV2OjpomwVu?9=PLy-|c}v>Va?b!2jTZzv_X%>wz2L@cfv#pAr_E z$Hiw)p^aqmF*tA9r{tZ@^M=@ZMs{78_M>r-t~R9WD&-xea6^4qp2$Ju7c9z7^8OcP zNdt8d_<6a=yC^Gg9Rs%&l-_I$URL*0jY~EC%o159|6C;oHH2G+(p=m`qa#qX3C_29 z^I2(^u)^>N)GiyDHV8S}`0S<~y6t%beij99rYu@lW600SXk)a#k~`OsWElm*nG(tw z^pz=fhFoFcFr-?2$O}?o+%u`il@!T33lld8bOzl5(Pzbq)@rH^(>;m0N<~zOj*(`M z6R$`uZn^2aCR{ks$Je;hLN}dI8VBr(0H;!su(&QI?<6U>DvB#QO;J>>Iiew)u#sSK zwU1*s*ymVHRb8~Q2IoeWRzf4OMy)ah4aGvl58MJ z@iqap;wphErqsO#Td=u0W>w-AgeDRfZloY_i6)#?XS!3VDPzs#fa(jE4wvg!cAG#l zg5|5DxB=7@mKX5kJ-5LsgDzWTt0mf?Js?&;l%>#CxW^gB70KmjNpW9G%H)18oQry} z(vam11p>>87`SX&M^`h$O|g2ihQ8SL@ znz9E}U#)pi)$4JW%|J{>-v}diR3h}&HqqTj0S-4}kp{A0VQU^`Zz#`U2>o*}-V3;6FY1LLX z)u79G$(FtbFC?#KI>`&UGN4qZdlYpPC5X}Dc)g}-m7%<(N=1I~l-)>lB4$TnLlK&A zH5MHiW)3&X#*#fwH5V(Q>|kZuXWX**EZiuTCc)T(LYUMkYs#@k^)@uncXW;F zqs!2Y6kXLQi@{9#E*Qibr6*+dK{38+zBSEZsV%}0wLD#+W-g*;3zCbrD(@g-sL7a8 z4n{IyG^d*mnh54RI%hhp3|bi;5kwoR4#mJsgmgt85x-^pidZd1dAKyV@WKVNbhV@} zOLK{4kW6*97};fRx>9nUAWbLCAeI9nzNSq||C&JCnQBCq5TTUmS=VT-lChioDojx> z)549okd6K-liL0_u>8ciNG6@8UJ0jNd2Dxybf$U|?XCF1U+@)aro!FyCZoTc(a-gu zuV*-p(D09+CGcH^liXk7N6WoV;cmGPGWvOpeg~r`{+B8Kzhm@tHlz9PXE^Ds@sa9$ zi1cY<_!xzgKEz-AwLLuPU${{s`Y?VppMZ;gD-j^kc{L^aq&pv){xXJB-8Fs{<3q3d zys*WE>+{7{#^)Z!=LUv548M)xKV|q&8Gawbf6egkF}z3N+CImqBOiT!s&SvfUt;tT z@X_f5hLfE?Q3qt7FuALMYx^9f?5g?CQv8p1;aaYr;au(vhLhYWichJ+>A~eLaM53< z=&y9)TJAE2bGdPbliWtd$5A*vxZK-a^v^2#dtJDedq2au+#ZILT=6HF@Z6-18V7k)+}`{ap}B zT5eGBS)y>a+^bylKUefuyKpTx!SIL_C4S$|aC-fr;`395yXAJe=np9Rtu9>4eTLx? zCiiuQ(`&EdL-!Xbx#gx@^fPhZL@7`8KW#TH_h^PkB&qm)2E&QvRK;hS!rgLbx#(LJ z{TvsrqQZ4Mo~Ps%x^OLb0>imn9bYw{GZmk2dB|PL z_>i90DEj3tT+6i>&gCWw6zJGX8fm{`WAP=4@In{UH`gq(8^IJ@CIOT({$wl;6M3=xf1C z^ZzHqxjrLR|8UD);DOhA;Hwo*`uq|i}wfe$H@S-={tB*BQQo@zHUD^siy~ zmz6&fzMA1@Gn~(3FIKp==ikY>kmx+067k{l*eIhHQ?MC=%!o63&i^JxPpto~_}{_k zIse}@IsZ2pJ+ao~(>_Me`4_5wL-qPK>7&*)XDM9U;U7eRbUvf!epSZs zAA?Twsb=_6hBq_3o#AnYKg94`6i)h(9rXRb4K7^YSNnwv*Z2P(X8cz&{yRPJeGLB( zMt^|e+;8zO=tUxPaeS5sex(O~qX+&o4}7Z!zRLqYmJErc+gHzzPh>dRS>IngP2p6p zAK^#0@7au={H;j&^92kS{h|n&NFfhC%`SRGL+j zqe2t;>pg{2y?%}#U9S;1FQr8IUHH*>fx@X6v5qSKV;Mc~7pF7)yNu5i7oQhM5Yjn} zp7WXIqNl$gO{v_2{t6fU#fm=SK~Lw~lt>M(=S>XfaptEk{_7O~2N?ZNz)Rch_b&Rc zkuao}7(MNQX!?J-=zpO2=cucXq-QOoAFXiRE}H-GjQ(0iA7nV+-&n-(|6=r4dGNo6 z(R2N8XSmJy{EFdsGrZFS?_&79jQ+0-Z)Nz044=dB6vH|FiR#KI*^}eb7|!{euW+(6 z&5P8qVqC=NA7OGYVL0c%jPaqS)$Mf^qv!3lhT+_v*D^krfsal%GJ5(q7TT|FV>tKo zO$_JsT^{&OhW~)^e@)@q4|QC9o6*z1CDQsFVE9c8Ki-EAB+cgmY9OSO6i%O<-zA! zM$hH$^Pu0)=(*gn>i$33Z7!2LS>f*bp2z69+;20S_tRR2^SBrDz*`y4N;oQy(Jn+Q~ z=XSn^;avZl8P4r<7sEOIZ#?inGMw}Io5J08ew)#AJAc4%F8A~=3-gKoatmIyozG`D zU#G8P_+mzX+;JH`96yWUT>mnLw=q6V3fJvRb3RI|7(H*_A2OV`@6Q>|+xH<4{5K5e z?fVyobGv=Wa9*zz!#Vv)$IE(VH?Zj`5*?v#0gHi{ac3e`Gjs-#&)( z_Wi&E{};n~`z}5~YOL);f2W*Mr3=4A;g$=Zr0{DL?zZQzT=bg%BQ9L??{?vrDgJ-< z;D7vAq`pL!z>l`)Vutg6Z83Z!qyL@vgUNez^y3DO~FrQ+mc3J=gOEhJT02ebWOUuKpb&>CfrE;(>pI;lE(~ zzsc}6hA&|Fw;5iqa9yt*s$MZh&+B!Yi=O_PF{K}S&_Cm%AFcfG1rPc$Crf@rwgNx8 zy-FB<1H)T9@JAJ{>$Ov|HMTH%Ua!{~eTAZ>$KM%FRn_t56UOH@;9Ac~>H-SszmDOH z8P4NURNIy@Q0b)!^YwRiS${7AFbyl4F4I!*D!oB!|znM zw&&N7M`CflSGZ{U%+Z;x}9A$KU zV+_BF;o^VGg>T}2J;VQ-(Q|z2DIh{}(>HnG2R!imPR;P){rypfZvctb|80g>GW;OJ zIsKW1AVMNNe}Ny(C(Q6G8D7h9?w>0Z?)J|(qv!tF&FF`Ne=mM0{f^P|e)mU)bGd(G ze0clzGkPv}f44NUEesvxt)LDf#2(aZ(}&O=kFQL<-Wvl9&Z<)meG^zQ}2O) z*8|_caIVjN4Cneh!f>w7gwu!C=VA{$%>+@@clm9eGQQ~(OqhHSWyu|2} zjQ(v8`qASh5%K5rg$%!x@tMZ(|77?qhBq_(Qieau@MQ`of8+XFjGpVWhS77sy_wNd ze`z6xNVmE0+Z6s|#^*-RX+M9C;jIjRgW{QA&*zN~OJ zpL0FvgN&Z*X?f7EVf0+jeIE4tJ?PJxAoV9bm*7YHLp{T7hPN^NZiZjyf#1mRdl~)x z4Cns5o#DK{{GQ>QzTX2sY$AjqQN1{y(F&(_=l$+@M$h}*DGcXw=P*9JzkHj~^LCsz ziL{aD7aj6d{GQ2h&Zk`Aq(A4=ln`E?o+ti zo(CB{Z?6;1l5*Yjrz+fS{{X|+vig>L@VS)HbGfS+&gV1NGMw|jiQ&9o->q=B{=a1O zT<&&;U(NLYlLw!@jGps3`Rt+XcDlmdcB}B9w>D_?4r6u24XpdTRU>^_}m+Z&u$0 zE?muhPeYza+p&y;}zds_3_^9o#^xrGga<#nasxUohzNC|u zL%6mH9r)E zQ0zxC{B{Y6-?uWHUNl8lTh11_}q(pz0l#-_ZPlcN9*M@jnX# B1>FDu literal 0 HcmV?d00001 diff --git a/templates/virtio83/virtio.ko b/templates/virtio83/virtio.ko new file mode 100644 index 0000000000000000000000000000000000000000..3ed134233220f0f629934b5eaab2c3e25e3cfcc8 GIT binary patch literal 17592 zcmeHO4R9OBbv{s(Mazsp|0GuAID#57rfB_;5)+Y9ViOb~-o>CuMZdO1gAj2iGA02S zIEa)?(R4sIzB!?zHfiHb5?9kEt3+2>AMO{W7eKPq{$4U3% zVeH58-tFFP-mTs(o8{Ci4T|w2#du0Fre));?@1-d_7oBxN3Aa5lRTPnkNi0_WuxP; zobDL+*X3m67qW3mHvET< z&=<&NnVia0K$m{qpH1ebiU~KYrPW=HiF>ef6 zFypUdSy>7fcay?G}(@`E98T!-7Q{soYcsY6OfId^pd4K)EP2ck$p1c~5(d z%OLN)5%gxjc%vX_hJD+>w(0jk%JjY7`@jfsJ$aR*v7dKh?>i?R)m|wSS_8RA4$tmwayud;W7;pL<xcFmxz+e_!0?Y7txp+0vC@%j z`YYrtW@JeleNJDQPUUivGzT$!{Y_NJ3x%b<+0rNp0z(M!HAoti?vH_WS;>Edg>h)pL;W#p3(XAN& z-a7iKd*lfKS`AfF()%GN?mrYTt{(RQ6Go)@jbydyf68n4Yc;RYQN#Cacpfl1jw)tL zwPN^XsB58aSIp8%_py4)#pP3St} zvJ$`9@A0Otmbedefp&`70o&Z1LXIy#pU?4ijQ#oI>~W_tI!+_|3dY_&G6~OMQw&Pp8<+F0gKp-Pfbo_*@%&uH7`gQkz}Wl657CY3 zuUUYRB^Qs}dJqVduB5NktgHlc8SXV(o9Z&TGoxpQDwTAgazR~2rR-+a90 z)~4Lq#`A-($P*V!HE-5ex>pl>KFr8dqh%g=myFsIeKf$H~ znv#ACjN4i*oBL05@0qQKXoT5%bmEt#vbh!Bk4kTFoi z=T?B@>ZYrtsay`Cpq_1~Ah7OC!1RwpNCG+ez~8_e^cWB;U0Z8Gi`E*i z(YgcTrBgP}$uJXg`V$a7`@7||UJH%-jqtE4Ctv=VyyQ2Eu{D<7lpB3=s8P!{EpSPx zH(mPePryr?^t}(m4|{zq%$H`=H^`}Mg<|?UbEn{i=(RxCZxoQBHD`Ub;6U%Re_2Vg z4EnpZRGAAGZ@{Ro%SzD2Tf#c|1$nmo9wo;If`C_^SCCFwA zlhARp*nYgZT`{hLFE-Y|&xQf5@w9&P(h0@9LrHHdBP~d<*W9q|uuJcNFdeFq^bJb- zF^nn*Q}+J%AiNyr^kp=LIbF`KzXBBS&I5@6l|AY4vbfoRaWnV>p*@%uzilbH@$=%5W>KT=S#FN=XZ~_)M(zu zDfj5_fdVXT0ZXU!O7GH)V&18w+qkJDkz4E@>xXgKmO)?()sR)~!^-F%P`di-74xA6 zW^3J(z_zVs^bDjjkWu#>3yA!ALN=a()Ma3iE>_YTVU05T#Pzw|wmz@H@IqzWV-s@jWaG)fhbLE|ovCb@ z&pmdIrig5X?SRZ3XG!~upn!2&GcJG@wTijD!E3a@BH7;Q9y=o&KZZmOOXEXp6(b1i zWN00U;(U?pUX>NtL~4b99PN{xKfz@;I~fAxM_`? zI#rQ7(Re=j8i?wYyWYTcsAYYtz=paE`h_i$HVENsAsxXRjrCs6_DAr2hc)NyeHmvN zqC7wUnhCSMu4Taeg^c@HW_J8*sfPw6p|kkY{7%eb5U%5ebmL~Us=i$klx&r(5v+xvvz|wqX z+aRQYX9Lzcl#Qco9cr`$U9htsoyRuGiRVl2GU^xkj8nKbk7m{z`l2#zeb%?Ayi^+6 z88E-g)~G)n%gN>qb887o1`n)o~``EAGtdcrc z()a_->kj-5(uY2;Tuz;+$eo0F_RU-1ZG0yA9c{hoTeLtkS_ZXT+W@-KJ+{3jcNX^L zk8CP&k3FgRjKHQ+n1`3X3xyuN-}?De**fSGMhnv-)hu<+Gk9qPLuwpK!4xrg8uqy(%~}bad$iIS>>1G$OhH!7G z$(>$u9zznY4aPD)(>GD7Ujx5o#x>y5(~5CMnfT>gt=SxLW0Hjx(5bmv2AbVtM;Vab zkkgtC>cqE>bm@Fp)bqgqxFn7lv+DzJPNQs&N0`{tLsk}qly zSehX(0AIEYehP#QgRoC!tr{L-h0Q#FK|YzBbMUtZ*};GM(v9%$1TQA~Yj|eHV$X6QYBr!5C-mCSe}AmskdCo+KuV2Fw)eCtHS)a z$L$mRuK}}t#)5mr z{KM|i;IxD82*XHuAN(6|kG0o8qiGOslpyo&h(Tjp3H0Oghx|DdNQsi)_Q6Os(J_JOS3V_^9gC0 z#Jb@=v??)Q+S3!)d!o|)YCNL$N*kkkkG8ih;_r*;d!Us@lHB%-~lvuxXz?MkW`bZrz-5Ju1YNRgrjQ06N%~`b)YAqd#V#X`&3U)!n03} zN0(aa&K$rAa7@S(i}tH=PgL`)S_>?T(Z^L7pU~B?M~_B5eWA!+PY>DX39E^&cu!1^ z#=(hI;bqW0z}R$!B8)#6)D_ZI4|^K^BG zBD+BY)P0>N+8h34Rd;fkC!+S_gP?UVuJ%NFbT+a-6psKKi$h)k%U3vE%RIem=zgRC zU&36)dsLWTl&Qs4V6z)YBg<7JEofGJ(6&ure!{byDfr2%@H)nVJtPw&V4a~op`P9qyoFtdO1#!44u%{S?B7L!rV!YV^`WbI3m+;@;e&>B6{Qu8?Di2g{fK}PN*|*k{&_la= z)s+n^6MGXY!|I-uR!*jBMVDt){hG$wHJ(+qb*q=x!hdT#wI5&mvDIr=ee533uK3Q>ZQ zeF;?$_C>>esvbg`AhZh|U^J$<0=UBBvn!F1R&+)C`XH4_D%v} z9$cW#%rbvFXEr}p47GAf|vt9oNGLYNJ z2Eh-P&)d!LP)z?R(qAS*)F0=FkLP?l0W0Reb|T>PK*ox_eJ`NJZcO9?+uIHg0WneZco z^SJyp;RNU9^fA0JQwND)nCQo;&Gj?^F9D5)$rbo<3d@&?eweii`u_{jS5V%&j{46L z{Y9v;R9Kbt2GLKE;#&yM5#H{$0GaTcAxKf5S_)R24=mM$XBJrP_gj_JKzQs13%HH& z7Q!W>$GFC_4RG}Tl-11ZnIb%6)Bmf4AGG24p#u4MpvJ=OeTHznR}=BK0Y|%d)tq^SK$~0PXeAynL1Ds{v>9Ha#~J{UMq_ytBcg za-96n_3tM+(!zo-AFNy^{37@X3#Y#p<`w0FlUU(?TTb{Pn?9|CPucK&gjd-3940(wqt614 z^Ky~=bCLR=;Wz~pEqm#8!Vi)CJZ|42{zq*5tH58#{}9E=@2P(c;LKhd{T9MKHatoA zMaw<;b@wRY!#4VF0giHG(Igz$+c_dbi<=`VH-o~i0=2_xOpS!aQ8q$q;*lNfrpxFc-VL&A-kvDj{=r#3 z$Zk701d@eE74Mj-Z8tBkh89Zp>Uf=~_3RE>H>sS(u4DpkOyM39Zc%!=R8A!7Ko_dW zja`KVW6^{ji$+v%q8{gr7?YkoAq%hwBX}#x2>8I>UZJTasR@Rn9{HO`?urD)R5yfH zSY;+~S&W$7y9f6?FvDM#IqY_%_|O?nm^BpcOyDvfnHC>y-FEL%xgwTpz-fK4URBS- zs0A#QWQ=*pf!A!W3$DRyZY~75_4nxA+$#?J`r|#iI&&HYhFVXruEsfwgwPX?hk7DH zTaDn|+KjoK>9iuQq3LGc6V=Ag8C@(HFp8q{X^jozH-=>1X3H2`IK@KYuozx=NzbKG z_(no~d5Fz|9*q@d*%HN+;^St=oZyOZvMA) zBD3re4|(&8FtZ#nYhj0b60_z$0Ui`Bwp-)KU5(6`(OFR}rWov;6)Sdv*;7@-m2ByY zBkgR3=@rwLxWEJw_U%VBzYqqN@EClj(lx0N3mCIj7lq_**fV3HIHu{uuA~;E5!6eq zJ}W3;q3J!lsllkjDoZSs+T-eO`0xVjm~CIX@C%=Ge{|Ppg7DSwen>agWLR=Ephs+iuHwJu%!>^@eq6xWkTtt6kdB+!Q%!UQCORw*AT~7 zcDy&lqFNO@zID+vR{VYddEmSH+wdJ63%?ITyi>sc9-gsq{`@`us0A}!J`K;D5B}{a z7EXVg)s)~*aaiFvKR=YxIRNE`;UDL7C*eqsM+<(gYq8b5bHIP?fWIv87v!82MY&4}N58E{0xI5SG`;oth-{OFK z2)EmNmw=0M?-uxY1-W4d{6PnNSl}<(`;P)H%6(km!*c+N&p6;eb-@2a;4jL3OTb0B zc%Ov@{pn***3V52`0WmOE#Y=QZx?V;t}5_p5ah-j@XtBm2L%42y^jmHDEFkmhwm*Y z{+t8;YX|&gfxjph@6oWJA4IvU2}eJ#K>{jwIN)0y@OuRQqTI^@JuaOWiGL|=_Gobfqthz zpLL*rTA&yC-$+-;*vkF<>7?tkVv zg@0G&_Bp%(AmB*P~<3IlQC;tsx!P2Jy literal 0 HcmV?d00001 diff --git a/templates/virtio83/virtio_balloon.ko b/templates/virtio83/virtio_balloon.ko new file mode 100644 index 0000000000000000000000000000000000000000..b5d9e5822e52a92356bd5775372388d7c63114a4 GIT binary patch literal 11208 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 DKN21C literal 0 HcmV?d00001 diff --git a/templates/virtio83/virtio_blk.ko b/templates/virtio83/virtio_blk.ko new file mode 100644 index 0000000000000000000000000000000000000000..50f2634fbce7aec657be1ffad9fa1817d11bc7d3 GIT binary patch literal 18672 zcmbtb4|r77m48VY8u+uhQB?y9w0Xt!!;Y-PJEvRcjl&VA?3 zoO$HA{p$Ug_wN1ObI(2Z+;h&o@7}PbJ-WEIrsgz*Q;l(hQKJjuz4N?Ep;cvDjYi`P zW2Nc7+Wh>^%K?qNKc!*ezSaA?k(wH2ZB zS*83i<&i8me?MN}y0;c@=HqcG+-2+?tTh_FlG{F)s6gZa`B7(TWVj<-Lud%FBGYIs zp=D)gG-MVZJOqhR*?jz|nYt0tQtz6>C-2_#5~wC7YK+12P|4a0k1B%QG!;ibNopbq zr-+81D&&8ThEH7#Y~;j6#n#$}wtbP~?co~dqFprW*Vo|D5Irqd>7;f{=bU1yFdSmbMr}x z89(Cw=3&|Nx2d{NMRnUyo6;mQ1eD*kEYex-5_(Gp87!<6BrGwQoxzT3gTFevvO zm4jFBP#JRaCw3y+QQY$lyv$OGaAmY?huV_h{zO58!0=}6t%aF*8X^-DPH^-a?~#eB zD0cKw2J&IEh)H+z zWKd=Sb6;qiYv!MKPBGoc-0>-JuOUEym(DfangeY!CrWko;8bdxLcL<%s01#`+e~*; z<6aU=iDnh=-HJTSbtkwV$dfsp{T~1UgW-` z!$sky-uA-cHKu#8`KQ*~#}v`NqcfP$bpNRmS|H`#FEp;Y#Z!WI=jK&bp)KMI)uNt5O4Xet?@Urj}9oR6gk648*UW~8`H?o?9@`iLftMH7nzx;%A zu~q!Rw(`VyxYu#%KBA#yjcjQ#oU>q2V?UUxoVEG**b`Vst-_(h?H`hhn#2^%7_+p)dkP)jX^-1WH~+cSO}u->%xPy z5s>lJLn$o{vxbSgS-4iU!&t9al=L<^7ZUCsj=Hbyic;1KBZ_R~#KpNEMTUFAZ%0(f ztm@=Z-N_>N7%gFH0aNO$=wHdZ%99nVP_&q>w(`d{kKwNH+ca6%LV_wk_^zgC9=$bk zySM$T=HEO@TR93gM)iJfx#j-BD%?4{#dPmF#KXqY3x*xVJ7+KNa9^`VemC6S{M!mY zt8gIXD1;$pP03b)P1Tw@VE2PJ9pQOjL4duZJ9>|OZ6*_OL?_WfWoen#0} zeEu-L#iuV{eOU~*tx<(vFYq=z**Nk}jdKR}O1V#!>L8FYeo6@ukt8!`B21b4PTXkj z8@tA=p)4(@_2Xxcywli_zZ*oQx+!=z%xZqEUBpXFW{b+dEZ^S|BvQEFaoxJSX;sD}3QqR8=+qb$i&wr{l` zA9-V@g~ic*H}W(s*yhOY2Z&ii{xF^$g%n~*8z#5?V6>2JEw#TumDp3%)H`#Iw}nH_ zsWAV#;qjRe>Y$oV(2%ld%lHW1rn`C+OZZ~!(_nK^_x)YveL>_)?Z*2DcN6t>HG`K~ zg_R+zkfTjF8&WPEY52kI)4Lw z2m62DDr{~+AO}xu3`!mOiH5DuAm35!PLsZ^Lafmm*{js*oNkrwRXGqu8lGG-6RXXF z$R73ab)wceC9($#1BD8nw_OOh6Hk$f6n_=x-L{rR?z-^sQVOuV8OJ6itck3`^x2lX zEMyh23LsjZX}ODs#v8T&QZ@NNhr2o5;r1ZD`^C>&=+tLULF13O$1V3g>{naZILu=1 zg^Ewnrr3!_i}nj;|7_16&z=84s}yfZuEco22r<(ey4qmp_F)&O73dR@<1fcU)BSJy z%B?-h?Jmagg?o7H@pou*<^@BT!wouL#pjE< z53{ga?K$q=zYPjPWbw2>D}xFHRjtx!<*Tpkk5+WT^P!`TLN|i(>q^VJ8^IJpB)|ra zH1=ccsOW1f*QqJg`lM);{WiY>>Z{c!>j(^Z>Ta@Mu_JaqZWV6On>giVfWKL#>Ig8fs~{KCN+qlF#Brz3yd`9$RS;&83g`lY(-YMm+9HRi6?9$0D% z)1p4!AOQM+X0P-qy`#7pi}FNe_b^9)@K6U+oC^dOwPO>$J${~5+>CwfFFd7#zCK4Q z{8;vcvYQIiCNTANJjwaXOpGn+=8s_6G2J444blQocvO8Y?xo(<8hi;cD{i7Q82YZL z^zs|DSE3Z!!rQUhy^R)8R~=}Wg}U;m&L*rH>hwm@>P?YZ{Qfa;ix#?CN_onmFsL}}z8USMOCMt;P($@UB*hfrx2_mC<~clS#uRle^IC=KDHX%C&2;4@Es z*kNrbevi11&Huy1M8rKX-h(wKw~9jjXRErW9f;_@q&fo@*da6a`bAhgJpS;=kvB2k z$X>E-sHEBy-qEIj?I{jg$g)meOxfA1{Lwp4L@ZTm)gi6;y=~}4K|4ux%9dB}NA6Ea z8O@rF(grD{2$dUwpxi)7zuxGLXA&N7W7Ud< z(WRj%L^gU;StmrSlNmb;cG+Ayoys_1*dHHC_UHOTS-Yp-9&ke0n~NsczjQ8;bY!r3P&!*fgUnJ}{7S6xJ1Y>`=C+FPU{t#z|Kg zY7V_{lXS)=PO25FAv=xLGDol8T2IoXiMWzH9K z9ScKq@e0k!h1PB)A?+?FmC0T*%}~=4>aiUsInWcr3@5wnP%;74B)gM#hLlgN7KE&2 zJcSBT+K;7EeSLC55?bPn4edFhRTwkcDKpZ%6S<7)Dc7GS5%v6=n6ZWNOa^@#9r2+~ zyQdQ~L)n{h{U~LPMak^CC3dRcb}}1{&)MLzA>v8M% zoxpWol3q%NIZ5)GA9NrwjMV z`fnu1Kzdv^@QRa;m8(vA)df)38K<5^OF&&&y6WmWV_G$U5{|JLHK zW?Yx``>zP7CH(Gg;G{0{%KE(ZM`JZQ8 z+oQ&hF|Nz{eG&MQ9@hByEM)uv#{@S&WZT;6VDE_cAWi^z5p7Uan<4%=pth4vTSv_5UBt=N85r zng3&qcQc;mb+MUodesSk6fjU)@lH;422Y}|s;+GHl?n&_vdStTa`yz_Ukkvu2jDvc z@aF^Ymjm!40r;B%cpX$T*|^RMz|RZ7FATuL0eDLQ{@DOL5rAg`@XZ1Emjm!`2H=kc z;QtVSKNo=iJOF<+0RLS8UXM69*?fI80KY5%zd8WFE&%Tgz!L#@IshLG!0!vdzZHOg zF93fw0DmC>e=Pt%5r9v_mSr;ie=Go>6@Z5W@U{SabpW0Uz&8cpe;$B86oBstz@HAl zUkJc|6M+9A06z^2$7FgwCjkFM0DfrzenSA>5rD@6@WBAQ5P&}%fNu-HjaY0&Zh#IB zV(RO?`I`CkC9evoqYr!EH$1BQV+6*^U-tb8eFR3QVW|Nw{fX_xY1*GAK!pLx!Y6Wn zEGurTj`i$JHklgWVTkh$PX+(4;`}Wn>+*@AcVsSg?v&@liD5d7KT_8pFe4R(d?2$5 znbcbqUpWM=9f2k6v^|iJ79c7&OwvGfS!v5NCYzSk6-#82U_?5Z`~)_*#;{&Aa+iS)20-oLiMEaGchKW3H^O%fyqg^7Z8+$)pQ(GVSrU2h@qZJmQ9b_^&QJ zTE0VwCG2b$H}8f=W_x2e6HE8mxO`w3XY`pE9nI@|u)JY2Fjg)?lACq`^J zSU!vPiYd$$*Z2?OA!Ry~TB}uoOORZ@E@XRiP9im^o8o-VyE&rUpcu~eaEXB2QvCP|(tHR17>CS;9JCMc=gVSyF-a(#E$B(hD-gU8_9IlEC zTp=Y=1GebS=~Y7TTF@pX1iPK!5N zm1(l|Vgy5}_&RPCW8R&fHwbUOa7di&-Y8X~)S*cRDh#!$YU`s*L}P6#-0Wk0DQq_>k!OoaZe9 zk%<0w{4^ik58+(`pTXxIgy#hQsQ|n+0FMd$Cc&pq;FABnjB7od$>pM;Un2PYwZJ8x z_k4U7b9o942#H>j&&LJck2T3i=xapOl~{QS`acR|LHy=pPmI zl%;c7N`E8hrTqWsqu+sX#`n|vt0c=05}HBb4;GH2sB)6OY^Q)AW}LT=sjD!08TB z(+~OhxA1uH5%kheAM??l$Mk<6K)+kyw&<76k0?>|TkzBJ{7T?g3H&X_{d$-X^iprr zPeo%S;@^#*=1=EGlnC#|PvaK}JSp(Y8Ta>lji8tMUnX#xE6x8_fyV^?y1*j>{~v+N zd0fN>M)GF_J)N6SB3$z65%>`5v^)?ocjJRuGl2_EC8nU^Ort)?RSp}dO7b0 z1un<+N&uf%1-&KueJ_Ci)M=i;B)jZ)sle&ZNXvhxz~#Kxk%EzkkF=jbflEHm3j7Ob zqxt`gae5K2QT!11|2*Cy=;b^hsdG&=|=t&sB_*{8FB{z@;_h|mJ z1TN+Iq`;R7`mYOI_IoPdw-bMfU(L8*KdpjZ>hm@qz5aWPEp!;G^zm-(z=T({GFh9=y^j z-?n&i>c7L8D{vw;d2lTPCukd&Tlr0Vh<-lPFBiDZ6LgEfC7)g&{s@=T0w?~wEi{G& zPJABV^8Etmp(whR38oTt|gffN5RF7FgL@xOx0qXH-T5Ge#nx1%CM3O}Kq z9!7lTa#<4*E%DL))pKKd(RY?kx*x)`8pM09pr>qz>%szWV~k!c0;lX60+Ct;zTSh> z(-b&m_1{e`7x;C8{uY5#R{y=t8iB7B^t}S7tp59-w7{4-N-w-(Id6XVV z+kN9Y{hb=6Rv*5M LaZ}*(d;I?ZMyVs3 literal 0 HcmV?d00001 diff --git a/templates/virtio83/virtio_pci.ko b/templates/virtio83/virtio_pci.ko new file mode 100644 index 0000000000000000000000000000000000000000..0e74a95f2e1b33d0f10a48097b4831ad6d45b112 GIT binary patch literal 22760 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 literal 0 HcmV?d00001 diff --git a/templates/virtio83pf/if_vtnet.ko b/templates/virtio83pf/if_vtnet.ko new file mode 100755 index 0000000000000000000000000000000000000000..99a1832709096f30959cf5333a2b28db9b0765c1 GIT binary patch literal 41224 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 literal 0 HcmV?d00001 diff --git a/templates/virtio83pf/virtio.ko b/templates/virtio83pf/virtio.ko new file mode 100755 index 0000000000000000000000000000000000000000..569cd41c5057c916d35c1189953d4a01922110c2 GIT binary patch literal 18072 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 literal 0 HcmV?d00001 diff --git a/templates/virtio83pf/virtio_balloon.ko b/templates/virtio83pf/virtio_balloon.ko new file mode 100755 index 0000000000000000000000000000000000000000..50514fdefd4b2853b6b10f1c34eb411f2d642510 GIT binary patch literal 11288 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 Ay#N3J literal 0 HcmV?d00001 diff --git a/templates/virtio83pf/virtio_blk.ko b/templates/virtio83pf/virtio_blk.ko new file mode 100755 index 0000000000000000000000000000000000000000..68764d28ec64ed65883314002ee00b02f7e25348 GIT binary patch literal 18560 zcmc&*4|H5rnSV(O2B=J6QHp>*CD?LyNfSUUSRm6R?Hf9UVw-|MolG+?$&f!Yoq5xy zg|;b^5uUSI16bj#t3-4aS6#b;*grI;v~-AyRt~#@f0iQaZff|aXjIo{JZ_ub$9-S7MEcfWh@d-tVVo5M>gD=JPhI8_)|8Wp-A^8WXg3JvPE!8px0 z)o7_7wcOu~?Qd^yAEL|3-+L$8x9mI-B-B{Br=05i;=1hN+1XUO-1JZroi{w=1hE%922}gJh*j5 zaCNYyx&Ec#s*wA}N?2bN&Tm*aai-<|ci8>E@tUcrsoZEFcQ@n)vyWGV-J?nxVLO2l zXXve|DJzF~*`FB;yHlzj<-owbOjuAP1O~DS^GF99=T2GfKFe*aE;P=j&ITSa7F7lw zITRRp2&F~Ufq^e0|Az|a7OQX&cZO9cP*y*xw1n~lHT@_m?Tuz&;BzR1@}KpxtQRbb$k=+m}SK$_w{;W0Ed>L;kw zxz)l+KaKc>7|3UjYB_?7;%+}G5E8>xdnM75p)p?p(Kl0(J$FwKx8jfxi| zs0z6^*Cf?E!Z2fvIj3ffhpnlmZ{nBUfbsg(lADBuPQc19HT$ovsBkybS?+A?Ji z&9BW*V}7}l!IqHwrswUs;e5x!Li5wG&6qevO|w_VuRuVA-M6%>m67|M_cZ4wGrxk* zt4C2y-jKi##_)rsW>|RbA$;kA@!4<$JK;&YT=x4 zzN>ot?AK|c2i*hC0SY8zH(E~dq{C>cHWOcGy<_{;`hk^$`sBW@YQuv`tZ@hGCwFZr zjjvuWg4u9Q-E2J)w0c|y5(V?oUALF$N>C{OXw48zuyRuvroo46?xW7*!qoO^yh33> z(NsnDwwi^;^1<$!70!j^#TU_AZ>pqlH*r?UiHlL@#jWtBnmOY?`BQNL`wYEu$y@`?AnJzE=FndF$&w@UNwdDSLr~73(jhC$E`eC+#Hg>Sm=yjQTdL3C_d$_fUti=l`4gSTXpfc(tF{UYdex zzHfW64qYJ|$>iXpG)X+GHy;bRPf}m3{QdMC5^|3&$B5*9;k07PS0P6KSPD7}tmWno z!INq{CL8OjosTciO$Ksbg}~)GICv;9a5@@b6?-N4=zD=$`MuO&*9nzkWme6butm@4 z4lCcdP|ddUpzRsbb|&WB2*euXrXQeS<rGeOaHREYBF#jf=NmX zz))x~M_bkM+)LKr-op?+LdG1-K7-$>LUt4xDGCQH4DFsnxGiK4Fc{kR=1F1q8&9C9 zdSDGcG>Ur|budSwD#PyHDkuuO-!+hpAHuZ3LUH66>Yy-?`web<)zZFL(#6WHLYCA~ zno(u-co!?Vhh$IN^i_XbM${)ZnWv)^eMl z(2qRsNa;LGOt~JvoW%v(x_IY5x~`8A~^NqpL0SmyS%Pq#6(p&T4@b#Z$+fQ$8$yX z2z(~F)!X)Vf;EM}4SecS^fp9FDPELPngCCr5G<%CO?oQ(KK-Z}qZn9$VN^q4;6~uf z^R{6PuIblv1RkbmOYf;knaLgu=9N6leYSp5Jz>)*6`CJ}Xjs>?!)+dh*DzI^cd{Ms z{=mS0ptj^l7DXNZJytI(-|~cYv0A&_X9BrNm}6}_Km#Z?>g?Wb^!0-~KL|;IB{?bt zC!6ak2Ky?VQ@2gg{M<=DfoqRtrz(T)-kn7J%)7yJ|14GSq0m>R9k~^i)2c2kR?z^! zq27~|Qbe2k_075e+44y|VVxb!=G0!LqUM$C{)+LPh{vYOUU07Bor~S0U7dMynkKxx zuo07(qWi`_uw<~t4F2?ui7(Jds74qZ3y-f>po%HXc4el@Dm31pSos|FYNP=LYP|0-J&<=QUG%=ujaK=bLk??foAHhuoEY+}JrI@JKGLS|)LqQg_aXfsjQzO`4ruc1Bfb@C!o_*N(Ux zM(*7`pzbiQ9#l67NB3Jha9f<3&w2~Jw~{G&DtdDyDlkA#gL)Pra6|5>exN=BHL59x z+(;!Rh^FR75t_MepyWS-AIyP_Mccv`ao?O@(i+OI@2r1{rd1QYX1!|dd-)9O=1u6=St>mC1cd0d6y`RA{7I@@2JfFu#EErMIK0gEGYRQJDU%?*bPJg~sqO->;chmEha}qsLx`*&QNh_}RmhLGBzWYUt>P_m1 zMD26M^Az>G>b{28ySdr7DjajmHQBc+oy)Rs&GPm`=hWS_l+nA6CtEyB=SJ0G%hq3K zCn}uP9-oNyPq8LE58=gWq|j7T1sO(Rb`53qPc_$%HP?^UkEs_!eyH$Fb-iu2Bt$;E z<7vL2>Pd=vcQ=gn&f4y-$l7=!lCsxj?6gC5Nav?7H-VZP;!dZT>Ftd6#=7m8+13-g z+&n*K7z;A#)PiLDO1n30r&DbU)U`3apeGT_bld3#>*FaWo>;K9JJHs)pthF(#q9Od zYdl&6Hq^E$y`DYEM0d9~=yEf3t!bxHi4C9; zdmVHolXP@HRL9H?+i{e!p6T%z42ieLZSJyi$~vPnnu>XzFjlWx9A0LI;au$rGNCQ% z*k-z;JD!I8^V6!oG^A`yky5nhWL=d^*~MB8g!IWA98NUdwN4X@EQL~^lqQdJ{wja}Q@z0puI6?J9f%1~oZENv|5&ZIkWXRJyf zq7oe&4eEJ3!5M{}xQ%#~kz`xk=(1D2cDJqs!eOhLbZ)3sBU0O&h^V0wJg+kxq<@7B zPXf~twy9|eo9MJuJ*{LIW?8wRtlVE#rhRZ)DpxSA(t8;zw^3544vYEQq-v`66+so{ zCP`sb@7q`rY4#sa(d~4usBiPLvtf=w*Zq6m{Wh$>yb9aP)_2nS)ptVrTXJfaq-=Zf z%BC7)X=CH%=KQ7Cv|M0bQhQPDMdn3ybsw!;cyYan)h1q?P zBFoT4onOc8%kAGu?~X{O`Yruv{TiWj{F(fBsL^AzGLig8W2D<_|J?$NY$@0O4C^oV zmu`as zxy(h1Jxa$~NEW>bBGEW5!d2e?lYq^nzv}N%ffOTxNagxP)p578j_a*QnKh$EvSX%^ zB)s@kKTXFhHKNlXRhVUPr$v?Lr;_#B59F6h*s0@u9=D-&iSPz4>t&4U32$Ybr-^Yf z2BYOw)t9hV; z%%?vmpnkP7KEn79l^k{sFzts^FzLyjVdm*|s$StI7I~WA&HT|a{-DA&t0eyk<{vKO zzr^zOe97R#DH%zU$q|5Jrm9cMp%wkP=wW&95?egos$8EZJ}R;HM(qXX2mdgJ0}}H~QdL`{1AO!P|ZC zO+Gjs5Y1%&-9GqsAN*@R__uxVCw%Z<_~1u;@IU(Cv#?d#|MAP2Y!o{L4Q0!#??o z`Xa%!SSlLtjjUhCMXtvYO|sj@`MqZ0l&7te3+PE?Q=(T}uzpk@6bnn0%%b9OTjzSC>zY^!$@RR zrZ>8_+g9F+)PJG~Z;vh)O-i5-N@Zb;6KASMn8tUQ5+IjyOeA9kO)h zv5mx1aVS-yc|}qHPZ-RJHXPNaxrpHJOyJ86EA~F`8QvGY2)>d<(usDbO#^y0^kyWp zXmY6;TKqx<6R?CBk#x6hW1geC-oisGfsyHnMmB-(q!Js8a=j&sCwh_Jo&i7Io5XiT zr`_n>L^B!7Lsz7&vn$e(!Phwh%T|mQo|0~-6Q9;%5!+krv<7co@f4uVx=0M)w9@z> zY4kXK1S@mAPkE7OQZ1m$QuX~U5>0hzNo-Ao+R<0FNPBk_-^hf^dZRsdM$A3WsS&+` zDvfGxk`1)_m%I{n=oJXHY4W8X8y91vbF~~}c>W_D~$xbDNFW3o@_9#9| zO6Rpl;JbaOkcwex+zInrs z@5k}>;+T_KQ{&c#Fmr4zDxQvbA%+c7RjarW!v~O;8QK`V z6+rFHrN~vge8h|2wCJ*@$s5FyYjl9?n5ECr#@a-}!Q@{{k0#0t9ogLDnA)|y9xJbK zFH{IQ80_|V3ZcSmwVO_Jk2f2NMiiYxf3=`JCOU2RB%O`kjHhu^(@3fE)X@8XC!bf) zalkvts6GJ$Us@;d~+QQ%tz z{z-uk34FQ0_X%9a!_xx4N$}6Z`z0mnS3fT8=NkpyCh(ZR7Ylr&!21OLDaQ4`)7f#6#QcX zm-DNOzf+K2i4QTZ?HoourF#Xx6J>4BL>b>CGSX{;Fa2-=2}UBlVO(0yJjS(N6Lpk6 zE%+A7n!jD(a{hiz;2#(K9gI^(F@8EON_zx<70O!v0fB!);6D*^cqt+=#v6ivi{PKk z2mjRH9)X`NaQbGg_162~D+In;@Ye`j%Gv6Je@WmQgq#t9OTYb)aq1rVP5rqs@}CL* z5+Ua`!LIjWce=%zKn-I3p^p@%;EqbzeNQeU|h%Bxh(%2!I$zc5qz3Q z4diU3D}DG^3qJXIK(P(udLRC)w3=?-Kmql*xaNgd_b{ z@NY#~%m1CgrTkg^hcjfq#H$3}DCC?baN_Hv{x2*FBxgM?t@kJaNR+kV()j%p+(?9{ zacTTAeh45uB=A~tBog6rTz)OaOFrM~2a&FJ%1AGCaumg90Z%>%aflA#k$)YUV#7aN_H~3ppfk;$O%7ae?c;5cI0R zNsj(I68-!_%_UyV@+c$uH*{E-I3ojg0pR z{#q>rdB4C(&M23)JSvi$&oKU=;LCZc+fg-L`tO+z2|mf8zmKByjKE2+nt;d-3!LOv zQynFma7a{5a=yvDDuI)n1}^KIXq$2AWC=di>A%NXA@F6IjQj?H6JP&*SgXJ{34W)* wiBErzK`ANlCJ$1-eF7)`VcPVN`UT$YLF)HTfh&8MKP2!g1^+&Q6JMwQ2WOdO^8f$< literal 0 HcmV?d00001 diff --git a/templates/virtio83pf/virtio_pci.ko b/templates/virtio83pf/virtio_pci.ko new file mode 100755 index 0000000000000000000000000000000000000000..8d4b04d4bb49ac2ad762ad8ee005371e819597fa GIT binary patch literal 20184 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 z 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 EzyBK^=>Px# literal 0 HcmV?d00001 diff --git a/templates/virtio84/if_vtnet.ko.symbols b/templates/virtio84/if_vtnet.ko.symbols new file mode 100755 index 0000000000000000000000000000000000000000..d1622e88c7a85301c834c73df3c834f4f19f70ab GIT binary patch literal 129616 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ℜ@e~7TU)w2Xf3i!>252GbkI03Z|b!1(k7V=93C71@#}1C z>F#QBx_FXR0)CuA4iP@Iy@z;3;@F#LZPAM}U{Qd-=2o`g}cXV-^ABwq()Z{E$;Cmb4}OY#P+MwYZs z2`@PqBrUWq%u9{+XRwRH1s701vW3LS*+zGC?NMH4KdY;c!@*;WFkteeywaiOI$oVl z2R*ZcYY+iw+F1zM_Ow(?S16jhxLu^X1H76et?_QBrxoji{BnIA?aJ)e;3RaVfn>K) zCvAk4<+U4llW&j}9BU%)!_44j6U=l?$@0i*Y~wuluB1puJce=gw6!-x$DM%JPaD>YwzAz?9u995QJGp2t3FrBTo(Kzjo1Ut~5t zkv)z0mY8y@sa;#LY;_qqe8faBL5Yc2LJAfmcrF^P$IjT+)x4uE+K>y&ieUrRr<>qL z+cWLW9N6+aE-zU_4?OEz>d+;2Jl?8!;X*!%Uoa8##rM!ofLIJ69Xz2ZN;XQGx9xS^ z4Y4}Jr7{=0>f-fH4edK3R4h8Kc0G`Dp?$R4a) za%TEGwzC@{nppvG5xk9bb#IU0M_+{txeF8RG&fSTCFKZnG~|`gpH$2N6ZD7}nhyYN zq;A+08)Pg_5#bfuyw7Ih;19}^$LqoIBg#h3YZUJ*v@}q87h1|9MX!heuyQ+E>guDd zRIdA)PAB5%HCxCq$S^f%!t%Ef86M5^0t_Z=S>?KfK&*o!zxnepZPop?{AyDMsT4|eWm3&B*vJ#~>al5Qh)-Mh(dcpd02Ya%^%Y3$!SH3;BnNmaF` zW^<%!-MZD0(k*LC)*ve76%a+#UN4bd9ocPN!{yj2NO%PHP`6A<;?^ed06TcLabx-V zQV4A}4*XUG8%v=9<}koBflv{g+Yyi9K!8xNZacnZZ5J)I;@%-gcUL@FbsS4z%T0_- zST@=Q8Sd7zHPuWJi8&A%?A=abLqMf~k5UbDZsKT_fLmGeAHtHM_^pH8*w&tNvA+WP&Co)Z4KlpDC&dL zi1Uc!(Yjbe`>r;2USe&!YGvn_qArdjyT}*p!lH#m&<@M)nxbkWm+U8H2sw198*0}k zg!c8Z`nhwk_iuL)*)+8`bQ!W$rQ)93bje{99SyRP*?Cru%U4%c*EoD=#dd{5qtP%< zzY=SU6}4~28gFkUS0+Q?#mUEW)2lVj>Y9=oSf-u}@zr<)6;Kba-m=ZhSJQm<@Ps7< z1Txmrb!$p=^NbFiY&W0HMytv();2NPTK4kJ16!<(?sZsStz>%sAWveUK zt}M5fq;rwbdGq+@6$ zK-ow#wRN>Ze`>N-)n&D%>*zRbU64juhN7gllyXCuK|0uRia<9U^$7F|R##IU7OI*% z1VW%MwP+{PNGFwgHV`s1%$20o>>$@wm94E_x4L9QWi{ydY){Fy+O@0KmCz|6&aMM{ zazb<^1E(}YpG|E|RdvaVG6$iI9Lq86x<)xEN*LOO6AiX7J#2{m?CgSD+5yMUDLhI` zz@l;P;dnx(O%HoENI-N!2R&7TIAS~tI5DW-MnV*(*<&qs zre@CYu-ev?7CL;&ipRR!a5zR{ufya|=Q_KZvE6o2(5U;0o~3xQp_OKA11)e;Bq+6& z1?gbFr9IW`c;enkV#*Tmax{yBk06yRN@{9KmRG1dMNHonWaq4-pnNQhy$y$xEK?n!xo}vA2n*Npdi3e87Y|;EDan1HQ7SZBlU_?1^JUc63~9q*lI%jglH#7{z4c^ z6YFNmUb*i<+2(qJ=IBP(V3*SYjmO}T%=k(-RBkNWKtUI_l^xbDtJkflp*4V}n*M}! z+cY12yAwHEO}^sbrsquYLbTX1MU;x+xNwf`Yu(y1Bro}0VV$m&<1ddWjydM79^r*f z8Z3Ui7>Df^q#UYv`kKRftl~$YxX*hJC;6602;WJib zS92^1o1-K*#R&2mxTKU|^-bJfmK%&PhKDqb9OtvS1`277P=rVhSsb}e)DB63QmR8A zTF78DB;r+xtqKW!%1aw}L%D9*06Ii4=!%kmstGtKP2kD4jc&2HX>JADPLXq>HYg&D zRIYG1LP>Cj%8!B$UO>%_KLpochoZWHpRN_%`Mm{VM(nKWV*;2 z4Re0pWuz}HU4}&dhK-fWkt$OA+)%O>yQ0C6hSZig(NVTkG0JNju+wgmbSfm@t@c7s zU2;(n+7}Z#e2P=`4BpX@-;-;Yz3Ik3%IBDI(|58flLq z{R-)@k?{hNV?N1*o)VJ^s$25?{HzQq3Y;p*nUF|i1C-UU$#L2?_JH$gl!-%0;w^JZShDQlG_VQTSv^~*GC=)uavay&H-e6j`_Qv!e4NJ^*>ouvLgfwW$Mx$~{(O0co zUAcSq&;vI`HbPGkwbdFrmFezCK8W^j#9aR}aE;)3rF@6X za4OqehR635JINj+$#>)&cs3~sBykm9BB2lf9=wh6pL)KLGz2|TYvG6j3m>O(-lA}# zMPLEDl+?c3ExqzUkxy$3X+D0uL=GOEHY4#%;T_b#_OIVRv*&ky*oM_5kJ@-~lB1=8 zYbF$51~c&*PM2-;Y!7;;$di^GEqa{e$sbBGRD&$5?zwXkc9f2`4$3Uk>J(ps(NP+b z!$O?{6M=4ABL@>aokeUxFHz{iM6ca=n}Rnb*bE=uX&U*>4y+gYg?>G8H8uw?!0rHI1ii6AyyJd#Sx!D0?MglTB+CgJ!CnKyY@R!y|{W`j{0#tR!aC zrC{8&jr7Ub&~{72F zaAVl0AySglrJC({Erla2nH)NXp_sLVza&U+DNzvxb-LbpyVW%f|Hl>@-ww_@x?Aev zNS>Oy7w;2%%mM6U`!|6GBJ7UGU+6^@o##A-J6Lq8<{}MbS!Z=BZ(n4-# z*BrcoMFs%7Xq6Sr@#p3B@+JUgr;v|Q0Or_$I7o8FB#Ni`vw^0GhOvsVd}6GeKAR|o zH6k)>6aWXQlv9AA&`WsWMvE`jjJFr?o)FEv$rL0R1&4?f5>b;F(p((#z}fXVTi|_| zghch(ylwDGh;bBnS8YS}hUG@tlA;m8DfW|hJILZBD?yu`>=CkaVQ|<;{;k(h0>cZw z>`G&j*RWKc4JDPO^gu3n9*6UW$?MpZ4&>snQ5!9%u&kQC+#KnM;?XYchx8bey->V; zC!b|7O}tXjBOV~r<5^1ja>`fPY^tnTTUK378EPam@cm^h0D7JcZwwjno+jSnu+KV? zAu$0XTr7u2%0?dIAkDvSVkH%fZn7#;Q*}jcP3gK#YjqI+GG0k|1xB-3 z;`S85?r2U#Wccb1#F-;v!Jc8_4I0~jWMc_KO4#1{TBEgZ7E3Jg?KgI!y6YJ$t*Q-n60On+Xte6?Z)S0ig?#VIRY;GWI%>Tx`4p+qy`ha3o8dkjW9?e26k^^;<5T3 z1QZm&Ym`hXVO>*1sCz@@2ADNoE~bc#pRkitg-7jfbLiDpj#Ei5dQA| zmUjnLkGvgVH{gUAe4Tlw520;rEPJ<=qo$&ALn+JJt|v}&xD{7?&gIi$2G1GB?EYoT{Z%Gv3;k=aw|n_@xbd;G{FIOt-Al zv+Swt*I|z|HEc2Rwp9lbhpq7O>U-&taf9Y3@D4LZN2dU4({3Iq^3JGlA36M>j5A9T z_3}dxyV4^#up(J%d}lo!V&GQvxfShLu^yZOV1D%!L?UIyM^n(yyOw64@S6#5g@~>4 z`43iz*2ZGZ3#jl}9C0P&obiU@T=?<6B^T%n+U$kS91ai~Z^$XG#k?tNjw*ce(r-x6 z4_ELNa(4L!HeVA%S=hkltAin@Cv4i9PyA>YUxoTfybL@)C<`0de9bH!ucb;~614LT zTpE;x4P0-_Qsr8zb@+8{zFheoHO2U&Ly=DXB+(80;h-#R;E&m|)b0!~^DUJ$-5u5D zH&`~id;{Mcl!XmUzr9IUI!zf~XM_YlGgE88+1ku?wq2m$MYgEcfQC7!l!g6BE32Q6Ky1cuk=ZFl@rc!@fGNUOeN z+3fNS{MDc=Y~WXHS!#EN*LRc#12*8#ZBfdAPixf~%Xyb?;NJvgVFNGJ@Ajp$Im7FH z+g)vrlIQAYno0kQQqQv_DNFSntuowP{1|4^wNyz;^pn<(flGt3uz~m6vQ$kPUR#w0 zLN_Vc78E53;8bhX)s`eh*+;eN2K^)<4SaJ@7B;Z2Uj$C4Y{To@w!2ybzHf`F4QM!} z(f>oHW9=-Be}6zp{?{^2nWC_^rr%(ri-u<45kXnlz%g5vs(-_4veKjxdWBZ4Iy*_P zR_)hMlE}c<1Z80ZUu(-!B{IAWO&W=gYV#W`8_cc3p9spr27bzxrFLg{9aozFqr1;r zl9VN3xCA8YWp09dDoM)jmP%rNw!pHvO=Wn{%2NH1g5M2_3}^C*6^^f(Frp&-E z1Z80Z@754B-TE-R{%$3xHDISUOJnJ#)jPITidqfH`<7(A0gXJK({oV%Qi#=&oKhM}@Bq%EAVIS-)+ZZg7Uz7qlI8X}~YqqG|(v#}?HZ@B(G-I@R?1lysT?P$UJx zJ+-?U)7@7r@2v(jeZWf_5I=3nm+Ndz?JmWanC{-Nyi*MKZ(8MB#@h^7X^YmIzUpn! zHUoal7NzihPI-qdNyISP859ND5$Lp5ozYLST?7AjP!=}u`?f4~{Tp6?SDG|S#gP2f zlB5`_Au&C<@+X@52(CY+;_4>}ZQ$&nENtKjwk%a>`b|Z;#_DGpp$*AsOOhhAAu&Cr z5xPKI7wRVoZQw;gS=hjTv}LJ68(tks1ECH0mMz+5K*K4`&Z(KOrYQp4!GK~XBBO9NR1nyrj}YDZGNTp4VzjH(Tz=YyiZC>RKtvb`Ff zyYVZtbYTZRM_c6ujEvl-TTq#v_XJdj6#QmTWP~x2q}kw$byTf(bXyJhYETqc`MzM~ z+*+XB7)h|fr|MwqYf2SJkh15SZUzUu4VciKQOhJdx~-{d*=mFd)Uws6<=a6+qZT6^ zL>Ki3_wVZ1cUYk!MhC+!qe!X*5&XI~Uq%wwi5OvwBq%Zx1Zs%{eGBwS?b-B!MYhf` zHHxOP3Qr5l!Un$7mZf%= zt95Jj6Wv{`plOyyf_X|(ZCh3(|S-h8M)qh!%lx-!VRZm!wlyMx;s_QICN*GzCRc)4Jn*pB+iexf_ zyZQOCA1etd$iOcIWnlxqJ6zhPGY7*9e`A9$D9C_0w&+p=&ay?d1~klFCq+m9R9Oru zB8J{84Kg=i6<6@OVIl+5eM%9-p9`fvxEoPNSZ37*#2@S63$caae{WD^z>xm*AGTHl z_OnIX4ETyIsy5&sY|%CYej0ygh%WFl;FoRDHUoag7F8SY6X&d zf{p|-)AMONJyl`VNS@V9)g=nn1x42>cvnzlK%;Fu(lJ{8en6Eh!8ol7x=UH9^jDzh z3P@6(3E)rM@I`+Yi>@@u?lcp1%avyQ2@`e8l}5V>=6{QM;3({IH|$1Q&22TzUa

}V((LsXkA5Evyqv=$7G)1M)sv3T7HIvd~t;*RHh(1i^3#_Bc z>_tY^u*7RsEr+e9Qh1xuBzUjc+D)D9Zky@OECBepcT|Fim3y1%*~~1c2Iw-LZCCa- zvoJSXp|+h=FqqMl2gh^&Egcx4-VdhF2=%y?vuaq1P*ujvmRq6Ds;LCqHxqM()zsEh zO>I3#dp455IRBtUfu^<^18=qxY&BrJEvhjyYSsXF8ReNZkjD0nob6W5^+wJyR#WST zs!*5cCtU7}DRQp2zCZzEKncs?NV?^4B;9g2lCm6LQP1)_>tRydUUH9!AdC~bDQIQf zcZVHd?Lh^N&qhN7emS5@b>Arx@b6+{{O$-*0>wiH9u|~^4g7msW)^9J7PYQGKOs~? zrGQ%HTaub&lJm7H-;&fC@T<0{`r8UV85I3eK_gi6SX&`|Cud+qe2Nb+DD7st0p9e+BayDtzeoL~|F#1eTWI)3Z5*YAwKxIHPmNW*| zuGDecs>*ctk)SA9$hWoXkNU~eY2c9w)2Z+ZTb8O!!)vtCKu81T+oF`|G_5|cLe?Y; zIYC=bwp?nHNvgDJy?)X-3|teGg$;b}C^NRyaTs3FpgRLzX^T?Eu~Vz=I#)Quh2N*3 z=`4*`Z`W4$*jC$8TcvEIKhsvfv*J`4aG+&Wm9OB6plE}Fk)Wta!QDZT0j~>+40uye zlspAPv}!^?V!;2OB*@iConR*yc`1b_24!IbzdiBnMqqd?)^;#v1AcA1nc>Ju1q~;p z`I6OgkuvzQZM7}6Rmu$Cs?-nJR$DW3g|)Arhz$)m%oc4m;CZ&F%7CNJ7X~oH+ZB8x z&lVZ*U0YOTz>le((C~)}1_MsnAwHx%9}XmtPJ;WjI;!jK=&B6(pe?F?SHbfwqv{_{ z5GK#+Cv;%IV06`aI)oBClxj1&Y&(?dkqWj4MUSV9E@hd&s?+&*YZoabZ)?@n=ZUas zmc40x(P%?bB|vaDB$bv+wE-`+MJcY*^!fd9hVj-kreqAzXc!V2^{oqx#7w)H^EBhQ zQ6>4Vm8j~p&RW1bWoXx`aHp)0)u*(TX`Lp7F+)mN5~dHc4j`eC-&lAWp_{d@59=pl zWYcQ19sT;f3I>c)!e%4?3&A)HXv`VoFuVgssTQMl_ecHYU0C722W4Rc7f+JeO_!T9 zE3?1Sz;PKc#}-wORd7*I6quesOSP&*KS?M9mj-2F1HW&}QnysYYnReMsE;c6{h;V< z66~-fH3n?6Mb!qp$`;ia@H$&mZMyreEvhl#FKkiD#2C3vw=k6sr8a$_$nd_|GFpF3 z!H0vQd|qBjEj}f@TgtmE4^(SxQ{}r0FzpMo<xtAe7v3huW>RR%Pl$le+79!s??SeA%Ca<#9~w$)bC z%FJ&XzkNts8LNU5X;lX8mQihwf*%QrzNp}rf})cO2Hm9`DV|fkziRbgJ5^gv4;U>_ za8XdSRKaCIQKf=`{!_YpOi8|@pR_&={6tU|Ht^VKqSbWk)A0IlZ3j&m(AQ?zn1(56 zIHlQhf3FPwU>Q{zaG+(hHI-3HQ244c2-{ZMQd^}glw75rpr51@15XUf!UlF`o?Rz~ zSJX;SYry+vNHaW*GT@hO(FOxPXNxX1;LEnC)__KYG*7m^uRXtRC8%0HU3z|AKVkLb zmFG>C_f{jp4}+rrQ84H(Mdi)f&6Bpf4boX~Z%rXd2`GzIvX`uc+l+*twBl?t5=@B zgyEl!Bw<<&_=+9aRs;ScC^BH!4s5;Ac7i=5clRY_P;6U8jMDB8ijrG>M_VPRV|6l( zH7~oc5Hu(}EGP>bc%v;#jR6g>X-Wg9WWXi1C}q+LwQ9a4N%5SQX;qzml9w=Wb5IsG z@a+XM%ygd9@Omid&VawOMb!pel`oty6a#)FC^F#wS%#|GfcM#=S_A$rDC(Il4L+uy zU~jnv@KaX==*K^!<)*^=aagWOKTeIJn>5c0 zqq*s)85|eQO+WoOC5mp+I?)PogSgg-Hnn_aGqVx;>1b~HYi>G6gX*uLKNStCzXp|S zJJ0+oZ(Zf7g|Fb_=cuoE{a7^WD_%cdmy3GfV^S{Cj}vlHZX5KU@~Jzm0xfq}M*pBt zwL~4t%+t#A9O%A437(3U>=&Uv8r`d3 z-o5fP`B+3>Bbp00F~;ZGxvY$So*!j-kIQPS9W?pm_Hu0M9+kxF$NQrwPmsFTtf(Z< z(LD#77GoLI8a}VdWo7j9pO^j*wFdpCSmu)tb+5u#IFhmRVyL)?zuhnta?sG%M?E&a!$QFlGmUHx2?h>sI<(Hn^1U^J*6 zl@Y-e(V+5F!3jj5Qg=b->>V6=06F&4dH0+%DW5&(L1|wai7PpT|ba|0eyYxe^%{hcGV3 zn7pMiEx*#37FrtW(N)vr{PvujXU~h#Mp{JMN_+x7PRT_asj7|SA+)Sdqb)4{I6me! z`*=2_4WMMSF8XP+FCHz>ep(e@MkDIS<(bdKN^NVQxFV0^-Gp&W*{Fu4xy?u`zH2n5 zn|Lqw=BnVa{HoxwJXJ6XepW>N^;CatqW*fazXMQz6WuFbhk(1Idxe(wh0(nd^yAG@ z)K5R=)=GkYG_|51%SPQLXhmHdMg8=n_7itOQ$K3FuI}{Xy6BDx`q5One*7ld4ia>< z)k=1@xQ_pWrr|1US$>tZEKgb_{5_0&2$5k(35F%lg;dXC1&@ln)^`+!zP0x~GQSw9bqW;$L!Y8&}a2ZBZL z_Y{_Uu>1_mcd*=v<*Qh}g(WZc#dz`smcGM4kP?2qL@ zEO~$Z5!0lievAIXY8BS?S4T^+&inT&=}A8<`R;7J<9A~@uRBrJFZH(X!&v_oOTAP4 zbF7bmUA+O2{qM$hy-)VQ1zw>yOTLTs&#~nDEA_t6$=F^I%Vt>W&8%gx&bO9+P}=*` z`(X7xL%qrH|8Mc?&jB>vJ&1olmYSa(SpRqV(R+yX7VH01uXn1l{&*>0V!vXkcb)4k z=O2J?$8sf>uVJZo>OO;YE`PnnTK!LiZeEC9f3Tr<*#5WeOYi#C_NDDjZ;t+N+uKQM zZ=ApXZM@^q&NbdFtdGGm6-&KkS@Wm2GGBx3nm@hYx(j#%EVX~t!g^gSwLGd|y%?6- z{|aKgFqYas&tiPx{#gj)h_?5C%J>pH4_wPrZ`9`UbLN1 zIbnLeb%^!9l0Dv^{pfu;ui(xQy>%xZcdY0=GZ7+ERrd-lr+H+L_g6o9 zzmVoL2l?Z>*~0e!5`G3^Kiyw%I!XXyK9;9o_k64$$NC8@IUc>s z=r`0~A>2How+a0PUI6_6dVl@)U+=omJ0!eV&|4?euihnc8r#{w?tdJ1cz?a& zLHFMeJ6~X__Vosd;@}$38Q48P#Q%lh1F&TOY@g%*-|nwp`;Wr6-(#_S6HE5j249qR z#xeoRY%IHDsoz~+kM$d|WP3}%Phr^--_h!Kw)*9-e)C%h+lynVUlRWnV*kgc-s34O z_3F8PVZ>hy==T!(%>&2#e{D~%oxj`Mdpd!oUL|M$|E*rHXs&DNE%Ai`JrC9MLcMyi z5$C1sU+w7?lPPq4OYQ3!>%X&K59jzAUk$9+#*+OPM_hV=PA|FX^|k-4UN4p&fqy;0 z*DEo6@qqp5{!9MD{Xd6J{k?+qkFeCM9ILR-{tBU9_4)>vcbL8&_G5iE*-OWICYH^x z)awasKho5_<40cq+|)g+-7kmgC-+{E#HPWk2byN42e0zLQnW3awvC*#+QO~69rAfd ze(nZ+-n0{W*wmXH=w2Yw)IGsn-s`R#k_ToFagX3mOdH}}lMAHfbTa{cHYQ?DQ4B~Rh}*C5vIQN;b7PkY8;otr&o`%!fj_o-lX zE%!rPJd1ZHhI!G+!$`%KB+SAia`X~*ojWmTcB$KzpZ`PfKl35Kv-p?3&;Hjs#x`Y-*|*96NTfFzXYB`0!%X)3 zDpCGNA`R)X0BhfK8gdcrH}q$()N+#eFK~Yx|L2aeO)*d=UH(TReG2=f{@49=T`pJW z=YKN%@5Bz`zr6d?{WY%Rj){M*XZJBkLr44NXS6|M)#Wcvrl0*D{{NLyu`d06wO{Ig z*8bx*Fca++C;T4GrP57etz7ltz9;gLuv(IKpw&RdW0&l|v4~e@TqtYq$(Qag&HZut z6?H5>|IMrV{R>E^F^T<~O?f`X3u5$Xk$Lo5 zD(7y9iAd?>O){Iv1<$~`M%D*> z4){haQ^DiW!F1j>8GHb^cE^Xo^;H5*+`1$gwj`b$(r*CQC-JL(JNO~!B|b@CxxWIg z-RkhA`TgDTAiwCsSBTgpd8>qQef0ZSk0TYp%b;ry1g{M~8C(w&E!7TqTj;xj>l3b* zf%jKC7$WqY67m`biRTc82)(*^54a8yHDKp)aDD3STi{Y&Vn>G#?NRT5>$6?8UUq@& z6Ib7coug_81z8CBI|E(@LxcM+^9C=;!7$P>i{7c#juD@j0 zxOO{Uz>K%ep+6q*64B$C9wE+x>$)yWx$>6wtVwyS<3as4_FFX0M&Nq?cL(gy23&8> z>x=evEx7)m^*T7}4X(efgJUD@KY@Lf+(iq1JxDig1jsw%7*B?vi{fiHP>kozw z!Om0QdUxn}7+j(H79NZNf8Fr{+9@21_V<7ni)gu5g1(X~57Dbmmp25wSR@|xr21h2 zS5>b49OyGhzY+F%{5cE#9MV^F^&s)6KlL;y;Kd>iU@Hn!w23-2LB(<{-JOf;+d{qdSr(Wk5=Z7KuixB=p2tOUdi@1iJpWlihTpnqipT1=X?;65; zhwy|DJ~V`9h43*U{H_qbFoZuH!ruttABFI}A^b=P{~?6`8N!RXQ;YoSrBVp59>SZ2 z@OB}*M+i>};bTJh)DXTfgf9u<8$$TD5dLKdKM}$Uy8~!`4PFoetX*ZlPDLwNTP-ZzA&h4679 ze0B(zClluv=c*9?UI_m6$HH~MC1yxXYx+)k59Cd|VrqnQFbW>rs(*KH!nkzz^`;TJ-K}s`R(ghJCwr8< z`dHV7W@imbACrdFCVR1&b@J;8W&yLThs=;o!_?hV32QbuJZX9gQ# zHa`}4k#_+{9f`%n)YK8#saYu+o%jN5N^tu8Su z+549lP-klep3~mkd%#BxhrvO~S?<-D}$5W{+Y@4h2g;qz|qdigswDaaAx-n^*Kb>V8jGVd+We3JD3p3!@X7wrtt91+1kdkIC&3 z!E4sfEx42<%`)CNo{*5wy#fjDc7%ik=UQI7o+x(*B*=TEgM!X|+xNd0{D-!^VSUH; zxn^lwVA0&b5JU=1N~U|?eL_Z3iVHm34Fpc+nn{X#p>`0se@A(K+yCn_$Tbx?H`-_^ zS;c=?3i<3SuT~$PoSBxK`tSW%ZN8qDNcRCdCavDlMX#XtQyBT!!j%3i8}{qPNNCE$RH;^p<&= zTf(5s6c)_Y5c$il@$G;WEtFjrZbZh2PLG8PLx;JyMf;wnFmK?RP+bj zL79muX_2gfnQk9XGTf0{4t)tpsoA4kzj9XmhP3QaGB`)qGtyI2jitefPMtj>F=3qZ zo|Tz?do)Uabj%IPn;V?%b|0AGN+2sSBQh!tp}CTA#pnmmq2ttsWIZi$L~_J6Q8%n6 zxXHvI*ZWh`(}qMwBqX^=5;I06n`p9z2KmOkLe2P5-$ybcc|=mi?U51gfUf~3W+t_A zHz*B?j2e>a4!8-48Np#a$dn(H6ElaXEyOz_*xmtgL}1?7-+Zj9(15of_2owH>wlAe(;DsgafE()q8h(PB-E-2SLGh9n| zQ>36OWdYT;?;bxG*!;eKM0rq>oN^Ud}Dlpah!%;PZMdD%)3hP` z*#~-?tDs?;qqO89t{Nrpn0dLmn{T_$Kz4>ddpM^L1~YH9>!zJPS~na?&C7JjG!Z>V z2-=gDs_h`b%ssa#gIQ&QA24J{9+5mKB~gy9fpI%J=XO{>Xyw{Sa-)r8N5;V15t2rq zVEp#uS5ns4$n^8f@<(ab#pLb^jkGXOfh}Y1;vmMbsjC!F)3L? zwVWkKQWC*X8kHs_kI2Zn-H+YDDUpnFxiy>-2^t%|6zGhld<`+u{hj^Cr*4MJcV5c- z82+f?KN~*F@Iv@LN9@04cy+_K86Ic2wR5lG*6)WQyb!)ukwu2FU&3&AX(IZ)P6fl| zUMkIR4Z|Nde30SRe!AgS|EA&38asy#f6wrm_&!HA+j?mY?k-=s`z~@*N29;rVU7RR z5PhQ2FE#qbhTD31+3+Wgz9xc@IBk8k4B=OX@MGYdFZrHQlGwNT>g>Kpl*IZR!{wv< z`X@+Bi33MoAr5zu*NN->1n(Ix+ISfH2wdX4*ZpbvFL2-gN#gQZ9>QM>;Ukd|$*;K5 zJ9owsmwO8(O(I^?HkMwGPJ8`wYi@4rbQO|u(qxPS2AG92%7{12vhYa6p z_-b&i-^p&9q<4%y+pVkp4-9|R@H+1M3`vq->$kPxX>Oa^=>x8Qx5&;e4KRA^ceUZO zoKEe$6Tsj;KCj&hvUG4L|)7{dD*Zp$sha9a-B!8K03FKCz1+i~Wg;nsd}+}EadT-Jir z0-VcpL5O~l(cAL*Bt(BEgjX%^{j=W=;2h@~qhH~6)p|b@qOV*bfBTn#v;9P)A8G7o z82+~5^9&zt_%k7VrQxfL{sVA{N9GTD-`h^3f6VBQ8ve53F%{j4OKNARUyT$2mvXjt zsv2(XTyE@ahYeYDGWvaPUCY0(;ZGPo*YK5wKVtaZhOYzXdU@OEZGYb#qCaHxwtb#7 z{8{7ojN$ft>U`X|CgnET=t~*C#PGI;+xBz4;SU=9t>9W;*>0Pp!A3vXt!p`tCjD3u zyENPAA9m}iUu^huhCgTQ$dqD$1mMyt;+{q#uNym?98~)s8veZD`wf>ln(Dtc{6oWk zHhh`kC2(uJmd{MLO;TmUWuCtl^P*aYOFvpDVwaj3KFy=x|7GA(zoOMRdl|jhSrn)v zktD;#?;-e2HQf5mHr)E10?vLPHF~ileMZu9!^N-OSGme?>vz53*6(I;_WPyLiyb+} zOZv%h@f#;Qx^&ub>$d<-Or*Z7-;&_$x1Q09odaUrrPhXv-=Xl^!Eo!htKrsf4{-K7 z!sx}$Npb4Zc*Di-O8A{-xb=Il;nwdX;Ouv`(TkmeXg_ZmE`CqI@B4;Zzn>Ux{T>8o zzh{hI>{No^!d2XgOHyCrw>hpOlrh};y~uFuw+=Y_?P&C32S4|XTyMDe&4AzDhFiZ0 zhFibG!P)P0qZd2>LVh1KT>LJ8-^UEMexEkn`h5wU{eEEdVy7GY?lWBcZh_yg47Yy2 zGu-<99i07^z1SIbNyo_n@LSz*@v9f5>KktTwlLiKy&RnV-fZ+@Clh{?4Hv)71Ly9y zd4^lRV+^-`r-HNJMMf`nro!)YhKtJq@cXji*6#+xt>3NS?Dw$Iiyi&_?9Yaa%a!o^ zhvC+5OjRdxiO0#(;Ow`7(TkmDk>56ki^~)68)vxndxPQABmksa!P#%3(c_Xput%EF zzvPG>H?s|w^G$>knMNF!vHzJ(T5$YvK98PH2TSoYkvC~y+|{lpJMc%82x=lFZOl5w7}@^HTpe<&o}&U!{0Id zqFA@$lH}`Y_os2zighb437_izlsAucD=rD&<^Ggk9qU$H(sGM5_Uk=k{Zjdf3;p^4 z;`;lk6mYS>!2PNHaUp!U;cJb4jp4RkeG$S>hVZx=&ZtWozy6-<2E%7~N$@|z@B%`R z-}#11Jrs38p3-TZv7^Mt6%xOqok2WKiRFT-;a$xkm7rSeTGZ?{oJ3VL&nZJx2|@6 zF?z9cNOp4RPs0VBMLg%#3N{D%wRReSOZ+khZ-JfWMsNFFTf>)#eGJe&47cTZX9#~H zgzpaFKY?qUIf(ObqqlJutL^iv^`hSkRs=uKZMORAhA%PsYG>>e^d^J<9gN;yXGjRq z4>o#xonfruw%qO`JN1#@MMiJqUuO85CjPZ#XDsY&GJ0$03(}u}{+kf}`E`7uNO@)% zzjeX2{Qo5aml_%UD7UWdXO!Xg`tw-BUo-kmWWOiuzi;$Ajs7FUt^LCx{FvbrjGdni z7du7VpQOfh{Zhhs(fw(@x*9&)@VgBkYxqNk&oO+Z;nvRghFiad>$#m>l6b8C8gQwX z7!e@F8(z?{O6U6xHyb;v9nyRy8E)ge!*J_&yW#7Nodbqj{kMkOeEnkh9%H9?eIKvn zH^cDShR-v+rQv%GZ*RD*m(GUUcv1|v`N}lh+P~9qo8JcvxAq@1+~)T=!>#^h!)<;m zG;o=8iOc65!_(b%t>10nI^M>iJ^W$xYmB~cL$U7d-{F>OXSm@{8s4>$sQr9H+M9mA zegn9~X~(5(!yj_n)c!q&-)Z<$#=aZ^^>^Q|7%qM@kgtu#j`dr#u@kve-2I7OQ$uix z(~kewh3J=u@RvgDd=#QTVDw9!Z!L#OO?+e==Uw0&XF^l27ygW~lLpRq#u~l#`&Eek zTcfw-lhiE#I7fg>Jl6ii5dCbUzu(0FYKZ!o!Ix8jo6x7Ycv1Ltz?ZS*!@6GHS;jo#*KMTmZv(OdgfFA2g7;#}@N zYW%}n=FjgpJj3XpH~dM%zXa#}9y59yf238e-$#v|<%V0opBg^X=noqHhT)@Id;1*E zL~yAu8_yFV`lpQEmgkNT{cfYT_TBxOLE?DYf^$5>47cO(7{hIT@ABq@`d#EcYyA$> z^8?4;HC(S7iC@d##iT*_IHT`X$gQ}qg%_WE}2l#@i`I|BM+AKQ{auGj3S> z-m4#b5HllW5b1;kf?FC+dc_*&u{ z!M6~94}3529pJ}^%X5Gvo%V~M9;Mt4f#Y#^QT`3MexD=NC;F4%ZBd`HkoKU@U5PVX z^nXL&$8gc>^H>HLE_!{g(^$hFaa_}6!^KV<>@Nu6Ifje<;uw$C8ZLJ9c`q9c7yZT1 z?=}1t$2A=?TKcdLs;KvxWr${{Yld88jrTOV@5A_VqssGqW?$?Al1iqjZ>dnrQdT3*JG&c(w6kG z2q@0*9k4Bns|^=h@i^YZ8$QwK`xq|zGFTsA_y(gNYPjfQG0)TQONC_`{aDgZ#=0&= zKiBAIl0FXGF#QeMz8-^QlYSOE@~6q_%PDkAZIe=072RLSSohDRvVIZR7oOhO102Sq zyjC60al1j_)B3FeI~tEZhZ?7|ft?GWkp&LRQTrdjaBFBZPW>LU6Y)lv$8;sWxu^#{ ziGS71gIkFI4E|xUHgMJC|=kUGD zv&1h(y}U&HO_a|X;zjFu@D_2suV@=_eI1Kj8T{(vetB+(ByHEqo1%UvlAYU8ZZnBriw^xD@rfumdA_71wSPc5w@b^3w?X-A zBA!;$>vevrcG{yHJ|le*w8O87UxD($g82Sb ze}AOrTC*tR!e_cm>2=dvJ z_+gAMw-K*}cm@-{6XljpTz@Y#miV3M*Hei9g6k3Y5ZBlGJxKhF&u-)~;^onPo+kb! z+U<+P+raOu#2-X|*+~2`92d3{FN)*N$HW`r`1=|0>!3eE{7+0Ie<1!P+WBw9Uq^lY zLwo|_FM{z;+s|CIld{B*qTDJI?*YHHh<8D|ZA`pVVP7$=iQj_t4#YRq_WG{GSE0Sd z6F-A-RqbiM8rAZ429o|k^!HTaZ^Qm*;<0GYlZo#@e(xb(0mtQe#1Er>A18is6(8p^ z;_|#+Nvnv*U|oMVs`=IHMf$r@<$6EiPO?)C^|+sSM{S41AH+Q2N8%N6!gQMWkI}OsVKJ!#FNn;Vu{ZZgDy2Bei-wCR>a%Eeh1=<5YN@be?d9)AbuP2l|cM* z%)63_>+flY6W;{=Na8hceldpl3qHG%$;4x@K8twa=6;72#0R2$))SAxIJ1>_gJ#~& z9^&mVjvXa_AI8I9h!@3pQUK$Dwucn7|GLCCAf67yb$->2_-8nd3?M!f<9RCa4-wBe z;ze=(IFtAq@P~;%P{)_gdgA4v-$wjnj7x`!PsF_FC*o^SkAD%@*KU`<_^suszeA`* z`~sAZJYQIn>R-Tk*owH0FP(^^+9UDAOQ2u$C!U3IY&`M7m?zI9uJJ!iyd&)B@3J+1 zowt8XdVQVh0pckr|L=*vfO*;<#P7zqQ3U0rej_*^s6hNeJHMd4 z9wq$?b-kTa#3v)e=fRKKX@>Kc(!}-tiK@guZ0zkfB7Q&myF4#gk}PDXI*J1AN_+|C z`MrogiT061d}6FK=F&*wA7UJsM7#=)m-iAshVk%G;-wJJa^laR9A70~zJZTt6Y;qy z=TC^AiS_y~iC+PJg7{es1pg5K2IF=qw0GGo<@`3rhpNP4c;k@zf}fBi+gDB4vC)Ti2Si*l<%ycFt1-xH_$&oBm!MeLqDBJd@jbHsl*>cd%m0a+J@fm{lw91BM%d=(a7ud`5T(w zVi=!aApI`nYcFyAKKBUmE6{FF5+8qW1d#}RLX_-`QoDcX5I;xD0`hY=rL z$Cuk!;#b4|4C13Op3Ebz_klb~{8@~*D~XSToi~Wj#W=H#xSnTyMqKCjO>jKda(fNy z?TDjzB3Bb1h;h3o@!n{+1BqV`Lm9+h!tweJ;<1f=InO5k5RTUii9Zg$jJW>Jd=2qg z=ojx2FN5*nW8&LU{)dRi=<$(wOZ2be$hVfWp5JMCDA(_0`jTG1ml;NU1nPY>@e??% zO(T8){pShd%g{caBfb#*?lt0bU}p>QH5j))BR&)5@-6Y>D4*YmC!!t;;&`IvbG)f< z59Np##(FIAwdlW1i7&_T>l)(yaXjcnyea1MNyLAYz+B2C-U;pG4&pbUzsx574$5;O z@kER#%ZNXLl^Pye-BS|Xtyb(uiwPm8AE&#`pb0U*=P?B5+8_p#bV-H zP;M)Te+s`Fh?m3h{R86TF^=scehlm15I+O^zY^E$voUDDT0UDb4=GFhUX*in;{8zX zO^Bbuyr@0#mN?#ZBd*U)xP`dh532o4Nh|k7xa4YdzD9>HQ3n2b4iMPf4=Lh2Ye4I1HJL3GV5We5j@+k>kmbgCHw<_^c zXrI>-AA|OMGw}nBe192CycYb9CcYo-WGeB}Sbu={?HCUi6JLk+zmm8IpX{g8T z#52%Nz98Nd`ag;5d53FSa*AS1#@#S6O*P;D?O#BwKlV6GJ`BV(*LCaIm zr^*puj`;QYU8=vmu8+SZ=}Xr1yc6*y$kz?ThoK$xBfc8;hY?S~xILEm$KGvZ2Jw@a z$LjT0jXw)^R*-%I^y`W1_v2fMcgB2aFY%t3S05oR?<19Tl6W7~Zv^9|#<>~u=TgMq zM!jB4yg&Md-VddA5^%h3OZsOq&*(yYJLbbZiC4h9aUk(pm@j1zFNgBHgZTY8e$6JX z=j{uLH-nvJ#Ggj{Sws8?#<6#aKacYHg!oH{U*~sPZaN>*=XWW;81Y1KKB2rZ`s1a< zXJMT0M7%xfJ)Za|9EbW7-;21n6Hi5d*-!ijo zm45_%Eb$!VSI^f~UkUZqmGoDlJ@+84<5ePY9k28_qxLIf{yCBKoeBPsQe~l;J8^?uvh#$nf_YvaPpj|B^{u1VIuM#hT zarG18x1jwWB(C}Tfw<=DEb)&q?iGpk^`_-h1MRIM@v+EnUE+Jt{#z5j632t9h#$rE z=N`m|W1c^dcoypY4&uvU|DF*32=Q?kpO+CIj`sX2@o8vR?-5T!IetrA=U1nR>-?%T zj#paFI^U>DT<06Dh->}obx^gV^?MWPFF>5P5#I)$N_-mH`Ap)sqnzgv?}Ov`V&ao< zyjV$m6~?9ah~I+o|1aVt3Pggm4((3!I}ZK2G}?u7EuU({wS1ZqzqgUMe;ILoF4DEc zn_xUoC$9B=2XU?U`NUQK3~|-JNnG{YiL3q_;;R3Rxawyikns`OD6P>?koL8cKzDfGs=+}Bbh3aqh)f@SY^gGbrjuY>Ta`>G% z%tQ)doKXAwV*Qp2h*wAZyo9(u-@ga(GGfrBsl;`Bm`hy8haBP~&+~SkCw>ao1J@D% z2*;N##HZpsVmI-PIIf)`z6tZ{BABmf`3ypNUPxTe$7>STc$yPmitA7vh-<#O5#NpD z*R90$d_RTw_h@g~#J9%y@|;S12l79cxPBk=1o1kBy&b)uQOjpktmm6Zul4>Zajo}L z#I^imP;Y9#0gkh!iGP9iS%tXXZ+!`IeLuwI#NWZVd^Pb)(0`^8e--CtbBK?_arRl_ z=i_*=p7`51?rbA|HR@|W@iOQ8ay~|UAMF1|{4DxQLCnjvJgXJkTta*Sj+-lp zZ!h9Au%37y97nbipNIJO5TAr`>}%p@aXdRo{5|x?NCWR*%X1^zLn-1_F^*kKd>+cJ z5pjKP@1?{?puRd0UySx2Pkb}-)t~q!=ohKP*Ti}UTivy??BDLm#i!;|1vN7ZL9PUXS=h zw1?Kj52Aj%6F-G<;5Ooy;5upw@%|VG#t_%vxy&HG3+;Rn@sCkHFA~2G^}C+-S#Y67PWi8-w~O=89E9(f2VlCH_11Z%4duabF+T62BbfKY;kIf?l6We0ovOGl~C! zdBRxYKVn?EgZTBuy`5>qYvcS;pQEVx)%z9ZkiKWEw=tb@Jzl zw}SoE#22Dnts_3jhZA|5_{-40Pdp3yPlz|hICF^j3S5WziTD=O*Wbi1t?M0>#5_XF zQ^)s-W!U=Q*68UP}7A z&>pTLuJ==RCq4}0RU+|)IR1_&uD^S~hxqMiPY)B{RNUulHSsS|o^LWQyk75v)AFg0e)>D#NWZVmreX@l*3fwucI9167Sg1`^_Q#D(t^N{MuNrUr+pR93Qt5 zzYXJn&R;aY*A($~j*?!_S5FbY0r3~Wc%ycb;I}mK;b?DFi9e5i(TMnsI4-v%{ut&7 zU5PKj`9d$^12E1c5#Nt?GLrbSh;tJ0W@!KS5>LVP`A3Q0it>4uczfjQHR7{y{Z{Wc z(enHP<-UjXGcb?(n)vUS$Noxu73!rR`hnX2tCX+z3y7D4-;_XoW!-=ckvBW>acsPUjQS{%3h^L{QuP0s*!g1a$nRk5WvsO7BBPpkzl<%y;i2pbVc^+sA6JIGR? zPcvMmM7_%eI5LjxpnFE{B;MA`Blj3PV!s>sV#CFL7LM01kexW_Um>0ZzQNcL`wPH7 zB7Ow?E5pTakA{B3w`4y9`jfTK zjE?^OD~iC4A_62_#*IkjUDl;&&k?Ld=>m2H(dN~ z#(BigWIqS?&k%nRyuhVyXP2~}9)tZ0iMPW1v$Emh_ZIo*QeAK{D}O6tzbWxAz%Mm+ zB)>Pq{WD?mw1pC8@w?#i1W$cLGeXu`+cpc1dA0plte4*hI&kiX- zm!39U?B4B3>E%Fxlygao{`B$3cIJ_!Mw`UaZ#pV#Hah zjSIph;k_-h(7>6hWKaT zcM;d~(|ZlC={lYb1w7W+spRa` z#C5Hf#M8jr8ZLhCtm*!_bfw{9N1sR2o%qYJbF<-MXJT!!5{V2nTipZ9X3;S%R%-hAX{aE&v9aXx`~ z4e%kxj+Fl%_#IEY7S7XW5$^*2C~E89W9BDD@?AM*9)*EYxotaqVC6hF|3D==siYaLw-=vJWx5#BfjJk8;^7V(qdjf|b3{lk6- z;`+O-8;GZ3p4OlEE8v3+mpD5~U@oPCYn=Lm#w_B6P|g#K9f|Wh*uS568(hbD%5d>J zsG)d`L{=CscG97L*>KTo`#)f~=+{F3Bk=+kxQ#BIGFS;u>eUxL|YiIhi`{RU>{2+F>)|$1(q3M!W{{^)m5>jUqwXNL=q{*hc)l z`d+`6xZX!m=nB7G`|0zDrzUYNho;1}96A%%QKE3$Fd~QE!K+ zUvXKcfM37BaB2UoF7~{t;i8`deM{nc9qc;8#m*Ag=?N~o%ij+;Uq~c=5$3lk#A|_1 zB>Q!$I%6))AbvIY9K(bB;`%_2;S%R?=vNpn`Z(y{H(d1hLBE&y7vNtKUr^2Mx2yF8Tcu@sB6o zyt=n@H}M|e4-j7g{wVRAW4)cHi0=b`fw=xYY7OxdHN2fS!L@v1F+bl-yczhH#9N}= zjuUSKUf?S4N9*MT&O^%?F6Gv-rq@*i*LY^5e(Mr{5d2cIGZ1zzH(ZV*dY?&WvJ=7l z`Fi5tg7-3ZB+etSpF+HOEgyfH;o`Ru=9#w}E_QlAKa==q@CC&6x$BP`F7_{M?EO9i zuH|+D@xMs?8q8bP7&{VAmD=9U`^1NUe`dJ&&6G~>(qVA*8xQ;65&s(el(8dz7u62T zM9%N*mpabt@1QCW?~LPq6~iSSecoMN!^Qr~&^I<*^!0Fl)CyeVKY=*g6Yqlg?N!E( z*w^E4AL4qS>TQOLUu_RV4HrB5yYex_@2~4Nx-`*nv9lP*>-of=#`S?E;F>ReAL4Vw zD~fZMRvSBlR>ALP;(vqhCf=%EU?%c4@nPWKfonWlP@boV9|teq#oN>NkOMnq!PQQ1 z(aT9MB3?rZ$)zS_r#0qXtqd2b{$BAG;%zY>7)g9@-N1ZgBJt`?J%5<^Q-wTVNBk?; zIY|817_a}1_`w>UpC(>S3d*HwUHwv4C0{2n&*@5hV?nR$L3}BA0`b@CdHn?9`kt+s z;94*GzRo$s^}U}9j2&rjucBU_Cmz$l`(01G8~6vr?*!jzxRiswr{^=n#qZ?}z5PRm zi(cow-x)6Y0nnc?T=Y8c{T*D(;V~S?3tsL0NWI9=sqcd+Pdxs7ud8Ob_^pETi^jw| zfVU=|2;PCX{yyOv!zCWQu6rx-6No3taEV8MCy+{9f8RF&T+2b9uQ82yCgy=lj2($5 zr?C6y(#ynmf^RTf;z_`9aEsw$r%VyC5{c|0uJ8XiV7S=P`}I!{KLGn@h}XmQhXU6G zZldR#U&Z?M2E_IGZmq$!e6(L&PW-Yu-cDy@N8-$Y-&=^k4nELuDThNvyq$F7u|++f zWVp2F-N^4f;2NjCU-$vyeeMYyEcV*P_?^11k{M`!H(~ z*ZVm;5!d?qSx|y!*J2-JZh`qqCWxq+YJ}}ew<(IGhFluE!;nsz9Ie#_^-qp zUgGtC7%uiZ)%Cp4b$(gQEyVr+=!+RHdL94Ef@{6#^Wm!*z4S-@-C_sgIjG-T4Hv%; z!*3GVzaRBGoOllSJ;sjsjg^eJ^eFKG;Lnkr2T%^HiN6ZIo%oaByNRy=KLIZ8B%U1j zEzwP)^53Tf;}v*)!=)SwwG3pD7T{XW-=LqiBd+D&$JhzVzqq%PLOcijcCs@7_NNe^ z4*nSN4DhFjPXu2NF4>g!^BBg@&7|LmdfY)=e!v5~tYj4t*)ZMgKg;;Wor|zIqk$Q;ogdRN^|$j3ut|OefyDgtzlDah*T! zCcYBi1AawZ?f*plUCi5m2iNu%+raz%hj;|}Dtv?AuH`lpTwJKfwPXuJ;`lxzYR4 z`i*Pj*DDZT0bZT>QSf?(OTB-C_?v-i{c5{vL%cWITSsF@@>R60kEaLmUf=_X&jKH6 zxWv<;l(#dTcwL;=EFwNn0(NORaXp@{AwJQ|BX5Iieg`05?-PF<^MQ|z9m(&Di2rNi ze}Ml+T<^R3({Rb}5FDq@kN1IT{oeL3zh0jBpvye3LwqB6L&L>>R#UHUZMej*_nrL9 zaM9~H*4c2;cgKAR*BUN*9mjeZF8UXt?{B#Di;d_P!weU_-XD-;r+EFJ|FxtaBZK9 zVgE+rKY;fqUM9}lPb1z1Jj-y2vp41;bBXKk;}#Lu^ZMn)Z^U)2ABgMk1j}~!aY??! zug(XmGRL^ofcW(l{Qj2{?}+gvnfPzjy?#9LMpDTx-9=pQ>wA#6o{v07T*tjvi8n0c z?Y~1@`|nQTT`&*%fw-PGoguE}R=0=uqvfe_b|9|jFI|ZjDeU(jLHtjQlkX76=}Tk> zas7V$2yy*g@b}=_{`Gg2zYy2o37j={q<^Kv`8dn;^h@m*uYi{~T-udhhmSQ}?CgcU z8Sy{CI}#suh1Je7D0@GRo3!DoYO{3j6SQsT`^d%x=pm-rJA z=R3qVfNvxIEBG$rjXHb#2Z$$we?$CH@RNp1`R5?czYUi-KZ3qwZ|_I*yA%2fhKqi0 z7q6>Myj)k$n-K2?ekt)MuJ-zl;98GUTY5gw=%wE^#qlN0=w*si#LFXNNI$;0-!Rqa zC2#sWpxLDFjPv&eq%U)xx3ie^o z(M$Z35zkT5@5OljGwDxA!MgMZ={Gg>{QR5!Qe+Z84quVd;Nnxte@3kP=Ta4;N0tI! zoAmm-s^&&7wlWZZJJNTNM(R>$((gq4H;`W6|8%R-OZ?g%l1Tq0Hl!Q9#IO0CN&2&> z$azLD@oRd4^mn5@yhi$1wA;5yUjg5bY$yF8l+Pa0--z+&u+dBW+TOk=eI;x-ZS)d< z4(u1`<8z|*+YtS|B)Am2Y>R`w0_mqV^!wK&eIMu>k^Y~WUf+iFD^b63q;HAyV zOFZ=v&tIe;f$}VROR!sTkDKV5Bc5{L!YaDIIC1V$HKPX#_$8z-ii+t={D$&@JTjE{ zk+PnTCf=!>=hKMa1^xi>BB+-f;#2Yc`-{XUp})UQd>7)`O}v>Dh)aiwFG0Re5dRbB zHGdIrf;fxa>g{PcKaP5-NPH#wdu`%hRq*?_Al?GU#}35x`ODpi|54oAxs`YWjAKKH zr=xzeh)=IdD<2gWF z-+%l)@uIN*2k|-HOr%I(|3T~V5uJ|_{|z0uHt_|qe*a5|r=p$25&r`9djs)>ILP-S z-l4X)Ka6;f#-5KQUJLo1LHrlg`#j>CQD09I@6g=aUrBs;6VKlu-V61zjkvyNWk2y9 z7_W{I*YlKW=-(oPG;oaDe1l^qx^BQ@ga2M@^|)-8M;}LeWH-_eT-t-RKY;XcSf79; z>nDS2{25q(EJU9}`Z-wN7NXxtdOaR}AEG}&`T-~;eI7r@Uk2Nw@ngLemaNzJaH>8B zx}G8WKH#cfiS-E~`pKj}g!QLF^vg)E^Q&zk`kkcL^Os*j^ruN*2JQ7?9JjfAV!>rM z`I`)V`w+dxtNJ<6>+c5G{!p^N6Z&}}_7{+TGER`*4bg8Q{h>m>K^+OvA0vGPla7Lj zi{sbx7|m~U=o^RVn}e%fe-GO&L?2Ij{k>{xh(3e#`g_uOA^HWR*9qUdA$onjg2u1E z*EtkHqF+mT zz0dsf5d9(2>;2mW(N6P}54e_3JO=y5A^PT|KLLHu5Pcug>;1zMLiCeKA6v=yujfPb zD@m{SzkM2_-%EPE5AAG-Ui+(-kKP~E82ysVQ~Rsx^}dUqA^JYxs@MAgriJKdl3u^h teLh6LlJxq0=;tB&L!{U5#R}qj59e2}>qp~n;p?k$h+fAJ)$8^7{|9R0&UOF* literal 0 HcmV?d00001 diff --git a/templates/virtio84/virtio.ko b/templates/virtio84/virtio.ko new file mode 100755 index 0000000000000000000000000000000000000000..bb9dbd56b3f41c0bc6e3861b7f089f16a9b16c99 GIT binary patch literal 18408 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

I^ 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 Y6=>o~KC-SL30&$s6VKh`%irsN0ZPN8SpWb4 literal 0 HcmV?d00001 diff --git a/templates/virtio84/virtio_balloon.ko b/templates/virtio84/virtio_balloon.ko new file mode 100755 index 0000000000000000000000000000000000000000..1b30cf116d82bc633a6a92f2efca673d28b7a449 GIT binary patch literal 11504 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 literal 0 HcmV?d00001 diff --git a/templates/virtio84/virtio_blk.ko b/templates/virtio84/virtio_blk.ko new file mode 100755 index 0000000000000000000000000000000000000000..bf48e60c389b94b1a0d3fb12c6dc6dbe32b770b9 GIT binary patch literal 18752 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 literal 0 HcmV?d00001 diff --git a/templates/virtio84/virtio_blk.ko.symbols b/templates/virtio84/virtio_blk.ko.symbols new file mode 100755 index 0000000000000000000000000000000000000000..3b2aafaebfa45dd856ece2c91267ff94b60dc55d GIT binary patch literal 68768 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 literal 0 HcmV?d00001 diff --git a/templates/virtio84/virtio_pci.ko b/templates/virtio84/virtio_pci.ko new file mode 100755 index 0000000000000000000000000000000000000000..76972c0b19ed7c6c4f643219092a14f70d861f9a GIT binary patch literal 21960 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 AasU7T literal 0 HcmV?d00001 diff --git a/templates/virtio84/virtio_scsi.ko b/templates/virtio84/virtio_scsi.ko new file mode 100755 index 0000000000000000000000000000000000000000..1391b889544b6ae5004b45233a680b37600f9caf GIT binary patch literal 34824 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 J@$z!n{{dA(2l)U1 literal 0 HcmV?d00001 diff --git a/templates/virtio84/virtio_scsi.ko.symbols b/templates/virtio84/virtio_scsi.ko.symbols new file mode 100755 index 0000000000000000000000000000000000000000..eb00a774f3645c945df1c28028311bfa64074c7a GIT binary patch literal 149864 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 QeR}kX+e`vKHGSd|fAqDQcK`qY literal 0 HcmV?d00001 diff --git a/templates/virtio91/if_vtnet.ko b/templates/virtio91/if_vtnet.ko new file mode 100755 index 0000000000000000000000000000000000000000..ee6e43eda3d406303ac1a491303589d06d5c2dce GIT binary patch literal 48728 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 literal 0 HcmV?d00001 diff --git a/templates/virtio91/if_vtnet.ko.symbols b/templates/virtio91/if_vtnet.ko.symbols new file mode 100755 index 0000000000000000000000000000000000000000..0bb1a5414bb9b1bb33983e6a4d02316b64514829 GIT binary patch literal 138440 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 Ry743yob@_>s9ulf{~xmyuJ8Z= literal 0 HcmV?d00001 diff --git a/templates/virtio91/virtio.ko b/templates/virtio91/virtio.ko new file mode 100755 index 0000000000000000000000000000000000000000..7406b571959c53bf3d931e0d219a1e30ed1b92d6 GIT binary patch literal 21608 zcmeHtcUV+M+xJ;SMMM@&EHRcff?`8ZRIsuXIp`uN0=7uqg_W}F76AoBR}zmaO6(?f zV~Z_`QLu)h0!kEHP!kOrjR+PZidc~Mo^$5Fcx0b1&+~rodwqX=b6vaV%x~_w+uT#n z%=eOwH4}+iQ8vUP+ItoGh zk1Bg)inA7?ciNC=qj0U#+0e!%Y(Bk6f3L_XC%=eh3iHL?Jt<1T{sX@jET zC!sUO+Elit4LLTn>uW`(PD~qZXyz=Pepz3E7|_PC7Df3`c@g4E1sdL&f06?nie8o& z$_C^IB4&n15}N5^D`O&UEu>7bjES|ikuf^kPCm>vAEu@pRTLj#?O?eBQ}c850vCkq zI?~2tlm(cO;e3uR$U_)g!IQZoV=81!4bA)^GfuIfjUd4Y5@bfi-U#fAr1gJ_yQiTl z4f_2*s80Ym$l^b90&6()2W>cQF&$Z(iTw>tg#GQqJpT__Gk*y^Yr>!Zqxwt#Q~f>v zvHtJHrw^MAGd!2bVjd5z(xCPOV*MoK1a)Gu}_I)(_moF02Q-IFo( z>_9*>H)YJ+;nIrMSF8d4fdQ0diJ$ki~MM8YUtIBh(P-oTXdE3e?0o}-%plL60K zYB(*TFI7qnZ{2iCS$ehZ3BBMA@O9JOmm1E9q=q_?e!B_g`t9ue!`lfGW^)qsn?U2n zN>~P~7!ssk>y`dERoqCxmhc*Zg1z~7+L*E!lVP(?M^Bf|kbW+mDGe#gC&<9Pd6?2E zho!AN2DQ_W-x_pjibrN<;DQI>pfNO4i{`-m%s_FLcVG6En_p2jP%*+g5n!blPibSY8U&;&M!1{l z+R(=N{`HrNvQZf2qp4cl-Hod8?r(

0!R~j#d~fMC|0Un)F{6!A3&!2TDaX^bRJRPK{+^yy}R~W`wnHdU1;w*P-PuGk3Jl5N|;kb1~ zpbzu+sSe;#5C)yG6FXM;Fm=+5kroYeZhC#HL@LhmN_0EYMFAoBk+jCEzeukEMNZj6 zUDtwCSk>U=3RA_71lWG4_Ia|Dc`MG!2c4VCMCCGOaT?T7Fxl(i;lgyF=edLMEZH1KaN``{+!+<%}RDLZTk>WOgv7ug+YVZQ&YE|9RAlsm9$JhXu>f!l+RzW}CMXKxIi!c-}md8g7w zzi0*HIT5un+pok~SEjp`6p1&p9fWIk$-BxjSl>X{g73vyYUmFMsYQxQPsCX@mAf$i zKqpua-Y=?L%dh*g&IYoL53wuCp_>JV(iuxzB6C?LQVWI1J5ga!TA)U^+HJ14+bx2X zFH_i1f08vDsZdj4h_(>bxLb+z4mOA)O54Zh*0y z>y?zjm>(U%wks{Fl^M6Bff~N)_jG;5Sunt-p)5*yY_K;6Nt+DQXaIN-x_>Zq|A}V038*JQ59)#Xoq`EYh2TRyD80rwIoDj*!swZ6 z!L$%(!DR4&xlKp>M(6$s;r3_wIcPK5Xh;J^=mPeEbOI%iov`0%kj7M3Hp{Heq?y~m zf*TDX)}OGH;EYA68cPrT#Gg*DmoafLD1KfJy+y{zt8|gHF+?phMn$uAAv}HOLU{Tn z`ef)W#91TYJ+QBo$#KeIl5OoFH_{efB;u@jX7KC;KuRjS*uYD&ErKi%l+28@r3(s> zXig>L=jAe^9Qs&XEjwO-{-BQpDT1`1nKwu;@C=Gf@uFm?h(gThH-#Hb(Xi`z&K!+J zBfRH|SD=6dGo>nhGVM`r{>zZ`>xJZ{C% zCl^m)H6Hy%x@3i6USCQ#i#8r#4E!KGr6cuHk$;*uj;#O`OYrP4kS>}=GEvjY0EP6CfX zoIp^*e=7SAF{5At5?L~?F=al?@36$HY>(z!!vC(kZ$M};iYCN={+Xnr<5(bk$%4=V8OFTs9l=E;93`N5J97-F#Y@iQaXRavH ze}j%x2E7P6l)g&Fq}2K_?_`YE_fi-EnTx(mG0pZzNj9jf{E8dOX_-I6RyH9-)naIk4G~ zF@qqqAY20rVTD+DOakRBC2jQ0QFt;+drv0GQNc{@3%^7kqo=Js%}8nV;s`JPcnt9| zcK9cw$0^`00bOAD0GB`@dgU1C{$^6+3|ooejVLu9X@yzJjGz6}K?$*i0~s_brRRv# ze}Js9J^WGWm(ilqmmf=jM4UCz9*{!TMx$4@C-ce}m<|56Y4B%8vJ}P-uk4pM(8Mb$ z=y4IT$T(5j9B5d_FL*#z)z>pg&N8Fd_fAE0L_J+#Zi@tB*9GRV4dCt~Ui34d;Mtt= z@E6GG@Pg=&<-ip}Py`Wrsty%_n(X9iZt&?33&fsM{a`v>{(ozUmFv#IPzrd|*dWbCeq0Y`t7B57Ee#@k$+Kr^@Sr%|bsfG{>zrHZF~ z{CwqcDoqj<;1S?Mx%x{cYr^8SYL!OEDy~#fF>+13JeGV!mqRSo3`X(;B16|rGa+EL)d#1Rs5$dP*+&Fe3T zm50TkLc2%_cv+*ALt8*X^?KWBdrKms!{Vdlk*r-KB&t}@KU&{k5-(3cFYn1o2-CzP zR&2cn4}w^ogcWO27|3fR2Sx1dw0$IzD!G=co2b<4B=*R$5~Wr$SFTa@X^{J2J)Vwj zPl;NUAlFD#3dta7pGeClIz#Vpx{h>IK zW%DojG*w*^uGg{F#LJ@~(jmq`8A!swYp5FwMgxVgJdTZLi9)4mY($9$yx!mu#Pz*| z)){1iQSQAYc`pa2A%gtB%nF&qan5_G*?T#PG8g2V3-V~fB$EZ1f%k?F5dxggB7KB1 z`7-Wl^Dm20eW49xeN-;A8I?DMk@eDY+fe8?#$8Op|Ns4e+5@&@Vf1qk@Ek7D>cYZf zPkNT-U{JsVB_tx+Z3(>@z$!lU_CkNUTJlJsj_{$$|J)UHLD|~uz zx5I@&ePe%ETsFz_h}V|Y``da=wOrUf-K?Ee=c#rrN=`dVGc8)#p7!)=KBUEv(LmFO?be{$fAc+R}1PcLj(e{}GJO=~~f)+YIuXTro*hyT_u zzc|!#;ztAiIx?$szzNHrXT6PIRqWUM{O%2RBkc^%>lc39W3^7%t@4+XE8L65DTa-C zp^3?SAuVtHI4{1&a?;>w-?(mCxcW@oFORCX46KY?^t3X$Pg+pY@w`LP3axeSr?Hk_ zYmTh$6jN8@exO}e)v2Igqm28P^xJ3q>H5HD1L>(1TV6d1eDa{LlWbnp52qFm{LH=M z-}5BY`0A?@_r*kC^Ne^kX_<%eY+~xprFTyax$4~Yr|e$w{ag7jyrkF^AgTy&@#T-_2VxuU6^0J zquKY}Cp%|k z-!Dq5CS3J9&~CFvvAR`3m*AzJ`wrQ8SC&zzmxgTKV*5PHfBVxhE0YHA{maq&Q2mUb zmjC^@V4QU;&Dr%1_v*dI&3e>A_2O~Go|c;S`@_DN)MoeAr3ZaeXAT@xY41IK{hxjO zMy$)4efm~$i*e^)GJac5E?)U<)>oVVOfK9fzt+2W?z7fQ|Cq2jKmN0ni0k80yCsyg zD(@}*slu}QP|2okn@eufKRfN8d}7@L`I=qoT9IN=^$F|aBZ{tgb{!!4?rOVjLFYri zHb1)d>mCoHd)$lr$?DN|-?I3d4ym(Rt_ygRQ&(YAyXJMfPaHF=>E}0g zlS9jh;UeoRFGAOEYO$>3ap;VM1%Y$zrtBZKaLC-&>q-tTX!Dx7{_XNKWr|howOzSG zQ@X{L2Is!fNkXr0?U%E!o4BT8tmCez7A4|iA89tvw3>N&l<3vR7t_w&Y%wclZJ0yo z$*6S+`$j%@s{Ho!q1R^ys-^dG{>Tfp@Nn(gxz%6pheJm@H-9Al<*TjnQKv6lSn_CJ z#~U}y6dOm~ecHwHGt~nZty*2;+OOtG($-=2b7p#3XtJ$ki*_yay>nyRz=t1?4O)1# zaI9nZ8@*na&vfiMs{i9l2XpH#bwA@USM+GP^^%l5QQOCi`*Y~CzN-&!G4yqrzH-v2 zN{^8aSB@+_-yD8+vcbBb-+qi9HSlr8wXL%&W>|K7aQfCy1=k~YUXd!&9-Q_r-m~xZ zLf4GoPY(?(E;~AV)qTh1FI11WY8`xcm5o`M`h&cUOUnz}#^h=`J09K9WyR46x?5|8 zoYq@C-En8xiD7pNr;QfLN+Ju2&p7*Pi@W^tDrVxs(!}&3{J>Shu$uZsu*csGab(LrK5>-bYml!!Pe@+2!FCv20WE!F9b} zJbk5@v*?g)<;CvH`uhiWy)k>$)SqrRg%>W{ZgnGUX^#=MZEkG6-KkM`Hm@e zd|h0ZI!auU99*;Bq4at1!Zm{i@2d!#Gkc5v!1F7L(yOa?JwCgv^7?(%yf-uUJm?x+ z;d-~j(4imw{9;U9cIGn8@r|>#MI5-XeDMUw?ss2qm@UtEduvGD`dvnca{<9QKOJk4 zGNJj%Luc1ig|2xz?a!iwjTSpw&ojEZmL;`#)a>e$qS4nyXYKQo7u9u08WbOtHa>cP z)axE&FDCu?^QoNJJK1+P?^v5N^XE-FMt9$_cGRN**GEiWlFEdSK3|u7yLNMOw|+}= zYAxqpS^0E!$;y-0AMLrdp`gc_wX?^h6wfHCd%j+kP~7v8Pw!Dbyty&>LB}V4r!RJ_ zF8{l_*7!ocr%M~hZ>Dy8UYs~#W!IrK$|3C@`ESqPxoqFpHf!Fg%wFyVZ?(MEYW;Id z$E};&M06|PAARv*>H6gXGoN~#IH9*0DNnJinf}LuwfhDa_s(9W4RiIFVRimhj3l*IocTk(yH&9z7rrP(Dl*HGyFAILo`_5iHZp_t`H}?noSIv93=)j+9=~8`u z-TA0FEqxY0>DaPpsiWcb5AxQVJ%?HE4%z1--geyTM4e=2fzN@B(pL{#_n&t5fY8H|eZGCcdaL>AWr&Di7+OkV`)>F+uPN$HU!IN9uliN;FidgQ zGUmWx8#=~v$nu%9a@+sX{Oj7OTmJ4fQXUcTqwlQ~nyWL?cdT3TF8O}t7N?N1?1L{# zZazG6s&w(d6&_i8rjMNV`c;6=BOxk0b%FoZ72p4O^ZVW7R;+A3bxDS7uk-cO+0HJ- z&jO@#=FM8%E@0f{je&G|!kVb5#p62rx9dFoLY~Ku{j5gz8av$fdQrim_VTcfDLtLf z+}}LidzUla?d8xxqus-w8l0E>FnCS)xo2htwuk3_>GGrZxqdx6NIOkxdD&ij%IjlA z+>8~H=bq|*z3vo6-AxPsL)3HSst&dTHojE<mRQmgnjd|DCTYR^8O3OSmLrmG1+s~<&_Z%xx)R=!Wt8!lKkV6Ar%(glE z>+Iy;*TlEky7c;hvbV=SD|{LBGIxGP*%v?dWPU%qUze%av%^wzI(_ZZhie{vm)HDe zlFhk&RW^NY&Gx(h)#^9*+WzUiVbutOHnGR%8&}TWZ5KRIG5E=dBMZLhS+X>)YT38T zSG7(*n>j^vy6||j&Gjj9Zc3Xc^(yOKLo>uVQ~I@R*X{Y?pxa+k!?MmUeSE0cYggf* z*XtGqt{7wE<+g9@v+0@jU;R?me5ARH)!ppmTB(2ab9+#OC-ruAmtQ7tuXz0F-h-t-EHF#xCc4%& z;C`S_O5N=?al@F9&gTa`wGHy?n6YNqw<9Q}w3m4Mt}cVe`E|RQS?uxbvCiJAo!IVM ztGc4vvaMyiMenSauUfIHm`5p1B8^ha<`sB{awwp4lK4I3rD!#erNsFD+($?=; zwxjfK|EO0zuIK#mRP(5Ed?_t`;r`uhN^<@Ohg;u;@AdNOApP6&GrP%q+MiGH+Wu(z zcR8g?%Gz}s|IoahtbX2wPLhcJoi^{B?f&{*SoSl~yNji-Kf9Wq_4e%60VSos%%y)y zebVNHbi7&R(Qm$-zPkGS)ixc22I>>M<{mtd;=N+g@6+ba+5212&Q$}yv#Y3DA-&wT zy=0VA>)YQwJ)b|#vstIBJDp$cd^2duh-UlBW^*6be6!U0P))`{JGY{qPgl+= z7@1Vp>*}&|F3#oqF7;Zye804!_TY*5^-G7_^iBN5#lnNmNU(J%osibM%QLrqqPD}E zD>fSUT3SsSUpP^})zNy^4XH1gOm2c0}oM>%Lzkzu+p{)uRv9GoBv6k541Bu*6> zC)b4`nh?l07Qki)oy%d6Wx`c<;bt7P!NC%Yo zr#pTZ%C}(8w<(I(ldS}Qy#9QC6udNLf7t|%g2sf%estEt*XQ|82Mp;VlrO>Zd3qpW zlQ16yXjAg-{WyAF4w4T`f)C`Q7(()e{5q=sc=^0t=@=7;p>jGyK@&;nt0h3g+d`7_^@9b4f-JStME#Ck zNN$bq!us1y)bE7r4}!fsnS}c9H&K6FZ>|>aC!U8;KI&gW-yzy?T>k`L5kH0XQC<)t zETv=sSHTABkA{(H@DsKlI!|m$zM~6Q-%D`dD3s4pHT~bL$(BX(nv#fcp?5jH%}ktn zHe)05ec4Dq5#XU1&cshN9GO80I-@~p826y;;fZjbjvwEU`G^mn_<8{>-gs)u`;&`f zOR5T2;M;u{OOJX!mw5UskVX7$utRzJhb-Q_p`Cd8Pk|26I|}Frvv_m#d5=vzy$aL& z3+TVXcr?a&k8j1eT0p-KcsQqSV_c0LiMu)V7~>_Fp4aCs z;HcfVfd5e9@jlRn5S|I;B<_K6Hvt}r@hSnHit#i7z725X{}OE1DJ=g-jOXAyo+hXw z%m*sHr_U2i&&TZou9&ibz(f4EV0-zV))8=I7tf!!cQj9r>+^i3VmuS`;lD0uc^o&m z64x_eoF5nY;cY$ONN$-x|C5;B5wD{TVm=pmdh7>Y&sUh9!tEP}>05&z**J%Clz9ES zV!RCV$6-wkz<3qL>$qyvNQ~nw<%M7T07v>e3iOY}^lGeN5VQwMI*hwveZn}HT88m0 zSpQ`h--z)N%%7(}2so0<~h2Hv;g}*4&(g9&>!Q;7%#!}VHijKfsHqKqQv_F^*5xCjX*A>qkPyOtapfU=Ehr>DEKbg2aBLw* zw|n?JI)PBdhw!B6{sk3+&Mt%p93gOM5`w^xhGP%zfF)#(T%%RO-JgG5$nqr4Mp%9v z2Vkm?l>-2mZ_tgVrqO?@Ra|5U$3UPEf&WAM8ft`qhw#0n_l<0lLf{sh1tTe}7@X&* zVXq!hJcT@-yZohA=Em43zwgU&9T%*ye!Hbv; zx{MS8mx`3}tYf+A>U&Q3peh{U z!F@W!wCUR1)u!+U?{TgHr^Tsb<+=tKX#w3&uSQL&F~RFYuM@68_pwN86O_7W-YX{f zC1{ioY40^7!BC-$g`nbDK*%+;W~Ao*u#(5~LDnst*Wl)6y+^9eUJYb>3`@~u zdvbLn(SEB6 z@hC^ueJ_fI-S&f65fXgZR86>&?fPU*AzM}-&VJN6dG$!u2om-RCQl>i)~pmYjQMcH z-xv!hW;wlJveSiW*pCRpiI~FS8U=H-I!uG+a&5R?5rVnlQk;w90v0-rdU#i+t(g}`0k7#N|r_T$7WpsF^SHKt)W z=WOAGvmK5!i)0EPS7IaJ8ZoCD`s~8K!JSu59!zN}ek`QIRVp2*AGVm38s`TK@I;(HgP({GTvVgp!u4^KiV56}z;9t3@kcnH{>CptyawZl zzXE<47*T`BY;9 ze}i$My>%z3$W1b>9{sV(mC$X*iffN`O{fdo#8KRPEw3E@%j+2ssB zlp+ZF5XkfT%n{JD#PB!I1pO6Djsn@$1AaUo#;Oq?O5kS*oTTrFj}(!;xJ$7Nx?mjf zN8f^Y{__dkj=)zEd=Sp3T_*5-1Rn(u^ZdKwqfB0(b(m2vj3a$Wzv&5j4KEa)a|wE~ zy-t{*&n4)UP@mW5wh8*?_-GaB6G_l7#5k{i36!D45ICyCr%ZwmX;-cZ`a%L{+Y7G` zE}P)9}qAo!4R z-k}}RiW`?m{`MG0{vr8~G=WPAJ|zEX1g-*Jy#7jp4~ifDyGjy4Px@y$L9YRNK9vyk zVF2>{s|lQpD_8uT7`3mKpid&cACvr33HnfieicEF^moCXX%j(D>c2}sKLyhtG(n$D z;I4$+3Szv{68J-6+#tspAYl^4}b3?l)w@FLHMD>%R$8?AAWpAIQnJ652Y;x9~lR+ z|NQuhisK19o1nKP@Eigs$Dcw1C;40_a0h}<8G(-{@Nxnt`P35l5Q3gvxIrEjPa<#& z+>a4X^65n2{RnyqfsY_?djco<@Z$>N?@7?R5%j(UP7^rEhaYbcpI!ugC_yhJ@Mr=j z`6LoJP0*(ixE+BnCUBC^Is&&R=(iAfR|4Nn;3S`H0(U3qa|qmxzzYeSlOHjGYMk^>E1y~IsrLLIssCRo z`)`;#gNq%)%`WlFKWl@SvY!3%_X@T0ampWm2s7Bu!yqQ4KJBm8v>m~kCL7lc?Oc@S zahK+nc(lttST$l`iGloPgQlfyQs9PLTg{oKy!4-L#x!os3ixfR-v4GmNnCcx#53^3nQnO9LX)gyd* zui?p?n`l}tw5Oq!yP&AJ%2Q!hx80IkSv1e1y>Ed$CFNCfwIGNQMM!mVvDV)Ll~z}J z^0n(MnDEeZ7AU`{5__<8UUzCt;V-wRRGhUtAfC*s%F8ON%F9Zr#Lt#IPpK(uA+@cP zm0yutRH}V##XM4eB{j9=EH497zO+F3)g|THerkTnRSKlVt|U~=I2*vKUlB= z7^$>7DJUdcg-68G&(!J?6u}}ItD%#_{$PNnHGmWvUsUFvT3zY(jt>aw$~>)ul}!yV z$uQW;V2@47lx1bAG{RbD&#+}fFOV5atQpcknRS!TEbeBK=K(8^^sRf=Oqu(#HP^cv zOSYp{HXnn5%V`RdAIUQUN zO*qkPMmf~G^QPsN7UK91-J!x?t`E6wU~-{pPb@-wtwcn}#2<%VOP*j5gOno>Pf(er z1@uaWUx!0XmH`2QFxF81=VtqUV>EmGU^CL9SQD@73T2K}tC#EE z8W-`@gfbDvrI>h#iG57e)M4hjOoS7$kBL{9IKadqCXO+2hKch`Tx6oA9t&jR7!x)1 zDQgE4cQSDg6Av-5kBOQFERczsh5`XcNdjDF5KV}=rYRB2nOMohjZECZ#6Bi!uHoVl zOtfL5GZWpJh-IP|6TO+}!$dzO_Q@u%si}F%pk6kpS0n`{5%uSvf9^MO4;a)TgZjXr zju_NYrj8j@%`wJmzB8y(2KAFcoiV7h26f(`ele&E2KB2!U1Vw>QK0>wnnv;d_5{3>P>>@sToXbfTpK&UkR!5cPeYQ0)Gj&y@?*vNN9EL2y1+u0-A#EDK1R-<}=~PDvf{@Ob!PbX#A?qb)wA7-h zOm*!j%0D+CYbdnB+Q*BsN$@KS4-adP_BAZZ*TS+3g#IKahwO%$&^19W zlvEGFHSoXwKH&Y6Lf|$4WZ27*rOvapp~HyYrS>a1Malt1&Pox2heu%9`*@P2c~r90 zFi#Cn$_}c#J=7G|6C+RjU`T`^1`0a?l`)#^g9&qC0L$Sl@<-kLrGN-m*7aa4@t{+; zK!z|iPIyOjgYe;yx~-3KnedpdqGL-5;oW42MhJP~-I2`^DZ@9shYb4|nHPIXXd?J1j195AFI7B8IOxT9tj@brq z6*RZ(*T_iT(R<*&hR|4#{R&|Aj^2~K(**sh>8U#QB45WbkkAw}^c0kU$5r^Fr(q7L zhdRI_7m%C%3WTvL*gFHtNm`AR_{{dNjv+jKo#~zY)C{ zQCX3vIW}PVh+s^k3RN2V}cP@MjnNL~W&< z_L$w_0Hh@KK2RM#ho6q$69+O#mt3nmaW_l4WU1+rWx^$>iDQ}RlI4a=RwypH&UDFj zrc17qE+J?9;L{m(^{+ zTeKe!{Y2DWBBhr5AtkBzfa>rW{B-<|IIut`{BcZ{(+%z_N}VT}4LAuqoKWAbs6WM2 ze~PL86sbOq37`4xfW2TKl_q@3CdkADlQMWsn&jAqDC?8r3j$TaQ9v^2v(h=P3L{y-hjN6_+3-sX(Z*Lpc0&Yz9AkNT;-yPQgug>69qb zDN)!9g!vs5^E;a6cQnoKXfgjCzvkZy6-o2owwnL8(dE!XccUUQtKo+aY1TDj+2X`|2GXpnO|zOAW;IvLYGIny!ZfRe#jGcVRIW)q*TC%u zY1R`~vz{=_Ld)^cpKkXmkWtT2S{ic*Qj+=vs17IKrz7rt^C8S~u9U5XH#vy=km-m0_%Nm0_%Nl{A)SxQBcWH%l9`p?j=`?&0ulBi2WIuwFdc zqHFNbA8GdpknMKi&sO+}T2DFB?&lySsRKZDcprW`eoh=%UV5NNdH`?iNDma69#Bcs z1JiI_E<7+@@xTnz12aqy%&>Ui9-kh-+efmgcUe8K%j$t$;(7oSZ;L*|L%+Y>V?egM z7k{?FPt*p=k#@fTDM`HnREH1Yr{gi=!1B~ElYFYx5iZK4S`%2UHYJsXnm&P7#7%_` z6FDF$iAz^JI#*8B^vQTx?Ob28xQl2+H}iIxT3w*&Q*g13hg^;3vfwVTo|~E}v*2P4 z7t;MeoBI0za%s_+q4z@lYCDm}qaLo0-OLm~ObMwLrmo1T*U@n|!z?P%hWd9tQQUy= z<~?YU>%t8m7V}REFfZ=m|DABj+epU^6gzJt-B)dmbgO#xegv~;!7a!bts8ov-jW%R z(Diz_v9tk5;aE*()?U9%WD3su&F~6a*JYwyO>9yVPpOHI)x>$3=#KT)Z=$QIo|F>8 zolTWe&hBbrxSCLPaIRBx?o<;`tBFHu;%Au<3OOTGg`5K{sccJXwk5T}l6uaPI$}xv zYDqP8sI_;oq!KNuDVEecOKPJfb-yL`vL*GoCH1={73NfRiL|6*DJ7c5(Ma*1BT`Lt zRTFV)B3Vu3s0ojnn5iZfs)^Myp>2d{6n8f?ml!O3j#U_4cv$bp3>F9kFk~pVi~@UQ z3q)K^s<(^+`^>})dCN$>PZan!_lW|{`$U0L7lRD1n?tpFV4Y&Lsuhd1NYcDd6x1u0 z(V+gx205g_AjK`CAlEYh1i8e0A|$08^FC3npYAhIfA@)kTyEfjK^4|AwKr}9kBTAN zH4RDF36Uw@oR%rxoR+B>PeEBnByLXUK$%d~ePKO6~{)|Njcab}uQgm>% z+Q5G8#S(k2CRf?S#KD|ll<+B^=l5FNsMrIe}`C1tfCyjMzj^F^M#qZ7h=rLxAs zvPRk~4QacN>k1EP`@K*{Dd@Pd+2A#e_I)q`KL zCU?0)qEL*Kk%3PFfTeYCuQVhRU108&hO{3p$|l3FFg!e@J=#|X_DVytMZ{B+hvbmm zP!qZ)$c2(Z5nK=dMdSXd)e~y%1fV`ffmATGBXS7wL&94B3AE5GH0Dld8g9LEiaMy6uxitR_-M#P$g;F{0~LjPw} zqbxV@qR5js+w?f8kgQZ6DpT^dn;tI}l6Ttl1erHPN=cNd1eqEp4H+R*!)3WNnM!I1 z)3zfrTc$=zUFOKtD4CikQ)6UmflQ5+sYNn1=~IvbO{#-G8i5ajT=;l|Y)wb6DeM(T zA6z73Ac+0Be$rOy6$kl2_8!L|DZh>s65xot$q+JBW?_KL(H!wIB{#Jl3CISwy|hq- z@%~N&?DA5I%Q50@KrpZzBW2yB$!M7h;M!6H!5(3nBh6A9Ie}_RM>bI#)`Xr^YKw4W zG-b$EtDc$i@sFHXJ!_k&;{Wj`1Fm!lA1f2n}+f_kvugxQy%?$ghvlRbO0j z1i5xY05;TbGGJ6#8WN#rW5dWc%8~6(sqv}``UE-rNfq>o(&VOEC<^@n{!6pqIsnvO zr#oB2)YN!Zh2~fzC}H6mw6JkGVC^9nCPiRfy9!T1F7!;0>nos}BH-95M-F`AOfv4k z8Wpl}SuwPcK((vDR9NF(uk!^KCe;HUO_Mv%E0IOdYKFP`D#3q^EM29GD%E04<6~^i zXU){~N*zO2&(f&OeE((e&X6cG&sJus|1$U-oG7!zR%Vm`GWeXFD6^5u$P1CpI{Hhc zS?AmR%X$uEwM0923R%MZ27~Y-VQLJ5_psd!Yl@6nc86{BliSB;}4lCoMLd)EQ+_TF;5Z zflse7>V&?9E152W=@y5Gbp0{VAR1d^i_lzNrEQTCV+7~@@US(`GlJ`0h3j4i4i(X8 z$$i2SS@=FtSfyK|#=C{at@Gyq{eS}nN*6yU*d@J3>Kf$20foBPyZ%FUGHmP%ufJo2 zs&w5uI%+c)9GW~%O1Jb=_y89|{r6_Y;zXIk( z?SgdFRs?&Xm+gmsLXSFwEZ^YIQT%xee_nzgTtr)ro|gf|qgN1!?uC!|^lS+~bjSdG zPqrz8>KUJc6|Q>M2+)q0ufJ=C2RZx+{|?97DMHHQhQnpUJ*kW|lIG^y<6l}-7)g83 zkS6!8bf@nz93RRRBZtE&M-JI-98TF~MaKwmiVinMwq&4FtdPjEP7Wh3RNo+t&-Mz- zI@E-!kc6lbiiJIU$@|N7vA%0i!(Hho$e`bZsG89MYS zB1N$pKJ+#Yjpm4P`2Bogg^$%P>Nf zbMfD01!55rFiUs72pNs>K5RfWu7={qUA= zz#P1AK=0z2ti0a$Oo$J33xBROBDy9tb-=xb z!d@Q$+UuAs(h7^|t$bI756;W*HmZ_?UWAT=1RkA0?bdQ8%;XN-#s84i6z)6-iJff{ zI~&u2bV{^v3eL`5jR|BRR`_~D(AV7mlq=nU_JYY-0^((?in~oRR-i+gI$cpL!Ki=Uu*e5y?&|X>a({l>^(2;-*jEDa6VwAcPl2MD`hx#v2y|%$mPrfJC z^ASklk;uB~-wIvYp)PpHlBk2EeAcUJ!!Qc$hkhXHV}PUHfgf+Xj>{5aQw*b4?3;vZ zE^N2qD5~~gbfB(>;^cDz&=C@^v*Z&<0FHZVP8f(qNh;*J;he}666!X?-5gz)iE=fu zNliSZCO%dZ=Vc-Z^{LxLS5rMHC4`4JRZ4|-R};h4gsMaMIyL7`HSx5XIHV?imI@QQVkty?OiOXL`!OlB{k2I+Gt7LZ%MsuNquff z{ccHxIaOUEEvZ;aiKYo?r1&o&QcZMK6LD%HSxw}q36GkXsU{YxiPbWp9e@oeSOLKC z&-djWx(f@?W<34ThEx90hIQNB;R+I*mcPjea0MBE2qLN$qmtfs9k7bgD_n1j*Ds=| z-uWG@Dw0xNFax()Wtny_L(=7X9e!);7;_SC|FM9N!7mAHkJbglj+UOC2B;w~2XU0= zaxDj3Tv0fhVL@F!+UY1)6Pwh;Q)=R4HE~`h;A#PcH__EpPfCfJoK0nxOmtTh!_|bU zgL9plbElekT1^~M6FI)lKS0}3UjKuL|Rg@l!8kk`1_ly1f#i9k!UNQXa}EYH=k%< zpJ<#j|F4Z@f#6cjaegKI)^e?dUpaiy-*kywXWP307h`9*v+X-T*M|R^v-1h~g&|3% zx?qMe#5vpHSXRq*41R;nA}T3%S5@F*rX<&QWGDmiSsg17b^{DqN}N%loG-N zn<}LOyQ_)eYC_c^aGjcSr7W+o+L-IdJhOL@TCd=SZjDhYZ zlLY>c2c0#JLacEV%5fCNaa6||JasvE!mYtm&kVQvGHM&31h`en!Q9Anr*vjxvx#8$ zL2cNkCM$dXDz%x_;Jn%_h+b}HIvB#vC=_T7&*oG$H4TR#Bq0EmJZRJiRfZW~tw==> zY=W(!a*S&sC(=w{G_^4z5a!UfBJ@CA5sH{Cf)PTItRclZn6;=jcT~8bY$v5AkcmNx zU6N#UQDsQaN1G->n3}>MNKIzR$^nbQpsMbs6*w~Vz$Dra9Sh8g4S^A}K6J{S+=t*X zBJ66tqe-Qx&9mq;d>N!W8ynPL0Glq!4d2<+HNgo2;`SwA-C z3z|A$;!r1)TGoCVWbLOeo>OXbe+;(v(-6Csp>_qsR1Wm*-;F$ft1;^o#1ov$Y6JY? z61Nu4L&2;%jzP-&6iP8@n^IshWG>XUj;cP6q;>5EhN~RHz^!6ood~g|>%YUm23z4k zYnbj@U0Kl;{-R90LJIz7t-9D#X?=}U*XU^a2dhfTg6DdpyO!kUO)Dz(XhX0p{3_Y> z%8=+htV4NyNKrxbG+g52%UqatSIsT=R00l4G8q655m#2_!&@W(hr|p|MX9G)(ok7d zi6l$JJ4T2Wx)TdL)+{M}Z46K#dPdpQ=@OF=NR^5K2wfOy@h%#fEH0Xgb;<%@7`}0d z6^50Jyh;HVI^Wjx$e9zycX8dn&p9t5w&M`zKJA&vzJqgeJogXkH>p{V=E=@awB2np zob?7ct0J7C+0McU*MVsP4(HCr*{~4$Lfa~KTf#xFKTLkY3 z!F$VM;{8_eZjrp70`HAbbcNu&Bsf6lana&SHq%T1?%;K^;c$HrK9y1 z776P&>0rIk^r+z7C3ufAFDFs#YJ>H-V7*na9%t6ABKgfCWL=M};D4tx8?9=;4Jopz z{aH+i%9|tCpo+l&3_-qq;3go6aUXadQi5~l?nj+-v#)o~ts42LtN6HQnKR50seilu zxZ7E@`>mtfzyJ2z9OsM!&PG+v8QIRO3vy0AzwF#GXO`M0Z|!bwPD$9weaa*gG(2>#Ng3FETqVB#hn(GM$MbN_-NPxEV%ayvmz&U3?g7a&Az_lx$YhHA4 zPxHaf@Q9_(+Do0YBb>DdJl}f6AXoRI<`cSfb+*h-OzpbNxkmqJf^+s#2*KwUL_njz z5 zUiFM~x~st5d&uEguIZDVbEDnPo%%CH&IZ}zAMTwxc;CVas=O+tyJA)%or{Dq0S~|ZQ(*0n5fOOTO*dEN9(%6ewZ0ixAwT7Ry3MbdVU^XbJ)cMc!C+*R0r;JPEr9&$}z z?`-AhpgRjbTJH>Xbkv>mmKGKkCg(WXG<^1fLRaK6=WB~xRV#*-fOTgt%*`Z~?uh(=f=h|qa=fIGm z_6X=LMvpLhk$80)OkR1|MYLJ)-=U3%U;o0X!*dy)m7y}~uzy{xr6V@hBeMoO98eq9 z4hP&m)9?i_x~9(w4-InNKpEGFT=OT9$hbP;D;%T4YT5I9tNFvc^W_b8SPf(O5n;7D zo1z7^L@gg5Rx5dR;IdlDYn^MvPy&|||B}CrjX%{UKXDlhrEu8!a&3IctDVbG1v}sW zRNnv8o`0&RKfZrkznvdRM}H9{J~SDE1e*ULSFY zR}gpzy@q?oA;vo%i5Q1I@-1;X(!0EP5{S!#-S&RKe)>oC`zSwOXs2l@e)NOEMjT0) z@1wjNR>=O8uv+%G?W?xKsIXc|Yn*AT1D3&Vq4gL{N#Q4`Cyx4y-Cprd3*hx^s=C=bzcKpSX#FhtLbg`B^h_i{#sJ zX=cp#RKb<1d^O_Or1Z?BRQJ%V40lT6@YKwtxXeWNu*A5`tn|bT4d3_buF_`Un?~nU zY02))#N;&1?XIK@5?DE{x+=eHcBz-hjLg(Do{y`vj3jqP)=>AT%n|8{aS86UxZ#Of zNxpj)yl=K7cTQ0W{K16K72gZ%&aEiq0vS0OW8E2v$y#!1f;(eGR%Sx#xD<5}uDmK! zyzdd`XD%E+Iw>QQ6QeTIkC2j=q#hMaD zP34DXP+v$CwNO-o`@f=v}f(h4G_D$qM12yXsO^eK-91e6>e| zccn+f|NYC-$yl_+^b5V1T8)6D%n>{WQTGHdpc9O)DYdq{h@F`fKgyjEKO!+93u6x6 z+*@3wxrdgO6?3ihK3sm)ttOfRIyiQJ(eUymwAf{2{K%Tb0F;$7IyEjq}HNg zN>AX}L=83R0O22#G_4SQDmi1gkjott-<(bz)OdZlF~GC*^sE%6t!O}^cVd%MVVq7A z;~pMUorf=ZAYm{8#Ah0|rKP84 z!t9qgJShcxKD;wHzu1^MlH;&bi+6>)ar1|&OX$W#cP4r;5zE!USU5_9j+;M+5s>Ci zOC6mQ4^s~4YECR#uZsuM%7 z(W!AP28RhBVwJF;jcv#+3hz=zG&g^Gb){WHo*nZ&<(|@fw>e2tg+AWv%&r-mY*MnJ ztse3<^-^<+?vs$3k|-22-hD5J*Ft4JGRGDnl z9^FCPzaO%F-Ho8p95y(}_tgE2UXIH!W8#9SG*?Jz-C|;TxVsHyKe@q&Zg>WVZA(qf zlr5BBRt+!ehiQQpJ4K}hWz3b3Fcj8n>9~H$kUc}pTggco@nQ%S1E^G{ptvlzN~?Bb z7;^DZ&?|@i<9IfL!)~mYYf0}>$*_E6n#Sm?v;gP zi^+`CVIYRq2IAh6mIoIq9&s7MOj0(=+NrV_2KhGA0kF z6CAT)g7D0dp#~!kAja~b5_TyIAa3MzZ3ZLoz(ogshl5%qx5~Vlqxy{TP+o^vXA)(h z1?`rVCI$l0@}-{H?s8cF%eJK$QvAcqC7BOCm&*wI)fXv|n4M@eazc92*u?YPj)U$bKc3QZ%U3ER7e9B-#7B1Dqp1*P`@L@F@2e^)oDr zhL(>!sJf-cB^gVJIJ)}aAp%>4mp|%Il$@CjBW~(wcS24|TrzZf@)tzD7+I5syGNv^ zjxstEt{X<!;U_I0GEHz z5$M|qP>cpLyqHv1K%)B#cggRR2u^V=Bo~gulG0%=QJX-FJ~D_(a^+WXWc(;`n4T!E zF5^>^(?%znL$duUnmwfs0pfxQ2MxEFV&dbBVLn-OejIOw3s41I%|PYi=5;k*PN<>i z9fmkgo0Bpb#gjD3%ZHV{*ZNwC8;mqr2Xaq^&aN!oa5G~}R#IYyxgimsnwFEEG<<}y zUm-7(;qoALY!X~k(j7#(JfnKd-Y3Qmv1-5t4SuV{^h?}Wc3wQLOx0OAGc$+tFe`bu zacw4B&HkArX%GdIxXN;is~xklp-HJ6tf)u{#j1=;%Tkl1@Q#pN2g*pwNQ7b4=v+pp z$;gb$#Hmv5#K4GD0`sn=7f=?oowyv(WPn$~5RU6V+!;c<%mG?f7nfpqAszNAQj-Oj zIA7->6s&p3lf|_V2mMKGqY0ShK`1Hkyrf7=7Pp^|SCcxjT1O zZjo_;jRI}gs-}wkB`0bFSV9T`#6Jzb=;S@Z5R-^;(VzcI8y@5o>#{~J!23X>p&d9# z*e<(-z9n#7AxyVz1J0y5Te_vx1Mwjv5o{3KHJ&`!Z-gxYF^h|jL@CW++nSI8C!ZXk zeoyYgPf5Xuj~}uUo3mnxAQus$Ic;BSlG=!!B(o)?%N1`6m8iJwvPcTR&v?0ULjx9N z<}MbN@UiQLu%9j@JOURMbA*fi49qj#Jj>uJ38i^WP^K;7(^|p_#*`*^euUerD#SVt z7B}U>p*6&~v(g_zG#USxO;0Z$s%~zBQ!*Y2p_ztg^giUZw z4Hp8&YLBm`jBYGHtER+-InGO&AV@?Zbtc#uD=dNCk4mL6#f}+A9M)V43>C0?z-Gf-T7&_G4kr82~oYAkK-#;HnPHQB?&2nV@s3ETbXHyKKD zaG-=32_Of(V0KdI{Jg%!MLh9BU>hSF_}0sG7BOm!DitttcyG9%^(@ubo}qj| zO0=1bQZww}%5Rnk1fJ#1=8*;(+xe_(3GQ5}Q;i5e#gigv3^$1ZMeG95Y~XY63!S8h z$fr*UQk$uZAo8diZl_h`!ocl;<%8+Ra=5JY&`c_~3Y4DUeHCIFD+e_(1>_HlD#ns}pqQYrn z^cCB)c!egG8HySBwZ*ArWmT}Wnpy_KrCaRU8;Xm4dbni%XBUuQVksL)yBg3GFjCN{ zj5}7WCbj{XEhiaqW65g=M2sDxyDE+1eVHkRyTy*N+ikh4rgRJ*fIuN-ryqT3Yd^~u zF|m~2jeX1n?;2eRoP_g>xFRSJYcpJb$ca$gUR740DRAd^SdM$_7$X+Vk7q)AR+m@t zir#v!S9VRDeB?b8aiM8(j~JLli^&)g_daN-q>E1BZtqPrR36u0)$$&zhC_+c$*f=g z%quIKQ6!i4Jd~&x;KtNIkt-Au4ijHxwYCC;f@la>Y{0!Ym;k6hShgR43HpyQ?8(KP zc?$s+8hAI5N~(9_*ci+U!T-{wlRw3bzV+{}2o!NX234Ce zW~*6le2S`Nh>MX3*?jGRQiE8w(va6jP|Ftbw`_q`x$QCu`Ms8MO3aHH#`pEkKfH@B z`ZW2&?-eSlVP7mE=C$Zm-0r;tMvnr(oFhMeixOK2{F zMP+ z>p&p5fA|czt$mDl>^S?Zp znhNCk4&cY{GnyeSCIfWezIkXdSE~dAbSUA%=49r{BX3E=6XI*1W3DC41MD3(As?PMCCKk?gEBYGIo?n#iOn z$g3gqh`YcjmBu7~&qg{VgGp16S3^!G?o~#qG$zebUJbdAxL>3*HYC%pm{>T|b>Yt= z@$l6nS=QTz23|@Yp{!2~mNX_qNHT;ilU$jPi1>m8z@I~k1HzU`vy_*$;Z#RG!;0B1 zrW=}AIMXu?%sXsZRtMtop`m?tD3!+KGy}?D(iG(7|9-?h z-YAvEq*=<#Z8gNbgw7ZwOfNUFaHiieFmJc9thL1B!)-TH)~yCh8k27tPzIA+nGZqR ziTeekR2q|JDKBde5%;@vMr)b=z{J9t?nZx*<*Q4uEPR7A9zK-xX31pkE+kpkCNjyD z`3RD8RL2FQt~4gw8-g;JGzEDD34Xl^kE@MRX-t}>yxcZ~xZ~)IZeu#Z#KM_=(ZIZe zgk=>Gj}Nzbvt%;&b4IDjOmbyD+~zH43=4Y75HyKNQ;^q`;4LVf1wCpAn#iOn$ZJZd zB<@*8sWc`ZG@uM7O+j7_Ighw+F-oN|X_oS8$V0^aE}cdE6a9gSg)`kPK!%IY_$U7F z>FlE+xjK_2lgTb58RMTwuFOY6o})T07I+G=n$=i%l6Pe`7e7G%-xC@L@X-wjGLGgeo znMqTSm)oWj_bQ`Q8k1%zFSk8J+z-GU(v?0jv5+dF&Rn4Ae5M7 zNj`kyEhv)(buk1@X3`YoH70lq8pDF%)otY5Nlco8yvBsD$)pp8X=zNhFa%{VX$tac zrIREe*eI38q*=Ma$%B-Ikj0ei)9d-zg+G#)d!8j zWQrjwgUJj78dF5dET=OJI;K=fvFu}p>@iFZGfGV!N#rUM@+Zh;RG-eIV%)_=_HwND z5JPkZ*T(AmP`f$R(%q;nvnvVcZwT@Vfg0joW0XpJlgKYj=qnG#S%Tr#KM{8KIqFv&f}&<8=1~lWHIeAFmJueDQ~91 zGuy@V91{y?daHr?m$i;~U;w_ENG|4M!Lfr_?xHhV!}L8S7S8lz2Ij57KFWLB;F;}W z`a=^7XSzRyoG&joqrC2P_Ob2ATWlvtw61xL+(W2zl2Oxa7t^CnES%|51M{}7obqNG zJkVA|FE+7orr$R(|FW(l9%vZeUg2Us+KM%}-Y7L@Baz!p$Xn1Da*%OiL9>lgUY=u? zDuV^z!(};G`Bx2=EGGZLhy}!blTj*-$=glnbt2z0Atw3kBO;Cw_m_0WU}pN1iG?$L z6k+|8TJ|_HS#PT0Qu$L6x2kc_7WZXxj z86jQ^ATHJ2C^eDyxXe-$4ONMVpx|w51ToByMDunK&W}vH4L4$t&76ANd0u7P>` zfMqd{4})u{_!2`5?3fb0!o_AWVQiKV$u}kb*HpGagQ}h zO&m|8S<0)sG$NKrqf`cy9StarH5zU}nM`IHPzG$1GQjy3#b_W)*!{ z8%`|s=#17f-O$9sncik#-p$RjIuj3A%j8xAn#3ea^3mKoh@1BqP${PGG!&Q}&U7kW zO8RO7mQ~xh+{|LKj{#*c$&!31^*&YniD8P@EP9HvVhzDwZL3jMgu#-=WJeP+V?k1B zlr@IV=n$r}O)Q-0$p+@#N-PV%8G?roQ>Rc?t|10yC!+IBES%{{blvXD|19e|DhJgu znPFV+XE4cdXSS7OT9}L-< zOa>T&a#;2N1IippWQqw%3(Vizl-0;!nKX~cl_tcbsigNc32}c(XLKgh-yjQCsBmOKyyOb$1o$;m{rBzQu{v`bRnf-+f9D?`vECc7KZnBGLj8_*=KZjuQx zS!zIIs)<}?K$Dof&49+-N#yPHZcVtxYe@but?}z(HUSp2O!hZqXRx00=)Ji<0?OMh z=`3iJA;`^wOpV-s@84_|#HC>G_aU#nUvC9+xZGevfr+d@jR`Ti+JJJHWS_#c&E$TQ zi^(;HS0?^QCVDr5*Pvln-Jz}5Sa-JBS4`vgq41b&)Rr}s$U+l(naG1C6h(p2 zna(~2V2)PPcWISmI>#d{Fm5M^y#vrU1buHfDy@oYHocP8%_}s$=GQ^w%gKg&)0iwW zA?X40m-SY9nRla1;!g5{;gd;BvcrAsk!&UIdyG4mR)jc53#e&G->T~`gxs%y-(*BB(xQs`H{b1u8b?E^WT-{ zC;hlQ%lq0Uhm&@Bf5*>{#PLIJ50akzKpH>kc8eeV|E@eg;Kt=yUgbZO_jmlfL&}e> zh0?xDT{`o#YqcoNe&X}rmFGv+xID}I&X4|fd4I>x`$hcxSSjf_lg|7QS-v0r?d6$2 z{=dY}4}slG@($AZ9Xj)4U$6P8@9)a<(_UPj<=yiS<^3K1_auiOy^5xN6@E;LpTBBD zIL8H_?d6%@`CsBMB02m-(espkkB(S3gEvzKRndc{1OVVwUh|MyfcKe`i5m(tzn z%+K$%p|nvE5%%)T@BALqo2Jz^RN0Z@$)^$_sBcn zv6pE4<@=8(7`L4pQ~z&HXTGCwi=Xj@A0atT`VXONblwHAiP!!uKktW}Bl#EU%sU-+ z`F4K$&Ip(14V=F#|9AY0Y1w374)OxsF5k|7krqqL&r7~v2!DXiyd>n+F0U5t@|Tf5 ztLV&&LSEkeQ~qsK{(s8<^E(d9%#Rn$xG299&`-g(G+46F`FO$R8O51d;rqYc`s}m6 zKK$8_>Fqz8I$>Ok#}AC{Sp4wHW9h+9B<|SsK)uAA;H8bOb<_{NI;U-|L$Acf-QcR- z=9PrRz@D{w4(fF_ZlkNsun+cK_gZ*Z{lMpkBu7-gz4)gGU#&Z9{^`?iZ{6~Ak8ii# z)cW?Y1)n9%9#i}ApR3os(<^vPgDxkYn0|G}-ryIeUoPEvFg5DUd$xX+-*#E-mZc3_ zZK^72@xxos-8l61kp;a6|57pIhF{{o3;FS-(hI@qJ;vYKciYlUua>-Z>fDa5Kjbez z{lkI|HDl*K`_iM+3M%Wo*sM7CmWn4fHJx$g!q5lnKY8Z)u^$!w=Ydt7cDHG^CF^Y0 z5jiJ!{B|nqr*AuU8$G}9;pdljZ9TNf&+{X+QRhAwvwOz04-@i!OJ5sb^xB+7cd!2H z`JNxdHh=7?cBP$br!9TAU|WWMa%!#L-gwEKvHIy+7kZT}eXib!FSk|etLDFSJU4gK zcUianwmIR}FI(O<=#|WG!gIcAdG5#S-hF%Vxx1VXwM;p^Eb{W~SH5$_@0wb*HRtWa zbr-BzeqGU?9X%eJ{oU5G*;{g6Km1{SUnf=#veUo&p? zq~xA=e>Hl|f$BK-_8o1`KbdyN>A@T3_PGB<%8EOy{qp0_QntTb+InH$k&%m9%sy26yQsLwP6nTQ^w753 zw;%d^#0%XX$lQDLx1PuQP?h8BOg>&0FRTNEE2 z_u}tW5mS!r?6hxpi@Fz14vX1USnE*TXBt#&pBy^*y@C2~4d1DGXWWz|K= zn`iGHaK76QcfRuIrB}O_$9=Q!itFvn1y@huS9{F{zvmG}*zGGR( zJ`*;i5Bwp1K=k`htbQ{P{AG~+>rKNq>jBEC2uY<>)p1JXO%(`F7e%x6ZoxJPV;0=o&_Js8bdi(alFIHR~ z^YmTU-1u}#)n}V~zET}}`mQh6?(O~Mf$@X%(TDQ)AAB`7x$@vOZ~Zo7%+kYiuI-uj zxqD>q%dd|6ZR_wyM{mu%rQenxchAfI>i(>QPwzcZJmm7$k6+sQPG!pF#)mp}9{zOM z?0)a<3cBX|_v?<{c5u(l?S47^Tfwa5kB;8(PRq5O)5bMFI&)*rV@JD9J+StU(4)Dl zTlH@fc68^vX>YuIOQSERCl5XtbLrrfMFZ;|S}^XymgvLh$1UC5y~pm8xwB^OsDAML z`vr$T*tF}%*Vg`U!&E?N}UfHtiKhbYwjNA9vGqo0`1P*xgwasUyY(72y>(^)B=DIs%{(t)R zJvO)2Ddz`2y*}uO{#yH&7c9Thcy9O7u{EQnJy3Y5)v$NwKJvoz`-;DO>Z|Q{-L!A= z3)}7*)bg&I2A=A2r2m9fi>{wK=*=q&KEJqqL5ohS_gxI0_x^^{GY@Te?#QWoKij&$ z)#jUK4qkY0;_Fw=Zz-F7F!EGV)WC;-KicElCO@UV@=lX;-~D{<;(vbe+s z&L5nUvY~me3q?KapGv#q<-6DJz9oF~A7zeT?+0%MeOPZy&Dxqag&hQ9gRjELe37hk&So208l-|TxZ zdj08!o&2v3Yfk0n?OPVw^Yz1JqlPw#`XT84 zcgBqRY5=Ulq@>;4yBy03lt$iW{h{QY>3v@`SnSpMMG<#DU4U%v8Y z;jEyfl|MBJdVO`wvP%zpLbfOLu5*ujcb~eqKO4IDO2p*-Ne|u@_uKa&oyWiSVB)CW zpM6me9dP&e|ow{=UH4jH^~R4P zzRxXqEqKO*kB5(#5!`d#P_f8lv{?cz5Rq?Y6r!HEOw)4h^9{Kp8dq&>4Auwmv zn$h>i9(m=d*ggl(X2i{!KYeBWjFIo%mNnwL*_#V<4vxG!t^U>h-hL_mkxrol+70X1 z=E&>&mpAg{Hdz=M`|9!S6Nc}K9ns>~Ufl-`oqBp%?5c-*Y@YhYS;zi1kI%cV&m+U% z=oHyFu4#JEd+jTqPi$CFGV#WU^9kjh+I{(Y;a4?NztAH$Y;4@7%Wc1wpNJXtWUq_s zR~OA}vomDgn7dBRxVF=?Uw--GO`Z1_ZFw~=?$e&Py>w)Y>%NuQK`%L$%{X@59dDGc ziyRhFa3SE<=|9Xb?)hk!UuK5C_R-7*pKdM<+qwEkmt&WoZGGU^vA@2!c+IgDk3?So z>EjPn-B57vUBMNvTzk{%?>C>i@1?+x=Z3$r`%HL;&t|3`U%%=1Z|Z$LeCx*k%PQxz z+J5x?*S@MhZcIUspZY(sWJTnm)g@=v-nnjL$hEKCkgdOR;92MPKNpq^DGLAT&$2qZ zdabFuFS}Dv{TAmRAN%=rTJI-cTm9ps2NQQ4=zi(u~=|}t38+g^18|rOabLOh+Z~E=v$M^nJ>+bP2Tkc(Z z*WsVj3V&;LWZxI3D^C3|>hOrTUxwZ{Q;T@>;porqn|gm@QscOvgIl-FytmPt3lr}+ zHQ~N}hgTh|-(uAF0rf}!IsfgZ5qX`PZohlx&`W>hK6O_An3bE_vQy-O~!Vuo}D;v&w~qx-?;qK@$+Wg|H;_9H+H?R z?a4DY#=TdsQN+M*A)nuO`puWeCpepaaChu)cmLi!yZ?vxT(!St^Why2QJ=@b8{ zb#KRs&)z$(YejbDrY*f5JAQiAif3=`H*NorkA`Q=trM2l^^+0W8-p9AIOlzT;nvl4 z9=)(;Y1<*MN1om=egA;DSK58B_KiNV-|c?4-KKR9#GSmjXK(42)&0Ud&UvekD}Kb9 z*=?c^r_@AUb9TsXyBHNd7`D*sg;#lG`?jT-!CepM(2B`R>RwlEAX8ZkSTPLSb6nS zd{LSe6ff`OLQ|*0`zkGEit&Tts*r*T5TQ{4{8R&x@D>LqxoUXFjwc#k8r7u|UfnW7 zi_XYO8RyQcDzIOy{BNcspd4PO(50*)We8E9G%z4Rgj7xZ`R>d>=OJ`{*M{>28lQ(k{$JJ4da@YS zpVI?@@MZtLvyx*3F{1r=InU);?gYa8+0XnW#wgF}u|W8$-*rxMa6MQ*-l=AJjL#s< zpa1w_NGZ)M&;G-^h$z#(1v!KZ*fJs*r}I2G`_eyx^lwjlAgDiHrrY(umM~j2+7Q5f z9rn6b0TbJz@(-cJI9sMIsom_SJU{DvgDTVq?*_o^I$@C!7x7oqxIEfl2magb-wl{u zCxEml3aCO`$F}qC0$yMBAEElEpfEVFe(Zbp`dQu>+@A3;&$&yxlVqt(pHUA%t$s6l1|O0G_g3v z4B(5OoMg*#8ZUmbW;n%2YQ-?+^jcj=9;X<2eDOE*28A5#>E4G^^gv(uRo);VPVH(x zIIg<952tpGHwcKYcEmUg(0=~YUI6D<9sE3nGI;)J4r%zDz41~g{tkUN!kI6e%EiGM zbBI69#*fb`pqy!hbHv|AIR8Br>+?9_D~X>Y6`uw0<^PWX7k(y1=953ZCHxTK zxbDRR|1bvmxy$59SZf4>3gQn@6AUIin(zo3*F1#B5q<_28E}l3Cv7s|Iz$j3INsq= z47e}-7x=+flKevrWO*J|?-KHZwTIx02e-ok;twZ0S7vJ;5q^g3;-2#p;X`P>xRUt) zB>WhK5ckZwU=sSLoEjvG_*)Rp>ju^b|KJ7NeFwN255~t6ego;rcopG8Z1^U^&)D!i zgxA>c_W?&e50PEZQ~h5PzK_zWQY{VNet~*IA#t!iEg?`*4#)oz;_plN4)PE8*b#uE z9G1^=%9x+ZvmAU^1j@gG!iRtzc;w2HhA&V+{dbW5YYBgw@Ixe@`HumP^)k+W2!Qn?;^j7d z+7Q0OhT~)M$iL5qFD5*~hHnEL^-QA%ZvrmIV-MjmG+yyc`5NIhB!}bnJ(54gCjT<= zms5cBCHZwA&V;>`W_vpke#VB6Cj22AUPgGDt=<)Yqg_L&ot8+mv~7g*1k;)D2MFi) z;p7sIkFKK}UWc54Y8e#he<>w$|em@Ux9-&N)AL5cu5}f21G0ryo4d51#4= zAL|Ft^MjZ9!I%5NSNXwr`oSObgYWZ$zwZbC+z)=i5B`TA+y!y$t6l2(!6W_PUH#y_ z{NVWPtgm`U_`%2e!Dsrx>GkQ+@(VfeT5s`gTm0TEem_{gHJiWSXMAV^*o-gu8E*sj z{@CCD=0~rs--IRk{AEWeQ`sPP!%j4P-5PYNF7^Nb9|nOBNRs+?^q*>FevHhY z&F#C`LLWaRl<#i;0}h+zlmv6MzxCWMV?-~|wqb7?~+V@+Ai4hC>dv8Cn&}Y9) zrK}&KF}UdSXhJ2az5F7TS`faHVkX5$Q>ZxV;p3J5wznIr%w<*hRc7#>c;&H@#fz4mWZkZwL+ zq^}6HeToJr!T83fSxhL!T6)Kv;xzd+AlV9LdvZ~f@5AZ-;*o>IM?Ul%(w{u- z!%g&c2wxTY=l1oH5z`S~9ozEhEpjZ1P%XBFysu!C(ZC-)B{{-dY82c1o>#2c8N8dy zhbzSgMbwgZu}bsex53yn^-Dtv%in&LQhfQQK)kbEHjVkIKA04%ax1EQO=$d~82l_p zd2R*XYZV`!CTSE5l#<^<)gUygiV7(qKT|Ef3WA^A#VNYNQwSeHgfH}p$!Y35PemDi z1`;~}PN~ZDF293a3?C4yE~oaB)fYg~%4xzF+ea^C<)Xu>W~oBq)@^ZK`CKVU+)Nfq z!sj<+ec~&5T%G#KyJUA}B7E{(aOc6-D2(q*mgA>MXNV66=7~>QvMpdS#JqWvTj*u( z{o`c>TncFUba8-t{dh2r`)+td%9Dnd-N;`~=^i$G4y9kEGs>9`|1bY3kAn)1w<;L_ zjBu2XI3IYQ0}nfXLBc}MN}yRz7G0;=>z%0JF$#YP;V2(*K9=~wS15ASdf!lR)!ug% zJQIYoo?j{Q5$EHAAN+Skj#_V9G!zcIy`2?&3gmOW0|`fa5$9u!AAGDLN3D02f~)qf zSMU@N&h_4|$VZ%yC;Z^gDst3%k1M!Z?4x8xxMj)OtM% zuGU+u;P@BIT<=0fzWSHU>;2%H6*+3X#}!ou7Xcg z)*N2*Tl7hdg;3|I;+NVZ;lFNmF zYY0dAg^HZT3f@P-Hz;xt=VO;2e77P;?HA2yBc1iRnFO^X9Q9HCR;}#FukmcV){2d5K zeN_2_6@ImSGZg+3D8u^aDg4;)o`C;&%ux7M`I{6R*RU+-Wd+B1lks;I`RaUn+z)tCeE!T90(9&;6b)j#VLe%1en z6#i00{y7C#g zINUA}2PQGjdCYApVZo31FiN+#;Te?Xax90h`*`idIL-lhU?0JQ@iLjzR??YqUK`zP z!xvKe9vglwrJu6lYbbrdhHs|y5gUFhr7tQt`k$Y_5Q;;Z^<+JoB0zY#B*kxpf}@;r zO84=D4^eRRKg-WnaFoN(cT7=mYzLgJUlSIp*T zLonkhg`c0zL42QrtK-iB1y|)9QSdkvK*uo!SFeM5c#49zS8!Dhk1JU3IE8YE$idM;o`f8lDg_dw;8-v3kMLN;dZy5IKKEtD&(OLy z-X>=?U00{s@RhVK;rWf_JWTc$+4wu+f&>m++u*_cmr+?bIEESLcgNI-T$BG(@&nIf z%-_N#88_Pa$07q9x5|@I?`?$du;CTd$oJduF_eD7h99OzIAFv1GdXYB@YUo8o@ZJA zJ4m0eZTt_AK0n#;?fU$f!-2G4hF_#7IqdHuk4-9-JD zU(e6@Rw{qeCg^PCMYqWHn*UGZQ!9mxNIR6paZDP6~g^L|hh8(u^GI>LrOMSkFS zX|epiG%)kK+!-H-i#s^_+vMCu?Ui7|XJA1%l5Mz)#wFgjXZhT(+&2EV$S>1u_^s66 z`JG`bhu^_6&&K}*`IGTo0Uy}7qAwK?&0ppKRKmE)mCxPPagbiOnKSTWdMF5sRiQ<#rX~uXvB;e?6lf!=}GQ@_Llf6kc zyb<-63>&_g{5Hvkzd>M|Q2V;U_5$x7hF<6mNIf z@I;cs@7ia-JwyI{(#D@ja`>HW%)g5K@TQGFoaBFK!{<}{d||^sqH%-YmB#XKBR+oj z8spc?=GFNA5#zT~yakaz7(YdR=KD&F*CszVv+;XqJa22mpQ1SFYQuvlPVhN%JXros zfHaw5VLmU18*~Ry>SU$fqYpRWZ8jWw$YC@a4pRz=k`?-j8f}Ce?e~hQCSU*v~e6sC2uA&&lJ#cJa6nM*e1e z0?i}MYJT=_Le>d^->+hMLpX<-F@$=tn&$Qux zQo6>551=@|%Z8sOe?Dx(pCG@zV8aJee7^+Ddd`M-rt#%<8-4@HIc&pud^=&oQz-tg*znuQKXqsvWk1AFd^WS; zd&%CuHoOt_Ykmtq%c&$k$WFs zIDhB!6&t>r1ifd&hf#ZdYr`KQ{pXNgtba3VujMwJpR2ghhV%GvyA5CTzv?;{IGf7- zjSn)6yIdl-nS`N92oq7m5tCFCVydAjWXepD<2E^&T#j2Y2`Lm&Nny}M;g}-FB{dEw4H{`JlWT`KgK&5m1&8Bc-Zrtb!yZyYy$H?+$M;e}W~gWrrN1wOwEp9o$Y{lfli ziOcw=!Ix9=I+k|TOP z7;cK==AVQ{%XQp*7Nei=o~iUNiGHZzbsSA@;YW>h-29gzpMP`Q z^hv?X7M@qLdKu3(7%ZqmYlXAECxo-T&Io6FmBoIN?S2aT->bpd zF3nKxwZeIC|LdHO#h-w2qm}TH;B6iE?bXR~^O*~M58=na9~FKh#z~&vWuEf`FIy&v zp3hmE;&`ZiQQw)u`8f@*YhwT0fO7Mk-s<(T{Roy_%IzP6<*;zJOOfz$*xs*zvt9BL zXEfT4oX;$%0M0niAS_>aLS(Q(W3;NWG;gTgtU z3=qydKPx;2>l5&s`OHC_F9_$eAZ9rqi<8GoON2j$dEiRNEe}WFzs_;bn9bi0+KU?%8pdaVB%N)l| ze+2qBgjd3N^?~E&6N7m$uS;Z{X~@HVr?y#BqB&8Tw_8n?48nkA(9+9NQeXw>#mp%W;eIE%=-g z-V5V)Nh>T^w0$cHXZto5ULV_kOK`R?@9V(pHp!bKo=(okLMx4Vb8q22!P6YKdNKaT z95c zxqY1w&iqGVUcmN>wZem?EI9Mb{#HdepXE}^`IyD+h`*`uso*y|ZuMgP?HxCt<3|oZjMW3O+;l7_|F*;f3hWON3`* zf45pVKS$Xrob9+U)jw&%kRtZuu#N ze%R1)%V$~a$6E>S34WX7)?TsLzoa^DKAeyCaoqIj&<_-z3!d$``5Z^N;~cm6FIb|2 zWu|bp@9V3QDlkmDx(8T#La^ZKQj>VYU&*zOO6k{aC8)^YRadCMA(n>D|;&_MWJ_}uEa z`Ao)k)CJsDt*O$3mo4d{-wmHk(TCMhQNu)E598Zd(GNzsQ$;_J^JLNUy77ggxBC{^ zvRw2$U-6OX>!I9DPH$b!a$(C((f@({)OSvA`Qdq?A4UI>HC(Wqb9(bfm{C_mzY_EC zve$(EEsFWCggC2$o2|w84{R54PLH7^WY9$P?9Yi#Z}DfqKS}g6u$|s5`qLrzVE!d~ zJ}0`L(<8*te~b`)9P&9+cvtu@6y6*2@a4jJ9&@emy%^882uHI-eIxuKl>5E#jo9y; z54;yEq6 z7slZ$!V{67a=74|?RWq_*9yM@{W)HEZ?t=B;p0(mC*h4S0CgAsIqH=z{1)_+Cx!F+ z_|d|7JU>Nv1LS#*aGuwAOZY74R}1HPw0z+lXLbnx7Teu^;ZGqyCxr9+x@UzaBA#OS zz5?6pQ?yqF;VrQJ))M|1+N-JKHk1s*cG}W$YpS-Gx3v*I0R5@GaLyMyfZOnEFMglm zPT`x;5ASn6R@DXAU!*#2@$|-irH}9ym}fj8{IlA@KLyJW;a5=ZaN(2chV|owmw?Z7 z;Y*N*dBQuO{T2zYhw*fY@J{gmK=^q0tP{Q%J{yIXj}6DaMR*DL>=OPI)_)K_5PA4X zcs}?!;UCosmm7KjNbr{Zb3WoJi@%evflqbeb5XB2;TLhDAwl>K^v`7BuYmUuJ_SB~ zg>OcFo)W&aUbtQ(gs($;jTOET{cxJ_D(ol1FC&jjg+B_PHNpoWoEOeKXCVIR!hc77w+VkA+ub+9*TCnf@MNr?5?&MWTo!&6+Py6D z!Mqh>`>H9N^P8r^li}Z1ctezzEIbMNUcx^{9{LL}g?OG8{uJ6PNBBYLrwQkNdYeNPK7Li|^Rzku+tfvTn4fV|wUJC7)E&O}vCkuZB^_?Z0J}ZT9LH)lH&hrjM!h50}OCT=h zhyL}1)4#p&G{oOqILDa*!mD6?sPKmoPrmRMFkXEj{0G!`zwkQPj(!wA9RBBpFUES+ zxTw&=JVayrx?OlQ?k3=3agwKM{P~kkjnkxJl=7+Pviv>~Hi}TpmgujmCm$$$z zew*UQ!DofzHjiC{{=823bo7s{!mmU8-+&hjJnXdqA3E<0}Vyo>EI z=DJ`dSj^jAdGM($d=q$0aQc4?|K^UH|KqX2k6>vpJ_Yc(L--N!yPc2avn0010gjvh zN#t`#1fNmD&%ysW=VSi&!T)8)L-|2}UL?Fa%3Ue^EVh^R;LImakbN#Z0mr#JoR7sb zAMqR!UI>1|af|bP#Cb~md3}D7@J=ZA59ed$*28vGy?(F~EZiRBP~W=XtXB$r8VcVI z-qiV+{~-9^>$t_=1H8ZErvC{1amP*1`P(SR?a((J?fbmr=CdC@^Bp&zH_%>hg0o%) zh<}-IyPvx)A2=WLzYPEFj+_527_asT{|V(D7rqDE;~8+q!{@sEF1#PkFBQMuqWZt{ z>UUz?s3x4_;kAxioZMf;3%?2R-|V>6cRTz$3g`LUE{>c39E|_>3vZ78obI^!^L*}P z;SVA|(;PSdxya|+j+;*|^s5~={e$Sw1;XibNcd&s;ki-*$9;eJ#BuX!h&*p_-1N-bHpfjr7WxB@o1XbR?zrg>L;thmre~hdJ8t?$=qJ$) zgOy<6{;n%{MaOOY;eNRZINPNO^4~%@+oiW~>K_(PeI_{L$wEA1g!4SqM8~bZJT7`k z{P~=yxx!B&{zcBm^0N=+eki;Fw#T)OTe$@o2R1uyJ`X{^!*SE^z&vvwIP=NpJ{=X# z@2eI%AM@vVlS{%IBc5W70#UG7HGQ1rg>&4lC4464Z;ikiC!cF{lkl22ADifWEY5C- zr>k&|Cn=6woL^zTlPdnP@J|;$0X)O`Sh;Ia?z4`YKlfj63;!#&qt)Wi?;)%eegWlf zbUs#YDa>2;2=4)Yz;TPGHu~Ff$IWLl^glapdX87;9XI_>=%eF$Ii#%9Emu;5WWfgpzz!2@QdT--z+xx z5iIAx8D|dK<+AXx;AI$3Sd0e%G^SZ41&d1_;3_h)euL5u9xYa8f z{p|taJZ>Ez{2;cAA;LM|8zX!H<`1t3=Xtc1!s{WPe+nOsezH^eOXw%R3a^ZL;{|Z$ zlh1Q2)+DHWu#kU;&%0y5xt(5&4auTv3-1ya<_#RT{W6a?TMOrL+3k*7d*#BXCphC7 zg?Q40e*!+l`B=F;{u=AJ`LBlmM8`wNFQtP&2Fr`W7l1Ez+4q!hxN%W`TpDVm8u3MPne5_uT za9sDU@HFr|$1R^c&$iZa^O*ttmyVnM9>lpHocZVT`o0%F(Ece{esVtMzXkr6g;&LK zQSpS(zx}V>d7NI}aq}4reIwytfG0R^p$xZCxnm2xLxAL@c*%2@jPb*;q<8`d@J^k4Z+#I{Juw1 z;r#r)wezudsfOd9JB2?2evjkUF5EAqI&MBZ4(#K&=^6h($4x&H^YTo`P0u_Gcii-! zLjR28rk{fS&IHFzUk3BPDUO@I2Kv=Z$4%c6`bEMogRd0c3iF8%9XJ2Mh$r81^M4Wg z&mA}YRhS1BfU_O*?Vo~WukZ`tzY3@Rf^dG%s8rLipZZr6PJKgg>z`I6=R++V5AA2M zpXwr<=dT`g+{(3m*r*RXFuu3#YyaoZEXI`bou`!sU=x!~7~i_`?{-+6Zp}pU%ST;5e~| z@RhOQ^3sKm#(0t?ybJngws0PIOcb7tdB`l`r7{0pBzzI-l_$I(<`3(IcgOjqZNhmS z%(uc9V!S;j{1?>gSK;>~|5t?nh;gHAvp=_2P2{bH@S_}`g>Q#XOW|FSw~oRmBK{QN zXVAWVg?C5$W(sePd}a%ug?J_jZ-+e07M=~C#lnlhXO-|9!SjXlbM7yN^Lo&O!ndH@ zpM__{Lk%G75%NM@Ymsgop4?U(@c0g@^hQ;J=h-a622bon<{)Y`ttzc zybkzj;r!mq7~wE$Mcow$Dw}f{`d#x5;3vq6CynK+__R-<|e&Kkf0KJ2G zIr!a0w zg#V0kpAdc?e3bB|h(A|&Ci1*c_&CJ#iSYjL`AT?O%*PH2zYh9B;a$Pc3r_?uar2+s zHx>P}lJIQAUq|>@=x-2S1@&qp{7LZ6!iOQBJ%rx@|8(K!;FBf1F7(;LqroQ%--LFb zDg0x$m+*^-bGh)+@L4B(AAGh6FF-r)6@DA)bzJxfwAWeTji4{yQrZ!`lJJTsx32In z;h!M zM)+a)Y!-eI@$VMCAMJh=yjT#%!{JauKYtQE&m$E%eIKWfY877Lcw2}(lm|EezD{3V z^s5nPeWxGb^a-NR!gkTd>F;s+j-sE6cO&-`s0ZI2B&Z1^esg{3;GUD|B%yn z75x+FpS_*_R;N!F{o5F4vYh^Yrynl*H_*Q0oW7US&v1I1znzK>|8b7vHedPz$Jg_P zKiVX$Unu+)oZom8-12NMJ}+aL@B>xCJ|8$Ao4=LA`Gj?jTRgcaccXBguiqwoI^y|S zcp}bYekc40{ErJC0{uzhWx&r0-vfS8_zlQsNo+jqpPA5?5k3U**Ajj`eCi9&hEKfk z-=M!)cvt9e7k&xnEAJNG96o8nuZDi8@F$Va@xtGN&wSyB5YH;%Z@_;&xb~~hg|lDn za6XlT{?i5V9CO_I)zygSSK-SM&lTbS0xyd}neDg{yoT^>v||I|qY+OF;eDY`5`H)0 zyhr$p;13Bu0-p@wcYzNRUIX!r72Xp1>B4J+&lAqiOWqN_1O6WhpN+h26kZ$rYvCv1 z^PTVw=qD$IKZ5*R6y6g07!2-Zg1%t=fuGl2Bm5coG!UK!pPPl(0`DNa2zk3#_&n6B zkMN1`86^BX@-s?!2lz}B{xp1M3Fqgpi-h-r|4QKr@ZTVO74ow~cp239fbe9*Qz(2j z{Lh2i_TDylarr~^d*M?KBGY%KIQZS&K(KJ!2(Ja7b6pjFN6zcLhnD^`=l%<)bwZzW zRisJqI~MQh!#}mdn=-*~uTKJ}J_YM(_^tYM(dS})bOe2l=oeu9J^WVxJkj$$00$%J zkBC0sDiSPwK8gC5#@|`rO2xza1aQ@}eCl(c?-@a#3Qm0i^rIu_b3~t1A{@_q5%hVY z=l!5|N6_;*IQD0I@%}~r`8B>j@Iy`Nd7qpF)Z_o<2b}t(lHvGyzckgSi=OuzSuFmO zu)aj}+%7gn&~FhvuZKJqLI0!Z^Gb!|=Y7i%W>CfxR+C|WF`=*}PP4T|1>YpM0y#9yJyI1`r(ewJ8_aelT pr+PbR3zppx^m|3m>rXC4&`05Tl=bEH44uFke>~QcMbG{9e*w9exBvhE literal 0 HcmV?d00001 diff --git a/templates/virtio91/virtio_balloon.ko b/templates/virtio91/virtio_balloon.ko new file mode 100755 index 0000000000000000000000000000000000000000..05700050c814cb5b29fa1b9d8b584e33ca6cd7b8 GIT binary patch literal 15656 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 literal 0 HcmV?d00001 diff --git a/templates/virtio91/virtio_balloon.ko.symbols b/templates/virtio91/virtio_balloon.ko.symbols new file mode 100755 index 0000000000000000000000000000000000000000..03de1e0fef7904b199d74c2edcf2fe91c2cf95fd GIT binary patch literal 49520 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

{cxUSDIvlXkp5Y2=_CVEe~XF)|7kYwdv7ND= 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 literal 0 HcmV?d00001 diff --git a/templates/virtio91/virtio_blk.ko b/templates/virtio91/virtio_blk.ko new file mode 100755 index 0000000000000000000000000000000000000000..fd382c335abcd4312e3d2f8c7fdf21d348775731 GIT binary patch literal 24360 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 literal 0 HcmV?d00001 diff --git a/templates/virtio91/virtio_pci.ko b/templates/virtio91/virtio_pci.ko new file mode 100755 index 0000000000000000000000000000000000000000..451fdae269a7d08cdf353d5febbd30ad809c299a GIT binary patch literal 25168 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 S%HZP|`Zo-Y^eZuufbxHlbz4FJ literal 0 HcmV?d00001 diff --git a/templates/virtio91/virtio_pci.ko.symbols b/templates/virtio91/virtio_pci.ko.symbols new file mode 100755 index 0000000000000000000000000000000000000000..1ffd9c8860ee09029500889a3e039dec6b8f56eb GIT binary patch literal 97456 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 literal 0 HcmV?d00001 diff --git a/templates/virtio91/virtio_scsi.ko.symbols b/templates/virtio91/virtio_scsi.ko.symbols new file mode 100755 index 0000000000000000000000000000000000000000..c35c3df0871ec67e6639992c8333c331d74757b8 GIT binary patch literal 166200 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 literal 0 HcmV?d00001 diff --git a/usr/local/etc/rc.d/vm b/usr/local/etc/rc.d/vm deleted file mode 100755 index d38da17..0000000 --- a/usr/local/etc/rc.d/vm +++ /dev/null @@ -1,1345 +0,0 @@ -#!/bin/sh -# -################################################################ LICENSE -# -# Copyright (c) 2012-2014 Michael Dexter -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -############################################################ INFORMATION -# -# Title: virtual machine rc script -# Version: v.0.7 -# -# rc(8) command script for managing virtual machines. -# -############################################################# RCORDER(8) - -# See rcorder(8) for additional information - -# PROVIDE: bhyve -# REQUIRE: LOGIN hostname -# KEYWORD: shutdown - -################################################################## RC(8) - -# See rc(8) for additional information. - -. /etc/rc.subr - -name="vm" -rcvar="vm_enable" -#load_rc_config "$name" # Test me -start_cmd=${name}_start -stop_cmd=${name}_stop -restart_cmd=${name}_restart -extra_commands=" - attach - boot - debug - delete - grub - iso - jail - load - mount - qemu - status - umount -" # END-QUOTE -attach_cmd=${name}_attach -boot_cmd=${name}_boot -debug_cmd=${name}_debug -delete_cmd=${name}_delete -grub_cmd=${name}_grub -iso_cmd=${name}_iso -jail_cmd=${name}_jail -load_cmd=${name}_load -mount_cmd=${name}_mount -qemu_cmd=${name}_qemu -status_cmd=${name}_status -umount_cmd=${name}_umount - -###################################################### UTILITY FUNCTIONS - -# Note Devin style: - -#if ! kldstat | grep -qw nmdm.ko; then -# info "%s is not loaded. Loading..." \ -# "nmdm.ko kernel module" -# kldload nmdm.ko || die -# else -# info "nmdm.ko is loaded." -#fi - -f_timestamp() # A simple timestamp for logging. Modify as desired. -{ -echo $( date "+%Y-%m-%d %H:%M:%S:" ) -} - -f_getmdname() # vm_name # Retrieve md(4) IDs associated with $1 ($vm_name) -{ -# mdconfig -lv | awk -v vm_name="$1" \ -# '$0 ~ "^[^/]*/" vm_name "\.img$" { print $1 }' - local local_img_name=$1 # Takes vm_name, lacks `.img' suffix - mdconfig -lv | awk -v local_vmname="$local_img_name" ' - { - md=$1 - sub("^[^/]*", "") - if ($0 ~ "/" local_vmname "\.img$") - print md - }' -} - -f_mddestroy() # $1 ($vm_name) Destroy multiple md(4) IDs of $vm_name -{ - echo - echo Destroying all memory devices associated with $1 - for dev in $( f_getmdname $1 ); do - echo Destroying mdconfig device $dev - mdconfig -du "$dev" - done -} - -########################################################## SUB FUNCTIONS - -f_load() # $host_vmdir $vm_names ($1) -{ -echo -echo Verifying if $1 is already loaded - [ -e /dev/vmm/$1 ] && \ - { echo $1 is already loaded. Skipping ; return ; } - -# Avoid extra path slashes else grep will fail -echo -echo Verifying if $1 is already mounted on $host_vmdir$1/mnt - mount | grep -qw $1/mnt && \ - { echo $1 is mounted. Skipping ; return ; } - -echo -echo Verifying if the host CPU has EPT support - grep -qw POPCNT /var/run/dmesg.boot || \ - { echo CPU does not feature EPT support. Exiting ; exit 1 ; } - -echo -echo Verifying if vmm.ko is loaded and loading if necessary - kldstat | grep -qw vmm.ko || \ - { echo vmm.ko not loaded. Loading ; \ - kldload vmm ; } || \ - { echo vmm.ko failed to load. Exiting ; exit 1 ; } - -echo -echo Verifying if bridgestp.ko is loaded and loading if necessary - kldstat | grep -qw bridgestp.ko || \ - { echo bridgestp.ko not loaded. Loading ; \ - kldload bridgestp ; } || \ - { echo bridgestp.ko failed to load. Skipping ; return ; } - -echo -echo Verifying if if_bridge.ko is loaded and loading if necessary - kldstat | grep -qw if_bridge.ko || \ - { echo if_bridge.ko not loaded. Loading ; \ - kldload if_bridge ; } || \ - { echo if_bridge.ko failed to load. Skipping ; return ; } - -echo -echo Verifying if the host network bridge is up -if [ ! "$( ifconfig | grep bridge$host_bridge )" ]; then - echo Running ifconfig bridge$host_bridge create - ifconfig bridge$host_bridge create - echo - echo Associating the host NIC with the host network bridge - ifconfig bridge$host_bridge addm $host_nic up -fi - -echo -echo Verifying if if_tap.ko is loaded and loading if necessary - kldstat | grep -qw if_tap.ko || \ - { echo if_tap.ko not loaded. Loading ; \ - kldload if_tap ; } || \ - { echo if_tap.ko failed to load. Skipping ; return ; } - -echo -echo Checking the net.link.tap.user_open sysctl -if [ $(sysctl -n net.link.tap.up_on_open) = "0" ]; then - echo Setting net.link.tap.user_open sysctl to 1 - sysctl net.link.tap.up_on_open=1 -fi - -# NB! "." exits on error! redirecting errors and checking results -# .: cannot open /usr/local/vmrc/vm//vm7/vm7.confx: No such file or directory -# First make sure the file is present, ideally syntax check it! - -echo -echo Reading the $host_vmdir/$1/${1}.conf config file - [ -f $host_vmdir/$1/${1}.conf ] && . $host_vmdir/$1/${1}.conf - [ $vm_os_type ] || \ - { echo $host_vmdir/$1/${1}.conf failed to source. Exiting ; exit 1 ; } - -# Initializing $vm_device variable (bhyve supports disk images and block devs) - -echo -echo Checking if we are in ISO boot mode - [ "$iso_boot" = "isobootyes" ] && - vm_dev_type="iso" - -echo -echo Setting the vm_device variable -case $vm_dev_type in # device and malloc are already set - device) echo prefixing $vm_device from the VM config file with /dev - vm_device=/dev/$vm_device - ;; - malloc) echo prefixing $vm_device from the VM config file with /dev - vm_device=/dev/$vm_device - ;; - iso) vm_device=$host_vmdir/$1/${1}.iso ;; - img) vm_device=$host_vmdir/$1/${1}.img ;; - zvol) vm_device=/dev/zvol/${host_zpool}/$1 ;; - *) echo vm_dev_type was not set. Exiting ; exit 1 -esac - -echo -echo Determining if fsck should be run - -if [ "$vm_os_type" = "freebsd" -a "$vm_dev_fs" = "ufs" ]; then - echo Running fsck on the FreeBSD boot partition $vm_device - - case $vm_dev_type in - img) - echo - echo Verifying if $vm_device exists - [ -f $vm_device ] || \ - { echo $vm_device is missing. Skipping ; return ; } - echo - echo Detaching any previous memory device attachments - f_mddestroy $1 - echo - echo Attempting to attach $vm_device - dev_to_fsck=$( mdconfig -af $vm_device ) - [ -e /dev/$dev_to_fsck ] || - { echo $vm_device did not attach. Skipping ; return ;} - echo - echo Running fsck - fsck_ufs -y /dev/$dev_to_fsck$vm_dev_root - echo - echo Detaching $vm_device - f_mddestroy $1 #$vm_name -# fix: Q: Should this be f_mddestroying $dev_to_fsck or all associated? - ;; - zvol|device|malloc) - echo - echo Verifying that $vm_device exists - [ -e $vm_device ] || \ - { echo $vm_device is missing. Skipping ; return ; } - echo - echo Running fsck - fsck_ufs -y $vm_device$vm_dev_root - esac -fi - -#if [ $vm_dev_fs="zfs" ]; then -# echo -# echo Verifying that VM zpool is not imported -# ... -#fi - -# Note: This assumes FreeBSD=bhyveload other=grub. FreeBSD/grub? - -echo -echo Determining whether to use bhyveload or grub-bhyve -if [ "$vm_os_type" = "freebsd" ]; then - - if [ "$vm_dev_type" = "img" ]; then - echo Detaching any previous memory device attachments - f_mddestroy $1 - fi - - echo - echo Using bhyveload - local bhyveload_cmd="/usr/sbin/bhyveload -m $vm_ram -d $vm_device $1" - echo - echo Running the bhyveload command: - echo - echo $bhyveload_cmd - echo - echo $bhyveload_cmd > $host_vmdir/$1/bhyveload_cmd.sh - local timestamp=$( f_timestamp ) - echo $timestamp $bhyveload_cmd >> $host_vmdir/$1/${1}.log - - eval $bhyveload_cmd - -else # Use grub-bhyve - - echo - echo Using grub-bhyve and checking if installed - [ -x /usr/local/sbin/grub-bhyve ] || \ - { echo "grub-bhyve is missing \(ports/sysutils/grub2-bhyve\)" ; return ; } - - echo - echo Creating $host_vmdir/$1/device.map - echo "(hd0) $host_vmdir/$1/${1}.img" > $host_vmdir/$1/device.map - - echo - echo Checking if we are in ISO boot mode - [ "$iso_boot" = "isobootyes" ] && echo Confirmed ; - echo "(cd0) $host_vmdir/$1/${1}.iso" >> $host_vmdir/$1/device.map - - echo - echo Using the device.map: - cat $host_vmdir/$1/device.map - - if [ "$iso_boot" = "isobootyes" ]; then - echo - echo Generating the $1 grub.cfg # From the config file - echo -e $iso_grub_cfg > $host_vmdir/$1/grub.cfg || \ - { echo grub.cfg generation failed ; return ; } - - grub_boot_cmd="/usr/local/sbin/grub-bhyve -d $host_vmdir/$1 -m $host_vmdir/$1/device.map -r host -M $vm_ram $1" -# Possibly -r cd0 - - else # Non-ISO boot - - echo - echo Generating the $1 grub.cfg # From the config file - echo -e $boot_grub_cfg > $host_vmdir/$1/grub.cfg || \ - { echo grub.cfg generation failed ; return ; } - grub_boot_cmd="/usr/local/sbin/grub-bhyve -d $host_vmdir/$1 -m $host_vmdir/$1/device.map -r host -M $vm_ram $1" - - fi - - echo - echo Using the grub.cfg: - cat $host_vmdir/$1/grub.cfg - - local timestamp=$( f_timestamp ) - echo $timestamp $grub_boot_cmd >> $host_vmdir/$1/${1}.log - - echo - echo Running the grub-bhyve command: - echo $grub_boot_cmd - echo - echo $grub_boot_cmd > $host_vmdir/$1/grub-bhyve.sh - - eval $grub_boot_cmd -#`$grub_boot_cmd &` -fi - -[ -e /dev/vmm/$1 ] || echo VM $1 failed to load -[ -e /dev/vmm/$1 ] && echo VM $1 appears to have loaded successfully -} # end f_load - - -f_boot () # $host_vmdir $found ($1) ($vm_name from the multi-argument loop) -{ - [ -e /dev/vmm/$1 ] || \ - { echo VM $1 is not loaded. Skipping ; return ; } - -# vm_id="${1#${1%[0-9]*}}" # vm2 -> 2 - vm_id=${1##*[!0-9]} - - echo - echo Reading the $host_vmdir/$1/${1}.conf config file - [ -f $host_vmdir/$1/${1}.conf ] && . $host_vmdir/$1/${1}.conf - [ $vm_os_type ] || \ - { echo $host_vmdir/$1/${1}.conf failed to source. Skipping ; return ; } - -# Setting up VM PCI devices: - -# 0 hostbridge -# 2 boot block device -# 3:0-7 virtual network devices -# 4 optional ISO block device -# 5 console -# 6:0-7 additional storage devices - -# Note: PCI devices can be single digit 0, or 0:0 with a limit of 8 total -# Simply add another device if 8 is not enough: 7:[0-7] etc. - - case $vm_dev_type in - device|malloc) - echo - echo Checking for $vm_device and prefixing with /dev - if [ -e /dev/$vm_device ]; then - vm_device=/dev/$vm_device - else - echo Device $vm_device missing. Skipping ; return - fi - ;; - img) - echo - echo Checking for $host_vmdir/$1/${1}.img and initializing vm_device - if [ -f $host_vmdir/$1/${1}.img ]; then - vm_device=$host_vmdir/$1/${1}.img - else - echo Device could not be found. Skipping ; return - fi - ;; - zvol) - echo - echo Checking for /dev/zvol/${host_zpool}/$1 and initializing vm_device - if [ -e /dev/zvol/${host_zpool}/$1 ]; then - vm_device=/dev/zvol/$host_zpool/$1 - else - echo zvol could not be found. Skipping ; return - fi - ;; - *) - echo Device could not be found. Skipping ; return - esac - - local console_flags="" - case $vm_console in - nmdm) console_flags="-s 5,lpc -l com1,/dev/nmdm${vm_id}A" - ;; - *) console_flags="-s 5,lpc -l com1,stdio" - esac - - local iso_flags="" -# NOTE: $iso_boot is set to "isobootyes" by vm_iso(). - [ "$iso_boot" = "isobootyes" ] && - iso_flags="-s 4,ahci-cd,$host_vmdir/$1/$1.iso" - - local device_flags="" - if [ -n "$vm_devices" ]; then - echo "Additional devices requested: $vm_devices" -# device_flags="" - dev_count=0 - for device in $vm_devices; do - if [ ! -e ${device} ]; then - echo "$device not found. Skipping..." - else -device_flags="$device_flags -s 6:${dev_count},${virtio_type},${device}" - dev_count=$((dev_count+1)) - fi - done - fi - -# MULTIPLE NIC ACROBATICS: -# Example: -# vm3 has a default NIC 0 of tap8030 NIC on PCI 3:0, tap8031 is NIC 1 on PCI 3:1 -# WHY 8 you might ask? ifconfig can't take "tap020" so we use "tap8020". -# 8 represents infinity... The middle digits represent the VM ID in the tap dev - -echo -echo Starting VM Networking -local tap_prefix=8 # Keep in sync with the local in f_stop -local tap_base_id=$vm_id -local tap_id="$(printf "%02i" "$tap_base_id")" # vm2 "2" -> 02 for tap8020 -# BUG: Failing for double digit VMs? -local tap_unit=0 #Additional vtnet PCI device and tap device suffix - -# Initialize the first VM NIC - -local nic_flags="" -echo -echo Verifying if tap$tap_prefix$tap_id$tap_unit already exists -if [ ! "$( ifconfig | grep tap$tap_prefix$tap_id$tap_unit )" ]; then - echo - echo Running ifconfig tap$tap_prefix$tap_id$tap_unit create - echo ifconfig tap$tap_prefix$tap_id$tap_unit create > \ - $host_vmdir/$1/ifconfig_cmd.sh - ifconfig tap$tap_prefix$tap_id$tap_unit create -fi -nic_flags="-s 3:${tap_unit},virtio-net,tap$tap_prefix$tap_id$tap_unit" - -echo -echo Running ifconfig bridge$host_bridge addm tap$tap_prefix$tap_id$tap_unit up -# Fix: Wrap -echo ifconfig bridge$host_bridge addm tap$tap_prefix$tap_id$tap_unit up >> $host_vmdir/$1/ifconfig_cmd.sh -ifconfig bridge$host_bridge addm tap$tap_prefix$tap_id$tap_unit up - -# Check for additional requested VM NICs and create - if [ ${vm_addtl_nics:-0} -gt 0 ]; then # if gt "" or "0" additional nics - echo - echo "$vm_addtl_nics additional virtual NICs requested" - while [ $tap_unit -lt $vm_addtl_nics ]; do # start at unit 0 - tap_unit=$((tap_unit+1)) # increment it -# Fix: Wrap -nic_flags="$nic_flags -s 3:${tap_unit},virtio-net,tap$tap_prefix$tap_id$tap_unit" -# Informational info or echo commands are not working here because of the loop? -echo -echo Running ifconfig tap$tap_prefix$tap_id$tap_unit create - echo ifconfig tap$tap_prefix$tap_id$tap_unit create >> \ - $host_vmdir/$1/ifconfig_cmd.sh - ifconfig tap$tap_prefix$tap_id$tap_unit create -#echo -#echo Running ifconfig tap$tap_prefix$tap_id$tap_unit up -# ifconfig tap$tap_prefix$tap_id$tap_unit up -echo -echo Running ifconfig bridge$host_bridge addm tap$tap_prefix$tap_id$tap_unit up -echo ifconfig bridge$host_bridge addm tap$tap_prefix$tap_id$tap_unit up >> \ - $host_vmdir/$1/ifconfig_cmd.sh -ifconfig bridge$host_bridge addm tap$tap_prefix$tap_id$tap_unit up - done - fi - -# Experimental and dangerous considering that a we are root: -# Run a preflight script to set up devices, bridges etc. - echo - echo Checking for preflight script $host_vmdir/$1/preflight_cmd.sh - if [ -f $host_vmdir/$1/preflight_cmd.sh ]; then - echo Running $host_vmdir/$1/preflight_cmd.sh script - sh $host_vmdir/$1/preflight_cmd.sh - echo Done running $host_vmdir/$1/preflight_cmd.sh script - echo - fi - -# Hypothetical usage of the preflight script: -# 1. Create malloc devices for use as the boot or additional devices -# 2. Create an additional bridge and reassign the tapXXXX devices to it - -# fix: note: NO indenting for attractive bhyve command output -# fix: Any way to remove double spaces? - -# THE ACTUAL BHYVE COMMAND # - -local bhyve_cmd="/usr/sbin/bhyve \ --c "$vm_cpus" \ --m "$vm_ram" -A -H \ -"$bhyve_flags" \ --s "0,${vm_hostbridge}hostbridge" \ --s "2,$virtio_type,$vm_device" \ -"$nic_flags" \ -"$iso_flags" \ -"$console_flags" \ -"$device_flags" \ -"$1" -" - -# Was -s "3,virtio-net,tap$vm_id" \ before multiple NIC syntax -# fix: Hint: ps -ww is your friend when debugging tmux command execution - - echo - echo Running the bhyve command with $vm_console console: - echo $bhyve_cmd - echo $bhyve_cmd > $host_vmdir/$1/bhyve_cmd.sh - local timestamp=$( f_timestamp ) - echo $timestamp $bhyve_cmd >> $host_vmdir/$1/${1}.log - - case $vm_console in - stdio) - eval "$bhyve_cmd" - f_stop $1 - f_mddestroy $1 - ;; - nmdm) - echo Verifying if nmdm.ko is loaded and load if necessary - kldstat | grep -qw nmdm.ko || \ - { echo nmdm.ko not loaded. Loading ; \ - kldload nmdm.ko ;} || \ - { echo nmdm.ko failed to load. Skipping ; return ;} - - echo - echo Booting $1 on console /dev/nmdm%uA - -( trap "f_stop $1" EXIT; eval "$bhyve_cmd" ) & - -# Alternatives to try: -# eval $bhyve_cmd & -# echo $bhyve_cmd > $host_vmdir/$1/${1}.log -# eval $bhyve_cmd > /dev/null 2>&1 # Or direct to a logfile - ;; - tmux) - echo - echo Remember to stop $1 after shutdown - echo -# /usr/local/bin/tmux new -s $1 "eval $bhyve_cmd" - -export TERM=xterm - tmux_cmd="/usr/local/bin/tmux new -s "$1" 'eval $bhyve_cmd'" - echo $tmux_cmd > $host_vmdir/$1/${1}.log - echo $tmux_cmd > $host_vmdir/$1/tmux_cmd.sh - echo - echo Running the tmuxed bhyve command: - echo $tmux_cmd -eval $tmux_cmd - ;; - tmux-detached) -### It is tricky to destroy the VM after shutdown when attached to tmux ### - /usr/local/bin/tmux new -d -s "$1" "eval $bhyve_cmd ; bhyvectl --destroy --vm=$1" - -# tmux_cmd="/usr/local/bin/tmux new -d -s "$1" 'eval $bhyve_cmd ; bhyvectl --destroy --vm=$1\'" -# echo Running the tmuxed bhyve command: -# echo $tmux_cmd -# eval $tmux_cmd - - echo - echo Remember to stop $1 after shutdown - echo - echo Attach to $1 with: tmux attach-session -t $1 - echo - echo HINT: Ctrl-b d to detach from it - ;; - screen) - echo - echo Running #/usr/local/bin/screen -S $1 eval $bhyve_cmd - /usr/local/bin/screen -S $1 eval $bhyve_cmd - ;; - screen-detached) - echo - echo Running #/usr/local/bin/screen -d -S $1 eval $bhyve_cmd - /usr/local/bin/screen -d -S $1 eval $bhyve_cmd - ;; - *) - echo - echo VM console not defined. Exiting - exit 1 - - esac -} # end f_boot - -f_stop() # $host_vmdir $vm_name ($1) -{ -# Blindly clean up, given how much can be left: /dev/vmm's, tap's, md's -# echo -# echo Verifying if $1 is already loaded -# [ -e /dev/vmm/$1 ] || \ -# { echo $1 is not loaded. Skipping ; return ;} - -# vm_id="${1#${1%[0-9]*}}" - vm_id=${1##*[!0-9]} - - echo - echo Sending ACPI shutdown to $1 - /bin/pkill -9 -f $1 - echo - echo Destroying $1 with bhyvectl - /usr/sbin/bhyvectl --destroy --vm=$1 > /dev/null 2>&1 - - echo - echo Destroying tap network devices - # It appears they are removed from the bridge upon destruction - local tap_prefix=8 # Keep in sync with the local in f_boot - local tap_count=0 - local tap_base_id=$tap_id - tap_base_id="$( printf "%02i" $vm_id)" - - while [ $tap_count -lt 9 ]; do -# echo Checking for tap$tap_prefix${tap_base_id}$tap_count - ifconfig | grep -qw tap$tap_prefix${tap_base_id}$tap_count && \ - { echo Destroying tap$tap_prefix${tap_base_id}$tap_count ; \ - ifconfig tap$tap_prefix${tap_base_id}$tap_count destroy ; } - tap_count=$((tap_count+1)) - done - - [ -f $host_vmdir/$1/${1}.conf ] && . $host_vmdir/$1/${1}.conf - [ $vm_os_type ] || \ - { echo $host_vmdir/$1/${1}.conf failed to source. Skipping ; return ; } - - case $vm_console in - stdio) - return - ;; - nmdm) -# fix: this does not result in a prompt. Requires . Not an easy fix. - echo - echo Terminating any $1 cu processes. Press ENTER - ps axopid,ucomm,command | awk -v ucomm=cu -v find=nmdm${vm_id}B ' - $1 == ucomm { - pid = $1 - sub("^[" FS "]*[^" FS "]+", "") - sub("^[" FS "]*[^" FS "]+", "") - sub("^[" FS "]*[^" FS "]+", "") - if ( $0 ~ find ) print pid - }' | xargs kill - ;; - tmux|tmux-detached) # fix: was tmux* Wildcard works? - /usr/local/bin/tmux list-sessions | grep -qw "$1 " || \ - echo Session $1 is not running! - echo - echo Terminating the $1 tmux session - /usr/local/bin/tmux kill-session -t $1 - ;; - screen|screen-detached) - echo - echo Terminating the $1 screen session - /usr/local/bin/screen -X -S $1 quit - ;; - *) - return - esac -} # end f_stop - -f_attach() # $host_vmdir $vm_name ($1) -{ -# vm_id="${1#${1%[0-9]*}}" - vm_id=${1##*[!0-9]} - -echo -echo Verifying if $1 is loaded - [ -e /dev/vmm/$1 ] || \ - { echo $1 is not loaded. Exiting ; exit 1 ;} - -echo -echo Reading the $host_vmdir/$1/${1}.conf config file - [ -f $host_vmdir/$1/${1}.conf ] && . $host_vmdir/$1/${1}.conf - [ $vm_os_type ] || \ - { echo $host_vmdir/$1/${1}.conf failed to source. Skipping ; return ; } - - case $vm_console in - stdio) - echo - echo The VM console should be visible on stdio - ;; - nmdm) - [ -e "/dev/nmdm${vm_id}B" ] || \ - { echo nmdm device not found. Exiting ; exit 1 ; } - echo - echo Remember you can detach with \" \~ CTRL-d \" - /usr/bin/cu -l "/dev/nmdm${vm_id}B" -s 9600 - ;; - tmux|tmux-detached) -# fix: Check here if the session in fact exists? - echo - echo Remember you can detach with \" CTRL-b d \" - /usr/local/bin/tmux attach-session -t $1 - ;; - screen|screen-detached) - /usr/local/bin/screen -d -r $1 - ;; - *) - echo VM console not defined. Exiting - exit 1 - esac -} # end f_attach - -f_grub() # $vm_names ($1) -{ - echo - echo Using grub-bhyve and checking if installed - [ -x /usr/local/sbin/grub-bhyve ] || \ - { echo "grub-bhyve missing \(ports/sysutils/grub2-bhyve\)" ; return ; } - - echo - echo Verifying if vmm.ko is loaded and loading if necessary - kldstat | grep -qw vmm.ko || \ - { echo vmm.ko not loaded. Loading ; \ - kldload vmm ; } || \ - { echo vmm.ko failed to load. Exiting ; exit 1 ; } - - echo - echo Reading the $host_vmdir/$1/${1}.conf config file - [ -f $host_vmdir/$1/${1}.conf ] && . $host_vmdir/$1/${1}.conf - [ $vm_os_type ] || \ - { echo $host_vmdir/$1/${1}.conf failed to source. Skipping ; return ; } - - echo - echo Creating $host_vmdir/$1/device.map - echo "(hd0) $host_vmdir/$1/${1}.img" > $host_vmdir/$1/device.map || \ - { echo device.map generation failed ; return ; } - echo "(cd0) $host_vmdir/$1/${1}.iso" >> $host_vmdir/$1/device.map - - echo - echo Using the device.map: - cat $host_vmdir/$1/device.map - -# We are not specifically not using the grub.cfg - # Maybe it needs a blank config file - - echo - echo Creating an empty $host_vmdir/$1/grub.cfg - echo "" > $host_vmdir/$1/grub.cfg - -# eval $cmd is failing, trying as just the arguments: -#grub_boot_cmd="-d $host_vmdir/$1 -m $host_vmdir/$1/device.map -M $vm_ram $1" - -grub_boot_cmd="/usr/local/sbin/grub-bhyve -d $host_vmdir/$1 -m $host_vmdir/$1/device.map -M $vm_ram $1" -# The -n parameter disables auto-insertion of "console=ttyS0" to the start of the Linux kernel command-line. -#grub_boot_cmd="/usr/local/sbin/grub-bhyve -d $host_vmdir/$1 -m $host_vmdir/$1/device.map -r host -M $vm_ram $1" - - echo $timestamp $grub_boot_cmd >> $host_vmdir/$1/${1}.log - - echo - echo Running the grub-bhyve command: - echo $grub_boot_cmd - echo - echo $grub_boot_cmd > $host_vmdir/$1/grub-bhyve.sh - -#/bin/sh $host_vmdir/$1/grub-bhyve.sh - eval $grub_boot_cmd # No prompt, just grub info -# cat $grub_boot_cmd | xargs #No prompt, just grub info -# eval \$grub_boot_cmd # No prompt, just grub info -# eval "${grub_boot_cmd}" # No prompt, just grub info -# eval { $grub_boot_cmd ; } # End of file error, expecting "}" -# eval "$grub_boot_cmd" # No prompt, just grub info -# ( $grub_boot_cmd ) # No prompt, just grub info -#/usr/local/sbin/grub-bhyve $grub_boot_cmd # No prompt, just grub info - -#GNU GRUB version 2.00Minimal BASH-like line editing is supported. For the first - -[ -e /dev/vmm/$1 ] || echo VM $1 failed to load -[ -e /dev/vmm/$1 ] && echo VM $1 appears to have loaded successfully -} # end f_grub - -f_mount() # $vm_names ($1) (a single FreeBSD VM) -{ - -echo -echo Reading the $host_vmdir/$1/${1}.conf config file - [ -f $host_vmdir/$1/${1}.conf ] && . $host_vmdir/$1/${1}.conf - [ $vm_os_type ] || \ - { echo $host_vmdir/$1/${1}.conf failed to source. Skipping ; return ; } - - [ "$vm_os_type" = "freebsd" ] || \ - { echo Only supported by FreeBSD VMs. Exiting ; exit 1 ; } - -echo -echo Verifying if VM is already loaded - [ -e /dev/vmm/$1 ] && { echo $1 already loaded. Exiting ; exit 1 ; } - -echo -echo Verifying if VM is already mounted on its mount point - ( mount | grep -qw $1/mnt ) && \ - { echo $1 is mounted. Exiting ; exit 1 ; } - -# fix: umount first? force? (see previous logic) - -case $vm_dev_type in # device and malloc are already set - device) echo prefixing $vm_device from the VM config file with /dev - $vm_device=$vm_device/dev - ;; - malloc) echo prefixing $vm_device from the VM config file with /dev - $vm_device=$vm_device/dev - ;; - img) vm_device=$host_vmdir/$1/${1}.img ;; - zvol) vm_device=/dev/zvol/${host_zpool}/$1 ;; - *) echo vm_dev_type was not set. Exiting ; exit 1 -esac - -echo -echo Checking for $host_vmdir/$1/mnt and creating if necessary - if [ ! -d "$host_vmdir/$1/mnt" ]; then - echo Creating $host_vmdir/$1/mnt - mkdir -p $host_vmdir/$1/mnt || \ - { echo $1/mnt could not be created. Exiting ; exit 1 ; } - fi - -echo -echo Running fsck -# fsck and mount FreeBSD devices, borrowed from f_load (make function?) -if [ "$vm_dev_fs" = "ufs" ]; then - echo Running fsck on the FreeBSD boot partition - case $vm_dev_type in - img) - [ -e $vm_device ] || \ - { echo $vm_device is missing. Skipping ; return ; } - echo - echo Detaching any previous memory device attachments - f_mddestroy $1 - echo Attempting to attach $vm_device - dev_to_fsck=$( mdconfig -af $vm_device ) - [ -c /dev/$dev_to_fsck ] || - { echo $vm_device did not attach. Skipping ; return ;} - - echo Running fsck - fsck_ufs -y $dev_to_fsck$vm_dev_root - - echo Running mount - mount /dev/$dev_to_fsck$vm_dev_root $host_vmdir/$1/mnt - if [ ! $( mount | grep -qw $1/mnt ) ]; then -# BUG: this test seems inverted - fixed by space after mnt ? ) - echo $1 is mounted on $host_vmdir/$1/mnt - else - echo $1 failed to mount - fi - ;; - zvol|device|malloc) - echo - echo Verifying that $vm_device exists - [ -e $vm_device ] || \ - { echo $vm_device is missing. Skipping ; return ; } - echo Running fsck - fsck_ufs -y $vm_device$vm_dev_root - - echo Running mount - mount $vm_device$vm_dev_root $host_vmdir/$1/mnt - if [ ! $( mount | grep -qw $1/mnt) ]; then -# fix: Is this test working inverted? - echo $1 is mounted on $host_vmdir/$1/mnt - else - echo $1 failed to mount - fi - esac -fi - -echo -echo Verifying if VM mounted on its mount point - ( mount | grep -qw $1/mnt ) || \ - { echo $1 did not mount. Exiting ; exit 1 ; } - -} # end f_mount - -f_umount() # $vm_names ($1) -{ -echo -echo Verifying if $1 is already loaded - [ -e /dev/vmm/$1 ] && \ - { echo $1 is already loaded. Exiting ; exit 1 ; } - -echo -echo Verifying if $1 is already mounted on $host_vmdir$1/mnt - mount | grep -qw $1/mnt || \ - { f_mddestroy $1 ; echo $1 is not mounted. Exiting ; exit 1 ; } - -echo -echo Unmounting $host_vmdir/$1/mnt/dev in case it was jailed - umount -f $host_vmdir/$1/mnt/dev - -echo -echo Unmounting $host_vmdir/$1/mnt/ - umount -f $host_vmdir/$1/mnt/ - - if [ "$vm_dev_type" = "img" ]; then - echo Detaching memory device - f_mddestroy $1 - fi -} # end f_umount - -################################################## LOOPING TOP FUNCTIONS - -vm_start() # $vm_count $host_vmdir $vm_names -{ - # Put your global preflight steps here: - # /etc/rc.d/pf stop # stop packet filtering on PC-BSD - - case $vm_count in - 0) echo ; echo Starting all VMs in $host_vmdir - local num_found - for vm_found in "$host_vmdir"/*; do - vm_name="${vm_found##*/}" - num_found=1 - - echo - echo Verifying if $vm_names is already loaded - [ -e /dev/vmm/$vm_names ] && \ - { echo $vm_names is already loaded. Skipping ; return ;} - echo Starting $vm_name - - f_load $vm_name - f_boot $vm_name -# BUG: f_boot is still called if you quit out of the loader. workaround? - done - [ $num_found ] || \ - { echo No VMs found. Exiting ; exit 1 ; } - ;; - 1) echo ; echo Starting $vm_names - echo - echo Verifying if $vm_names is already loaded - [ -e /dev/vmm/$vm_names ] && \ - { echo $vm_names is already loaded. Skipping ; return ;} - f_load $vm_names - f_boot $vm_names - ;; - *) echo ; echo Starting VMs $vm_names - for vm_name in $vm_names; do - echo - echo Verifying if $vm_names is already loaded - [ -e /dev/vmm/$vm_names ] && \ - { echo $vm_names is already loaded. Skipping ; return ;} - - echo - echo Starting $vm_name - f_load $vm_name - f_boot $vm_name - done - esac -} - -vm_stop() # $vm_names $vm_count -{ - case $vm_count in - 0) echo ; echo Stopping all VMs in $host_vmdir - local num_found - for vm_found in "$host_vmdir"/*; do - vm_name="${vm_found##*/}" - num_found=1 - if [ ! -e /dev/vmm/$vm_name ]; then - echo $vm_name is not loaded. Skipping - else - echo - echo Stopping $vm_name - f_stop $vm_name - f_mddestroy $vm_name - fi - done - [ $num_found ] || \ - { echo No VMs Found. Exiting ; exit 1 ; } - ;; - 1) echo ; echo Stopping $vm_names - f_stop $vm_names - f_mddestroy $vm_names - ;; - *) echo ; echo Stopping VMs $vm_names - for vm_name in $vm_names; do - f_stop $vm_name - f_mddestroy $vm_name - done - esac -} - -vm_restart() -{ - case $vm_count in - 0) echo ; echo Restarting all VMs in $host_vmdir - local num_found - for vm_found in "$host_vmdir"/*; do - [ -d $host_vmdir/$vm_name ] || continue # fix: why? - vm_name="${vm_found##*/}" - num_found=1 - if [ ! -f $host_vmdir/$vm_name/${vm_name}.conf ]; then - echo $vm_name: no configuration file found: Skipping - else - f_stop $vm_name - f_mddestroy $vm_name - f_load $vm_name - f_boot $vm_name - fi - done - [ $num_found ] || \ - { echo No VMs found. Exiting ; exit 1 ; } - ;; - 1) echo ; echo Restarting $vm_names - if [ ! -f $host_vmdir/$vm_names/${vm_names}.conf ]; then - echo $vm_names: no configuration file found: Skipping - exit 1 - else - echo - echo Restarting $vm_names - f_stop $vm_names - f_mddestroy $vm_names - f_load $vm_names - f_boot $vm_names - fi - ;; - *) echo ; echo Starting VMs $vm_names - for vm_name in $vm_names; do - if [ ! -f "$host_vmdir/$vm_name/${vm_name}.conf" ]; then - echo $vm_name: no configuration file found: Skipping - fi - echo - echo Restarting $vm_name - f_stop $vm_name - f_load $vm_name - f_boot $vm_name - done - esac -} - -vm_status() # $vm_names -{ - case $vm_count in - 0) - if [ ! -d /dev/vmm/ ]; then - echo - echo No VMs running. Exiting - exit 1 - else - echo - echo Listing loaded VMs - ls /dev/vmm/* - fi - ;; - 1) - if [ -e /dev/vmm/$vm_names ]; then - echo - echo $vm_names is loaded - else - echo - echo $vm_names is not loaded - fi - ;; - *) - for vm_name in $vm_names; do - if [ -e /dev/vmm/$vm_name ]; then - echo - echo $vm_name is loaded - else - echo - echo $vm_names is not loaded. - fi - done - esac -} - -vm_load() # $vm_names -{ - case $vm_count in # Initialized in MAIN based on rc arguments - 0) echo ; echo Loading all VMs in $host_vmdir - for vm_found in "$host_vmdir"/*; do - [ $vm_found ] && f_load $vm_found - done - ;; - 1) echo ; echo Loading $vm_names # One VM - f_load $vm_names - ;; - *) echo ; echo Loading VMs $vm_names # Multiple specific VMs - for vm_name in $vm_names; do - f_load $vm_name - done - esac -} - -vm_boot() # $vm_count $host_vmdir $vm_names -{ - - case $vm_count in - 0) echo ; echo Booting all VMs in $host_vmdir - for vm_found in "$host_vmdir"/*; do -# [ $vm_found ] && f_boot $vm_found - f_boot $vm_found - done - ;; - 1) echo ; echo Booting $vm_names # One VM - f_boot $vm_names - ;; - *) echo ; echo Booting VMs $vm_names # Multiple specific VMs - for vm_name in $vm_names; do - f_boot $vm_name - done - esac - -} - -############################################## NON-LOOPING TOP FUNCTIONS - -vm_attach() -{ - case $vm_count in - 0) echo ; echo Please specify a single VM by name - exit 1 - ;; - 1) echo ; echo Attaching to $vm_names - f_attach $vm_names - ;; - *) echo ; echo Please specify a single VM by name - exit 1 - esac -} - -vm_debug() # Display debugging information -{ - case $vm_count in - 0) echo ; echo Please specify a single VM by name - exit 1 - ;; - 1) echo ; echo Displaying debug information for $vm_names - vm_name=$vm_names - [ -e /dev/vmm/$vm_name ] || - echo $vm_name is not loaded. - /usr/sbin/bhyvectl --get-all --vm=$vm_name - ;; - *) echo ; echo Please specify a single VM by name - exit 1 - esac -} - -vm_mount() # $vm_names ($1) -{ - case $vm_count in - 0) echo ; echo Please specify a single VM by name - exit 1 - ;; - 1) echo ; echo Attempting to mount $host_vmdir/$vm_names/mnt - f_mount $vm_names - ;; - *) echo ; echo Please specify a single VM by name - exit 1 - esac -} - -vm_umount() # $vm_names ($1) -{ - case $vm_count in - 0) echo ; echo Please specify a single VM by name - exit 1 - ;; - 1) echo ; echo Unmounting $host_vmdir/$vm_names/mnt - f_umount $vm_names - ;; - *) echo ; echo Please specify a single VM by name - exit 1 - esac -} - -vm_iso() # $vm_names ($1) -{ - case $vm_count in - 0) echo ; echo Please specify a single VM by name - exit 1 - ;; - 1) echo ; echo booting the ISO for VM $vm_names - iso_boot="isobootyes" # inform f_boot() to use the VM's ISO - f_load $vm_names - f_boot $vm_names -# Yes, we could check the arguments for "iso" or "oneiso" but that would be -# rather hidden from the user or developer - ;; - *) echo ; echo Please specify a single VM by name - exit 1 - esac -} - -vm_grub() # $vm_names ($1) -{ - case $vm_count in - 0) echo ; echo Please specify a single VM by name - exit 1 - ;; - 1) echo ; echo Booting the ISO for VM $vm_names - f_grub $vm_names - ;; - *) echo ; echo Please specify a single VM by name - exit 1 - esac -} - -vm_jail() # $vm_names ($1) -{ - case $vm_count in - 0) echo ; echo Please specify a single VM by name - exit 1 - ;; - 1) echo ; echo Booting VM $vm_names as a jail - f_mount $vm_names - ls $host_vmdir/$vm_names/mnt - echo - echo Reading the $host_vmdir/$vm_names/${vm_names}.conf config file - [ -f $host_vmdir/$vm_names/${vm_names}.conf ] && . $host_vmdir/$vm_names/${vm_names}.conf - [ $vm_os_type ] || \ - { echo $host_vmdir/$vm_names/${vm_names}.conf failed to source. Exiting ; exit 1 ; } - echo - echo flags like \"sendmail_enable\", \"inetd_flags\" and - echo \"rpcbind_enable\" are not configured by mkvm.sh -# fix: Note: mount.devfs requires a full path and may fail (is it correct?) - - local jail_cmd="/usr/sbin/jail \ - -c path=${host_vmdir}/$vm_names/mnt/ mount.devfs \ - ip4.addr=$vm_ipv4 command=/bin/sh - " # END-QUOTE - - echo - echo Running the jail command: - echo $jail_cmd - - local timestamp=$( f_timestamp ) - echo $timestamp $jail_cmd >> $host_vmdir/$vm_names/${vm_names}.log - eval $jail_cmd - f_umount $vm_names - ;; - *) echo ; echo Please specify a single VM by name - exit 1 - esac -} - -vm_qemu() # $vm_names ($1) -{ - case $vm_count in - 0) echo ; echo Please specify a single VM by name - exit 1 - ;; - 1) echo ; echo Booting VM $vm_names under qemu - -# BUG: Why is this test inverted? - type qemu-system-x86_64 > /dev/null 2>&1 && - { echo qemu is not installed! ports/emulators/qemu Exiting. ; exit 1 ; } - - echo - echo Verifying if $vm_names is already loaded - [ -e /dev/vmm/$vm_names ] && \ - { echo $vm_names is already loaded. Skipping ; return ;} - - echo - echo Verifying if $vm_names is already mounted on $host_vmdir$vm_names/mnt - mount | grep -qw $vm_names/mnt && \ - { echo $vm_names is mounted. Skipping ; return ; } - - echo - echo Reading the $host_vmdir/$vm_names/${vm_names}.conf config file - [ -f $host_vmdir/$vm_names/${vm_names}.conf ] && . $host_vmdir/$vm_names/${vm_names}.conf - [ $vm_os_type ] || \ - { echo $host_vmdir/$vm_names/${vm_names}.conf failed to source. Exiting ; exit 1 ; } - -# vm_id="${vm_names#${1%[0-9]*}}" - vm_id=${1##*[!0-9]} - - /usr/local/bin/qemu-system-x86_64 -localtime -boot once=d -cdrom \ - $host_vmdir/$vm_names/${vm_names}.iso \ - $host_vmdir/$vm_names/${vm_names}.img \ - -m $vm_ram -vnc :$vm_id -usbdevice tablet & - - echo - echo $vm_names should be available via VNC on \"localhost:\" - echo - ;; - - *) echo ; echo Please specify a single VM by name - exit 1 - esac -} - -vm_delete() -{ - case $vm_count in - 0) echo ; echo Please specify a single VM by name - exit 1 - ;; - 1) echo ; echo Deleting $vm_names - if [ -e /dev/vmm/$vm_names ]; then - echo $vm_names is loaded. Skipping - return - elif [ ! -e $host_vmdir/$vm_names ]; then - echo $vm_names does not exist. Skipping - return - else - echo Unmounting $host_vmdir/$vm_names/mnt if necessary - mount | grep -qw $vm_names/mnt && \ - umount -f $host_vmdir/$vm_names/mnt - echo Removing $host_vmdir/$vm_names immutable file flags - chflags -R noschg $host_vmdir/$vm_names - echo Running rm -rf $host_vmdir/$vm_names - rm -rf $host_vmdir/$vm_names - [ -e /dev/zvol/${host_zpool}/$vm_names ] && \ - { echo Destroying zvol $host_zpool/$vm_names ; \ - zfs destroy $host_zpool/$vm_names ; } - fi - ;; - *) echo ; echo Please specify a single VM by name - exit 1 - esac - -} - -############################################################ MAIN SOURCE - -# exec 3>&1 # Duplicate stdout to file descriptor 3; used by info() - -# Preserving $1, $* and $# in meaningful ways -vm_cmd="$1" # the rc argument, "start", "stop" etc. -[ $# -gt 0 ] && shift 1 # strip off the rc command, leaving string of VMs -vm_names="$*" # all VM to act on (preserve $*) DO NOT RE-INITIALIZE -vm_count="$#" # number of vm's passed in (preserve $#) DO NOT RE-INITIALIZE - -iso_boot="" # Used by f_boot and vm_iso - -echo -echo Reading /usr/local/etc/vm.conf - [ -f /usr/local/etc/vm.conf ] && . /usr/local/etc/vm.conf - [ $host_vmdir ] || \ - { echo /usr/local/etc/vm.conf failed to source. Exiting ; exit 1 ; } - -load_rc_config $name -run_rc_command "$vm_cmd" - -######################################################################## -# END -######################################################################## diff --git a/usr/local/vmrc/templates/dyn_fbsd10amd64_snap_raw b/usr/local/vmrc/templates/dyn_fbsd10amd64_snap_raw deleted file mode 100755 index c9a2a45..0000000 --- a/usr/local/vmrc/templates/dyn_fbsd10amd64_snap_raw +++ /dev/null @@ -1,56 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p3" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="" # Disk image size in M or G for non-disk image install -install_method="rawimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/snapshots/VM-IMAGES/10.0-STABLE/amd64/Latest/" - # Distribution payload directory path -site_payload="FreeBSD-10.0-STABLE-amd64-20140622-r267746.raw.xz" - # Distribution payload file(s) (space separated) -payload_compressed="yes" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/dyn_flashrdamd64raw b/usr/local/vmrc/templates/dyn_flashrdamd64raw deleted file mode 100755 index 289cfcc..0000000 --- a/usr/local/vmrc/templates/dyn_flashrdamd64raw +++ /dev/null @@ -1,59 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="amd_" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="-W" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="kopenbsd -h com0 (hd0,openbsd1)/bsd.mp\nboot" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="rawimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://www.nmedia.net" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/flashrd/images/20140405/" - # Distribution payload directory path -site_payload="flashimg.amd64.com0-20140405.gz" - # Distribution payload file(s) (space separated) -payload_compressed="yes" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - -# The default flashrd root password is "root" - diff --git a/usr/local/vmrc/templates/err_bitrigamd64iso b/usr/local/vmrc/templates/err_bitrigamd64iso deleted file mode 100755 index 26c4781..0000000 --- a/usr/local/vmrc/templates/err_bitrigamd64iso +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="amd_" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="-W" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="kopenbsd -h com0 (cd0)/0.1/amd64/bsd.rd\nboot" - # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="kopenbsd -h com0 (hd1,openbsd1)/bsd.mp\nboot" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="isoimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://mirror2.us.bitrig.org/" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/bitrig/snapshots/amd64/current/" - # Distribution payload directory path -site_payload="cd01.iso" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/err_centos65amd64iso b/usr/local/vmrc/templates/err_centos65amd64iso deleted file mode 100755 index a4f95f2..0000000 --- a/usr/local/vmrc/templates/err_centos65amd64iso +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="-W" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="linux (cd0)/isolinux/vmlinuz text\ninitrd (cd0)/isolinux/initrd.img\nboot\" - # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="linux (hd0,msdos1)/vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root\ninitrd (hd0,msdos1)/initramfs-2.6.32-431.el6.x86_64.img\nboot\" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="3G" # Disk image size in M or G for non-disk image install -install_method="isoimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.osuosl.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/.1/centos/6.5/isos/x86_64/" - # Distribution payload directory path -site_payload="CentOS-6.5-x86_64-minimal.iso" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/err_centos7amd64iso b/usr/local/vmrc/templates/err_centos7amd64iso deleted file mode 100755 index fb6f2df..0000000 --- a/usr/local/vmrc/templates/err_centos7amd64iso +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="-W" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="linux /isolinux/vmlinuz text\ninitrd /isolinux/initrd.img\nboot\" - # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="linux /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root\ninitrd /initramfs-2.6.32-431.el6.x86_64.img\nboot\" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="3G" # Disk image size in M or G for non-disk image install -install_method="isoimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.osuosl.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/.1/centos/7/isos/x86_64/" - # Distribution payload directory path -site_payload="CentOS-7.0-1406-x86_64-Everything.iso" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/err_coreosamd64iso b/usr/local/vmrc/templates/err_coreosamd64iso deleted file mode 100755 index 2399690..0000000 --- a/usr/local/vmrc/templates/err_coreosamd64iso +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="-w" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="linux /coreos/vmlinuz coreos.autologin\ninitrd /coreos/cpio.gz\nboot" - # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="linux /coreos/vmlinuz coreos.autologin\ninitrd /coreos/cpio.gz\nboot" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="3G" # Disk image size in M or G for non-disk image install -install_method="isoimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://stable.release.core-os.net" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/amd64-usr/current/" - # Distribution payload directory path -site_payload="coreos_production_iso_image.iso" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/err_flashrd20140405i386raw b/usr/local/vmrc/templates/err_flashrd20140405i386raw deleted file mode 100755 index 642c2c8..0000000 --- a/usr/local/vmrc/templates/err_flashrd20140405i386raw +++ /dev/null @@ -1,59 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="amd_" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="-W" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="kopenbsd -h com0 (hd0,openbsd1)/bsd.mp\nboot" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="rawimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://www.nmedia.net" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/flashrd/images/20140405/" - # Distribution payload directory path -site_payload="flashimg.i386.com0-20140405.gz" - # Distribution payload file(s) (space separated) -payload_compressed="yes" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - -# OpenBSD i386 is not supported by bhyve at this time - diff --git a/usr/local/vmrc/templates/err_m0n0wall181amd64raw b/usr/local/vmrc/templates/err_m0n0wall181amd64raw deleted file mode 100755 index eba3dd7..0000000 --- a/usr/local/vmrc/templates/err_m0n0wall181amd64raw +++ /dev/null @@ -1,56 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="2048" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="" # Disk image size in M or G for non-disk image install -install_method="rawimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://mirrors.nycbug.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/m0n0wall/" - # Distribution payload directory path -site_payload="generic-pc-serial-1.8.1.img" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/err_ubuntu1404amd64iso b/usr/local/vmrc/templates/err_ubuntu1404amd64iso deleted file mode 100755 index d01ba82..0000000 --- a/usr/local/vmrc/templates/err_ubuntu1404amd64iso +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="-W" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" - # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="linux (hd0,msdos1)/vmlinuz root=/dev/vda1\ninitrd /initrd.img\nboot" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="3G" # Disk image size in M or G for non-disk image install -install_method="isoimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.osuosl.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/ubuntu-releases/14.04/" - # Distribution payload directory path -site_payload="ubuntu-14.04-server-amd64.iso" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd10amd64_img_gpt_ufs_dist b/usr/local/vmrc/templates/fbsd10amd64_img_gpt_ufs_dist deleted file mode 100755 index 0f7890d..0000000 --- a/usr/local/vmrc/templates/fbsd10amd64_img_gpt_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/amd64/amd64/10.0-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd10amd64_img_gpt_zfs_dist b/usr/local/vmrc/templates/fbsd10amd64_img_gpt_zfs_dist deleted file mode 100755 index f36879b..0000000 --- a/usr/local/vmrc/templates/fbsd10amd64_img_gpt_zfs_dist +++ /dev/null @@ -1,59 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="zfs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="-d -o feature@async_destroy=enabled -o feature@async_destroy=enablti_vdev_crash_dump=enabled" -vm_dev_flags="-d -o feature@async_destroy=enabled -o feature@empty_bpobj=enabled -o feature@lz4_compress=enabled -o feature@multi_vdev_crash_dump=enabled" - # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/amd64/amd64/10.0-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd10amd64_img_mbr_ufs_dist b/usr/local/vmrc/templates/fbsd10amd64_img_mbr_ufs_dist deleted file mode 100755 index 8cb0cc3..0000000 --- a/usr/local/vmrc/templates/fbsd10amd64_img_mbr_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/amd64/amd64/10.0-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="fdisk" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="mbr" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd10amd64_malloc_gpt_ufs_dist b/usr/local/vmrc/templates/fbsd10amd64_malloc_gpt_ufs_dist deleted file mode 100755 index f75cd9e..0000000 --- a/usr/local/vmrc/templates/fbsd10amd64_malloc_gpt_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="malloc" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/amd64/amd64/10.0-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd10i386_img_gpt_ufs_dist b/usr/local/vmrc/templates/fbsd10i386_img_gpt_ufs_dist deleted file mode 100755 index b143d66..0000000 --- a/usr/local/vmrc/templates/fbsd10i386_img_gpt_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/i386/i386/10.0-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd11amd64_img_gpt_ufs_dist b/usr/local/vmrc/templates/fbsd11amd64_img_gpt_ufs_dist deleted file mode 100755 index c2db194..0000000 --- a/usr/local/vmrc/templates/fbsd11amd64_img_gpt_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/snapshots/amd64/amd64/11.0-CURRENT/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd11amd64_img_gpt_zfs_dist b/usr/local/vmrc/templates/fbsd11amd64_img_gpt_zfs_dist deleted file mode 100755 index 70afdde..0000000 --- a/usr/local/vmrc/templates/fbsd11amd64_img_gpt_zfs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="zfs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/snapshots/amd64/amd64/11.0-CURRENT/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd11amd64_zvol_gpt_ufs_dist b/usr/local/vmrc/templates/fbsd11amd64_zvol_gpt_ufs_dist deleted file mode 100755 index 2b42e27..0000000 --- a/usr/local/vmrc/templates/fbsd11amd64_zvol_gpt_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="zvol" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/snapshots/amd64/amd64/11.0-CURRENT/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd92amd64_img_gpt_ufs_dist b/usr/local/vmrc/templates/fbsd92amd64_img_gpt_ufs_dist deleted file mode 100755 index fc99579..0000000 --- a/usr/local/vmrc/templates/fbsd92amd64_img_gpt_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/amd64/amd64/9.2-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd93amd64_img_gpt_ufs_dist b/usr/local/vmrc/templates/fbsd93amd64_img_gpt_ufs_dist deleted file mode 100755 index 03d33b3..0000000 --- a/usr/local/vmrc/templates/fbsd93amd64_img_gpt_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/amd64/amd64/9.3-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd93amd64_img_gpt_zfs_dist b/usr/local/vmrc/templates/fbsd93amd64_img_gpt_zfs_dist deleted file mode 100755 index 6ae4990..0000000 --- a/usr/local/vmrc/templates/fbsd93amd64_img_gpt_zfs_dist +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="zfs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="-d -o feature@async_destroy=enabled -o feature@empty_bpobj=enabled -o feature@lz4_compress=enabled -o feature@multi_vdev_crash_dump=enabled -o feature@spacemap_histogram=enabled -o feature@enabled_txg=enabled -o feature@hole_birth=enabled -o feature@extensible_dataset=enabled -o feature@bookmarks=enabled -o feature@filesystem_limits=enabled" - # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/amd64/amd64/9.3-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd93amd64_img_mbr_ufs_dist b/usr/local/vmrc/templates/fbsd93amd64_img_mbr_ufs_dist deleted file mode 100755 index 5a711ec..0000000 --- a/usr/local/vmrc/templates/fbsd93amd64_img_mbr_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/amd64/amd64/9.3-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="fdisk" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="mbr" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd93amd64_iso b/usr/local/vmrc/templates/fbsd93amd64_iso deleted file mode 100755 index 401d746..0000000 --- a/usr/local/vmrc/templates/fbsd93amd64_iso +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="kfreebsd -h /boot/kernel/kernel\nkfreebsd_loadenv /boot/device.hints\nboot" - # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="kfreebsd -h /boot/kernel/kernel\nkfreebsd_loadenv /boot/device.hints\nboot" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="isoimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.3/" - # Distribution payload directory path -site_payload="FreeBSD-9.3-RELEASE-amd64-disc1.iso" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="no" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd93i386_img_gpt_ufs_dist b/usr/local/vmrc/templates/fbsd93i386_img_gpt_ufs_dist deleted file mode 100755 index a065600..0000000 --- a/usr/local/vmrc/templates/fbsd93i386_img_gpt_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/i386/i386/9.3-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fbsd93i386_img_mbr_ufs_dist b/usr/local/vmrc/templates/fbsd93i386_img_mbr_ufs_dist deleted file mode 100755 index 77a217e..0000000 --- a/usr/local/vmrc/templates/fbsd93i386_img_mbr_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/i386/i386/9.3-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="fdisk" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="mbr" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/fnas9217amd64raw b/usr/local/vmrc/templates/fnas9217amd64raw deleted file mode 100755 index 299532d..0000000 --- a/usr/local/vmrc/templates/fnas9217amd64raw +++ /dev/null @@ -1,56 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="s1a" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="4096" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="" # Disk image size in M or G for non-disk image install -install_method="rawimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://download.freenas.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/9.2.1.7/RELEASE/x64/" - # Distribution payload directory path -site_payload="FreeNAS-9.2.1.7-RELEASE-x64.img.xz" - # Distribution payload file(s) (space separated) -payload_compressed="yes" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/master_template b/usr/local/vmrc/templates/master_template deleted file mode 100755 index 1b945a7..0000000 --- a/usr/local/vmrc/templates/master_template +++ /dev/null @@ -1,53 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="" # "freebsd" or "other" (required) -vm_dev_type="" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="" # Number of VM virtual CPUs (max 16) (required) -vm_ram="" # VM RAM Allocation in MB (required) -vm_console="" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="" # Disk image size in M or G for non-disk image install -install_method="" # "rawimg", "isoimg", "distset" or "obj" -install_site="" # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="" # Distribution payload directory path -site_payload="" # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/obsd55amd64iso b/usr/local/vmrc/templates/obsd55amd64iso deleted file mode 100755 index 72f29ed..0000000 --- a/usr/local/vmrc/templates/obsd55amd64iso +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="amd_" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="-W" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="kopenbsd -h com0 (cd0)/5.5/amd64/bsd.rd\nboot" - # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="kopenbsd -h com0 (hd1,openbsd1)/bsd.mp\nboot" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="isoimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.openbsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/OpenBSD/5.5/amd64/" - # Distribution payload directory path -site_payload="install55.iso" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/obsd56amd64iso b/usr/local/vmrc/templates/obsd56amd64iso deleted file mode 100755 index b027bac..0000000 --- a/usr/local/vmrc/templates/obsd56amd64iso +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="amd_" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="-W" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="kopenbsd -h com0 (cd0)/5.6/amd64/bsd.rd\nboot" - # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="kopenbsd -h com0 (hd1,openbsd1)/bsd.mp\nboot" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="isoimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.openbsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/OpenBSD/snapshots/amd64/" - # Distribution payload directory path -site_payload="install56.iso" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/pfsense214amd64raw b/usr/local/vmrc/templates/pfsense214amd64raw deleted file mode 100755 index 3d03f3a..0000000 --- a/usr/local/vmrc/templates/pfsense214amd64raw +++ /dev/null @@ -1,56 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="s1a" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="2048" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="" # Disk image size in M or G for non-disk image install -install_method="rawimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://files.nyi.pfsense.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/mirror/downloads/" - # Distribution payload directory path -site_payload="pfSense-2.1.4-RELEASE-2g-amd64-nanobsd.img.gz" - # Distribution payload file(s) (space separated) -payload_compressed="yes" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/reqtty_bsdrp151amd64raw b/usr/local/vmrc/templates/reqtty_bsdrp151amd64raw deleted file mode 100755 index ae157f0..0000000 --- a/usr/local/vmrc/templates/reqtty_bsdrp151amd64raw +++ /dev/null @@ -1,59 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="s1a" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="2048" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="" # Disk image size in M or G for non-disk image install -install_method="rawimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://iweb.dl.sourceforge.net" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/project/bsdrp/BSD_Router_Project/1.51/amd64/" - # Distribution payload directory path -site_payload="BSDRP-1.51-full-amd64-serial.img.xz" - # Distribution payload file(s) (space separated) -payload_compressed="yes" # "yes" or "no" For compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - -# This disk image has a compressed root filesystem that would require -# extraction, tty configuration and reconstitution - diff --git a/usr/local/vmrc/templates/reqtty_mfsbsd10amd64raw b/usr/local/vmrc/templates/reqtty_mfsbsd10amd64raw deleted file mode 100755 index 4bc7953..0000000 --- a/usr/local/vmrc/templates/reqtty_mfsbsd10amd64raw +++ /dev/null @@ -1,59 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="a" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="" # Disk image size in M or G for non-disk image install -install_method="rawimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://mfsbsd.vx.sk" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/files/images/10/amd64/" - # Distribution payload directory path -site_payload="mfsbsd-10.0-RELEASE-amd64.img" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - -# This disk image has a compressed root filesystem that would require -# extraction, tty configuration and reconstitution - diff --git a/usr/local/vmrc/templates/reqtty_nas4free9201amd64raw b/usr/local/vmrc/templates/reqtty_nas4free9201amd64raw deleted file mode 100755 index a498b85..0000000 --- a/usr/local/vmrc/templates/reqtty_nas4free9201amd64raw +++ /dev/null @@ -1,59 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="a" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="2048" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="" # Disk image size in M or G for non-disk image install -install_method="rawimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://heanet.dl.sourceforge.net" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/project/nas4free/NAS4Free-9.2.0.1/9.2.0.1.972/" - # Distribution payload directory path -site_payload="NAS4Free-x64-embedded-9.2.0.1.972.img" - # Distribution payload file(s) (space separated) -payload_compressed="yes" # "yes" if compressed ISO or rawimg payload -requires_tty="" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="" # VM password (clear text for now) - -# Comments: - -# This disk image has a compressed root filesystem that would require -# extraction, tty configuration and reconstitution - diff --git a/usr/local/vmrc/templates/reqtty_pcbsd10amd64_iso b/usr/local/vmrc/templates/reqtty_pcbsd10amd64_iso deleted file mode 100755 index 49493ed..0000000 --- a/usr/local/vmrc/templates/reqtty_pcbsd10amd64_iso +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="zfs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="kfreebsd -h /boot/kernel/kernel\nkfreebsd_loadenv /boot/device.hints\nset kFreeBSD.boot_serial=1\nset kFreeBSD.hint.uart.0.at=isa\nset kFreeBSD.hint.uart.0.port=0x3F8\nset kFreeBSD.hint.uart.0.flags=0x10\nset kFreeBSD.hint.uart.0.irq=4\nboot" - # \n separated grub.cfg (required for GRUB ISO boot) -iso_grub_cfg="kfreebsd -h /boot/kernel/kernel\nkfreebsd_loadenv /boot/device.hints\nset kFreeBSD.boot_serial=1\nset kFreeBSD.hint.uart.0.at=isa\nset kFreeBSD.hint.uart.0.port=0x3F8\nset kFreeBSD.hint.uart.0.flags=0x10\nset kFreeBSD.hint.uart.0.irq=4\nboot" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="8G" # Disk image size in M or G for non-disk image install -install_method="isoimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://iso.cdn.pcbsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/10.0-RELEASE/amd64/" - # Distribution payload directory path -site_payload="PCBSD10.0-RELEASE-x64-DVD-USB-latest.iso" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/reqtty_trueos10snapamd64_iso b/usr/local/vmrc/templates/reqtty_trueos10snapamd64_iso deleted file mode 100755 index f64c797..0000000 --- a/usr/local/vmrc/templates/reqtty_trueos10snapamd64_iso +++ /dev/null @@ -1,58 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="other" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="zfs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="kfreebsd -h /boot/kernel/kernel\nkfreebsd_loadenv /boot/device.hints\nboot" - # \n separated grub.cfg (required for GRUB ISO boot) -iso_grub_cfg="kfreebsd -h /boot/kernel/kernel\nkfreebsd_loadenv /boot/device.hints\nboot" - # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="8G" # Disk image size in M or G for non-disk image install -install_method="isoimg" # "rawimg", "isoimg", "distset" or "obj" -install_site="http://iso.cdn.pcbsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/10.0-STABLEAUG2014/amd64/" - # Distribution payload directory path -site_payload="TRUEOS10.0-STABLEAUG2014-08-20-2014-x64-DVD-USB.iso" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="" # "gpt" or "mbr" volume layout -vm_timezone="" # VM timezone -vm_hostname="" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/usr/local/vmrc/templates/reqvt_fbsd91amd64_img_gpt_ufs_dist b/usr/local/vmrc/templates/reqvt_fbsd91amd64_img_gpt_ufs_dist deleted file mode 100755 index 3d9564f..0000000 --- a/usr/local/vmrc/templates/reqvt_fbsd91amd64_img_gpt_ufs_dist +++ /dev/null @@ -1,57 +0,0 @@ -# Configuration template for a VM used by mkvm.sh -# mkvm.sh copies this to /usr/local/vmrc/vm/.conf - -# VM global variables used by both provisioning and at runtime -vm_os_type="freebsd" # "freebsd" or "other" (required) -vm_dev_type="img" # (disk) "img", (RAM) "malloc", "zvol" or "device" -vm_dev_root="p2" # p2, p3, s1a etc. (required for FreeBSD fsck & mount) -vm_dev_fs="ufs" # "ufs" or "zfs" (for FreeBSD UFS fsck or provisioning) -vm_dev_flags="" # ZFS features "-d -o feature@async_destroy=enabled" - -# Existing boot device in /dev/ if "device" was set for vm_dev_type. i.e. "ada2" -vm_device="" # Existing bootable block device (for vm_dev_type) -vm_devices="" # Additional attached full-path disk images or devices - -# Optional number of additional network VM virtual network interfaces, 8 max. -vm_addtl_nics="" # "1" through "7" (tap8<2 digit vm_id>[PCI unit 1-7] - -# VM runtime boot variables -vm_cpus="1" # Number of VM virtual CPUs (max 16) (required) -vm_ram="1024" # VM RAM Allocation in MB (required) -vm_console="stdio" # "stdio", "nmdm", "tmux" or "tmux-detached" (required) -virtio_type="ahci-hd" # "ahci-hd" or "virtio-blk" (required) - -# OS-specific VM runtime boot variables -vm_hostbridge="" # "amd_" for the AMD hostbridge (required for OpenBSD) -bhyve_flags="" # Additional bhyve(8) flags (-w is common on Linux) -iso_grub_cfg="" # \n separated grub.cfg (required for GRUB ISO boot) -boot_grub_cfg="" # \n separated grub.cfg (required for GRUB boot) - -# Provisioning Variables -vm_dev_size="2G" # Disk image size in M or G for non-disk image install -install_method="distset" # "rawimg", "isoimg", "distset" or "obj" -install_site="ftp://ftp.freebsd.org" - # Distribution payload site i.e. ftp://ftp.freebsd.org -#install_site="file://" # Local payload option once downloaded (choose one) -site_path="/pub/FreeBSD/releases/amd64/amd64/9.1-RELEASE/" - # Distribution payload directory path -site_payload="base.txz kernel.txz" - # Distribution payload file(s) (space separated) -payload_compressed="" # "yes" if compressed ISO or rawimg payload -requires_tty="yes" # "yes" if a serial tty is required (FreeBSD only) -obj_srcdir="" # Location of OS sources (uses /usr/obj) (FreeBSD only) - -# FreeBSD-specific VM provisioning variables -vm_dev_util="gpart" # Partitioning tool "fdisk" or "gpart" (MBR or GPT) -vm_dev_layout="gpt" # "gpt" or "mbr" volume layout -vm_timezone="America/Los_Angeles" - # VM timezone -vm_hostname="bhyveguest" # VM hostname -vm_ipv4="" # VM IPv4 address (blank for DHCP) -vm_gw="" # VM IPv4 gateway -vm_searchdomain="" # VM resolv.conf searchdomain -vm_dns="" # VM resolv.conf IPv4 DNS server -vm_password="bsd" # VM password (clear text for now) - -# Comments: - diff --git a/vm b/vm new file mode 100755 index 0000000..612165e --- /dev/null +++ b/vm @@ -0,0 +1,1769 @@ +#!/bin/sh +#- +################################################################ LICENSE +# +# Copyright (c) 2012-2014 Michael Dexter +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +############################################################ INFORMATION +# +# $Title: virtual machine management script $ +# $Version: v.0.6$ +# +# rc(8) command script for managing virtual machines. +# +############################################################# RCORDER(8) + +# See rcorder(8) for additional information + +# PROVIDE: bhyve +# REQUIRE: LOGIN hostname +# KEYWORD: shutdown + +################################################################## RC(8) + +# See rc(8) for additional information. + +. /etc/rc.subr + +name="vm" +rcvar="vm_enable" +start_cmd="${name}_start" +stop_cmd="${name}_stop" +restart_cmd="${name}_restart" +extra_commands=" + attach + boot + debug + delete + destroy + format + grub + iso + jail + load + mount + qemu + status + umount +" # END-QUOTE +attach_cmd="${name}_attach" +boot_cmd="${name}_boot" +debug_cmd="${name}_debug" +delete_cmd="${name}_delete" +destroy_cmd="${name}_destroy" +format_cmd="${name}_format" +grub_cmd="${name}_grub" +iso_cmd="${name}_iso" +jail_cmd="${name}_jail" +load_cmd="${name}_load" +mount_cmd="${name}_mount" +qemu_cmd="${name}_qemu" +status_cmd="${name}_status" +umount_cmd="${name}_umount" + +################################################################ GLOBALS + +ISO_BOOT="isobootno" + +###################################################### UTILITY FUNCTIONS + +# info $format [$arguments ...] +# +# Print text to the console using printf(1) syntax (can be used within a sub- +# shell). The printf(1) format does not require a trailing newline sequence +# (`\n'). +# +info() +{ + [ $# -gt 0 ] && printf "$@" >&3 && echo >&3 +} + +# die $format [$arguments ...] +# +# Exit with error status, optionally printing a message to standard error using +# printf(1) syntax before terminating. The printf(1) format does not require a +# trailing newline sequence (`\n'). +# +die() +{ + exec 3>&2 + info "$@" + exit 1 +} + +# f_timestamp +# +# A simple invocation of 'date' for use with logging. Modify as you please. +# +f_timestamp() +{ +echo $( date "+%Y-%m-%d %H:%M:%S:" ) # Perhaps insert a newline +} + +# f_eptcheck +# +# Check CPU for EPT feature flag. Causes premature termination with error +# message if the CPU does not appear to support EPT. +# +f_eptcheck() +{ + local funcname=f_eptcheck + + info "Entering $funcname()" + grep -qw POPCNT /var/run/dmesg.boot || die \ + "$funcname: Your CPU does not appear to support EPT! Exiting." +} + +# f_vmmcheck +# +# Make sure the vmm kernel module is loaded. If not, attempt to load it. Causes +# premature termination with error message if the module cannot be loaded. +# +f_vmmcheck() +{ + local funcname=f_vmmcheck + + info "Entering $funcname()" + if ! kldstat | grep -qwF vmm.ko; then + info "$funcname: vmm.ko kernel module not loaded. Loading..." + kldload vmm || die + else + info "$funcname: vmm.ko is loaded." + fi +} + +# f_tmuxcheck +# +# Check to see if tmux is installed. Causes premature termination with error +# message if tmux is not installed. +# +f_tmuxcheck() +{ + local funcname=f_tmuxcheck + + info "Entering $funcname()" + case "$vm_console" in + tmux*) + [ -x /usr/local/bin/tmux ] || die "$funcname: %s Exiting." \ + "tmux is not installed! (ports/sysutils/tmux)" + esac +} + +# f_grubcheck +# +# Check to see if the grub-bhyve utility is installed. Causes premature +# termination with error message if grub-bhyve is not installed. +# +f_grubcheck() +{ + local funcname=f_grubcheck + + info "Entering $funcname()" + [ -x /usr/local/sbin/grub-bhyve ] || die "$funcname: %s Exiting." \ + "grub-bhyve is not installed! (ports/sysutils/grub2-bhyve)" +} + +# f_netstart +# +# Create bridgeX device (loading required kernel modules) if it doesn't exist. +# +f_netstart() +{ + local funcname=f_netstart + +# Just in case +. /usr/local/etc/vm.conf + + if ! kldstat | grep -qwF bridgestp.ko; then + info "$funcname: bridgestp.ko kernel module not loaded. Loading..." + kldload bridgestp || die + else + info "$funcname: bridgestp.ko is loaded." + fi + + if ! kldstat | grep -qwF if_bridge.ko; then + info "$funcname: if_bridge.ko kernel module not loaded. Loading..." + kldload if_bridge || die + else + info "$funcname: if_bridge.ko is loaded." + fi + + if ! kldstat | grep -qwF if_tap.ko; then + info "$funcname: if_tap.ko kernel module not loaded. Loading..." + kldload if_tap || die + sysctl net.link.tap.up_on_open=1 + else + info "$funcname: if_tap.ko is loaded." + fi + + if ! ifconfig -l | grep -qwF bridge${host_bridge}; then + info "Creating the bridge${host_bridge} network interface." + ifconfig bridge${host_bridge} create || die + ifconfig bridge${host_bridge} up || die + else + info "$funcname: bridge$host_bridge exists." + fi + + if ! ifconfig bridge${host_bridge} | grep ${host_nic}; then + info "Associating $host_nic with bridge${host_bridge}." +echo "Running: ifconfig bridge${host_bridge} addm ${host_nic} up" + ifconfig bridge${host_bridge} addm ${host_nic} up || die + else + info "$funcname: $host_nic is assoc. with host${host_bridge}." + fi +} + +# f_readconfig_exit +# +# Make sure a given VM configuration file exists and read it. Causes +# premature termination with error message if the module cannot be loaded. +# +f_readconfig_exit() +{ + local funcname=f_readconfig_exit + + info "Entering $funcname()" + vm_name="$vm_names" + info "Checking for $host_vmdir/$vm_name/${vm_name}.conf" + if [ ! -f "$host_vmdir/$vm_name/${vm_name}.conf" ]; then + info "$funcname: $host_vmdir/$vm_name/${vm_name}.conf does not exist. Exiting." + exit + else + . "$host_vmdir/$vm_name/${vm_name}.conf" + fi +} + +# f_readconfig_return +# +# Make sure a given VM configuration file exists and read it. Returns +# if the module cannot be loaded as not to break looping functions. +# +f_readconfig_return() +{ + local funcname=f_readconfig_return + + info "Entering $funcname()" + vm_name="$vm_names" + info "Checking for $host_vmdir/$vm_name/${vm_name}.conf" + if [ ! -f "$host_vmdir/$vm_name/${vm_name}.conf" ]; then + info "$funcname: $host_vmdir/$vm_name/${vm_name}.conf does not exist. Skipping..." + return + else + . "$host_vmdir/$vm_name/${vm_name}.conf" + fi +} + +# f_getmdname +# +# Obtain the name of the md(4) device associated with $vm_name (argument to +# the script). +# +# Used by: f_mount (to see if already attached), and mddestroy (search & d) +# +f_getmdname() +{ +# local funcname=f_getmdname +# info "Entering $funcname()" +# mdconfig -lv | awk -v vm_name="$vm_name" \ +# '$0 ~ "^[^/]*/" vm_name "\.img$" { print $1 }' + local local_img_name="$vm_name" # Takes vm_name, lacks `.img' suffix + mdconfig -lv | awk -v local_vmname="$local_img_name" ' + { + md = $1 + sub("^[^/]*", "") + if ($0 ~ "/" local_vmname "\.img$") + print md + }' +} + +# f_mddestroy +# +# Destroy md(4) devices associated with $vm_name (argument to script). +# +f_mddestroy() +{ + local funcname=f_mddestroy + info "Entering $funcname()" + info "$funcname: Destroying all memory devices associated with %s" \ + "$vm_name" + for dev in $( f_getmdname ); do + info "$funcname: Destroying mdconfig device: %s" "$dev" + mdconfig -du "$dev" + done +} + +########################################################## SUB FUNCTIONS + +# f_load +# +# Load the vm_device associated with $vm_name argument. +# +f_load() +{ + local funcname=f_load + + info "Entering $funcname()" + f_eptcheck + f_vmmcheck + f_netstart + + if [ -e "/dev/vmm/$vm_name" ]; then + info "$funcname: %s is loaded. Skipping..." "$vm_name" + return + fi + if [ "$( mount | grep -o "${host_vmdir}/${vm_name}/mnt" )" = "${host_vmdir}/${vm_name}/mnt" ]; then + info "$funcname: $vm_name is currently mounted on ${host_vmdir}/${vm_name}/mnt/ Skipping..." + return + fi + +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + + if [ "$vm_os_type" = "freebsd" ]; then + case "$vm_dev_type" in + img) + if [ ! -e "${host_vmdir}/${vm_name}/${vm_name}.img" ]; then + info "$funcname: ${host_vmdir}/${vm_name}/${vm_name}.img does not exist. Skipping..." + return + else + info "$funcname: Attaching raw image %s for fsck" "${host_vmdir}/${vm_name}/${vm_name}.img" + vm_device=$( mdconfig -af "${host_vmdir}/${vm_name}/${vm_name}.img" ) + info "$funcname: DEBUG: disk image is %s; vm_device is %s" \ + "${host_vmdir}/${vm_name}/${vm_name}.img" "$vm_device" + fi ;; + malloc) + if [ ! -e "/dev/$vm_device" ]; then + info "$funcname: malloc device $vm_device does not exist. Skipping..." + echo "DEBUG: Running ls /dev/$vm_device" + ls /dev/$vm_device + else + vm_device="/dev/$vm_device" + echo $vm_device + fi ;; + zvol) + if [ ! -e "/dev/zvol/${host_zpool}/$vm_name" ]; then + info "/dev/zvol/${host_zpool}/$vm_name does not exist. Skipping..." + return + else + vm_device="/dev/zvol/$host_zpool/$vm_name" + fi ;; + *) +# fix: should this check by prefixed by /dev/ ? + if [ ! -e "$vm_device" ]; then + info "$funcname: $vm_device does not exist. Skipping..." + return # otherwise we stay with the user-defined vm_device + fi + esac + + case "$vm_dev_layout" in +# fix: Why is [Mm] etc failing? + # [Mm][Bb][Rr]) + mbr) + vol_part="${vm_device}s1a" ;; + # Gg][Pp][Tt]) + gpt) + vol_part="${vm_device}p2" ;; + *) + info "Invalid VM device layout" + return + esac + + info "$funcname: fsck_ufs -y %s" "$vol_part" + fsck_ufs -y "$vol_part" + + if [ "$vm_dev_type" = "img" ]; then + f_mddestroy + vm_device="${host_vmdir}/${vm_name}/${vm_name}.img" + fi + fi + +# fix: note: This assumes FreeBSD=bhyveload other=grub. Could have FreeBSD/grub + if [ "$vm_os_type" = "freebsd" ]; then +# Note that $vm_device is prefixed with "/dev/" + bhyveload_cmd="/usr/sbin/bhyveload -m $vm_ram -d $vm_device $vm_name" + info "$funcname: Running the bhyveload command:\n%s" \ + "$bhyveload_cmd" + local timestamp=$( f_timestamp ) + echo "$timestamp $bhyveload_cmd" >> ${host_vmdir}/${vm_name}/${vm_name}.log + eval "$bhyveload_cmd" + else + f_grubcheck + info "$funcname: Creating ${host_vmdir}/${vm_name}/device.map" + vm_device="${host_vmdir}/${vm_name}/${vm_name}.img" + echo "(hd0) $vm_device" > "${host_vmdir}/${vm_name}/device.map" + echo "(cd0) ${host_vmdir}/${vm_name}/${vm_name}.iso" >> "${host_vmdir}/${vm_name}/device.map" + cat "${host_vmdir}/${vm_name}/device.map" + info "$funcname: Running the grub command:\n%s" \ + "$grub_boot_cmd" + local timestamp=$( f_timestamp ) + echo "$timestamp $grub_boot_cmd" >> ${host_vmdir}/${vm_name}/${vm_name}.log + eval "$grub_boot_cmd" + fi + + [ -e "/dev/vmm/$vm_name" ] || + info "$funcname: $vm_name failed to load! Exiting." + info "$funcname: $vm_name appears to have loaded." +} + +# f_boot +# +# Boot function. Takes in vm_name +# +# Boot $vm_name using bhyve(8) in the desired fashion defined by $vm_console. +# +# NOTE: $ISO_BOOT is set to "isobootyes" by f_iso(). +# +f_boot() +{ + local funcname=f_boot + + info "Entering $funcname()" + vm_id="${vm_name#${vm_name%[0-9]*}}" + + if [ ! -e "/dev/vmm/$vm_name" ]; then + info "$funcname: $vm_name is not loaded. Skipping..." + return + fi + +# Setting up VM PCI devices: + +# 0 hostbridge +# 2 boot block device +# 3:0-7 virtual network devices +# 4 optional ISO block device +# 5 console +# 6:0-7 additional storage devices + +# Note: PCI devices can be single digit 0, or 0:0 with a limit of 8 total +# Simply add another device if 8 is not enough: 7:[0-7] etc. + + case "$vm_dev_type" in + img) + if [ ! -e "${host_vmdir}/${vm_name}/${vm_name}.img" ]; then + info "$funcname: ${host_vmdir}/${vm_name}/${vm_name}.img does not exist. Skipping..." + return + else + vm_device="${host_vmdir}/${vm_name}/${vm_name}.img" + fi + ;; + malloc) + if [ ! -e "/dev/$vm_device" ]; then + info "/dev/$vm_device does not exist. Skipping..." +# fix: return? continue? + return + else + vm_device="/dev/$vm_device" + fi + ;; + zvol) + if [ ! -e "/dev/zvol/${host_zpool}/$vm_name" ]; then + info "/dev/zvol/${host_zpool}/$vm_name does not exist. Skipping..." + return + else + vm_device="/dev/zvol/$host_zpool/$vm_name" + fi + ;; + *) +# fix: is this condition different from "malloc"? Why not set /dev/$vm_device ? + if [ ! -e "/dev/$vm_device" ]; then + info"$funcname: /dev/$vm_device does not exist. Skipping..." + return + fi + ;; +esac + + local console_flags="" + case "$vm_console" in + nmdm) console_flags="-s 5,lpc -l com1,/dev/nmdm${vm_id}A" ;; + *) console_flags="-s 5,lpc -l com1,stdio" + esac + + local iso_flags= + [ "$ISO_BOOT" = "isobootyes" ] && + iso_flags="-s 4,ahci-cd,${host_vmdir}/${vm_name}/${vm_name}.iso" + + local device_flags="" + if [ -n "$vm_devices" ]; then + echo "Additional devices requested: $vm_devices" +# device_flags="" + dev_count=0 + for device in $vm_devices; do + if [ ! -e ${device} ]; then + echo "$device not found. Skipping..." + else +device_flags="$device_flags -s 6:${dev_count},${virtio_type},${device}" + dev_count=$((dev_count+1)) + fi + done + fi + +# MULTIPLE NIC ACROBATICS: +# vm3 has a default NIC of tap8030 NIC on PCI 3:0, tap8031 is NIC 1 on PCI 3:1 +# WHY 8 you might ask? ifconfig can't take "tap020" so we use "tap8020". +# 8 represents infinity... The middle digits represent the VM ID in the tap dev + +info "$funcname: Starting VM Networking. \"File exists\" warnings are okay." + +# Recall that the bridge was created with f_netstart +tap_prefix=8 +tap_base_id=$vm_id +tap_id="$(printf "%02i" "$tap_base_id")" # vm2 "2" -> 02 for tap8020 +tap_unit=0 #Additional vtnet PCI device and tap device suffix + + +### WE REALLY SHOULD CHECK FOR THESE BEFORE ADDING THEM ### +# and not say "File exists" warnings are okay... + +# Initialize the first VM NIC +echo "Running: ifconfig tap${tap_prefix}${tap_id}${tap_unit} create" +ifconfig tap${tap_prefix}${tap_id}${tap_unit} create +nic_flags="-s 3:${tap_unit},virtio-net,tap${tap_prefix}${tap_id}${tap_unit}" +echo "Running: ifconfig bridge${host_bridge} addm tap${tap_prefix}${tap_id}${tap_unit} up" +ifconfig bridge${host_bridge} addm tap${tap_prefix}${tap_id}${tap_unit} up + +# Check for additional requested VM NICs and create + if [ ${vm_addtl_nics:-0} -gt 0 ]; then # if gt "" or "0" additional nics + echo "$vm_addtl_nics additional virtual NICs requested" + while [ $tap_unit -lt $vm_addtl_nics ]; do # start at unit 0 + tap_unit=$((tap_unit+1)) # increment it +nic_flags="$nic_flags -s 3:${tap_unit},virtio-net,tap${tap_prefix}${tap_id}${tap_unit}" +# Informational info or echo commands are not working here because of the loop? +echo "Running: ifconfig tap${tap_prefix}${tap_id}${tap_unit} create" + ifconfig tap${tap_prefix}${tap_id}${tap_unit} create +echo "Running: ifconfig bridge${host_bridge} addm tap${tap_prefix}${tap_id}${tap_unit} up" +ifconfig bridge${host_bridge} addm tap${tap_prefix}${tap_id}${tap_unit} up + done + fi + +# Experimental: Run a preflight script to set up devices, bridges etc. + echo "Checking for preflight script ${host_vmdir}/${vm_name}/${vm_name}. +preflight.sh" + if [ -f "${host_vmdir}/${vm_name}/${vm_name}.preflight.sh" ]; then + echo "Running ${vm_name}.preflight.sh script" + sh ${host_vmdir}/${vm_name}/${vm_name}.preflight.sh + echo "Done running ${vm_name}.preflight.sh script" + echo + fi + +# Hypothetical usage of the preflight script: +# 1. Create malloc devices for use as the boot or additional devices +# 2. Create an additional bridge and reassign the tapXXXX devices to it + +# fix: note: NO indenting for attractive bhyve command output +# fix: Any way to remove double spaces? + +# THE ACTUAL BHYVE COMMAND # + +bhyve_cmd="/usr/sbin/bhyve \ +-c "$vm_cpus" \ +-m "$vm_ram" -A -H \ +"$bhyve_flags" \ +-s "0,${vm_hostbridge}hostbridge" \ +-s "2,$virtio_type,$vm_device" \ +"$nic_flags" \ +"$iso_flags" \ +"$console_flags" \ +"$device_flags" \ +"$vm_name" +" + +# Was -s "3,virtio-net,tap$vm_id" \ before multiple NIC syntax +# fix: Hint: ps -ww is your friend when debugging tmux command execution + + echo + info "$funcname: Running the bhyveload command:\n%s" \ + "$bhyveload_cmd" + local timestamp=$( f_timestamp ) + echo "$timestamp $bhyve_cmd" >> ${host_vmdir}/${vm_name}/${vm_name}.log + case "$vm_console" in + stdio) +# fix: clean up is run upon bhyve exit: + eval "$bhyve_cmd" + f_stop + ;; + nmdm) + if ! kldstat | grep -qwF nmdm.ko; then + info "$funcname: %s is not loaded. Loading..." \ + "nmdm.ko kernel module" + kldload nmdm.ko || die + else + info "$funcname: nmdm.ko is loaded." + fi + info "$funcname: Booting %s on console /dev/nmdm%uA" \ + "$vm_name" "$vm_id" +# eval "$bhyve_cmd" & +( trap "f_stop" EXIT; eval "$bhyve_cmd" ) & +# echo "$bhyve_cmd" > "${host_vmdir}/${vm_name}/output.log" +# eval "$bhyve_cmd" > /dev/null 2>&1 # Or direct to a logfile + ;; + tmux) + info "$funcname: Remember to destroy %s after shutdown\n" \ + "$vm_name" + /usr/local/bin/tmux new -s "$vm_name" "eval $bhyve_cmd" + ;; + tmux-detached) + +### It is tricky to destroy the VM after shutdown when attached to tmux ### + +# /usr/local/bin/tmux new -d -s "$vm_name" "eval $bhyve_cmd" +# This variation will no destroy the VM after VM reboot + /usr/local/bin/tmux new -d -s "$vm_name" "eval $bhyve_cmd ; bhyvectl --destroy --vm=$vm_name " +#tmux new "sh -c '( trap \"touch /tmp/FOO\" EXIT; vi )'" +# This variation attempts to destroy the VM after reboot (needs attention) +# /usr/local/bin/tmux new -d -s $vm_name "( trap \"f_destroy\" EXIT; eval \"$bhyve_cmd\" )" +# fix: preferred syntax but fails: tmux loses the f_destroy function: +# /usr/local/bin/tmux new -d -s "$vm_name" "sh -c ( trap f_destroy EXIT; eval $bhyve_cmd )" +# /usr/local/bin/tmux new -d -s "$vm_name" "( trap f_destroy EXIT; eval "$bhyve_cmd" )" + info "$funcname: Remember to stop %s after shutdown\n" \ + "$vm_name" + info "\nAttach to %s with: tmux attach-session -t %s" \ + "$vm_name" "$vm_name" + info "HINT: Ctrl-b d to detach from it" + ;; + *) + info "Console not defined. Skipping..." + return + esac +} + +# f_stop +# +# Stop bhyve instance associated with $vm_name (argument to script). +# +f_stop() +{ + local funcname=f_stop + + info "Entering $funcname()" + info "$funcname: sending ACPI shutdown to %s" "$vm_name" + /bin/pkill -f $vm_name + info "$funcname: Destroying $vm_name" + /usr/sbin/bhyvectl --destroy --vm="$vm_name" > /dev/null 2>&1 + info "%s destroyed with bhyvectl --destroy" "$vm_name" +# fix: Note that this now supports multiple tap devices and we should +# remove tap members from the bridge first +# info "$funcname: Destroying %s" "tap$vm_id" +# ifconfig "tap$vm_id" destroy + +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + case "$vm_console" in + stdio) + return + ;; + nmdm) + info "Terminating any cu processes associated with $vm_name (hit enter)" + ps axopid,ucomm,command | awk -v ucomm=cu -v find=nmdm${vm_id}B ' + $2 == ucomm { + pid = $1 + sub("^[" FS "]*[^" FS "]+", "") + sub("^[" FS "]*[^" FS "]+", "") + sub("^[" FS "]*[^" FS "]+", "") + if ( $0 ~ find ) print pid + }' | xargs kill +# fix: the above does not result in a prompt. Requires + ;; + tmux*) # fix: was tmux|tmux-detached. Wildcard works? + tmux list-sessions | grep -qwF "$vm_name" || die \ + "$funcname: %s Exiting." \ + "tmux session $vm_name is not running!" + info "$funcname: Destroying the associated tmux session" + tmux kill-session -t "$vm_name" + ;; + *) + return + esac +} + +# f_destroy +# +# Attempt to destroy the bhyve instance associated with $vm_name (argument to +# script). +# +f_destroy() +{ + local funcname=f_destroy + + info "Entering $funcname()" + if [ ! -e "/dev/vmm/$vm_name" ]; then + info "$funcname: $vm_name is not loaded. Skipping..." + # no return as to clean up detached consoles + else + info "$funcname: sending pkill -9 -f to $vm_name" + /bin/pkill -9 -f $vm_name +# fix: perform a wait? + info "$funcname: Destroying $vm_name" + /usr/sbin/bhyvectl --destroy --vm="$vm_name" > /dev/null 2>&1 + info "%s destroyed with bhyvectl --destroy" "$vm_name" +# fix: remove tap members from the bridge, then destroy. See above +# info "$funcname: Destroying %s" "tap$vm_id" +# fix: disabled to stop lag after destroy +# ifconfig "tap$vm_id" destroy + fi + + info "$funcname: Cleaning up detached consoles..." +# fix: Check for the config file first +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + case "$vm_console" in + stdio) +# fix: do I want 'return'? + return + ;; + nmdm) + info "Terminating any cu processes associated with $vm_name (hit enter)" + ps axopid,ucomm,command | awk -v ucomm=cu -v find=nmdm${vm_id}B ' + $2 == ucomm { + pid = $1 + sub("^[" FS "]*[^" FS "]+", "") + sub("^[" FS "]*[^" FS "]+", "") + sub("^[" FS "]*[^" FS "]+", "") + if ( $0 ~ find ) print pid + }' | xargs kill +# return +# info "Removing /dev/nmdm${vm_id}A and /dev/nmdm${vm_id}B" +# rm "/dev/nmdm${vm_id}A" +# rm "/dev/nmdm${vm_id}B" + ;; + tmux|tmux-detached) + tmux list-sessions | grep -qwF "$vm_name" || die \ + "$funcname: %s Exiting." \ + "tmux session $vm_name is not running!" + info "$funcname: Destroying the associated tmux session" + tmux kill-session -t "$vm_name" + ;; + *) + return + esac +} + +# f_attach +# +# Attach to $vm_name in the desired fashion defined by $vm_console. +# +f_attach() +{ + local funcname=f_attach + + info "Entering $funcname()" +# fix: update to "return style? + vm_name="$vm_names" + vm_id="${vm_name#${vm_name%[0-9]*}}" + [ -e "/dev/vmm/$vm_name" ] || + die "$funcname: %s is not loaded! Exiting." "$vm_name" +# f_readconfig_exit + . "$host_vmdir/$vm_name/${vm_name}.conf" + case "$vm_console" in + stdio) + die "%s\n%s" \ + "Something must have gone wrong if you cannot see the" \ + "VM in the console you launched it on. Exiting." + ;; + nmdm) + [ -e "/dev/nmdm${vm_id}B" ] || die "$funcname: nmdm device not found" + info "Remember you can detach with \" ~ CTRL-d \"" + /usr/bin/cu -l "/dev/nmdm${vm_id}B" -s 9600 + ;; + tmux|tmux-detached) +# fix: Check here if the session in fact exists? + info "Remember you can detach with \" CTRL-b d \"" + tmux attach-session -t "$vm_name" + ;; + *) + die "vm_console not defined. Exiting." + esac +} + +# f_iso +# +# Create a storage device, fetch an installation ISO and boot to that ISO. +# +f_iso() +{ + local funcname=f_iso + + info "Entering $funcname()" + vm_name=$vm_names +# vm_id="${vm_name#${vm_name%[0-9]*}}" +# f_readconfig_exit + . "$host_vmdir/$vm_name/${vm_name}.conf" + + case "$vm_dev_type" in + img) + if [ -e "${host_vmdir}/${vm_name}/${vm_name}.img" ]; then + info "$funcname: ${host_vmdir}/${vm_name}/${vm_name}.img found." + vm_device="${host_vmdir}/${vm_name}/${vm_name}.img" + else + info "$funcname: ${host_vmdir}/${vm_name}/${vm_name}.img does not exist. Formatting..." + f_format + vm_device="${host_vmdir}/${vm_name}/${vm_name}.img" + fi ;; + zvol) + if [ -e "/dev/zvol/${host_zpool}/$vm_name" ]; then + info "/dev/zvol/${host_zpool}/$vm_name found." + vm_device="/dev/zvol/$host_zpool/$vm_name" + else + info "$funcname: /dev/zvol/$host_zpool/$vm_name does not exist. Formatting..." + f_format + vm_device="/dev/zvol/$host_zpool/$vm_name" + fi ;; + *) + if [ ! -e "$vm_device" ]; then + info "$vm_device does not exist. Skipping..." + return # otherwise we stay with the user-defined vm_device + fi + esac + +# [ -e "${host_vmdir}/${vm_name}/${vm_name}.img" ] && die "\n%s\n%s Exiting." \ +# "$funcname: ${host_vmdir}/${vm_name}/${vm_name}.img already exists!" \ +# "$funcname: \"delete\" it first." +# f_readconfig_exit + + info "$funcname: Checking for ${host_distdir}/$vm_os_ver/" + if [ ! -d "${host_distdir}/$vm_os_ver/" ]; then + info "$funcname: \"%s\" does not exist. Creating it..." \ + "${host_distdir}/$vm_os_ver/" + mkdir -p "${host_distdir}/$vm_os_ver/" || die + fi + + info "$funcname: Checking for ${host_vmdir}/${vm_name}/${vm_name}.iso" + if [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.iso" ]; then + if [ ! -f "${host_distdir}/$vm_os_ver/$iso_img" ]; then + info "$funcname: Fetching %s" "$iso_img" + fetch "$iso_site/$iso_img" -o "${host_distdir}/$vm_os_ver/" || die + info "$funcname: Copying %s to %s" "$iso_img" "${host_vmdir}/${vm_name}/${vm_name}.iso" + fi + [ -f "${host_distdir}/$vm_os_ver/$iso_img" ] || + die "$funcname: %s did not fetch! Exiting." "$iso_img" + info "Copying %s to %s" "$iso_img" "${host_vmdir}/${vm_name}/${vm_name}.iso" + ln -sf "${host_distdir}/$vm_os_ver/$iso_img" "${host_vmdir}/${vm_name}/${vm_name}.iso" + [ -f "${host_vmdir}/${vm_name}/${vm_name}.iso" ] || + die "$funcname: %s did not copy! Exiting." "${host_vmdir}/${vm_name}/${vm_name}.iso" + fi + + ISO_BOOT="isobootyes" # Setting to inform f_boot() to use the ISO + +# fix: This maybe should be normal f_load with and ISO_BOOT check +# [ "$ISO_BOOT" = "isobootyes" ] && ... in f_load +# key point: $vm_device is set to the ISO image + + if [ -e "/dev/vmm/$vm_name" ]; then + info "$funcname: $vm_name is already loaded" + else + if [ "$vm_os_type" = "freebsd" ]; then + info "$funcname: WARNING! This will not set the serial tty!" + bhyveload_cmd="/usr/sbin/bhyveload -m $vm_ram -d \ + ${host_vmdir}/${vm_name}/${vm_name}.iso $vm_name" + info "$funcname: Running the bhyveload command:\n%s" \ + "$bhyveload_cmd" + local timestamp=$( f_timestamp ) + echo "$timestamp $bhyveload_cmd" >> ${host_vmdir}/${vm_name}/${vm_name}.log + eval "$bhyveload_cmd" + else + info "$funcname: Creating ${host_vmdir}/${vm_name}/device.map" + echo "(hd0) $vm_device" > "${host_vmdir}/${vm_name}/device.map" + echo "(cd0) ${host_vmdir}/${vm_name}/${vm_name}.iso" >> "${host_vmdir}/${vm_name}/device.map" + cat "${host_vmdir}/${vm_name}/device.map" + info "$funcname: Running the ISO grub command:\n%s" \ + "$grub_iso_cmd" + local timestamp=$( f_timestamp ) + echo "$timestamp $grub_iso_cmd" >> ${host_vmdir}/${vm_name}/${vm_name}.log + eval "$grub_iso_cmd" + fi + fi + info "funcname: Calling f_boot" + f_boot +} + +# f_grub +# +# Configure device map and execute grub-bhyve command. +# +f_grub() +{ + local funcname=f_grub + + info "Entering $funcname()" + vm_name=$vm_names +# f_readconfig_exit + . "$host_vmdir/$vm_name/${vm_name}.conf" + info "$funcname: Creating ${host_vmdir}/${vm_name}/device.map" + echo "(hd0) ${host_vmdir}/${vm_name}/${vm_name}.img" > "${host_vmdir}/${vm_name}/device.map" + echo "(cd0) ${host_vmdir}/${vm_name}/${vm_name}.iso" >> "${host_vmdir}/${vm_name}/device.map" + cat "${host_vmdir}/${vm_name}/device.map" + grub_cmd="/usr/local/sbin/grub-bhyve -m "${host_vmdir}/${vm_name}/device.map" -M "$vm_ram" "$vm_name"" + info "$funcname: Running the bhyveload command:\n%s" \ + "$grub_cmd" + local timestamp=$( f_timestamp ) + echo "$timestamp $grub_cmd" >> ${host_vmdir}/${vm_name}/${vm_name}.log + eval "$grub_cmd" +} + +# f_mount +# +# Mount the vm_device associated with $vm_name. Optionally performs +# fsck_ufs(8) (FreeBSD only). Causes premature termination with error message +# if already mounted or if missing any required devices or image files. +# +f_mount() +{ + local funcname=f_mount + local devs + vm_name=$vm_names +# f_readconfig_exit + . "$host_vmdir/$vm_name/${vm_name}.conf" + [ "$vm_os_type" = "freebsd" ] || + die "$funcname: Only supported for FreeBSD VMs" + f_umount + info "Entering $funcname()" + info "$funcname: Checking if %s is loaded" "$vm_name" + [ -e "/dev/vmm/$vm_name" ] && + die "$funcname: %s is loaded! Exiting." "$vm_name" + + case "$vm_dev_type" in + img|malloc) + + info "$funcname: Checking if raw disk %s is mounted?" "${host_vmdir}/${vm_name}/${vm_name}.img" + [ -f "${host_vmdir}/${vm_name}/${vm_name}.img" ] || + die "$funcname: %s does not exist! Exiting" "${host_vmdir}/${vm_name}/${vm_name}.img" + info "$funcname: checking for attached device..." + devs=$( f_getmdname ) + [ "$devs" ] && die "$funcname: %s\n$funcname: %s" \ + "$vm_name: already attached to $devs" "Exiting." + + info "$funcname: Checking for %s" "${host_vmdir}/${vm_name}/${vm_name}.img" + [ -e "${host_vmdir}/${vm_name}/${vm_name}.img" ] || + die "$funcname: %s does not exist! Exiting." "${host_vmdir}/${vm_name}/${vm_name}.img" + info "$funcname: Attaching to %s with mdconfig(8)" "${host_vmdir}/${vm_name}/${vm_name}.img" + vm_device="/dev/$( mdconfig -af "${host_vmdir}/${vm_name}/${vm_name}.img" )" || die + info "$funcname: Checking for device /dev/%s" "$vm_device" + ;; + + zvol) + if [ ! -e "/dev/zvol/${host_zpool}/$vm_name" ]; then + info "/dev/zvol/${host_zpool}/$vm_name already exists! \"destroy\" it first. Exiting." + die + else + vm_device="/dev/zvol/$host_zpool/$vm_name" + fi + ;; + *) + if [ ! -e "$vm_device" ]; then + die "$funcname: vm_device %s does not exist! Exiting." \ + "$vm_device" + fi + ;; + esac + + case "$vm_dev_layout" in +# fix: Why is Mm... failing? +# [Mm][Bb][Rr]) + mbr) + vol_part="${vm_device}s1a" ;; +# Gg][Pp][Tt]) + gpt) + vol_part="${vm_device}p2" ;; + *) + die "Invalid VM device layout" + esac + + info "$funcname: Running fsck_ufs -y %s" "$vol_part" + fsck_ufs -y "$vol_part" + + if [ ! -d "${host_vmdir}/${vm_name}/mnt" ]; then + info "$funcname: Creating %s directory" "${host_vmdir}/${vm_name}/mnt" + mkdir -p "${host_vmdir}/${vm_name}/mnt" || die + fi + +# fix: CHECK FOR UFS OR ZFS HERE, MOUNT POOL AS APPRPRIATE + info "$funcname: Running mount %s %s" "$vol_part" "${host_vmdir}/${vm_name}/mnt/" + mount "$vol_part" "${host_vmdir}/${vm_name}/mnt/" +} + +# f_umount +# +# Unmount the vm_device associated with $vm_name. Causes premature termination +# with error message if not mounted. +# +f_umount() +{ + local funcname=f_umount + vm_name=$vm_names + info "Entering $funcname()" + [ -e "/dev/vmm/$vm_name" ] && + die "$funcname: %s is loaded! Exiting." "$vm_name" + if [ "$( mount | grep -o "${vm_name}/mnt" )" != "${vm_name}/mnt" ]; then + info "$funcname: %s is not mounted on %s" "$vm_name" "${host_vmdir}/${vm_name}/mnt/" + else + if [ "$( mount | grep -o "${host_vmdir}/${vm_name}/mnt/dev" )" != "${host_vmdir}/${vm_name}/mnt/dev" ] + then + info "$funcname: Unmounting %s in case it was jailed" \ + "${host_vmdir}/${vm_name}/mnt/dev" + umount -f "${host_vmdir}/${vm_name}/mnt/dev" + fi + info "$funcname: Unmounting %s" "${host_vmdir}/${vm_name}/mnt/" + umount -f "${host_vmdir}/${vm_name}/mnt/" + fi +# f_readconfig_exit + . "$host_vmdir/$vm_name/${vm_name}.conf" + if [ "$vm_dev_type" = "img" ]; then + info "DEBUG: Destroying memory devices if type img" + f_mddestroy + fi +} + +# f_format +# +# Format the disk image for $vm_name (argument to script). +# +f_format() +{ + local funcname=f_format + + info "Entering $funcname()" + vm_name=$vm_names + [ -e "/dev/vmm/$vm_name" ] && + die "$funcname: %s is loaded! Exiting." "$vm_name" +# f_readconfig_exit + . "$host_vmdir/$vm_name/${vm_name}.conf" + if [ "$vm_dev_type" = "img" ]; then + if [ -e "${host_vmdir}/${vm_name}/${vm_name}.img" ]; then + info "$funcname: ${host_vmdir}/${vm_name}/${vm_name}.img already exists. Skipping..." + return + else + info "$funcname: Creating ${host_vmdir}/${vm_name}/${vm_name}.img" +# truncate -s "$vm_dev_size" "${host_vmdir}/${vm_name}/${vm_name}.img" + dd if=/dev/zero of="${host_vmdir}/${vm_name}/${vm_name}.img" bs=1 count=0 seek="$vm_dev_size" + + info "DEBUG: ls %s" "${host_vmdir}/${vm_name}" + ls "${host_vmdir}/${vm_name}" + info "$funcname: Attaching %s with mdconfig %s" "${host_vmdir}/${vm_name}/${vm_name}.img" \ + "and setting vm_device at the same time" + vm_device=$( mdconfig -af "${host_vmdir}/${vm_name}/${vm_name}.img" ) + info "$funcname: DEBUG: Running mdconfig -lv" + mdconfig -lv + fi + elif [ "$vm_dev_type" = "zvol" ]; then + if [ -e "/dev/zvol/${host_zpool}/$vm_name" ]; then + info "/dev/zvol/${host_zpool}/$vm_name already exists. Skipping..." + return + else + info "$funcname: Creating %s with zfs" "/dev/zvol/$host_zpool/$vm_name" + zfs create -V "$vm_dev_size" "$host_zpool/$vm_name" + vm_device="/dev/zvol/$host_zpool/$vm_name" + fi + elif [ ! -c "/dev/$vm_device" ]; then +# fix: correct response below? + info "$funcname: mdconfig did not create %s" "$vm_device" + info "$funcname: DEBUG: Running mdconfig -lv" + mdconfig -lv + die + fi + +# info "$funcname: Running gpart destroy -F %s" "/dev/$vm_device" +# gpart destroy -F "/dev/$vm_device" + +# info "$funcname: Running dd if=/dev/zero of=%s bs=512 count=1" \ +# "/dev/$vm_device" +# dd if=/dev/zero of="/dev/$vm_device" bs=512 count=1 + + case "$vm_dev_layout" in +# fix: Why is this failing? +# [Mm][Bb][Rr]) + mbr) + info "$funcname: Running fdisk -BI %s" "$vm_device" + fdisk -BI "$vm_device" + + info "$funcname: Running bsdlabel -wB %s" "${vm_device}s1" + bsdlabel -wB "${vm_device}s1" + + # Possible alternative + #info "$funcname: Running bsdlabel -w %s auto" "$vm_device" + #bsdlabel -w "$vm_device" auto + + info "$funcname: Running newfs -U %s" "${vm_device}s1a" + newfs -U "${vm_device}s1a" + ;; +# Gg][Pp][Tt]) + gpt) # Assume gpt + gpart create -s gpt "$vm_device" + gpart add -t freebsd-boot -s 256k "$vm_device" + gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 "$vm_device" + # or /boot/gptboot + # bootcode to have zfsgptboot + gpart add -t freebsd-ufs "$vm_device" + #freebsd-zfs + + info "\n$funcname: DEBUG: show %s" "$vm_device" + gpart show "$vm_device" + info "\n$funcname: Running newfs -U %s" "${vm_device}p2" + newfs -U "${vm_device}p2" + # zpool create + ;; + *) + die "Invalid VM device layout" + esac + [ "$vm_dev_type" = "img" ] && mdconfig -du "$vm_device" +} + +# f_fetch +# +# Fetch FreeBSD distribution. +# +f_fetch() +{ + local funcame=f_fetch + local dir + + info "Entering $funcname()" + vm_name=$vm_names +# f_readconfig_exit + . "$host_vmdir/$vm_name/${vm_name}.conf" + [ "$vm_os_type" = "freebsd" ] || + die "$funcname: Not supported on $vm_os_type VMs! Exiting." + [ -d "${host_distdir}/$vm_os_ver" ] || + info "$funcname: Creating %s directory" "${host_distdir}/$vm_os_ver" + mkdir -p "${host_distdir}/$vm_os_ver" + + if [ -e "${host_distdir}/$vm_os_ver/base.txz" ]; then + info "$funcname: base.txz already exists." + else + info "Fetching %s" "$dist_site/base.txz" + fetch "$dist_site/base.txz" -o "${host_distdir}/$vm_os_ver/" + [ -e "${host_distdir}/$vm_os_ver/base.txz" ] || + die "$funcname: base.txz was not fetched! Exiting." + + info "Fetching %s" "$dist_site/kernel.txz" + fetch "$dist_site/kernel.txz" -o "${host_distdir}/$vm_os_ver/" + [ -e "${host_distdir}/$vm_os_ver/kernel.txz" ] || + die "$funcname: kernel.txz was not fetched! Exiting." + fi +} + + +################################################## LOOPING TOP FUNCTIONS + +# vm_start +# +# Start function. Takes in vm_names and vm_count, outputs vm_name, vm_id +# +vm_start() +{ + # Put your preflight steps here: + # /etc/rc.d/pf stop # stop packet filtering on PC-BSD + + case "$vm_count" in + 0) info "$name: starting all VM's in $host_vmdir" + local found + for vm_found in "$host_vmdir"/*; do + [ -d "${host_vmdir}/${vm_name}" ] || continue # fix: why? + vm_name="${vm_found##*/}" + vm_id="${vm_name#${vm_name%[0-9]*}}" + [ "$vm_name" = "distributions" ] && continue + found=1 + echo "Parsing $vm_name" + if [ -e "/dev/vmm/$vm_name" ]; then +# fix: proper way to integrate f_readconfig_return() + info "$name: $vm_name is loaded. Skipping..." + elif [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + else + echo "Reading $host_vmdir/$vm_name/${vm_name}.conf" + . "$host_vmdir/$vm_name/${vm_name}.conf" +# f_readconfig_return + f_load + f_boot + fi + done + [ "$found" ] || die "$name: No VMs found! Exiting." + ;; + 1) info "$name: starting $vm_names" + vm_name="$vm_names" + vm_id="${vm_name#${vm_name%[0-9]*}}" + if [ -e "/dev/vmm/$vm_name" ]; then + info "$name: $vm_name is loaded. Skipping..." + elif [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + exit + else + info "starting %s" "$vm_name" +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_load + f_boot + fi + ;; + *) info "$name: starting VMs $vm_names" + for vm_name in $vm_names; do + vm_id="${vm_name#${vm_name%[0-9]*}}" + if [ -e "/dev/vmm/$vm_name" ]; then + info "$name: $vm_name is loaded. Skipping..." + elif [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + else + info "$name: starting %s" "$vm_name" +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_load + f_boot + fi + done + esac +} + +# vm_stop +# +# Stop function. Takes in vm_names and vm_count, outputs vm_name, vm_id +# +vm_stop() +{ + case "$vm_count" in + 0) info "$name: stopping all VMs in $host_vmdir" + local found + for vm_found in "$host_vmdir"/*; do + vm_name="${vm_found##*/}" + vm_id="${vm_name#${vm_name%[0-9]*}}" + [ "$vm_name" = "distributions" ] && continue + found=1 + if [ ! -e "/dev/vmm/$vm_name" ]; then + info "$name: $vm_name is not loaded. Skipping..." + else + info "$name: stopping $vm_name" + f_stop + fi + done + [ "$found" ] || die "$name: No VMs found! Exiting." + ;; + 1) info "$name: stopping %s $vm_names" + vm_name="$vm_names" + vm_id="${vm_name#${vm_name%[0-9]*}}" + f_stop + ;; + *) info "$name: stopping VMs $vm_names" + for vm_name in $vm_names; do + vm_id="${vm_name#${vm_name%[0-9]*}}" + f_stop + done + esac +} + +# vm_restart +# +# Restart function. +# +vm_restart() +{ + case "$vm_count" in + 0) info "$name: starting all VM's in $host_vmdir" + local found + for vm_found in "$host_vmdir"/*; do + [ -d "${host_vmdir}/${vm_name}" ] || continue # fix: why? + vm_name="${vm_found##*/}" + vm_id="${vm_name#${vm_name%[0-9]*}}" + [ "$vm_name" = "distributions" ] && continue + found=1 + if [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + else +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_stop + f_load + f_boot + fi + done + [ "$found" ] || die "$name: No VMs found! Exiting." + ;; + 1) info "$name: starting $vm_names" + vm_name="$vm_names" + vm_id="${vm_name#${vm_name%[0-9]*}}" + if [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + exit + else + info "starting %s" "$vm_name" +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_stop + f_load + f_boot + fi + ;; + *) info "$name: starting VMs $vm_names" + for vm_name in $vm_names; do + vm_id="${vm_name#${vm_name%[0-9]*}}" + if [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + fi + info "$name: starting %s" "$vm_name" +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_stop + f_load + f_boot + done + esac +} + +# vm_status +# +# Status function. +# +vm_status() +{ + case "$vm_count" in + 0) info "$name: listing loaded VMs" + if [ ! -d /dev/vmm/ ]; then + die "$name: No VMs running." + else + ls /dev/vmm/* + fi + ;; + 1) info "$name: checking status of %s $vm_names" + if [ -e "/dev/vmm/$vm_names" ]; then + info "status: %s is loaded." "$vm_names" + else + die "status: %s is not loaded." "$vm_names" + fi + ;; + *) info "$name: checking status of %s $vm_names" + for vm_name in $vm_names; do + if [ -e "/dev/vmm/$vm_name" ]; then + info "$name: %s is loaded." "$vm_name" + else + die "$name: %s is not loaded." "$vm_name" + fi + done + esac +} + +# vm_load +# +# Load function. +# +vm_load() +{ + case "$vm_count" in + 0) info "$name: starting all VM's in $host_vmdir" + local found + for vm_found in "$host_vmdir"/*; do + [ -d "${host_vmdir}/${vm_name}" ] || continue # fix: why? + vm_name="${vm_found##*/}" + vm_id="${vm_name#${vm_name%[0-9]*}}" + [ "$vm_name" = "distributions" ] && continue + found=1 + if [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + else +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_load + fi + done + [ "$found" ] || die "$name: No VMs found! Exiting." + ;; + 1) info "$name: starting $vm_names" + vm_name="$vm_names" + vm_id="${vm_name#${vm_name%[0-9]*}}" + if [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + exit + else + info "starting %s" "$vm_name" +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_load + fi + ;; + *) info "$name: starting VMs $vm_names" + for vm_name in $vm_names; do + vm_id="${vm_name#${vm_name%[0-9]*}}" + if [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + fi + info "$name: starting %s" "$vm_name" +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_load + done + + esac +} + +# vm_boot +# +# Boot function. +# +vm_boot() +{ + case "$vm_count" in + 0) info "$name: starting all VM's in $host_vmdir" + local found + for vm_found in "$host_vmdir"/*; do + [ -d "${host_vmdir}/${vm_name}" ] || continue # fix: why? + vm_name="${vm_found##*/}" + vm_id="${vm_name#${vm_name%[0-9]*}}" + [ "$vm_name" = "distributions" ] && continue + found=1 + if [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + else +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_boot + fi + done + [ "$found" ] || die "$name: No VMs found! Exiting." + ;; + 1) info "$name: starting $vm_names" + vm_name="$vm_names" + vm_id="${vm_name#${vm_name%[0-9]*}}" + if [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + exit + else + info "starting %s" "$vm_name" +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_boot + fi + ;; + *) info "$name: starting VMs $vm_names" + for vm_name in $vm_names; do + vm_id="${vm_name#${vm_name%[0-9]*}}" + if [ ! -f "${host_vmdir}/${vm_name}/${vm_name}.conf" ]; then + info "$name: $vm_name: no configuration file found: Skipping..." + fi + info "$name: starting %s" "$vm_name" +# f_readconfig_return + . "$host_vmdir/$vm_name/${vm_name}.conf" + f_boot + done + esac +} + +# vm_destroy +# +# Destroy function. +# +vm_destroy() +{ + case "$vm_count" in + 0) info "$name: stopping all VMs in $host_vmdir" + local found + for vm_found in "$host_vmdir"/*; do + vm_name="${vm_found##*/}" + vm_id="${vm_name#${vm_name%[0-9]*}}" + [ "$vm_name" = "distributions" ] && continue + found=1 + f_destroy + done + [ "$found" ] || die "$name: No VMs found! Exiting." + ;; + 1) info "$name: stopping %s $vm_names" + vm_name="$vm_names" + vm_id="${vm_name#${vm_name%[0-9]*}}" + f_destroy + ;; + *) info "$name: stopping VMs $vm_names" + for vm_name in $vm_names; do + vm_id="${vm_name#${vm_name%[0-9]*}}" + f_destroy + done + esac +} + +############################################## NON-LOOPING TOP FUNCTIONS + +# vm_attach +# +# Attach function. +# +vm_attach() +{ + case "$vm_count" in + 0) info "$name: please specify a single VM by name" + exit 1 + ;; + 1) info "$name: attaching to %s $vm_names" + f_attach + ;; + *) info "$name: please specify a single VM by name" + exit 1 + esac +} + +# vm_debug +# +# Debug function. +# +vm_debug() # Display debugging information +{ + case "$vm_count" in + 0) info "$name: please specify a single VM by name" + exit 1 + ;; + 1) info "$name: displaying debug information for %s $vm_names" + vm_name="$vm_names" + [ -e "/dev/vmm/$vm_name" ] || + die "DEBUG: %s is not running! Exiting." "$vm_name" + /usr/sbin/bhyvectl --get-all --vm="$vm_name" + ;; + *) info "$name: please specify a single VM by name" + exit 1 + esac +} + +# vm_iso +# +# ISO function. +# +vm_iso() +{ + case "$vm_count" in + 0) info "$name: please specify a single VM by name" + exit 1 + ;; + 1) info "$name: booting the ISO for VM %s $vm_names" + f_grubcheck + f_tmuxcheck + f_eptcheck + f_vmmcheck + f_netstart + f_iso + ;; + *) info "$name: please specify a single VM by name" + exit 1 + esac +} + +# vm_grub +# +# Grub function. +# +vm_grub() +{ + case "$vm_count" in + 0) info "$name: please specify a single VM by name" + exit 1 + ;; + 1) info "$name: booting the ISO for VM %s $vm_names" + f_grubcheck + f_tmuxcheck + f_eptcheck + f_vmmcheck + f_netstart + f_grub + ;; + *) info "$name: please specify a single VM by name" + exit 1 + esac +} + +# vm_jail +# +# Jail function. +# +vm_jail() +{ + case "$vm_count" in + 0) info "$name: please specify a single VM by name" + exit 1 + ;; + 1) info "$name: booting VM %s as a jail $vm_names" + f_mount + echo "DEBUG: Running: $host_vmdir/$vm_name/mnt" + ls $host_vmdir/$vm_name/mnt +# f_readconfig_exit + vm_name="$vm_names" + . "$host_vmdir/$vm_name/${vm_name}.conf" + info "$name: Experimental but should work" + info "flags like \"sendmail_enable\", \"inetd_flags\" and" + info "\"rpcbind_enable\" are not configured during auto-provisiong" +# fix: Note: mount.devfs requires a full path and may fail (is it correct?) + info "" + jail_cmd="/usr/sbin/jail \ +-c path=${host_vmdir}/$vm_name/mnt/ mount.devfs \ +ip4.addr=$vm_ipv4 command=/bin/sh + " # END-QUOTE + info "$name: Running the jail(8) command:\n%s" "$jail_cmd" + local timestamp=$( f_timestamp ) + echo "$timestamp $jail_cmd" >> ${host_vmdir}/${vm_name}/${vm_name}.log + eval "$jail_cmd" + f_umount + ;; + *) info "$name: please specify a single VM by name" + exit 1 + esac +} + +# vm_qemu +# +# Qemu function. +# +vm_qemu() +{ + case "$vm_count" in + 0) info "$name: please specify a single VM by name" + exit 1 + ;; + 1) info "$name: booting VM $vm_names under qemu" + vm_name="$vm_names" + . "$host_vmdir/$vm_name/${vm_name}.conf" + +# type qemu-system-x86_64 > /dev/null 2>&1 || +# die "qemu is not installed! ports/emulators/qemu Exiting." +# info "Backgrounding VM %s booted from %s on display" \ +# "$vm_id" "${host_vmdir}/${vm_name}/${vm_name}.img" "$vm_id" +# fix: a PC-BSD path for testing +/usr/pbi/bin/qemu-system-x86_64 -localtime -boot once=d -cdrom ${host_vmdir}/${vm_name}/${vm_name}.iso ${host_vmdir}/${vm_name}/${vm_name}.img -m $vm_ram -vnc :$vm_id -usbdevice tablet & + ;; +# Default port is 5901 and nic em0, which you can dhcp to. +# -boot c -net nic -net user +# -vnc :1002,password + *) info "$name: please specify a single VM by name" + exit 1 + esac +} + +# vm_mount +# +# Mount function. +# +vm_mount() +{ + case "$vm_count" in + 0) info "$name: please specify a single VM by name" + exit 1 + ;; + 1) info "$name: mounting VM %s $vm_names" + f_mount + ;; + *) info "$name: please specify a single VM by name" + exit 1 + esac +} + +# vm_umount +# +# Umount function. +# +vm_umount() +{ + case "$vm_count" in + 0) info "$name: please specify a single VM by name" + exit 1 + ;; + 1) info "$name: unmounting VM %s $vm_names" + f_umount + ;; + *) info "$name: please specify a single VM by name" + exit 1 + esac +} + +# vm_format +# +# Format function. +# +vm_format() +{ + case "$vm_count" in + 0) info "$name: please specify a single VM by name" + exit 1 + ;; + 1) info "$name: formatting VM %s $vm_names" + f_format + ;; + *) info "$name: please specify a single VM by name" + exit 1 + esac +} + +# vm_delete +# +# Delete function. +# +vm_delete() +{ + case "$vm_count" in + 0) info "$name: please specify one or more individual VMs by name" + exit 1 + ;; + 1) info "$name: deleting %s $vm_names" + vm_name="$vm_names" + if [ -e "/dev/vmm/$vm_name" ]; then + info "$name: $vm_name is loaded. Skipping..." + return + elif [ ! -e "${host_vmdir}/${vm_name}" ]; then + info "$name: $vm_name does not exist. Skipping..." + else + f_destroy + f_umount + chflags -R noschg "${host_vmdir}/${vm_name}" + rm -rf "${host_vmdir}/${vm_name}" +# Fix: destroy VM zvol if zvol-based + fi + ;; + *) info "$name: stopping VMs $vm_names" + for vm_name in $vm_names; do + if [ -e "/dev/vmm/$vm_name" ]; then + info "$name: $vm_name is loaded. Skipping..." + return + elif [ ! -e "${host_vmdir}/${vm_name}" ]; then + info "$name: $vm_name does not exist. Skipping..." + else + f_destroy + f_umount + chflags -R noschg "${host_vmdir}/${vm_name}" + rm -rf "${host_vmdir}/${vm_name}" +# Fix: destroy VM zvol if zvol-based + fi + done + esac + +} + +############################################################ MAIN SOURCE + +exec 3>&1 # Duplicate stdout to file descriptor 3; used by info() + +# Preserving $1, $* and $# in meaningful ways +vm_cmd="$1" # the rc argument, "start", "stop" etc. +[ $# -gt 0 ] && shift 1 # strip off the rc command, leaving string of VM's +vm_names="$*" # all VM to act on (preserver $*) DO NOT RE-INITIALIZE +vm_count="$#" # number of vm's passed in (preserve $#) DO NOT RE-INITIALIZE + +# INITIALIZING DEFAULTS + +vm_hostbridge="" +bhyve_flags="" +virtio_type="" + +# READING CONFIG FILE + +if [ ! -f "/usr/local/etc/vm.conf" ]; then + info "/usr/local/etc/vm.conf does not exist. Exiting." + exit +else + . /usr/local/etc/vm.conf +fi + +load_rc_config $name +run_rc_command "$vm_cmd" + +######################################################################## +# END +######################################################################## diff --git a/usr/local/etc/vm.conf b/vm.conf similarity index 88% rename from usr/local/etc/vm.conf rename to vm.conf index d7d0fc5..2e04ea1 100755 --- a/usr/local/etc/vm.conf +++ b/vm.conf @@ -6,4 +6,4 @@ host_vmroot="/usr/local/vmrc/" # Directory for all vmrc components host_vmdir="/usr/local/vmrc/vm/" # VM disk images and mount points host_distdir="/usr/local/vmrc/distributions/" # OS Distributions host_templates="/usr/local/vmrc/templates/" # VM Templates -host_zpool="tank1" # ZFS pool for VM zvols +host_zpool="zroot" # ZFS pool for VM zvols diff --git a/vmrc-instructions.txt b/vmrc-instructions.txt index fceac23..6c1d42c 100755 --- a/vmrc-instructions.txt +++ b/vmrc-instructions.txt @@ -1,51 +1,11 @@ -################################################################ LICENSE -# -# Copyright (c) 2012-2014 Michael Dexter -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -############################################################ INFORMATION -# -# Title: virtual machine rc script instructions -# Version: v.0.7 -# -# vmrc usage instructions and developer notes -# -######################################################################## +Copyright (c) 2012-2014 Michael Dexter +Version: v.0.6.1 Thank you for trying vmrc, the Virtual Machine rc script. -#Consider using the latest version from... -# (use the snapshot for now!) -# https://github.com/michaeldexter/vmrc -# -#...on DEDICATED hardware with FreeBSD 10.0-RELEASE or later. - -The Intel "POPCNT" (EPT) processor feature is required for bhyve operation. - - -SIGNIFICANT CHANGES from .0.6.1 to .0.7 - -* Sweeping restructuring and style changes (400+ line reduction in vm length) -* Increased tests and VM cleanup upon exit -* Some template format changes -* Improved QEMU support -* Added generated ifconfig_cmd.sh, bhyveload_cmd.sh, bhyve_cmd.sh and - grub_cmd.sh scripts in the VM directory -* Added raw image (VM-IMAGE/flashrd/FreeNAS/pfSense etc.) install option -* Added src/obj install option -* Added fine-grained ZFS feature flag support (11 host would only allow 11 VMs) -* Added GNU screen support +If you did NOT just download this, redownload it for the lastest version +as it is highly-experimental and changing rapidly. See the "TO DO" section +for known issues and feature ideas. CHANGES from .0.5 to .0.6 @@ -65,82 +25,83 @@ library of functions and templates. * Experimental ZFS on root support is included but requires the included zfs-boot components or a recent snapshot. - -### OVERVIEW ### - -This tool has come a long way from a 2005 jail(8) provisioning and management -script to a 2012 FreeBSD 9.0 bhyve build script to a series of sequential -FreeBSD 10.* VM provisioning and management scripts. +This has come a long way from a 2005 jail(8) provisioning and management script +to a 2012 FreeBSD 9.0 bhyve build script to a series of sequential FreeBSD 10.* +VM provisioning and management scripts. Because bhyve is only the latest multiplicity solution on FreeBSD, this -rc script includes basic jail and QEMU support and could include VirtualBox, -chroot, simh and GXemul support. Of these, QEMU is intended to help prepare -OSs that require VirtIO and console adjustments prior to booting under bhyve. +rc script includes basic jail and qemu support and could include chroot, simh +and GXemul support. Of these, QEMU is intended to help prepare OSs like OpenBSD +that require VirtIO and console adjustments prior to booting under bhyve. ### CHEAT SHEET ### -Run "sh install-vmrc.sh" or read it and perform the steps manually, adjusting -the paths to suit your system. +Unpack vmrc.tar or retrieve the latest version from GitHub: -Verify your host_nic and optional host_zpool in /usr/local/etc/vm.conf +https://github.com/michaeldexter/vmrc -The mkvm.sh script provisions Virtual Machines based on the templates in -/usr/local/vmrc/templates -mkvm.sh can be used in a captive manner with: +## FreeBSD VMs ## -sh mkvm.sh +Run 'sh install-vmrc.sh' or read it and perform the steps manually. -or by passing in a template name and a VM name. i.e.: +Run templates/install-templates.sh to install all templates into: -sh mkvm.sh fbsd10amd64_img_gpt_ufs_dist freebsd - -which will create a VM named "freebsd#" where "#" is a unique, auto-generated -VM ID number such as "0", resulting in a VM named "freebsd0" in: +/usr/local/vmrc/templates -/usr/local/vmrc/vm/freebsd0 +Verify your host_nic and optional host_zpool in /usr/local/etc/vm.conf -The template naming is based on its configuration variables. In this example: +The mkvm.sh script can provision a Virtual Machine based on one of the +included templates in /usr/local/vmrc/templates -fbsd10: FreeBSD 10 Operating System -amd64: AMD64 Architecture -img: Disk Image-based Storage -gpt: GPT Partitioned Filesystem -ufs: UFS Formatted Filesystem -dist: Binary Distribution Set Installation Method +mkvm.sh can be used in a captive manner or by passing in a template name and a +VM name. i.e.: sh mkvm.sh t_freebsd10 freebsd which will create a VM named +freebsd followed by an auto-generated number such as 3: freebsd3 -All vmrc VMs are distinguished by unique trailing ID numbers: +Note that all VMs are distinguished by unique trailing ID numbers: OK: vm0, freebsd1, openbsd2 -CONFLICTING: vm0, freebsd0 and openbsd0 (trailing ID number must be unique) +NOT OK: vm0, freebsd0 and openbsd0 + +Consider using a numeric word to describe an OS version such as "freebsd-ten3" + +Once a VM is provisioned, run: + +/usr/local/etc/rc.d/vm (Show usage) +/usr/local/etc/rc.d/vm start (Loads and boots all VMs) +/usr/local/etc/rc.d/vm start vm0 (Start a specific VM) + +The vm rc script can also be called with the service(8) command: +service vm start vm0 -Once a VM is provisioned, it is managed with the "vm" rc script which can be -enabled in the host's /usr/local/etc/rc.conf, i.e.: +Alternatively there is "ISO" mode: +/usr/local/etc/rc.d/vm iso vm0 (Fetches and boots and ISO image w/ grub) -/usr/local/etc/rc.d/vm onestart freebsd0 +"ISO" mode will prepare a disk image to install the OS to and includes fetch +support for FreeBSD, Ubuntu and CentOS. -if enabled in /usr/local/etc/rc.conf : -/usr/local/etc/rc.d/vm start freebsd0 +## Linux VMs ## -Templates with "iso" in their names are installed by booting to ISO images -and formatting their storage devices with the OS's native installer. These are -provisioned by booting in "ISO" mode: +Copy a template to a VM directory such as /usr/local/vmrc/vm/linux0/linux0.cfg +and use "ISO" mode: -/usr/local/etc/rc.d/vm iso openbsd4 +/usr/local/etc/rc.d/vm iso linux0 ### COMMAND USAGE ### -The 'start', 'stop' and 'status' will act on all VMs in /usr/local/vm/ or -multiple specified VMs i.e.: +/usr/local/etc/rc.d/vm commands can take in zero or more VM arguments. -/usr/local/etc/rc.d/vm start vm0 vm2 vm3 (start three spcific VMs) -/usr/local/etc/rc.d/vm stop (stop all VMs) -/usr/local/etc/rc.d/vm status freebsd0 (status for one VM) +'start', 'stop' and 'status' will act on all VMs in /usr/local/vm/ or +multiple VMs i.e.: + +/usr/local/etc/rc.d/vm start vm0 vm2 vm3 +/usr/local/etc/rc.d/vm status +/usr/local/etc/rc.d/vm status vm3 ### COMMANDS ### @@ -151,6 +112,8 @@ start Load and boot all VMs in /usr/local/vm/ stop Ungracefully terminate all VMs in /usr/local/vm/ status List running VMs +All VMs in /usr/local/vm/ will be launched on boot! (see "CONSOLES" below) + Issue a "reboot" within the VM to shut it down. Cleaner ACPI shutdown is available after the 10.0-RELEASE and is included in vmrc. @@ -169,65 +132,52 @@ grub Launch grub with the VM's disk and ISO images mount fsck(8) and mount(8) a FreeBSD VM disk image (UFS only) umount umount(8) a FreeBSD VM disk image jail Launch a FreeBSD VM's disk image with jail(8) +format Create and format a FreeBSD VM disk image delete Delete a VM and its images and directory tree ### VM LAYOUT ### -/usr/local/vmrc/vm/distributions/ OS distribution sets and ISOs -/usr/local/vmrc/vm/templates/ VM templates -/usr/local/vmrc/vm/vm#/vm#.conf VM config file -/usr/local/vmrc/vm/vm#/vm#.img VM raw disk image (format or copy in) -/usr/local/vmrc/vm/vm#/vm#.iso Link to bootable ISO image (fetch or copy in) -/usr/local/vmrc/vm/vm#/mnt/ VM mount point for raw disk image -/usr/local/vmrc/vm/vm#/vm#.log VM command log - -The ifconfig_cmd.sh, bhyveload_cmd.sh and bhyve_cmd.sh shell scripts will also -be created in /usr/local/vmrc/vm/vm#/ at boot time and can be run independently -of vmrc for testing purposes. Note that these will not create the network -bridge or perform any VM cleanup. +/usr/local/vmrc/vm/distributions/ OS distribution sets and ISOs +/usr/local/vmrc/vm/templates/ VM templates +/usr/local/vmrc/vm/vm#/vm#.conf VM config file +/usr/local/vmrc/vm/vm#/vm#.img VM raw disk image (format or copy in) +/usr/local/vmrc/vm/vm#/vm#.iso Link to bootable ISO image (fetch or copy in) +/usr/local/vmrc/vm/vm#/mnt/ VM mount point for raw disk image ### CONSOLES ### -The included templates direct each VM's console output to the host terminal or -console from which they are booted. This is not ideal if starting VMs during -host startup. - -Alternatively, VM console output can be directed to nmdm, tmux or screen -sessions rather than standard I/O. nndm consoles are supported by FreeBSD's -included cu(1) command while tmux and screen require the respective ports or -packages to be installed. - -To change to a detachable console, change the "vm_console" variable in the VM -configuration file from "stdio" to "nmdm", "tmux", "tmux-detached", "screen" -or "screen-detached" with "detached" indicating that it will be backgrounded/ -detached automatically upon boot which would be suitable for use during host -startup. The "nmdm" console is detached by default. +The included templates direct each VM's output to an "nmdm" serial device. -To attach to a detached console, use the "attach" argument: +Alternatively it can be directed to "stdio" or a tmux session, -/usr/local/etc/rc.d/vm oneattach freebsd3 +"Detached" nmdm and tmux-detached "vm_console" types are available. +All other examples are set to "nmdm" and a bonmdm and tmux-detached consoles +can be attached to with using the "attach" command, i.e.: -To detach from each console, type: +/usr/local/etc/rc.d/vm attach vm0 -nmdm: "~ CTRL-d" -tmux: "CTRL-b d" -screen: "C-a DD" +You can detach from nmdm consoles with "~ CTRL-d" and from tmux sessions with +"CTRL-b d". -Note: There is a bug in FreeBSD 10.0R that would cause the VM to boot only -upon first attachment. +NOTE: nmdm consoles have the advantage of using the in-base cu(1) command but +had a bug in 10.0R that would cause the VM to boot only upon first attachment. +tmux may be a wiser choice in production environments. ### DEPENDENCIES ### -vmrc has been tested on PC-BSD 10-STABLE and FreeBSD 11-CURRENT from -July 1st, 2014 onward. - tmux functionality requires ports/sysutils/tmux ISO and non-FreeBSD VM support requires ports/sysutils/grub2-bhyve QEMU functionality requires ports/emulators/qemu(-devel) +Note: Early versions of the grub2-bhyve port include a gcc runtime requirement +which is in fact only a build requirement. This has been fixed. + +grub2-bhyve version .22 and later support OpenBSD bsd and bsd.mp kernels but +not the bsd.rd install kernel. Consider flashrd (documentation to come) + ### MISC ### @@ -236,14 +186,15 @@ Michael Dexter FreeBSD VMs have their disk images fsck'd before boot given that fsck at boot time is not always comprehensive and may result in VM boot failure. Jailed VMs -with dirty file systems may cause kernel panics. +with dirty file systems may cause kernel panics. (bug?) FreeBSD guests can be provisioned with "iso" mode but it will not set the needed -console. (A "smart" console arrived mid-June 2014 and is available in FreeBSD -CURRENT and some STABLE branches. +console. (A "smart" console is undergoing testing that would eliminate the need +for any console changes). For now, just as with vmrun.sh, start a "manual +configuration" console and run: cat >> /etc/ttys << EOF -ttyu0 "/usr/libexec/getty 3wire.9600" vt100 on secure +console "/usr/libexec/getty std.9600" vt100 on secure EOF GNU/Linux users will find the "grub" command very useful for locating disks and @@ -255,70 +206,17 @@ A few GNU/Linux-related features did not make it into the FreeBSD 10.0 release: The -w flag for better CentOS and RHEL performance -### bhyve OVERVIEW ### - -The bhyve hypervisor consists of the following components: - -/boot/kernel/vmm.ko Kernel module -/dev/vmm/* Index of loaded virtual machines -/usr/sbin/bhyveload Userspace FreeBSD loader -/usr/sbin/bhyve Virtual Machine boot utility -/usr/sbin/bhyvectl Virtual Machine shutdown and diagnostics utility -/usr/local/sbin/grub-bhyve Optional userspace GRUB bootloader - -Both bhyveload(8) and bhyve(8) are provided the VM memory allocation and a -bootable block device in the form of a /dev/ device or a disk image plus a -virtual machine name. These must be consistent between both utilities. - -bhyve(8) is provided additional arguments describing PCI devices (notably for -VirtIO storage and network) plus miscelanous operational parameters. - -A bhyve(8) virtual machine is shutdown with a reboot(8) command and the -/dev/vmm/ entry is cleaned up with the bhyvect(8) command. - -VM network is primarily achived by providing an if_tap(4) network device that is -associated with an if_bridge(4) bridge. Alternatively a hardware network device -could be passed to the virtual machine but this is not supported by vmrc. - -The first bhyve-ready FreeBSD snapshot "raw" VM-IMAGEs arrived on June 15th, -2014 and do not require any modification for use with bhyve. vmrc has templates -for these raw images and they can also be used with the -/usr/share/examples/bhyve/vmrun.sh script that is included with FreeBSD. These -images can be found at ftp://ftp.freebsd.org/snapshots/ - -Alternatively, virtual machines can be built in a manner similar to jail(8) -systems or hardware-based systems. The FreeBSD ISO install images can be used -for this purpose and this the approach taken by vmrun.sh. Note that all but the -most recent FreeBSD 11.0-CURRENT and 10.0-STABLE releases require a /etc/ttys -modification to work properly. vmrc will peform this modification as needed for -most FreeBSD versions and FreeBSD-derived operating systems. - -The vmrc template syntax should be self-explanatory and attempts to accomodate -most desired system configuration options short of complex partitioning and the -creation of users or installation of ports and packages. Once built and booted, -a bhyve virtual machine behaves like a normal system and can be operated with -your tools of choice. - - ### DEVELOPER NOTES ### -Latest releases are available at: https://github.com/michaeldexter/vmrc - -vmrc Design Goals +GitHub: https://github.com/michaeldexter/vmrc -* "Unix" design philosophy, simple architecture and transparent operation -* Rapid, flexible development using in-base tools -* Zero dependencies for basic operation with significant-value add-ons -* Fundamentally-portable design -* Open architecture to accept additional multiplicity strategies - -While patches are welcome but please take the time to understand how this script -works before proposing solutions to problems that might be more simple or -complex than they appear. Ask questions! +While patches are welcome, please take the time to understand how this script +works before proposing solutions to problems that might be more complex than +they appear. Ask questions! vmrc aims to have zero dependencies to operate. It optionally uses external -utilities like grub2-bhyve, tmux, qemu, screen and the like to add -functionality but will hopefully never depend on them. +utilities like grub2-bhyve, tmux, qemu and the like to add functionality but +will hopefully never depend on them. The vm rc script and mkvm.sh perform two key functions: @@ -331,9 +229,9 @@ attachment and mounting of the disk image (FreeBSD only) and an optional preflight script. mkvm.sh is largely a simplified FreeBSD installer that is comprised of -preflight, primary and debug functions. +functions. -The vm rc script primarily creates bhyveload(8) and bhyve(8) command syntax for +The vm rc script largely creates bhyveload(8) and bhyve(8) command syntax for loading and booting virtual machines based on the criteria in the configuration files such as the VM RAM allocation, block device to boot, network interfaces etc. The vm rc script will output the bhyveload and bhyve command strings that @@ -358,22 +256,118 @@ association with a given VM. The solution is to add a suffix to the tap device, indicating the NIC ID (vm0's tap0 -> tap01 or vm3's tap3 ->tap31). This revealed a problem: ifconfig will now allow for tap ID's to be -prefixed with "0" and thus vm0's tap03 would be invalid. To solve this, vmrc -emplys a double digit VMID that is prefixed with the arbitrary "8", resulting -in vm0's fourth network interface being: - -tap8033 [ 8 | VM ID of 3 | Network Device ID of 4 (counting from 0) ] - +prefixed with "0" and thus vm0's tap03 would be invalid. To solve this, we use +a double digit VMID that is prefixed with the arbitrary "8", resulting in vm0's +fourth network interface being tap8033 (8 | VM ID | Network Device ID). Network device "3" is the fourth device because the first one is "0". -Additional network devices could be creatd on additional PCI virtual interfaces -but this functionality is not supported by vmrc. - ### SPECIAL THANKS ### -Thank you Neel, Peter, John B. and Tycho for your hard work on bhyve. +Thank you Neel, Peter, John and Tycho for your hard work on bhyve. Thank you Devin for greatly improving this script and Allan at ScaleEngine for testing it and providing resources for it and bhyve's improvement. + +### mkvm.sh TO DO ### + +fix: Homogenize templates to master +fix: Make sure devices and zvols are not left attached after installation +fix: ${var_name:=variable} syntax if not set... +fix: Correct rc behavior... vm_enable="YES" +fix: Shorten FreeBSD boot timeout: autoboot_delay="3" +test: Check extraction destinations. zvols will not mount to directories + with .snap in them etc. +ext bug: The PC-BSD automounter will delete a mount point you use. Fix coming. + f_mount does create a directory but may not help all cases. +feature: Implement zfs "mount" and "umount" +feature: Implement make installworld installation +note: Expanding .tar is faster than .txz. Maybe institutionalize. +feature: Bring back 8.* dist set support. Maybe repackage to new .txz layout. +feature: ZFS clone-based storage. +feature: ZFS dataset for each /dev/vm/* for versioning. +feature: getopts? Use bsdconfig-style environment variables? +feature: Have an IP prefix/subnet in vm.conf? Override in mkvm.sh? +feature: Better preparation of VMs for jail use + sendmail_enable="NO" + inetd_flags="-wW -a 192.0.2.23" + rpcbind_enable="NO +feature: beadm? +feature: panicmail, firstboot? + + +### vm TO DO ### + +*NOT* PACKAGE THIS YET - IT IS NOT READY AND IS CHANGING RAPIDLY +note: Tested on 10.0-RELEASE, PC-BSD 10.0 and FreeBSD 11 snapshots +fix: QEMU support - not seeing disk images even if present +fix: vm_destroy after tmux session +news: bhyve automatic console detection is being tested, eliminating tty issues +feature: a "disable" option for VMs to prevent boot upon host boot +test: Try every incorrect sequence of commands and see if checks work +See "# fix: " throughout the script +concern: loaders can be captive and hang: detach loader steps, check flow +feature: disable vm option - move to ~/disabled +missing: mount zpool to ~/vm#/mnt +test: Why are ubuntu VMs read-only upon (first) boot? +test: TrueOS, Does android have VirtIO? +fix: Test: acpi kill in FreeBSD 11-current +linux needs acpi-utils, openbsd doesn't support power button? + hw.allowpowerdown=1 ? +fix: Ubuntu often has a captive loader, halting host system boot +fix: Test: host_vmroot without trailing / (make idiot-proof) +fix: any way to avoid //'s in paths but safely not add trailing one in conf? +fix: CHECK FOR CONFLICTING VM ID NUMBERS BEFORE BOOT + (Consider a PID or otherwise style of keeping VMs unique) +fix: Cosmetic: stalled return after cu session clean up (cleared with ENTER) +fix: Line wrapping! +fix: Formatting: Remaining spaces in place of tabs, for multiline info()? +fix: Formatting: Any way to elegantly wrap long URL's? +fix: Merge f_iso and vm_load/vm_boot +fix: Concern: could a VM booted at startup precede full networking? +fix: Homogenize info/error/debug messages, lose some +fix: Check for a valid tmux session before attempting to attach? +fix: Add zvol and raw device support to grub and load +fix: Destroy VM zvols in delete function +fix: Add root-on-ZFS configuration for when the zfs_boot change is made +fix: Add pty console attachment option (/dev/pts/), try a physical port +fix: Why does second run of 'bhvye' on a loaded vm simply give a new line? +fix: Does grub boot need the CD ISO? +fix: Can grub NOT wipe out all preceding on screen (debug) text? +fix: f_vmmcheck: Is vmm going to be built in by default? (not yet!) +fix: f_vmmcheck: Note left-justified reverse indenting +fix: Remove info's and DEBUG's when satisfied? +fix: NEVER too many checks +fix: Push more checks to separate f_functions? +fyi: bhyve: not loaded first: vm_open: Invalid argument or error 33 +fix: Elegant way to use official VM images? (qemu-img conversion works) + qemu-img convert -O raw freebsd.qcow2 freebsd.raw (needs console!) +fix: idea: Dump the load and boot commands plus diagnostic info to a log file. +fix: idea: Add a 'top' command function 'top -uaP' ? How to show only bhyve? +fix: idea: Consider what other commands may want to act on multiple VMs +fix: idea: Cloud! (What was the question?) (ssh is your friend) +fix: idea: Popular jail functionality +fix: idea: Have a separate jail shell-only (no rc) command for maintenance? +fix: idea: Config file hooks for commands at various steps? +fix: idea: "Master" VM zvol cloning? +fix: idea: Add chroot, simh and GXemul support if they have serial output +fix: idea: freebsd-update on boot? (external problem?) +fix: idea: Probe disk layout and fs types? (vmrun.sh probe fails on zvols) +fix: idea: Maybe check for /mnt/.snap on new fs's as a test +fix: idea: Consider an "installworld" method as per the jail man page? +fix: idea: config file-> flags like vm_flags="em0 root ..." +fix: idea: Some flag to indicate "don't boot this VM" (move from dir)? +fix: idea: Add full ext2/3/4 support to the "mount" option (fuse ext4) +Note e2fsprogs and e2fsck /dev/md0s1 and mount -t ext2fs /dev/md0s1 /mnt +Linux ZFS may be very helpful as a LCD FS + +fix: Note Neel's vmrun.sh loop: +while [ 1 ]; do + + + + if [ $? -ne 0 ]; then + break + fi # exit if you get a non 0 return +done