openhab-docker/entrypoint-debian.sh

119 lines
4.0 KiB
Bash
Raw Normal View History

#!/bin/bash -x
interactive=$(if test -t 0; then echo true; else echo false; fi)
set -euo pipefail
IFS=$'\n\t'
# Configure Java unlimited strength cryptography
if [ "${CRYPTO_POLICY}" = "unlimited" ]; then
echo "Configuring Zulu JDK ${JAVA_VERSION} unlimited strength cryptography policy..."
if [ "${JAVA_VERSION}" = "8" ]; then
java_security_file="${JAVA_HOME}/jre/lib/security/java.security"
elif [ "$JAVA_VERSION" = "11" ]; then
java_security_file="${JAVA_HOME}/conf/security/java.security"
fi
sed -i 's/^crypto.policy=limited/crypto.policy=unlimited/' "${java_security_file}"
fi
# Deleting instance.properties to avoid karaf PID conflict on restart
# See: https://github.com/openhab/openhab-docker/issues/99
rm -f "${OPENHAB_HOME}/runtime/instances/instance.properties"
# The instance.properties file in openHAB 2.x/3.x is installed in the tmp
# directory
rm -f "${OPENHAB_USERDATA}/tmp/instances/instance.properties"
# Add openhab user & handle possible device groups for different host systems
# Container base image puts dialout on group id 20, uucp on id 10
# GPIO Group for RPI access
NEW_USER_ID=${USER_ID:-9001}
NEW_GROUP_ID=${GROUP_ID:-$NEW_USER_ID}
echo "Starting with openhab user id: $NEW_USER_ID and group id: $NEW_GROUP_ID"
if ! id -u openhab >/dev/null 2>&1; then
if [ -z "$(getent group $NEW_GROUP_ID)" ]; then
echo "Create group openhab with id ${NEW_GROUP_ID}"
groupadd -g $NEW_GROUP_ID openhab
else
group_name=$(getent group $NEW_GROUP_ID | cut -d: -f1)
echo "Rename group $group_name to openhab"
groupmod --new-name openhab $group_name
fi
echo "Create user openhab with id ${NEW_USER_ID}"
adduser -u $NEW_USER_ID --disabled-password --gecos '' --home "${OPENHAB_HOME}" --gid $NEW_GROUP_ID openhab
groupadd -g 14 uucp2
groupadd -g 16 dialout2
groupadd -g 18 dialout3
groupadd -g 32 uucp3
groupadd -g 997 gpio
adduser openhab dialout
adduser openhab uucp
adduser openhab uucp2
adduser openhab dialout2
adduser openhab dialout3
adduser openhab uucp3
adduser openhab gpio
fi
initialize_volume() {
volume="$1"
source="$2"
if [ -z "$(ls -A "$volume")" ]; then
echo "Initializing empty volume ${volume} ..."
cp -av "${source}/." "${volume}/"
fi
}
# Initialize empty volumes and update userdata
case ${OPENHAB_VERSION} in
1.*)
initialize_volume "${OPENHAB_HOME}/configurations" "${OPENHAB_HOME}/dist/configurations"
;;
2.*|3.*)
initialize_volume "${OPENHAB_CONF}" "${OPENHAB_HOME}/dist/conf"
initialize_volume "${OPENHAB_USERDATA}" "${OPENHAB_HOME}/dist/userdata"
# Update userdata if versions do not match
if [ ! -z $(cmp "${OPENHAB_USERDATA}/etc/version.properties" "${OPENHAB_HOME}/dist/userdata/etc/version.properties") ]; then
echo "Image and userdata versions differ! Starting an upgrade." | tee "${OPENHAB_LOGDIR}/update.log"
Issue #148 Check openHAB version and perform an upgrade if different (#149) * Implemented a check against the openHAB version and perform an upgrade if the versions are different. * Cleaned up problems found by Codacy, ran upgrade.sh * Copied the original .sh files from master on the openhab-docker repo and remade the edits. There were inconsistancies including changes from previous commits that were lost somehow. * Suggested updates made: - removed extraneous a options from the if statements - removed extraneous echo - use double quotes on all directroies and files - remove the whole cache and tmp folders then recreate them - exclude the backups folder from the tar * Fixed indentation and double quotes around some of the directories, removed the exclude option from the tar for now pending further research. * Fixed error thrown in attempt to use --exclude in the tar command. When using -- opetions to tar one must use - on the cf options as well. * This version should work for -X. We have to be careful though, not all BusyBox versions of tar support the -X option. * Fixed typo in check against curVersion and imgVersion * Moved the test for the existance of the backup folder and creation of it to before the tar, change the tar to save straight to the backup folder which we can do now that we are excluding the backup folder from the backup and we know it exists. Moved the * outside the double quotes in the cp for the karaf etc files. * Reordered the files copied over from userdata.dist alphabetically, added the missing custom.system.properties and system.properties to the list. * Added overrides.properties to the list of files copied over from userdata.dist * Fixes and improvements * Skip copy of non-existing files * Fix excluding backups directory on Alpine * Simplify grep and add missing double quotes * Correct indentation Signed-off-by: Wouter Born <eclipse@maindrain.net> * Changed the test to see if version.properties is different between image and container to use cmp which compares the whole file. * Forgot to run upgrade.sh * Fixing echo that referred to previously removed variables. Not sure how that wasn't part of the last update.
2018-01-10 19:16:32 +00:00
# Make a backup of userdata
backup_file=userdata-$(date +"%FT%H-%M-%S").tar
if [ ! -d "${OPENHAB_BACKUPS}" ]; then
mkdir "${OPENHAB_BACKUPS}"
fi
tar --exclude="${OPENHAB_BACKUPS}" -c -f "${OPENHAB_BACKUPS}/${backup_file}" "${OPENHAB_USERDATA}"
echo "You can find backup of userdata in ${OPENHAB_BACKUPS}/${backup_file}" | tee -a "${OPENHAB_LOGDIR}/update.log"
exec "${OPENHAB_HOME}/runtime/bin/update" 2>&1 | tee -a "${OPENHAB_LOGDIR}/update.log"
fi
;;
*)
echo "openHAB version ${OPENHAB_VERSION} not supported!"
;;
esac
# Set openhab folder permission
chown -R openhab:openhab "${OPENHAB_HOME}"
sync
# Run s6-style init continuation scripts if existent
if [ -d /etc/cont-init.d ]
then
for script in $(find /etc/cont-init.d -type f | grep -v \~ | sort)
do
. "${script}"
done
fi
# sync again after continuation scripts have been run
sync
# Use server mode with the default command when there is no pseudo-TTY
if [ "$interactive" == "false" ] && [ "$(IFS=" "; echo "$@")" == "gosu openhab tini -s ./start.sh" ]; then
command=($@ server)
exec "${command[@]}"
else
exec "$@"
fi