Skip to content

Commit

Permalink
Update userdata using common openHAB update files (#239)
Browse files Browse the repository at this point in the history
Reworks the update process to update the userdata in the container using the update.lst and userdata_sysfiles.lst files (provided by openhab-distro).
The update script has been modified for use in the container.

This adds the following new functionality when updating between versions:
* show update notes and warnings during the update (based on update.lst)
* execute the update pre/post commands (based on update.lst)
* replace userdata system files with newer versions (based on userdata_sysfiles.lst)
* update KAR files in addons dir by downloading newer versions
* log the update output in update.log

Other improvements are:
* declare and use common openHAB environment variables in scripts (OPENHAB_BACKUPS, OPENHAB_CONF, OPENHAB_HOME, OPENHAB_LOGDIR, OPENHAB_USERDATA)
* initialize empty volumes using a reusable method
* move all default volume data into the "dist" directory
* remove Windows PowerShell scripts from container images

Signed-off-by: Wouter Born <github@maindrain.net>
  • Loading branch information
wborn authored and cniweb committed Aug 4, 2019
1 parent c62e999 commit ab1d7ea
Show file tree
Hide file tree
Showing 83 changed files with 4,226 additions and 1,593 deletions.
17 changes: 11 additions & 6 deletions 1.8.3/alpine/Dockerfile-amd64
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,19 @@ ENV \

# Set variables and locales
ENV \
APPDIR="/openhab" \
CRYPTO_POLICY="limited" \
EXTRA_JAVA_OPTS="" \
KARAF_EXEC="exec" \
LC_ALL="en_US.UTF-8" \
LANG="en_US.UTF-8" \
LANGUAGE="en_US.UTF-8" \
OPENHAB_BACKUPS="/openhab/userdata/backup" \
OPENHAB_CONF="/openhab/conf" \
OPENHAB_HOME="/openhab" \
OPENHAB_HTTP_PORT="8080" \
OPENHAB_HTTPS_PORT="8443"
OPENHAB_HTTPS_PORT="8443" \
OPENHAB_LOGDIR="/openhab/userdata/logs" \
OPENHAB_USERDATA="/openhab/userdata"

# Set arguments on build
ARG BUILD_DATE
Expand Down Expand Up @@ -73,19 +77,20 @@ RUN rm -r "$JAVA_HOME/jre/lib/security/policy/unlimited" && \

# Install openHAB
RUN wget -nv -O /tmp/openhab.zip "${OPENHAB_URL}" && \
unzip -q /tmp/openhab.zip -d "${APPDIR}" -x "*.bat" && \
unzip -q /tmp/openhab.zip -d "${OPENHAB_HOME}" -x "*.bat" && \
rm /tmp/openhab.zip && \
cp -a "${APPDIR}/configurations" "${APPDIR}/configurations.dist" && \
mkdir -p "${OPENHAB_HOME}/dist" && \
cp -a "${OPENHAB_HOME}/configurations" "${OPENHAB_HOME}/dist" && \
echo 'export TERM=${TERM:=dumb}' | tee -a ~/.bashrc

# Expose volume with configuration and userdata dir
VOLUME ${APPDIR}/configurations ${APPDIR}/addons
VOLUME ${OPENHAB_HOME}/configurations ${OPENHAB_HOME}/addons

# Expose HTTP and HTTPS ports
EXPOSE 8080 8443

# Set working directory and entrypoint
WORKDIR ${APPDIR}
WORKDIR ${OPENHAB_HOME}
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Expand Down
17 changes: 11 additions & 6 deletions 1.8.3/alpine/Dockerfile-arm64
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,19 @@ ENV \

# Set variables and locales
ENV \
APPDIR="/openhab" \
CRYPTO_POLICY="limited" \
EXTRA_JAVA_OPTS="" \
KARAF_EXEC="exec" \
LC_ALL="en_US.UTF-8" \
LANG="en_US.UTF-8" \
LANGUAGE="en_US.UTF-8" \
OPENHAB_BACKUPS="/openhab/userdata/backup" \
OPENHAB_CONF="/openhab/conf" \
OPENHAB_HOME="/openhab" \
OPENHAB_HTTP_PORT="8080" \
OPENHAB_HTTPS_PORT="8443"
OPENHAB_HTTPS_PORT="8443" \
OPENHAB_LOGDIR="/openhab/userdata/logs" \
OPENHAB_USERDATA="/openhab/userdata"

# Set arguments on build
ARG BUILD_DATE
Expand Down Expand Up @@ -73,19 +77,20 @@ RUN rm -r "$JAVA_HOME/jre/lib/security/policy/unlimited" && \

# Install openHAB
RUN wget -nv -O /tmp/openhab.zip "${OPENHAB_URL}" && \
unzip -q /tmp/openhab.zip -d "${APPDIR}" -x "*.bat" && \
unzip -q /tmp/openhab.zip -d "${OPENHAB_HOME}" -x "*.bat" && \
rm /tmp/openhab.zip && \
cp -a "${APPDIR}/configurations" "${APPDIR}/configurations.dist" && \
mkdir -p "${OPENHAB_HOME}/dist" && \
cp -a "${OPENHAB_HOME}/configurations" "${OPENHAB_HOME}/dist" && \
echo 'export TERM=${TERM:=dumb}' | tee -a ~/.bashrc

# Expose volume with configuration and userdata dir
VOLUME ${APPDIR}/configurations ${APPDIR}/addons
VOLUME ${OPENHAB_HOME}/configurations ${OPENHAB_HOME}/addons

# Expose HTTP and HTTPS ports
EXPOSE 8080 8443

# Set working directory and entrypoint
WORKDIR ${APPDIR}
WORKDIR ${OPENHAB_HOME}
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Expand Down
17 changes: 11 additions & 6 deletions 1.8.3/alpine/Dockerfile-armhf
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,19 @@ ENV \

# Set variables and locales
ENV \
APPDIR="/openhab" \
CRYPTO_POLICY="limited" \
EXTRA_JAVA_OPTS="" \
KARAF_EXEC="exec" \
LC_ALL="en_US.UTF-8" \
LANG="en_US.UTF-8" \
LANGUAGE="en_US.UTF-8" \
OPENHAB_BACKUPS="/openhab/userdata/backup" \
OPENHAB_CONF="/openhab/conf" \
OPENHAB_HOME="/openhab" \
OPENHAB_HTTP_PORT="8080" \
OPENHAB_HTTPS_PORT="8443"
OPENHAB_HTTPS_PORT="8443" \
OPENHAB_LOGDIR="/openhab/userdata/logs" \
OPENHAB_USERDATA="/openhab/userdata"

# Set arguments on build
ARG BUILD_DATE
Expand Down Expand Up @@ -73,19 +77,20 @@ RUN rm -r "$JAVA_HOME/jre/lib/security/policy/unlimited" && \

# Install openHAB
RUN wget -nv -O /tmp/openhab.zip "${OPENHAB_URL}" && \
unzip -q /tmp/openhab.zip -d "${APPDIR}" -x "*.bat" && \
unzip -q /tmp/openhab.zip -d "${OPENHAB_HOME}" -x "*.bat" && \
rm /tmp/openhab.zip && \
cp -a "${APPDIR}/configurations" "${APPDIR}/configurations.dist" && \
mkdir -p "${OPENHAB_HOME}/dist" && \
cp -a "${OPENHAB_HOME}/configurations" "${OPENHAB_HOME}/dist" && \
echo 'export TERM=${TERM:=dumb}' | tee -a ~/.bashrc

# Expose volume with configuration and userdata dir
VOLUME ${APPDIR}/configurations ${APPDIR}/addons
VOLUME ${OPENHAB_HOME}/configurations ${OPENHAB_HOME}/addons

# Expose HTTP and HTTPS ports
EXPOSE 8080 8443

# Set working directory and entrypoint
WORKDIR ${APPDIR}
WORKDIR ${OPENHAB_HOME}
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Expand Down
92 changes: 28 additions & 64 deletions 1.8.3/alpine/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ 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
rm -f "${OPENHAB_HOME}/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
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 14
Expand All @@ -35,80 +35,44 @@ if ! id -u openhab >/dev/null 2>&1; then
groupmod --new-name openhab $group_name
fi
echo "Create user openhab with id ${NEW_USER_ID}"
adduser -u $NEW_USER_ID -D -g '' -h ${APPDIR} -G openhab openhab
adduser -u $NEW_USER_ID -D -g '' -h ${OPENHAB_HOME} -G openhab openhab
adduser openhab dialout
adduser openhab uucp
fi

# Copy initial files to host volume

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.*)
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
initialize_volume "${OPENHAB_HOME}/configurations" "${OPENHAB_HOME}/dist/configurations"
;;
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
initialize_volume "${OPENHAB_CONF}" "${OPENHAB_HOME}/dist/conf"
initialize_volume "${OPENHAB_USERDATA}" "${OPENHAB_HOME}/dist/userdata"

