#!/usr/local/bin/bash # shellcheck disable=SC1003 # yml Parser function # Based on https://gist.github.com/pkuczynski/8665367 parse_yaml() { local prefix=$2 local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034') sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \ -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | awk -F$fs '{ indent = length($1)/2; vname[indent] = $2; for (i in vname) {if (i > indent) {delete vname[i]}} if (length($3) > 0) { vn=""; for (i=0; i /tmp/pkg.json if [ "${setdhcp}" == "on" ] then if ! iocage create -n "${1}" -p /tmp/pkg.json -r ${global_jails_version} interfaces="${jailinterfaces}" dhcp="on" vnet="on" allow_raw_sockets="1" boot="on" -b then echo "Failed to create jail" exit 1 fi else if ! iocage create -n "${1}" -p /tmp/pkg.json -r ${global_jails_version} interfaces="${jailinterfaces}" ip4_addr="vnet0|${!jailip4}" defaultrouter="${!jailgateway}" vnet="on" allow_raw_sockets="1" boot="on" -b then echo "Failed to create jail" exit 1 fi fi rm /tmp/pkg.json echo "creating jail config directory" createmount $1 ${global_dataset_config} createmount $1 ${global_dataset_config}/$1 /config # Create and Mount portsnap echo "Mounting and fetching ports" createmount $1 ${global_dataset_config}/portsnap createmount $1 ${global_dataset_config}/portsnap/db /var/db/portsnap createmount $1 ${global_dataset_config}/portsnap/ports /usr/ports iocage exec "$1" "if [ -z /usr/ports ]; then portsnap fetch extract; else portsnap auto; fi" echo "Jail creation completed for $1" fi } # $1 = jail name # $2 = Dataset # $3 = Target mountpoint # $4 = fstab prefernces createmount() { if [ -z "$2" ] ; then echo "ERROR: No Dataset specified to create and/or mount" exit 1 else if [ ! -d "/mnt/$2" ]; then echo "Dataset does not exist... Creating... $2" zfs create $2 else echo "Dataset already exists, skipping creation of $2" fi if [ -n "$1" ] && [ -n "$3" ]; then iocage exec $1 mkdir -p $3 if [ -n "$4" ]; then iocage fstab -a $1 /mnt/$2 $3 $4 else iocage fstab -a $1 /mnt/$2 $3 nullfs rw 0 0 fi else echo "No Jail Name or Mount target specified, not mounting dataset" fi fi } export -f createmount