dbfbd489fa
* Multi-install support, Blueprints and config changes. Initial commit * Migrating jails to blueprints, first steps. Tested Working: - Transmission - Lidarr - Sonarr - Radarr fix lidarr config (+10 squashed commit) Squashed commit: [5f14653] always link ports folders [f18f2f0] Optional (blueprint) ports mount Fixes #89 [96ef7e7] chmod all the things [129e707] same mistake... again... [e1596dc] missing reference [6da3567] Forgot one reference [d78b5b6] Update wiki.yml [cecc53a] Update filecheck.yml [5244abd] basic settings changed. More involved blueprints still need changes, such as: Bitwarden, nextcloud, Mariadb [6568e92] jails -> blueprints * Added Tested Working: - KMS - Plex - Tautulli - Organizr - InfluxDB - MariaDB Many squashed small fixes included: Make *.rc executable (+13 squashed commit) Squashed commit: [b28aa83] use .rc for rc.d config files [e940a48] some mariadb cleanup [dc27aff] testing another way [83bd91b] Mariadb root password alter instead of update, initial config for unifi [0ca3074] some light config cleanup [a0d4352] also remove database from influxdb example config (db should be created when required) [2c218cc] Prepare influxdb and remove unneeded content [1b34109] more shellcheck fixups [c96566c] Some shellcheck cleanup [8969ca7] bitwarden mostly done, some work on nextcloud and unifi [7f89bfa] initial mariadb patch [dd7e85f] missed one problem [f814cb7] Initial pseudo-compatibility patch for unifi * Enable Bitwarden support and some small fixes/tweaks Fixes #95 more bugs and typo's (+3 squashed commit) Squashed commit: [3b5213e] Bitwarden not correctly installing db [b7438a5] yeah thats not gonna cut it... >.< [e7987c2] some slight bitwarden tweaks * Enable Unifi support and some small fixes/tweaks small unifi cleanup. Unifi is working (+3 squashed commit) Squashed commit: [d906d2d] chmod unifi [545e999] Add extra sanity, remove unneeded variables from example [b8c0b24] Some small Unifi Tweaks * Nextcloud Cleanup, Some fixes, Initial support for blueprintsystem Fixes #96 Fixes #97 Fixes #98 some bloat and syntax fixes (+5 squashed commit) Squashed commit: [78f6428] Some more nextcloud cleanup and tweaks - combines multiple variables for cert system selection (Fixes #98 ) - Default to self signed cert - Force manual admin password [7cacae4] slight fixes [3d81cda] More cleanup [50496cc] small mariadb fix and more nextcloud cleanup [c1b2c20] Cleaning nextcloud - Remove external DB (Fixes #97 ) - Remove Postgresql (Fixes #96 ) - Some preparation for blueprint * Nextcloud done and.. another... (+5 squashed commit) Squashed commit: [c65751b] caddy not installed right. [e5da66b] more fixes [a33300e] Damnit, two typo's same scentence [4292a7a] another typo [1b820cf] typo and example hotfix * Introduce version checking for config file
232 lines
7.2 KiB
Bash
Executable File
232 lines
7.2 KiB
Bash
Executable File
#!/usr/local/bin/bash
|
|
|
|
# Important defines:
|
|
# shellcheck disable=SC2046
|
|
SCRIPT_NAME=$(basename $(test -L "${BASH_SOURCE[0]}" && readlink "${BASH_SOURCE[0]}" || echo "${BASH_SOURCE[0]}"));
|
|
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd);
|
|
export SCRIPT_NAME
|
|
export SCRIPT_DIR
|
|
|
|
echo "Working directory for jailman.sh is: ${SCRIPT_DIR}"
|
|
|
|
#Includes
|
|
# shellcheck source=global.sh
|
|
source "${SCRIPT_DIR}/global.sh"
|
|
|
|
# Check for root privileges
|
|
if ! [ "$(id -u)" = 0 ]; then
|
|
echo "This script must be run with root privileges"
|
|
exit 1
|
|
fi
|
|
|
|
# Auto Update
|
|
BRANCH="multi_install"
|
|
gitupdate ${BRANCH}
|
|
|
|
# If no option is given, point to the help menu
|
|
if [ $# -eq 0 ]
|
|
then
|
|
echo "Missing options!"
|
|
echo "(run $0 -h for help)"
|
|
echo ""
|
|
exit 0
|
|
fi
|
|
|
|
# Go through the options and put the jails requested in an array
|
|
unset -v sub
|
|
while getopts ":i:r:u:d:g:h" opt
|
|
do
|
|
#Shellcheck on wordsplitting will be disabled. Wordsplitting can't happen, because it's already split using OPTIND.
|
|
case $opt in
|
|
i ) installjails=("$OPTARG")
|
|
# shellcheck disable=SC2046
|
|
until [[ $(eval "echo \${$OPTIND}") =~ ^-.* ]] || [ -z $(eval "echo \${$OPTIND}") ]; do
|
|
# shellcheck disable=SC2207
|
|
installjails+=($(eval "echo \${$OPTIND}"))
|
|
OPTIND=$((OPTIND + 1))
|
|
done
|
|
;;
|
|
r ) redojails=("$OPTARG")
|
|
# shellcheck disable=SC2046
|
|
until [[ $(eval "echo \${$OPTIND}") =~ ^-.* ]] || [ -z $(eval "echo \${$OPTIND}") ]; do
|
|
# shellcheck disable=SC2207
|
|
redojails+=($(eval "echo \${$OPTIND}"))
|
|
OPTIND=$((OPTIND + 1))
|
|
done
|
|
;;
|
|
u ) updatejails=("$OPTARG")
|
|
# shellcheck disable=SC2046
|
|
until [[ $(eval "echo \${$OPTIND}") =~ ^-.* ]] || [ -z $(eval "echo \${$OPTIND}") ]; do
|
|
# shellcheck disable=SC2207
|
|
updatejails+=($(eval "echo \${$OPTIND}"))
|
|
OPTIND=$((OPTIND + 1))
|
|
done
|
|
;;
|
|
d ) destroyjails=("$OPTARG")
|
|
# shellcheck disable=SC2046
|
|
until [[ $(eval "echo \${$OPTIND}") =~ ^-.* ]] || [ -z $(eval "echo \${$OPTIND}") ]; do
|
|
# shellcheck disable=SC2207
|
|
destroyjails+=($(eval "echo \${$OPTIND}"))
|
|
OPTIND=$((OPTIND + 1))
|
|
done
|
|
;;
|
|
g ) upgradejails=("$OPTARG")
|
|
# shellcheck disable=SC2046
|
|
until [[ $(eval "echo \${$OPTIND}") =~ ^-.* ]] || [ -z $(eval "echo \${$OPTIND}") ]; do
|
|
# shellcheck disable=SC2207
|
|
upgradejails+=($(eval "echo \${$OPTIND}"))
|
|
OPTIND=$((OPTIND + 1))
|
|
done
|
|
;;
|
|
h )
|
|
echo "Usage:"
|
|
echo "$0 -i "
|
|
echo "$0 -r "
|
|
echo "$0 -u "
|
|
echo "$0 -d "
|
|
echo "$0 -g "
|
|
echo ""
|
|
echo " -i to install jails, listed by name, space seperated like this: jackett plex sonarr"
|
|
echo " -r to reinstall jails, listed by name, space seperated like this: jackett plex sonarr"
|
|
echo " -u to update jails, listed by name, space seperated like this: jackett plex sonarr"
|
|
echo " -d to destroy jails, listed by name, space seperated like this: jackett plex sonarrt"
|
|
echo " -g to upgrade jails, listed by name, space seperated like this: jackett plex sonarr"
|
|
echo " -h help (this output)"
|
|
exit 0
|
|
;;
|
|
? ) echo "Error: Invalid option was specified -$OPTARG"
|
|
exit 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# auto detect iocage install location
|
|
global_dataset_iocage=$(zfs get -H -o value mountpoint $(iocage get -p)/iocage)
|
|
global_dataset_iocage=${global_dataset_iocage#/mnt/}
|
|
export global_dataset_iocage
|
|
|
|
# Parse the Config YAML
|
|
# shellcheck disable=SC2046
|
|
for configpath in "${SCRIPT_DIR}"/blueprints/*/config.yml; do ! eval $(parse_yaml "${configpath}"); done
|
|
eval "$(parse_yaml config.yml)"
|
|
|
|
# shellcheck disable=SC2154
|
|
if [ "${global_version}" != "1.2" ]; then
|
|
echo "You are using old config.yml synatx."
|
|
echo "Please check the wiki for required changes"
|
|
exit 1
|
|
fi
|
|
|
|
# Check and Execute requested jail destructions
|
|
if [ ${#destroyjails[@]} -eq 0 ]; then
|
|
echo "No jails to destroy"
|
|
else
|
|
# shellcheck disable=SC2124,SC2145
|
|
echo "jails to destroy ${destroyjails[@]}"
|
|
for jail in "${destroyjails[@]}"
|
|
do
|
|
echo "destroying $jail"
|
|
iocage destroy -f "${jail}"
|
|
done
|
|
|
|
fi
|
|
|
|
# Check and Execute requested jail Installs
|
|
if [ ${#installjails[@]} -eq 0 ]; then
|
|
echo "No jails to install"
|
|
else
|
|
# shellcheck disable=SC2124,SC2145
|
|
echo "jails to install ${installjails[@]}"
|
|
for jail in "${installjails[@]}"
|
|
do
|
|
blueprint=jail_${jail}_blueprint
|
|
if [ -z "${!blueprint}" ]
|
|
then
|
|
echo "Config for ${jail} in config.yml incorrect. Please check your config."
|
|
exit 1
|
|
elif [ -f "${SCRIPT_DIR}/blueprints/${!blueprint}/install.sh" ]
|
|
then
|
|
echo "Installing $jail"
|
|
jailcreate "${jail}" "${!blueprint}" && "${SCRIPT_DIR}"/blueprints/"${!blueprint}"/install.sh "${jail}"
|
|
else
|
|
echo "Missing blueprint ${!blueprint} for $jail in ${SCRIPT_DIR}/blueprints/${!blueprint}/install.sh"
|
|
exit 1
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Check and Execute requested jail Reinstalls
|
|
if [ ${#redojails[@]} -eq 0 ]; then
|
|
echo "No jails to ReInstall"
|
|
else
|
|
# shellcheck disable=SC2124,SC2145
|
|
echo "jails to reinstall ${redojails[@]}"
|
|
for jail in "${redojails[@]}"
|
|
do
|
|
blueprint=jail_${jail}_blueprint
|
|
if [ -z "${!blueprint}" ]
|
|
then
|
|
echo "Config for ${jail} in config.yml incorrect. Please check your config."
|
|
exit 1
|
|
elif [ -f "${SCRIPT_DIR}/blueprints/${!blueprint}/install.sh" ]
|
|
then
|
|
echo "Reinstalling $jail"
|
|
iocage destroy -f "${jail}" && jailcreate "${jail}" "${!blueprint}" && "${SCRIPT_DIR}"/blueprints/"${!blueprint}"/install.sh "${jail}"
|
|
else
|
|
echo "Missing blueprint ${!blueprint} for $jail in ${SCRIPT_DIR}/blueprints/${!blueprint}/install.sh"
|
|
exit 1
|
|
fi
|
|
done
|
|
fi
|
|
|
|
|
|
# Check and Execute requested jail Updates
|
|
if [ ${#updatejails[@]} -eq 0 ]; then
|
|
echo "No jails to Update"
|
|
else
|
|
# shellcheck disable=SC2124,SC2145
|
|
echo "jails to update ${updatejails[@]}"
|
|
for jail in "${updatejails[@]}"
|
|
do
|
|
blueprint=jail_${jail}_blueprint
|
|
if [ -z "${!blueprint}" ]
|
|
then
|
|
echo "Config for ${jail} in config.yml incorrect. Please check your config."
|
|
exit 1
|
|
elif [ -f "${SCRIPT_DIR}/blueprints/${!blueprint}/update.sh" ]
|
|
then
|
|
echo "Updating $jail"
|
|
iocage update "${jail}"
|
|
iocage exec "${jail}" "pkg update && pkg upgrade -y" && "${SCRIPT_DIR}"/jails/"${!blueprint}"/update.sh
|
|
iocage restart "${jail}"
|
|
iocage start "${jail}"
|
|
else
|
|
echo "Missing blueprint ${!blueprint} for $jail in ${SCRIPT_DIR}/blueprints/${!blueprint}/install.sh"
|
|
exit 1
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Check and Execute requested jail Upgrades
|
|
if [ ${#upgradejails[@]} -eq 0 ]; then
|
|
echo "No jails to Upgrade"
|
|
else
|
|
# shellcheck disable=SC2124,SC2145
|
|
echo "jails to update ${upgradejails[@]}"
|
|
for jail in "${upgradejails[@]}"
|
|
do
|
|
blueprint=jail_${jail}_blueprint
|
|
if [ -z "${!blueprint}" ]
|
|
then
|
|
echo "Config for ${jail} in config.yml incorrect. Please check your config."
|
|
exit 1
|
|
elif [ -f "${SCRIPT_DIR}/blueprints/${!blueprint}/update.sh" ]
|
|
then
|
|
echo "Currently Upgrading is not yet included in this script."
|
|
else
|
|
echo "Currently Upgrading is not yet included in this script."
|
|
exit 1
|
|
fi
|
|
done
|
|
fi
|