openhab-docker/debian/entrypoint

121 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
interactive=$(if test -t 0; then echo true; else echo false; fi)
set -eux -o pipefail ${EXTRA_SHELL_OPTS-}
IFS=$'\n\t'
export JAVA_HOME=$(find /usr/lib/jvm -mindepth 1 -maxdepth 1 -type d)
# Configure Java unlimited strength cryptography
if [ "${CRYPTO_POLICY}" = "unlimited" ]; then
echo "Configuring Java unlimited strength cryptography policy..."
sed -i 's/^crypto.policy=limited/crypto.policy=unlimited/' "${JAVA_HOME}/conf/security/java.security"
fi
# Set capabilities when available for add-ons using Pcap4J
if capsh --print | grep -E 'Current:.+,cap_net_admin,cap_net_raw,.+' >/dev/null; then
setcap cap_net_raw,cap_net_admin=eip "${JAVA_HOME}/bin/java"
fi
# Delete stale nrjavaserial lock files and Karaf instance.properties to avoid PID conflicts on restarts
rm -f /var/lock/LCK..*
rm -f "${OPENHAB_USERDATA}/tmp/instances/instance.properties"
# Add openhab user and add user to groups for different host distros
# Alpine: audio=18, dialout=20, uucp=14
# CentOS/RedHat: audio=63, dialout=18, uucp=14
# Debian/Ubuntu: audio=29, dialout=20, uucp=10
# Linux from Scratch: audio=11, dialout=10, uucp=32
# openSUSE (old): audio=17, dialout=16, uucp=14
# openSUSE (new): audio=492, dialout=490
# Raspberry Pi OS: audio=29, dialout=20, uucp=10, gpio=997
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 11 audio2
groupadd -g 14 uucp2
groupadd -g 16 dialout2
groupadd -g 17 audio3
groupadd -g 18 dialout3
groupadd -g 32 uucp3
groupadd -g 63 audio4
groupadd -g 490 dialout4
groupadd -g 492 audio5
groupadd -g 997 gpio
adduser openhab audio
adduser openhab audio2
adduser openhab audio3
adduser openhab audio4
adduser openhab audio5
adduser openhab dialout
adduser openhab dialout2
adduser openhab dialout3
adduser openhab dialout4
adduser openhab gpio
adduser openhab uucp
adduser openhab uucp2
adduser openhab uucp3
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
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"
# 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
# Set openhab folder permission
chown -R openhab:openhab "${OPENHAB_HOME}"
sync
# Run s6-style init continuation scripts if dir exists and s6 is not installed
if [ -d /etc/cont-init.d ] && [ $(ls /usr/bin/s6-* 2>/dev/null | wc -l) == 0 ]; 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