openhab-docker/entrypoint-debian.sh

150 lines
6.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'
# Install Java unlimited strength cryptography
if [ "${CRYPTO_POLICY}" = "unlimited" ] && [ ! -f "${JAVA_HOME}/jre/lib/security/README.txt" ]; then
echo "Installing Zulu Cryptography Extension Kit (\"CEK\")..."
wget -q -O /tmp/ZuluJCEPolicies.zip https://cdn.azul.com/zcek/bin/ZuluJCEPolicies.zip
unzip -jo -d "${JAVA_HOME}/jre/lib/security" /tmp/ZuluJCEPolicies.zip
rm /tmp/ZuluJCEPolicies.zip
fi
# Deleting instance.properties to avoid karaf PID conflict on restart
# See: https://github.com/openhab/openhab-docker/issues/99
rm -f /openhab/runtime/instances/instance.properties
# The instance.properties file in openHAB 2.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 "${APPDIR}" --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
# Copy initial files to host volume
case ${OPENHAB_VERSION} in
1.*)
if [ -z "$(ls -A "${APPDIR}/configurations")" ]; then
# Copy userdata dir for openHAB 1.x
echo "No configuration found... initializing."
cp -av "${APPDIR}/configurations.dist/." "${APPDIR}/configurations/"
fi
;;
2.*)
# Initialize empty host volumes
if [ -z "$(ls -A "${APPDIR}/userdata")" ]; then
# Copy userdata dir for openHAB 2.x
echo "No userdata found... initializing."
cp -av "${APPDIR}/userdata.dist/." "${APPDIR}/userdata/"
fi
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
# Upgrade userdata if versions do not match
if [ ! -z $(cmp "${APPDIR}/userdata/etc/version.properties" "${APPDIR}/userdata.dist/etc/version.properties") ]; then
echo "Image and userdata versions differ! Starting an upgrade."
# Make a backup of userdata
backupFile=userdata-$(date +"%FT%H-%M-%S").tar
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
if [ ! -d "${APPDIR}/userdata/backup" ]; then
mkdir "${APPDIR}/userdata/backup"
fi
tar --exclude="${APPDIR}/userdata/backup" -c -f "${APPDIR}/userdata/backup/${backupFile}" "${APPDIR}/userdata"
echo "You can find backup of userdata in ${APPDIR}/userdata/backup/${backupFile}"
# Copy over the updated files
cp "${APPDIR}/userdata.dist/etc/all.policy" "${APPDIR}/userdata/etc/"
cp "${APPDIR}/userdata.dist/etc/branding.properties" "${APPDIR}/userdata/etc/"
cp "${APPDIR}/userdata.dist/etc/branding-ssh.properties" "${APPDIR}/userdata/etc/"
cp "${APPDIR}/userdata.dist/etc/config.properties" "${APPDIR}/userdata/etc/"
cp "${APPDIR}/userdata.dist/etc/custom.properties" "${APPDIR}/userdata/etc/"
if [ -f "${APPDIR}/userdata.dist/etc/custom.system.properties" ]; then
cp "${APPDIR}/userdata.dist/etc/custom.system.properties" "${APPDIR}/userdata/etc/"
fi
cp "${APPDIR}/userdata.dist/etc/distribution.info" "${APPDIR}/userdata/etc/"
cp "${APPDIR}/userdata.dist/etc/jre.properties" "${APPDIR}/userdata/etc/"
cp "${APPDIR}/userdata.dist/etc/org.apache.karaf"* "${APPDIR}/userdata/etc/"
cp "${APPDIR}/userdata.dist/etc/org.ops4j.pax.url.mvn.cfg" "${APPDIR}/userdata/etc/"
if [ -f "${APPDIR}/userdata.dist/etc/overrides.properties" ]; then
cp "${APPDIR}/userdata.dist/etc/overrides.properties" "${APPDIR}/userdata/etc/"
fi
cp "${APPDIR}/userdata.dist/etc/profile.cfg" "${APPDIR}/userdata/etc/"
cp "${APPDIR}/userdata.dist/etc/startup.properties" "${APPDIR}/userdata/etc"
cp "${APPDIR}/userdata.dist/etc/system.properties" "${APPDIR}/userdata/etc"
cp "${APPDIR}/userdata.dist/etc/version.properties" "${APPDIR}/userdata/etc/"
echo "Replaced files in userdata/etc with newer versions"
# Remove necessary files after installation
rm -rf "${APPDIR}/userdata/etc/org.openhab.addons.cfg"
if [ ! -f "${APPDIR}/userdata.dist/etc/overrides.properties" ]; then
rm -rf "${APPDIR}/userdata/etc/overrides.properties"
fi
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
# Clear the cache and tmp
rm -rf "${APPDIR}/userdata/cache"
rm -rf "${APPDIR}/userdata/tmp"
mkdir "${APPDIR}/userdata/cache"
mkdir "${APPDIR}/userdata/tmp"
echo "Cleared the cache and tmp"
fi
if [ -z "$(ls -A "${APPDIR}/conf")" ]; then
# Copy userdata dir for openHAB 2.x
echo "No configuration found... initializing."
cp -av "${APPDIR}/conf.dist/." "${APPDIR}/conf/"
fi
;;
*)
echo "openHAB version ${OPENHAB_VERSION} not supported!"
;;
esac
# 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
# Set openhab folder permission
chown -R openhab:openhab "${APPDIR}"
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