diff --git a/webtrees/rootfs/defaults/docker-entrypoint.sh b/webtrees/rootfs/defaults/docker-entrypoint.sh new file mode 100644 index 000000000..d2b56f057 --- /dev/null +++ b/webtrees/rootfs/defaults/docker-entrypoint.sh @@ -0,0 +1,226 @@ +#!/usr/bin/env bashio + +########## +# BANNER # +########## + +if bashio::supervisor.ping; then + bashio::log.blue \ + '-----------------------------------------------------------' + bashio::log.blue " Add-on: $(bashio::addon.name)" + bashio::log.blue " $(bashio::addon.description)" + bashio::log.blue \ + '-----------------------------------------------------------' + + bashio::log.blue " Add-on version: $(bashio::addon.version)" + if bashio::var.true "$(bashio::addon.update_available)"; then + bashio::log.magenta ' There is an update available for this add-on!' + bashio::log.magenta \ + " Latest add-on version: $(bashio::addon.version_latest)" + bashio::log.magenta ' Please consider upgrading as soon as possible.' + else + bashio::log.green ' You are running the latest version of this add-on.' + fi + + bashio::log.blue " System: $(bashio::info.operating_system)" \ + " ($(bashio::info.arch) / $(bashio::info.machine))" + bashio::log.blue " Home Assistant Core: $(bashio::info.homeassistant)" + bashio::log.blue " Home Assistant Supervisor: $(bashio::info.supervisor)" + + bashio::log.blue \ + '-----------------------------------------------------------' + bashio::log.blue \ + ' Please, share the above information when looking for help' + bashio::log.blue \ + ' or support in, e.g., GitHub, forums or the Discord chat.' + bashio::log.green \ + ' https://github.com/alexbelgium/hassio-addons' + bashio::log.blue \ + '-----------------------------------------------------------' +fi + +CONFIG_FILE="/data/config.ini.php" +PREFIX="[NV_INIT]" + +echo "$PREFIX Setting folder permissions for uploads" +chown -R www-data:www-data data && chmod -R 775 data +chown -R www-data:www-data media && chmod -R 775 media + +# Pull environment variables from files + +PRETTY_URLS=$(cat "$PRETTY_URLS_FILE" 2> /dev/null || echo $PRETTY_URLS) +HTTPS=$(cat "$HTTPS_FILE" 2> /dev/null || echo $HTTPS) +SSL=$(cat "$SSL_FILE" 2> /dev/null || echo $SSL) +HTTPS_REDIRECT=$(cat "$HTTPS_REDIRECT_FILE" 2> /dev/null || echo $HTTPS_REDIRECT) +SSL_REDIRECT=$(cat "$SSL_REDIRECT_FILE" 2> /dev/null || echo $SSL_REDIRECT) +LANG=$(cat "$LANG_FILE" 2> /dev/null || echo $LANG) +BASE_URL=$(cat "$BASE_URL_FILE" 2> /dev/null || echo $BASE_URL) +DB_TYPE=$(cat "$DB_TYPE_FILE" 2> /dev/null || echo $DB_TYPE) +DB_HOST=$(cat "$DB_HOST_FILE" 2> /dev/null || echo $DB_HOST) +DB_PORT=$(cat "$DB_PORT_FILE" 2> /dev/null || echo $DB_PORT) +DB_USER=$(cat "$DB_USER_FILE" 2> /dev/null || echo $DB_USER) +MYSQL_USER=$(cat "$MYSQL_USER_FILE" 2> /dev/null || echo $MYSQL_USER) +DB_PASS=$(cat "$DB_PASS_FILE" 2> /dev/null || echo $DB_PASS) +MYSQL_PASSWORD=$(cat "$MYSQL_PASSWORD_FILE" 2> /dev/null || echo $MYSQL_PASSWORD) +DB_NAME=$(cat "$DB_NAME_FILE" 2> /dev/null || echo $DB_NAME) +MYSQL_DATABASE=$(cat "$MYSQL_DATABASE_FILE" 2> /dev/null || echo $MYSQL_DATABASE) +DB_PREFIX=$(cat "$DB_PREFIX_FILE" 2> /dev/null || echo $DB_PREFIX) +WT_USER=$(cat "$WT_USER_FILE" 2> /dev/null || echo $WT_USER) +WT_NAME=$(cat "$WT_NAME_FILE" 2> /dev/null || echo $WT_NAME) +WT_PASS=$(cat "$WT_PASS_FILE" 2> /dev/null || echo $WT_PASS) +WT_EMAIL=$(cat "$WT_EMAIL_FILE" 2> /dev/null || echo $WT_EMAIL) + +auto_wizard () { + # automatically try to complete the setup wizard + echo "$PREFIX Attempting to automate setup wizard" + + # defaults + lang="${LANG:-en-US}" + dbtype="${DB_TYPE:-mysql}" + dbport="${DB_PORT:-3306}" + dbuser="${DB_USER:-${MYSQL_USER:-webtrees}}" + dbname="${DB_NAME:-${MYSQL_DATABASE:-webtrees}}" + tblpfx="${DB_PREFIX:-wt_}" + + # required + dbhost="${DB_HOST}" + dbpass="${DB_PASS:-$MYSQL_PASSWORD}" + baseurl="${BASE_URL}" + wtname="${WT_NAME}" + wtuser="${WT_USER}" + wtpass="${WT_PASS}" + wtemail="${WT_EMAIL}" + + # test if config file exists + if [ -f "$CONFIG_FILE" ] + then + echo "$PREFIX Config file found" + + # make sure all of the variables for the config file are present + if [[ -z "$dbhost" || -z "$dbport" || -z "$dbuser" || -z "$dbpass" || -z "$dbname" || -z "$baseurl" ]] + then + echo "$PREFIX Not all variables required for config file update" + return 0 + fi + + echo "$PREFIX Updating config file" + + # remove the line with sed, then write new content + sed -i '/^dbhost/d' "$CONFIG_FILE" && echo "dbhost=\"$dbhost\"" >> $CONFIG_FILE + sed -i '/^dbport/d' "$CONFIG_FILE" && echo "dbport=\"$dbport\"" >> $CONFIG_FILE + sed -i '/^dbuser/d' "$CONFIG_FILE" && echo "dbuser=\"$dbuser\"" >> $CONFIG_FILE + sed -i '/^dbpass/d' "$CONFIG_FILE" && echo "dbpass=\"$dbpass\"" >> $CONFIG_FILE + sed -i '/^dbname/d' "$CONFIG_FILE" && echo "dbname=\"$dbname\"" >> $CONFIG_FILE + sed -i '/^tblpfx/d' "$CONFIG_FILE" && echo "tblpfx=\"$tblpfx\"" >> $CONFIG_FILE + sed -i '/^base_url/d' "$CONFIG_FILE" && echo "base_url=\"$baseurl\"" >> $CONFIG_FILE + + else + echo "$PREFIX Config file NOT found" + + # make sure all of the variables needed for the setup wizard are present + if [[ -z "$lang" || -z "$dbtype" || -z "$dbhost" || -z "$dbport" || -z "$dbuser" || -z "$dbpass" || -z "$dbname" || -z "$baseurl" || -z "$wtname" || -z "$wtuser" || -z "$wtpass" || -z "$wtemail" ]] + then + echo "$PREFIX Not all variables required for setup wizard present" + return 0 + fi + + echo "$PREFIX Automating setup wizard" + + # start apache in the background quickly to send the request + service apache2 start + + # set us up to a known HTTP state + a2dissite webtrees-ssl + a2dissite webtrees-redir + a2ensite webtrees + service apache2 reload + + # wait until database is ready + if [ "$dbtype" = "mysql" ]; then + while ! mysqladmin ping -h"$dbhost" --silent; do + echo "$PREFIX Waiting for MySQL server to be ready." + sleep 1 + done + else + echo "$PREFIX Waiting 10 seconds arbitrarily for database server to be ready" + sleep 10 + fi + + # POST the data and follow redirects and ignore SSL errors, if HTTPS is enabled and forced + curl -L -k -X POST \ + -F "lang=$lang" \ + -F "dbtype=$dbtype" \ + -F "dbhost=$dbhost" \ + -F "dbport=$dbport" \ + -F "dbuser=$dbuser" \ + -F "dbpass=$dbpass" \ + -F "dbname=$dbname" \ + -F "tblpfx=$tblpfx" \ + -F "baseurl=$baseurl" \ + -F "wtname=$wtname" \ + -F "wtuser=$wtuser" \ + -F "wtpass=$wtpass" \ + -F "wtemail=$wtemail" \ + -F "step=6" \ + http://127.0.0.1:80 + + # stop apache so that we can start it as a foreground process + service apache2 stop + fi +} + +pretty_urls () { + echo "$PREFIX Attempting to set pretty URLs status" + + if [ -f "$CONFIG_FILE" ] + then + echo "$PREFIX Config file found" + + # remove exisiting line from file + sed -i '/^rewrite_urls/d' "$CONFIG_FILE" + + if [[ -z "${PRETTY_URLS}" ]] + then + echo "$PREFIX Removing pretty URLs" + echo 'rewrite_urls="0"' >> $CONFIG_FILE + else + echo "$PREFIX Adding pretty URLs" + echo 'rewrite_urls="1"' >> $CONFIG_FILE + fi + else + echo "$PREFIX Config file NOT found, please setup webtrees" + fi +} + +https () { + echo "$PREFIX Attempting to set HTTPS status" + + if [[ -z "${HTTPS}" && -z "${SSL}" ]] + then + echo "$PREFIX Removing HTTPS support" + a2dissite webtrees-ssl + a2dissite webtrees-redir + a2ensite webtrees + else + if [[ -z "${HTTPS_REDIRECT}" && -z "${SSL_REDIRECT}" ]] + then + echo "$PREFIX Adding HTTPS, removing HTTPS redirect" + a2dissite webtrees-redir + a2ensite webtrees + a2ensite webtrees-ssl + else + echo "$PREFIX Adding HTTPS, adding HTTPS redirect" + a2dissite webtrees + a2ensite webtrees-redir + a2ensite webtrees-ssl + fi + fi +} + +auto_wizard +pretty_urls +https + +echo "$PREFIX Starting Apache" + +exec apache2-foreground