cd5adfd94b
* set branch (+2 squashed commit) Squashed commit: [e322f24] remove placeholder [8647131] palceholder * Code cleanup and (primarily) consolidation (#21) * set branch * Exit 1 on iocage create failure * - Move jailcreate to global function - Remove Jailcreate.sh * Add dataset creation function * - add test script to test new global changes - also create folder in jail with createmount * fix * make test executable * more verbosity, fixing folder creation * moving global dataset create * move jails to new dataset-mount creation function * remove test jail and test branch-ref * Add Nextcloud (#22) * Basic working nextcloud integration * Enable persistent reinstall of Nextcloud * prepare for dev merge * Licence alert * Add external database and integrated jail * small improvements and update script * Add mariadb to dev (#31) * Working MariaDB config * - Set ZFS settings for DB on Nextcloud and MariaDB - Cleanup MariaDB * prepare for dev merge * Niceify Readme (#34) * put content from master into it * Some readme itteration * more niceification * [WIP} Wiki workflow test (#37) introduce automatic wiki generation * Add Bitwarden support (#35) * Nextcloud-Cleanup for v1.1.0 (#40) * Nextcloud cleanup - add db-type sanity check - remove some integrated db checks - Move ssl to /config/ssl - remove integrated databases * slight default tweaking * fix mariadb install bug * QA cycle
126 lines
3.1 KiB
Bash
Executable File
126 lines
3.1 KiB
Bash
Executable File
#!/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<indent; i++) {vn=(vn)(vname[i])("_")}
|
|
printf("export %s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
|
|
}
|
|
}'
|
|
}
|
|
|
|
# automatic update function
|
|
gitupdate() {
|
|
echo "checking for updates using Branch: $1"
|
|
git fetch
|
|
git update-index -q --refresh
|
|
CHANGED=$(git diff --name-only origin/$1)
|
|
if [ ! -z "$CHANGED" ];
|
|
then
|
|
echo "script requires update"
|
|
git reset --hard
|
|
git checkout $1
|
|
git pull
|
|
echo "script updated"
|
|
exit 1
|
|
else
|
|
echo "script up-to-date"
|
|
fi
|
|
}
|
|
|
|
jailcreate() {
|
|
echo "Checking config..."
|
|
jailname="${1}"
|
|
jailpkgs="${1}_pkgs"
|
|
jailinterfaces="${1}_interfaces"
|
|
jailip4="${1}_ip4_addr"
|
|
jailgateway="${1}_gateway"
|
|
jaildhcp="${1}_dhcp"
|
|
setdhcp=${!jaildhcp}
|
|
|
|
if [ -z "${!jailinterfaces}" ]; then
|
|
jailinterfaces="vnet0:bridge0"
|
|
else
|
|
jailinterfaces=${!jailinterfaces}
|
|
fi
|
|
|
|
if [ -z "${setdhcp}" ] && [ -z "${!jailip4}" ] && [ -z "${!jailgateway}" ]; then
|
|
echo 'no network settings specified in config.yml, defaulting to dhcp="on"'
|
|
setdhcp="on"
|
|
fi
|
|
|
|
if [ -z "${!jailname}" ]; then
|
|
echo "ERROR, jail not defined in config.yml"
|
|
exit 1
|
|
else
|
|
echo "Creating jail for $1"
|
|
pkgs="$(sed 's/[^[:space:]]\{1,\}/"&"/g;s/ /,/g' <<<"${global_jails_pkgs} ${!jailpkgs}")"
|
|
echo '{"pkgs":['${pkgs}']}' > /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"
|
|
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"
|
|
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
|
|
|
|
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
|