# 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."
# 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
backupFile=userdata-$(date +"%FT%H-%M-%S").tar
if [ ! -d "${APPDIR}/userdata/backup" ]; then
mkdir "${APPDIR}/userdata/backup"
backup_file=userdata-$(date +"%FT%H-%M-%S").tar
if [ ! -d "${OPENHAB_BACKUPS}" ]; then
mkdir "${OPENHAB_BACKUPS}"
fi
tar -c -f "${APPDIR}/userdata/backup/${backupFile}" --exclude "backup/*" "${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

# 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
tar -c -f "${OPENHAB_BACKUPS}/${backup_file}" --exclude "backup/*" "${OPENHAB_USERDATA}"
echo "You can find backup of userdata in ${OPENHAB_BACKUPS}/${backup_file}" | tee -a "${OPENHAB_LOGDIR}/update.log"

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/"
exec "${OPENHAB_HOME}/runtime/bin/update" 2>&1 | tee -a "${OPENHAB_LOGDIR}/update.log"
fi
;;
*)
Expand All @@ -117,7 +81,7 @@ case ${OPENHAB_VERSION} in
esac

# Set openhab folder permission
chown -R openhab:openhab "${APPDIR}"
chown -R openhab:openhab "${OPENHAB_HOME}"
sync

# Run s6-style init continuation scripts if existent
Expand Down
17 changes: 11 additions & 6 deletions 1.8.3/debian/Dockerfile-amd64
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,19 @@ ENV \

