#! /bin/bash harmony-ve-opnsense-img()( set -eu [ "${1:-}" != "-d" ] || { set -x ; shift ; } trap '[ "$?" = "0" ] || >&2 echo ABNORMAL TERMINATION' EXIT SCRIPTS_DIR=$(readlink -f "$(dirname "${BASH_SOURCE}")") . "${SCRIPTS_DIR}/common" . "${SCRIPTS_DIR}/default-env-var" export PATH=$SCRIPTS_DIR:$PATH _short_help(){ cat <<-EOM NAME harmony-ve-opnsense-img DESCRIPTION Manage opnsense images needed by Harmony Virtual Execution Environment SYNOPSYS harmony-vee-opnsense-img [GLOBAL_OPTIONS] COMMAND [OPTIONS] harmony-ve-opnsense-img list harmony-ve-opnsense-img init NAME VERSION harmony-ve-opnsense-img start NAME harmony-ve-opnsense-img update NAME harmony-ve-opnsense-img delete [NAME] EOM } _extra_help(){ cat <<-EOM GLOBAL_OPTIONS -d Debug mode. WARNINGS This script is experimetal. Use with caution. EOM } # assertions _assert_image_do_not_exists(){ name=$1 [ ! -d "$_HVE_OPNSENSE_IMG/$name" ] || _fatal "An image '$name' already exists" } _assert_image_exists(){ name=$1 [ -d "$_HVE_OPNSENSE_IMG/$name" ] || _fatal "Image '$name' do not exists" } # Implement functions _init(){ name=$1 version=${2} _assert_image_do_not_exists $name mkdir -p "${_HVE_OPNSENSE_IMG}/$name" harmony-ve opnsense-img-src download $version sudo qemu-img convert -f raw -O qcow2 "$_HVE_OPNSENSE_SRC_IMG/OPNsense-${version}-nano-amd64.img" "/var/lib/libvirt/images/opnsense-$name.qcow2" cat <<-EOM > "$_HVE_OPNSENSE_IMG/$name/$name.sh" virt-install \ --name $name \ --os-variant freebsd14.0 \ --vcpus=2,sockets=1,cores=2,threads=1 \ --memory 4096 \ --disk path="/var/lib/libvirt/images/opnsense-$name.qcow2" \ --network bridge=${_HVE_WAN_BRIDGE},model=virtio \ --network bridge=${_HVE_LAN_BRIDGE},model=virtio \ --graphics none \ --console pty,target_type=serial \ --import \ --autostart EOM chmod +x "$_HVE_OPNSENSE_IMG/$name/$name.sh" } _start(){ name=$1 _assert_image_exists $name "$_HVE_OPNSENSE_IMG/$name/$name.sh" } case "${1:-}" in "") _short_help ;; -h|--help) _short_help _extra_help ;; # Commands entrypoints init) _init "${@:2}" ;; start) _start "${@:2}" ;; delete) rm -r ${_HVE_OPNSENSE_IMG}/"$2" ;; ls|list) ls ${_HVE_OPNSENSE_IMG} | cat ;; show) ls ${_HVE_OPNSENSE_IMG}/"$2" | cat ;; *) _warn "Unknown COMMAND '$1'" exit 1 ;; esac ) [ "$0" != "${BASH_SOURCE}" ] || harmony-ve-opnsense-img "${@}"