#!/usr/local/bin/bash # shellcheck disable=SC1003 # yml Parser function # Based on https://gist.github.com/pkuczynski/8665367 # # This function is very picky and complex. Ignore with shellcheck for now. # shellcheck disable=SC2086,SC2155 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 # shellcheck disable=SC2154 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 # shellcheck disable=SC2154 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" # shellcheck disable=SC2154 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