# Set variables and locales
ENV \
APPDIR="/openhab" \
CRYPTO_POLICY="limited" \
EXTRA_JAVA_OPTS="" \
KARAF_EXEC="exec" \
LC_ALL="en_US.UTF-8" \
LANG="en_US.UTF-8" \
LANGUAGE="en_US.UTF-8" \
OPENHAB_BACKUPS="/openhab/userdata/backup" \
OPENHAB_CONF="/openhab/conf" \
OPENHAB_HOME="/openhab" \
OPENHAB_HTTP_PORT="8080" \
OPENHAB_HTTPS_PORT="8443"
OPENHAB_HTTPS_PORT="8443" \
OPENHAB_LOGDIR="/openhab/userdata/logs" \
OPENHAB_USERDATA="/openhab/userdata"

# Set arguments on build
ARG BUILD_DATE
Expand Down Expand Up @@ -77,19 +81,20 @@ RUN wget -nv -O /tmp/java.tar.gz "${JAVA_URL}" && \

# Install openHAB
RUN wget -nv -O /tmp/openhab.zip "${OPENHAB_URL}" && \
unzip -q /tmp/openhab.zip -d "${APPDIR}" -x "*.bat" && \
unzip -q /tmp/openhab.zip -d "${OPENHAB_HOME}" -x "*.bat" && \
rm /tmp/openhab.zip && \
cp -a "${APPDIR}/configurations" "${APPDIR}/configurations.dist" && \
mkdir -p "${OPENHAB_HOME}/dist" && \
cp -a "${OPENHAB_HOME}/configurations" "${OPENHAB_HOME}/dist" && \
echo 'export TERM=${TERM:=dumb}' | tee -a ~/.bashrc

# Expose volume with configuration and userdata dir
VOLUME ${APPDIR}/configurations ${APPDIR}/addons
VOLUME ${OPENHAB_HOME}/configurations ${OPENHAB_HOME}/addons

# Expose HTTP and HTTPS ports
EXPOSE 8080 8443

# Set working directory and entrypoint
WORKDIR ${APPDIR}
WORKDIR ${OPENHAB_HOME}
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Expand Down
17 changes: 11 additions & 6 deletions 1.8.3/debian/Dockerfile-arm64
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,19 @@ ENV \

# Set variables and locales
ENV \
APPDIR="/openhab" \
CRYPTO_POLICY="limited" \
EXTRA_JAVA_OPTS="" \
KARAF_EXEC="exec" \
LC_ALL="en_US.UTF-8" \
LANG="en_US.UTF-8" \
LANGUAGE="en_US.UTF-8" \
OPENHAB_BACKUPS="/openhab/userdata/backup" \
OPENHAB_CONF="/openhab/conf" \
OPENHAB_HOME="/openhab" \
OPENHAB_HTTP_PORT="8080" \
OPENHAB_HTTPS_PORT="8443"
OPENHAB_HTTPS_PORT="8443" \
OPENHAB_LOGDIR="/openhab/userdata/logs" \
OPENHAB_USERDATA="/openhab/userdata"

# Set arguments on build
ARG BUILD_DATE
Expand Down Expand Up @@ -77,19 +81,20 @@ RUN wget -nv -O /tmp/java.tar.gz "${JAVA_URL}" && \

# Install openHAB
RUN wget -nv -O /tmp/openhab.zip "${OPENHAB_URL}" && \
unzip -q /tmp/openhab.zip -d "${APPDIR}" -x "*.bat" && \
unzip -q /tmp/openhab.zip -d "${OPENHAB_HOME}" -x "*.bat" && \
rm /tmp/openhab.zip && \
cp -a "${APPDIR}/configurations" "${APPDIR}/configurations.dist" && \
mkdir -p "${OPENHAB_HOME}/dist" && \
cp -a "${OPENHAB_HOME}/configurations" "${OPENHAB_HOME}/dist" && \
echo 'export TERM=${TERM:=dumb}' | tee -a ~/.bashrc

# Expose volume with configuration and userdata dir
VOLUME ${APPDIR}/configurations ${APPDIR}/addons
VOLUME ${OPENHAB_HOME}/configurations ${OPENHAB_HOME}/addons

# Expose HTTP and HTTPS ports
EXPOSE 8080 8443

# Set working directory and entrypoint
WORKDIR ${APPDIR}
WORKDIR ${OPENHAB_HOME}
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Expand Down
Loading

0 comments on commit ab1d7ea

Please sign in to comment.