forked from NationTech/harmony
151 lines
2.5 KiB
Plaintext
Executable File
151 lines
2.5 KiB
Plaintext
Executable File
|
|
#! /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 "${@}"
|
|
|