scale-catalog/jailman.sh
Kjeld Schouten-Lebbing dbfbd489fa
[WIP] Allow multiple installations of same blueprint (#88)
* 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
2020-05-02 17:45:13 +02:00

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