mirror of
https://github.com/buanet/ioBroker.docker.git
synced 2025-12-21 20:29:09 +02:00
14
README.md
14
README.md
@@ -76,6 +76,7 @@ You do not have to declare every single variable when setting up your container.
|
||||
|---|---|---|
|
||||
|AVAHI|false|Installs and activates avahi-daemon for supporting yahka-adapter, can be "true" or "false"|
|
||||
|IOB_ADMINPORT|8081|Sets ioBroker adminport on startup|
|
||||
|IOB_MULTIHOST|master|Sets ioBroker instance as "master" or "slave" for multihost (additional config for objectsdb and statesdb needed)|
|
||||
|IOB_OBJECTSDB_HOST|127.0.0.1|Sets hostname for ioBroker objects db|
|
||||
|IOB_OBJECTSDB_PORT|9001|Sets port for ioBroker objects db|
|
||||
|IOB_OBJECTSDB_TYPE|file|Sets type of ioBroker objects db, cloud be "file", "redis" or "couch"|
|
||||
@@ -119,6 +120,10 @@ Basically there are two different scripts which will be read and called by the s
|
||||
Hint:
|
||||
To get familiar with that feature try the following: Create a Container, mount an empty folder to /opt/userscripts, start your container. Two scripts will be restored into the empty folder. Rename the example scripts by simply removing "\_example". Restart your container and take a look at the Log. In "Step 4 of 5: Applying special settings" you will see the messages generated by the example userscripts.
|
||||
|
||||
### Multihost
|
||||
|
||||
Details will follow soon.
|
||||
|
||||
## Best practices
|
||||
|
||||
### Avoid using "latest" tag
|
||||
@@ -157,8 +162,13 @@ Thank you!
|
||||
|
||||
## Changelog
|
||||
|
||||
### v4.2.3beta (2020-06-05)
|
||||
* updating js-controller to not stable version 3.1.5 to fix renaming issue
|
||||
### v4.2.4beta (2020-06-23)
|
||||
* added graceful shutdown
|
||||
* small fix for GID/UID handling
|
||||
* adding new ENV "IOB_MULTIHOST" for multihost support
|
||||
* small syntax fixes in iobroker_startup.sh
|
||||
* v4.2.3beta (2020-06-05)
|
||||
* updating js-controller to not stable version 3.1.5 to fix renaming issue
|
||||
* v4.2.2beta (2020-06-03)
|
||||
* ~~workaround for renaming issues on startup~~ (fixed in js-controller)
|
||||
* v4.2.1beta (2020-05-10)
|
||||
|
||||
@@ -79,14 +79,15 @@ RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \
|
||||
|
||||
# Setting up iobroker-user (shell and home directory)
|
||||
RUN chsh -s /bin/bash iobroker \
|
||||
&& usermod --home /opt/iobroker iobroker
|
||||
&& usermod --home /opt/iobroker iobroker \
|
||||
&& usermod -u 1000 iobroker \
|
||||
&& groupmod -g 1000 iobroker
|
||||
|
||||
# Setting up ENVs
|
||||
ENV DEBIAN_FRONTEND="teletype" \
|
||||
LANG="de_DE.UTF-8" \
|
||||
LANGUAGE="de_DE:de" \
|
||||
LC_ALL="de_DE.UTF-8" \
|
||||
PACKAGES="vi" \
|
||||
SETGID=1000 \
|
||||
SETUID=1000 \
|
||||
TZ="Europe/Berlin"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
# Reading ENV
|
||||
adminport=$IOB_ADMINPORT
|
||||
avahi=$AVAHI
|
||||
multihost=$IOB_MULTIHOST
|
||||
objectsdbhost=$IOB_OBJECTSDB_HOST
|
||||
objectsdbport=$IOB_OBJECTSDB_PORT
|
||||
objectsdbtype=$IOB_OBJECTSDB_TYPE
|
||||
@@ -75,7 +76,7 @@ then
|
||||
echo "Installing additional packages is set by ENV."
|
||||
echo "The following packages will be installed:" $packages"..."
|
||||
echo $packages > /opt/scripts/.packages
|
||||
bash /opt/scripts/setup_packages.sh
|
||||
bash /opt/scripts/setup_packages.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -83,13 +84,14 @@ then
|
||||
then
|
||||
echo "Different UID and/ or GID is set by ENV."
|
||||
echo "Changing UID to "$setuid" and GID to "$setgid"..."
|
||||
usermod -u $setuid iobroker
|
||||
groupmod -g $setgid iobroker
|
||||
usermod -u $setuid iobroker
|
||||
groupmod -g $setgid iobroker
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
else
|
||||
echo "Nothing to do here."
|
||||
echo ' '
|
||||
fi
|
||||
|
||||
# Change directory for next steps
|
||||
@@ -107,7 +109,7 @@ echo ' '
|
||||
if [ `find /opt/iobroker -type f | wc -l` -lt 1 ]
|
||||
then
|
||||
echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..."
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
echo "Done."
|
||||
elif [ -f /opt/iobroker/iobroker ]
|
||||
then
|
||||
@@ -115,11 +117,11 @@ then
|
||||
elif [ $(ls iobroker_20* 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/iobroker_20*.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ]
|
||||
then
|
||||
echo "ioBroker backup file detected in /opt/iobroker. Restoring ioBroker..."
|
||||
mv /opt/iobroker/*.tar.gz /opt/
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
mkdir /opt/iobroker/backups
|
||||
mv /opt/*.tar.gz /opt/iobroker/backups/
|
||||
iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1
|
||||
mv /opt/iobroker/*.tar.gz /opt/
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
mkdir /opt/iobroker/backups
|
||||
mv /opt/*.tar.gz /opt/iobroker/backups/
|
||||
iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1
|
||||
echo "Done."
|
||||
echo ' '
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
@@ -200,7 +202,7 @@ then
|
||||
then
|
||||
echo "Adminport set by ENV does not match port configured in ioBroker installation."
|
||||
echo "Setting Adminport to \""$adminport"\"..."
|
||||
bash iobroker set admin.0 --port $adminport
|
||||
bash iobroker set admin.0 --port $adminport
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -213,8 +215,8 @@ then
|
||||
if [ "$avahi" = "true" ]
|
||||
then
|
||||
echo "Avahi-daemon is activated by ENV."
|
||||
chmod 755 /opt/scripts/setup_avahi.sh
|
||||
bash /opt/scripts/setup_avahi.sh
|
||||
chmod 755 /opt/scripts/setup_avahi.sh
|
||||
bash /opt/scripts/setup_avahi.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -227,8 +229,8 @@ then
|
||||
if [ "$zwave" = "true" ]
|
||||
then
|
||||
echo "Z-Wave is activated by ENV."
|
||||
chmod 755 /opt/scripts/setup_zwave.sh
|
||||
bash /opt/scripts/setup_zwave.sh
|
||||
chmod 755 /opt/scripts/setup_zwave.sh
|
||||
bash /opt/scripts/setup_zwave.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -254,6 +256,89 @@ then
|
||||
fi
|
||||
|
||||
|
||||
# Checking ENV for multihost setup
|
||||
# Configuring objects db host
|
||||
if [ "$multihost" = "master" ] && [ "$objectsdbtype" = "" ] && [ "$objectsdbhost" = "" ] && [ "$objectsdbport" = "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and no external objects db is set."
|
||||
echo "Setting host of objects db to \"0.0.0.0\" to allow external communication..."
|
||||
jq --arg objectsdbhost "0.0.0.0" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" = "master" ] && [ "$objectsdbhost" = "127.0.0.1" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV. But objects db host is set to \"127.0.0.1\" by ENV too."
|
||||
echo "This configuration will not work! Please change or remove ENV \"IOB_OBJECTSDB_HOST\" and start over!"
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "master" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and external objects db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif ([ "$multihost" = "slave" ] && [ "$objectsdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbport" = "" ])
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV. But no external objects db is set."
|
||||
echo "You have to configure ENVs \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" to connect to a maser objects db."
|
||||
echo "Please check your settings and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "slave" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV and external objects db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" != "" ]
|
||||
then
|
||||
echo "Multihost is set but it seems like some configuration is missing."
|
||||
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" correctly and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
fi
|
||||
#Configuring states db host
|
||||
if [ "$multihost" = "master" ] && [ "$statesdbtype" = "" ] && [ "$statesdbhost" = "" ] && [ "$statesdbport" = "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and no external states db is set."
|
||||
echo "Setting host of states db to \"0.0.0.0\" to allow external communication..."
|
||||
jq --arg statesdbhost "0.0.0.0" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" = "master" ] && [ "$statesdbhost" = "127.0.0.1" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV. But states db host is set to \"127.0.0.1\" by ENV too."
|
||||
echo "This configuration will not work! Please change or remove ENV \"IOB_STATESDB_HOST\" and start over!"
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "master" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and external states db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif ([ "$multihost" = "slave" ] && [ "$statesdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbport" = "" ])
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV. But no external states db is set."
|
||||
echo "You have to configure ENVs \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESDB_PORT\" to connect to a maser states db."
|
||||
echo "Please check your settings and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "slave" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV and external states db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" != "" ]
|
||||
then
|
||||
echo "Multihost is set but it seems like some configuration is missing."
|
||||
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESTDB_PORT\" correctly and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Checking ENVs for custom setup of objects db
|
||||
if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ]
|
||||
then
|
||||
@@ -261,7 +346,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_OBJECTSDB_TYPE is set and value is different from detected ioBroker installation."
|
||||
echo "Setting type of objects db to \""$objectsdbtype"\"..."
|
||||
jq --arg objectsdbtype "$objectsdbtype" '.objects.type = $objectsdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg objectsdbtype "$objectsdbtype" '.objects.type = $objectsdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_OBJECTSDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -270,7 +355,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_OBJECTSDB_HOST is set and value is different from detected ioBroker installation."
|
||||
echo "Setting host of objects db to \""$objectsdbhost"\"..."
|
||||
jq --arg objectsdbhost "$objectsdbhost" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg objectsdbhost "$objectsdbhost" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_OBJECTSDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -279,7 +364,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_OBJECTSDB_PORT is set and value is different from detected ioBroker installation."
|
||||
echo "Setting port of objects db to \""$objectsdbport"\"..."
|
||||
jq --arg objectsdbport "$objectsdbport" '.objects.port = $objectsdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg objectsdbport "$objectsdbport" '.objects.port = $objectsdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_OBJECTSDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -295,7 +380,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_STATESDB_TYPE is set and value is different from detected ioBroker installation."
|
||||
echo "Setting type of states db to \""$statesdbtype"\"..."
|
||||
jq --arg statesdbtype "$statesdbtype" '.states.type = $statesdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg statesdbtype "$statesdbtype" '.states.type = $statesdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_STATESDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -304,7 +389,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_STATESDB_HOST is set and value is different from detected ioBroker installation."
|
||||
echo "Setting host of states db to \""$statesdbhost"\"..."
|
||||
jq --arg statesdbhost "$statesdbhost" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg statesdbhost "$statesdbhost" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_STATESDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -313,7 +398,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_STATESDB_PORT is set and value is different from detected ioBroker installation."
|
||||
echo "Setting port of states db to \""$statesdbport"\"..."
|
||||
jq --arg statesdbport "$statesdbport" '.states.port = $statesdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg statesdbport "$statesdbport" '.states.port = $statesdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_STATESDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -326,9 +411,9 @@ fi
|
||||
if [ `find /opt/userscripts -type f | wc -l` -lt 1 ]
|
||||
then
|
||||
echo "There is no data detected in /opt/userscripts. Restoring exapmple userscripts..."
|
||||
tar -xf /opt/initial_userscripts.tar -C /
|
||||
chmod 755 /opt/userscripts/userscript_firststart_example.sh
|
||||
chmod 755 /opt/userscripts/userscript_everystart_example.sh
|
||||
tar -xf /opt/initial_userscripts.tar -C /
|
||||
chmod 755 /opt/userscripts/userscript_firststart_example.sh
|
||||
chmod 755 /opt/userscripts/userscript_everystart_example.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ -f /opt/userscripts/userscript_firststart.sh ] || [ -f /opt/userscripts/userscript_everystart.sh ]
|
||||
@@ -337,26 +422,23 @@ then
|
||||
then
|
||||
echo "Userscript for first start detected and this is the first start of a new container."
|
||||
echo "Running userscript_firststart.sh..."
|
||||
chmod 755 /opt/userscripts/userscript_firststart.sh
|
||||
bash /opt/userscripts/userscript_firststart.sh
|
||||
rm -f /opt/.firstrun
|
||||
chmod 755 /opt/userscripts/userscript_firststart.sh
|
||||
bash /opt/userscripts/userscript_firststart.sh
|
||||
rm -f /opt/.firstrun
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
if [ -f /opt/userscripts/userscript_everystart.sh ]
|
||||
then
|
||||
echo "Userscript for every start detected. Running userscript_everystart.sh..."
|
||||
chmod 755 /opt/userscripts/userscript_everystart.sh
|
||||
bash /opt/userscripts/userscript_everystart.sh
|
||||
chmod 755 /opt/userscripts/userscript_everystart.sh
|
||||
bash /opt/userscripts/userscript_everystart.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
sleep 5
|
||||
|
||||
|
||||
#####
|
||||
# Starting ioBroker
|
||||
#####
|
||||
@@ -367,7 +449,21 @@ echo ' '
|
||||
echo "Starting ioBroker..."
|
||||
echo ' '
|
||||
|
||||
gosu iobroker node node_modules/iobroker.js-controller/controller.js
|
||||
# Function for graceful shutdown by SIGTERM signal
|
||||
shut_down() {
|
||||
echo ' '
|
||||
echo "Recived termination signal (SIGTERM)."
|
||||
echo "Shutting down ioBroker..."
|
||||
pid=$(ps -ef | awk '/[j]s.controller/{print $2}')
|
||||
kill -SIGTERM "$pid"
|
||||
exit
|
||||
}
|
||||
|
||||
# Preventing container restart by keeping a process alive even if iobroker will be stopped
|
||||
# Trap to get signal for graceful shutdown
|
||||
trap 'shut_down' SIGTERM
|
||||
|
||||
# IoBroker start
|
||||
gosu iobroker node node_modules/iobroker.js-controller/controller.js & wait
|
||||
|
||||
# Fallback process for keeping container running when ioBroker is stopped for maintenance (e.g. js-controller update)
|
||||
tail -f /dev/null
|
||||
|
||||
@@ -79,14 +79,15 @@ RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \
|
||||
|
||||
# Setting up iobroker-user (shell and home directory)
|
||||
RUN chsh -s /bin/bash iobroker \
|
||||
&& usermod --home /opt/iobroker iobroker
|
||||
&& usermod --home /opt/iobroker iobroker \
|
||||
&& usermod -u 1000 iobroker \
|
||||
&& groupmod -g 1000 iobroker
|
||||
|
||||
# Setting up ENVs
|
||||
ENV DEBIAN_FRONTEND="teletype" \
|
||||
LANG="de_DE.UTF-8" \
|
||||
LANGUAGE="de_DE:de" \
|
||||
LC_ALL="de_DE.UTF-8" \
|
||||
PACKAGES="vi" \
|
||||
SETGID=1000 \
|
||||
SETUID=1000 \
|
||||
TZ="Europe/Berlin"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
# Reading ENV
|
||||
adminport=$IOB_ADMINPORT
|
||||
avahi=$AVAHI
|
||||
multihost=$IOB_MULTIHOST
|
||||
objectsdbhost=$IOB_OBJECTSDB_HOST
|
||||
objectsdbport=$IOB_OBJECTSDB_PORT
|
||||
objectsdbtype=$IOB_OBJECTSDB_TYPE
|
||||
@@ -75,7 +76,7 @@ then
|
||||
echo "Installing additional packages is set by ENV."
|
||||
echo "The following packages will be installed:" $packages"..."
|
||||
echo $packages > /opt/scripts/.packages
|
||||
bash /opt/scripts/setup_packages.sh
|
||||
bash /opt/scripts/setup_packages.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -83,13 +84,14 @@ then
|
||||
then
|
||||
echo "Different UID and/ or GID is set by ENV."
|
||||
echo "Changing UID to "$setuid" and GID to "$setgid"..."
|
||||
usermod -u $setuid iobroker
|
||||
groupmod -g $setgid iobroker
|
||||
usermod -u $setuid iobroker
|
||||
groupmod -g $setgid iobroker
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
else
|
||||
echo "Nothing to do here."
|
||||
echo ' '
|
||||
fi
|
||||
|
||||
# Change directory for next steps
|
||||
@@ -107,7 +109,7 @@ echo ' '
|
||||
if [ `find /opt/iobroker -type f | wc -l` -lt 1 ]
|
||||
then
|
||||
echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..."
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
echo "Done."
|
||||
elif [ -f /opt/iobroker/iobroker ]
|
||||
then
|
||||
@@ -115,11 +117,11 @@ then
|
||||
elif [ $(ls iobroker_20* 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/iobroker_20*.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ]
|
||||
then
|
||||
echo "ioBroker backup file detected in /opt/iobroker. Restoring ioBroker..."
|
||||
mv /opt/iobroker/*.tar.gz /opt/
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
mkdir /opt/iobroker/backups
|
||||
mv /opt/*.tar.gz /opt/iobroker/backups/
|
||||
iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1
|
||||
mv /opt/iobroker/*.tar.gz /opt/
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
mkdir /opt/iobroker/backups
|
||||
mv /opt/*.tar.gz /opt/iobroker/backups/
|
||||
iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1
|
||||
echo "Done."
|
||||
echo ' '
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
@@ -200,7 +202,7 @@ then
|
||||
then
|
||||
echo "Adminport set by ENV does not match port configured in ioBroker installation."
|
||||
echo "Setting Adminport to \""$adminport"\"..."
|
||||
bash iobroker set admin.0 --port $adminport
|
||||
bash iobroker set admin.0 --port $adminport
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -213,8 +215,8 @@ then
|
||||
if [ "$avahi" = "true" ]
|
||||
then
|
||||
echo "Avahi-daemon is activated by ENV."
|
||||
chmod 755 /opt/scripts/setup_avahi.sh
|
||||
bash /opt/scripts/setup_avahi.sh
|
||||
chmod 755 /opt/scripts/setup_avahi.sh
|
||||
bash /opt/scripts/setup_avahi.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -227,8 +229,8 @@ then
|
||||
if [ "$zwave" = "true" ]
|
||||
then
|
||||
echo "Z-Wave is activated by ENV."
|
||||
chmod 755 /opt/scripts/setup_zwave.sh
|
||||
bash /opt/scripts/setup_zwave.sh
|
||||
chmod 755 /opt/scripts/setup_zwave.sh
|
||||
bash /opt/scripts/setup_zwave.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -254,6 +256,89 @@ then
|
||||
fi
|
||||
|
||||
|
||||
# Checking ENV for multihost setup
|
||||
# Configuring objects db host
|
||||
if [ "$multihost" = "master" ] && [ "$objectsdbtype" = "" ] && [ "$objectsdbhost" = "" ] && [ "$objectsdbport" = "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and no external objects db is set."
|
||||
echo "Setting host of objects db to \"0.0.0.0\" to allow external communication..."
|
||||
jq --arg objectsdbhost "0.0.0.0" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" = "master" ] && [ "$objectsdbhost" = "127.0.0.1" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV. But objects db host is set to \"127.0.0.1\" by ENV too."
|
||||
echo "This configuration will not work! Please change or remove ENV \"IOB_OBJECTSDB_HOST\" and start over!"
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "master" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and external objects db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif ([ "$multihost" = "slave" ] && [ "$objectsdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbport" = "" ])
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV. But no external objects db is set."
|
||||
echo "You have to configure ENVs \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" to connect to a maser objects db."
|
||||
echo "Please check your settings and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "slave" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV and external objects db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" != "" ]
|
||||
then
|
||||
echo "Multihost is set but it seems like some configuration is missing."
|
||||
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" correctly and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
fi
|
||||
#Configuring states db host
|
||||
if [ "$multihost" = "master" ] && [ "$statesdbtype" = "" ] && [ "$statesdbhost" = "" ] && [ "$statesdbport" = "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and no external states db is set."
|
||||
echo "Setting host of states db to \"0.0.0.0\" to allow external communication..."
|
||||
jq --arg statesdbhost "0.0.0.0" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" = "master" ] && [ "$statesdbhost" = "127.0.0.1" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV. But states db host is set to \"127.0.0.1\" by ENV too."
|
||||
echo "This configuration will not work! Please change or remove ENV \"IOB_STATESDB_HOST\" and start over!"
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "master" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and external states db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif ([ "$multihost" = "slave" ] && [ "$statesdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbport" = "" ])
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV. But no external states db is set."
|
||||
echo "You have to configure ENVs \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESDB_PORT\" to connect to a maser states db."
|
||||
echo "Please check your settings and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "slave" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV and external states db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" != "" ]
|
||||
then
|
||||
echo "Multihost is set but it seems like some configuration is missing."
|
||||
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESTDB_PORT\" correctly and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Checking ENVs for custom setup of objects db
|
||||
if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ]
|
||||
then
|
||||
@@ -261,7 +346,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_OBJECTSDB_TYPE is set and value is different from detected ioBroker installation."
|
||||
echo "Setting type of objects db to \""$objectsdbtype"\"..."
|
||||
jq --arg objectsdbtype "$objectsdbtype" '.objects.type = $objectsdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg objectsdbtype "$objectsdbtype" '.objects.type = $objectsdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_OBJECTSDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -270,7 +355,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_OBJECTSDB_HOST is set and value is different from detected ioBroker installation."
|
||||
echo "Setting host of objects db to \""$objectsdbhost"\"..."
|
||||
jq --arg objectsdbhost "$objectsdbhost" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg objectsdbhost "$objectsdbhost" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_OBJECTSDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -279,7 +364,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_OBJECTSDB_PORT is set and value is different from detected ioBroker installation."
|
||||
echo "Setting port of objects db to \""$objectsdbport"\"..."
|
||||
jq --arg objectsdbport "$objectsdbport" '.objects.port = $objectsdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg objectsdbport "$objectsdbport" '.objects.port = $objectsdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_OBJECTSDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -295,7 +380,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_STATESDB_TYPE is set and value is different from detected ioBroker installation."
|
||||
echo "Setting type of states db to \""$statesdbtype"\"..."
|
||||
jq --arg statesdbtype "$statesdbtype" '.states.type = $statesdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg statesdbtype "$statesdbtype" '.states.type = $statesdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_STATESDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -304,7 +389,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_STATESDB_HOST is set and value is different from detected ioBroker installation."
|
||||
echo "Setting host of states db to \""$statesdbhost"\"..."
|
||||
jq --arg statesdbhost "$statesdbhost" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg statesdbhost "$statesdbhost" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_STATESDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -313,7 +398,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_STATESDB_PORT is set and value is different from detected ioBroker installation."
|
||||
echo "Setting port of states db to \""$statesdbport"\"..."
|
||||
jq --arg statesdbport "$statesdbport" '.states.port = $statesdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg statesdbport "$statesdbport" '.states.port = $statesdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_STATESDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -326,9 +411,9 @@ fi
|
||||
if [ `find /opt/userscripts -type f | wc -l` -lt 1 ]
|
||||
then
|
||||
echo "There is no data detected in /opt/userscripts. Restoring exapmple userscripts..."
|
||||
tar -xf /opt/initial_userscripts.tar -C /
|
||||
chmod 755 /opt/userscripts/userscript_firststart_example.sh
|
||||
chmod 755 /opt/userscripts/userscript_everystart_example.sh
|
||||
tar -xf /opt/initial_userscripts.tar -C /
|
||||
chmod 755 /opt/userscripts/userscript_firststart_example.sh
|
||||
chmod 755 /opt/userscripts/userscript_everystart_example.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ -f /opt/userscripts/userscript_firststart.sh ] || [ -f /opt/userscripts/userscript_everystart.sh ]
|
||||
@@ -337,26 +422,23 @@ then
|
||||
then
|
||||
echo "Userscript for first start detected and this is the first start of a new container."
|
||||
echo "Running userscript_firststart.sh..."
|
||||
chmod 755 /opt/userscripts/userscript_firststart.sh
|
||||
bash /opt/userscripts/userscript_firststart.sh
|
||||
rm -f /opt/.firstrun
|
||||
chmod 755 /opt/userscripts/userscript_firststart.sh
|
||||
bash /opt/userscripts/userscript_firststart.sh
|
||||
rm -f /opt/.firstrun
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
if [ -f /opt/userscripts/userscript_everystart.sh ]
|
||||
then
|
||||
echo "Userscript for every start detected. Running userscript_everystart.sh..."
|
||||
chmod 755 /opt/userscripts/userscript_everystart.sh
|
||||
bash /opt/userscripts/userscript_everystart.sh
|
||||
chmod 755 /opt/userscripts/userscript_everystart.sh
|
||||
bash /opt/userscripts/userscript_everystart.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
sleep 5
|
||||
|
||||
|
||||
#####
|
||||
# Starting ioBroker
|
||||
#####
|
||||
@@ -367,7 +449,21 @@ echo ' '
|
||||
echo "Starting ioBroker..."
|
||||
echo ' '
|
||||
|
||||
gosu iobroker node node_modules/iobroker.js-controller/controller.js
|
||||
# Function for graceful shutdown by SIGTERM signal
|
||||
shut_down() {
|
||||
echo ' '
|
||||
echo "Recived termination signal (SIGTERM)."
|
||||
echo "Shutting down ioBroker..."
|
||||
pid=$(ps -ef | awk '/[j]s.controller/{print $2}')
|
||||
kill -SIGTERM "$pid"
|
||||
exit
|
||||
}
|
||||
|
||||
# Preventing container restart by keeping a process alive even if iobroker will be stopped
|
||||
# Trap to get signal for graceful shutdown
|
||||
trap 'shut_down' SIGTERM
|
||||
|
||||
# IoBroker start
|
||||
gosu iobroker node node_modules/iobroker.js-controller/controller.js & wait
|
||||
|
||||
# Fallback process for keeping container running when ioBroker is stopped for maintenance (e.g. js-controller update)
|
||||
tail -f /dev/null
|
||||
|
||||
@@ -79,14 +79,15 @@ RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \
|
||||
|
||||
# Setting up iobroker-user (shell and home directory)
|
||||
RUN chsh -s /bin/bash iobroker \
|
||||
&& usermod --home /opt/iobroker iobroker
|
||||
&& usermod --home /opt/iobroker iobroker \
|
||||
&& usermod -u 1000 iobroker \
|
||||
&& groupmod -g 1000 iobroker
|
||||
|
||||
# Setting up ENVs
|
||||
ENV DEBIAN_FRONTEND="teletype" \
|
||||
LANG="de_DE.UTF-8" \
|
||||
LANGUAGE="de_DE:de" \
|
||||
LC_ALL="de_DE.UTF-8" \
|
||||
PACKAGES="vim" \
|
||||
SETGID=1000 \
|
||||
SETUID=1000 \
|
||||
TZ="Europe/Berlin"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
# Reading ENV
|
||||
adminport=$IOB_ADMINPORT
|
||||
avahi=$AVAHI
|
||||
multihost=$IOB_MULTIHOST
|
||||
objectsdbhost=$IOB_OBJECTSDB_HOST
|
||||
objectsdbport=$IOB_OBJECTSDB_PORT
|
||||
objectsdbtype=$IOB_OBJECTSDB_TYPE
|
||||
@@ -75,7 +76,7 @@ then
|
||||
echo "Installing additional packages is set by ENV."
|
||||
echo "The following packages will be installed:" $packages"..."
|
||||
echo $packages > /opt/scripts/.packages
|
||||
bash /opt/scripts/setup_packages.sh
|
||||
bash /opt/scripts/setup_packages.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -83,13 +84,14 @@ then
|
||||
then
|
||||
echo "Different UID and/ or GID is set by ENV."
|
||||
echo "Changing UID to "$setuid" and GID to "$setgid"..."
|
||||
usermod -u $setuid iobroker
|
||||
groupmod -g $setgid iobroker
|
||||
usermod -u $setuid iobroker
|
||||
groupmod -g $setgid iobroker
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
else
|
||||
echo "Nothing to do here."
|
||||
echo ' '
|
||||
fi
|
||||
|
||||
# Change directory for next steps
|
||||
@@ -107,7 +109,7 @@ echo ' '
|
||||
if [ `find /opt/iobroker -type f | wc -l` -lt 1 ]
|
||||
then
|
||||
echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..."
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
echo "Done."
|
||||
elif [ -f /opt/iobroker/iobroker ]
|
||||
then
|
||||
@@ -115,11 +117,11 @@ then
|
||||
elif [ $(ls iobroker_20* 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/iobroker_20*.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ]
|
||||
then
|
||||
echo "ioBroker backup file detected in /opt/iobroker. Restoring ioBroker..."
|
||||
mv /opt/iobroker/*.tar.gz /opt/
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
mkdir /opt/iobroker/backups
|
||||
mv /opt/*.tar.gz /opt/iobroker/backups/
|
||||
iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1
|
||||
mv /opt/iobroker/*.tar.gz /opt/
|
||||
tar -xf /opt/initial_iobroker.tar -C /
|
||||
mkdir /opt/iobroker/backups
|
||||
mv /opt/*.tar.gz /opt/iobroker/backups/
|
||||
iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1
|
||||
echo "Done."
|
||||
echo ' '
|
||||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||
@@ -200,7 +202,7 @@ then
|
||||
then
|
||||
echo "Adminport set by ENV does not match port configured in ioBroker installation."
|
||||
echo "Setting Adminport to \""$adminport"\"..."
|
||||
bash iobroker set admin.0 --port $adminport
|
||||
bash iobroker set admin.0 --port $adminport
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -213,8 +215,8 @@ then
|
||||
if [ "$avahi" = "true" ]
|
||||
then
|
||||
echo "Avahi-daemon is activated by ENV."
|
||||
chmod 755 /opt/scripts/setup_avahi.sh
|
||||
bash /opt/scripts/setup_avahi.sh
|
||||
chmod 755 /opt/scripts/setup_avahi.sh
|
||||
bash /opt/scripts/setup_avahi.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -227,8 +229,8 @@ then
|
||||
if [ "$zwave" = "true" ]
|
||||
then
|
||||
echo "Z-Wave is activated by ENV."
|
||||
chmod 755 /opt/scripts/setup_zwave.sh
|
||||
bash /opt/scripts/setup_zwave.sh
|
||||
chmod 755 /opt/scripts/setup_zwave.sh
|
||||
bash /opt/scripts/setup_zwave.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
@@ -254,6 +256,89 @@ then
|
||||
fi
|
||||
|
||||
|
||||
# Checking ENV for multihost setup
|
||||
# Configuring objects db host
|
||||
if [ "$multihost" = "master" ] && [ "$objectsdbtype" = "" ] && [ "$objectsdbhost" = "" ] && [ "$objectsdbport" = "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and no external objects db is set."
|
||||
echo "Setting host of objects db to \"0.0.0.0\" to allow external communication..."
|
||||
jq --arg objectsdbhost "0.0.0.0" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" = "master" ] && [ "$objectsdbhost" = "127.0.0.1" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV. But objects db host is set to \"127.0.0.1\" by ENV too."
|
||||
echo "This configuration will not work! Please change or remove ENV \"IOB_OBJECTSDB_HOST\" and start over!"
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "master" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and external objects db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif ([ "$multihost" = "slave" ] && [ "$objectsdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbport" = "" ])
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV. But no external objects db is set."
|
||||
echo "You have to configure ENVs \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" to connect to a maser objects db."
|
||||
echo "Please check your settings and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "slave" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV and external objects db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" != "" ]
|
||||
then
|
||||
echo "Multihost is set but it seems like some configuration is missing."
|
||||
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" correctly and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
fi
|
||||
#Configuring states db host
|
||||
if [ "$multihost" = "master" ] && [ "$statesdbtype" = "" ] && [ "$statesdbhost" = "" ] && [ "$statesdbport" = "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and no external states db is set."
|
||||
echo "Setting host of states db to \"0.0.0.0\" to allow external communication..."
|
||||
jq --arg statesdbhost "0.0.0.0" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" = "master" ] && [ "$statesdbhost" = "127.0.0.1" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV. But states db host is set to \"127.0.0.1\" by ENV too."
|
||||
echo "This configuration will not work! Please change or remove ENV \"IOB_STATESDB_HOST\" and start over!"
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "master" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"master\" by ENV and external states db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif ([ "$multihost" = "slave" ] && [ "$statesdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbport" = "" ])
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV. But no external states db is set."
|
||||
echo "You have to configure ENVs \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESDB_PORT\" to connect to a maser states db."
|
||||
echo "Please check your settings and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
elif [ "$multihost" = "slave" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
|
||||
then
|
||||
echo "Multihost is set as \"slave\" by ENV and external states db is set."
|
||||
echo "Skipping this step..."
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ "$multihost" != "" ]
|
||||
then
|
||||
echo "Multihost is set but it seems like some configuration is missing."
|
||||
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESTDB_PORT\" correctly and start over."
|
||||
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Checking ENVs for custom setup of objects db
|
||||
if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ]
|
||||
then
|
||||
@@ -261,7 +346,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_OBJECTSDB_TYPE is set and value is different from detected ioBroker installation."
|
||||
echo "Setting type of objects db to \""$objectsdbtype"\"..."
|
||||
jq --arg objectsdbtype "$objectsdbtype" '.objects.type = $objectsdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg objectsdbtype "$objectsdbtype" '.objects.type = $objectsdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_OBJECTSDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -270,7 +355,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_OBJECTSDB_HOST is set and value is different from detected ioBroker installation."
|
||||
echo "Setting host of objects db to \""$objectsdbhost"\"..."
|
||||
jq --arg objectsdbhost "$objectsdbhost" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg objectsdbhost "$objectsdbhost" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_OBJECTSDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -279,7 +364,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_OBJECTSDB_PORT is set and value is different from detected ioBroker installation."
|
||||
echo "Setting port of objects db to \""$objectsdbport"\"..."
|
||||
jq --arg objectsdbport "$objectsdbport" '.objects.port = $objectsdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg objectsdbport "$objectsdbport" '.objects.port = $objectsdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_OBJECTSDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -295,7 +380,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_STATESDB_TYPE is set and value is different from detected ioBroker installation."
|
||||
echo "Setting type of states db to \""$statesdbtype"\"..."
|
||||
jq --arg statesdbtype "$statesdbtype" '.states.type = $statesdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg statesdbtype "$statesdbtype" '.states.type = $statesdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_STATESDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -304,7 +389,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_STATESDB_HOST is set and value is different from detected ioBroker installation."
|
||||
echo "Setting host of states db to \""$statesdbhost"\"..."
|
||||
jq --arg statesdbhost "$statesdbhost" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg statesdbhost "$statesdbhost" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_STATESDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -313,7 +398,7 @@ then
|
||||
then
|
||||
echo "ENV IOB_STATESDB_PORT is set and value is different from detected ioBroker installation."
|
||||
echo "Setting port of states db to \""$statesdbport"\"..."
|
||||
jq --arg statesdbport "$statesdbport" '.states.port = $statesdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
jq --arg statesdbport "$statesdbport" '.states.port = $statesdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
|
||||
echo "Done."
|
||||
else
|
||||
echo "ENV IOB_STATESDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
|
||||
@@ -326,9 +411,9 @@ fi
|
||||
if [ `find /opt/userscripts -type f | wc -l` -lt 1 ]
|
||||
then
|
||||
echo "There is no data detected in /opt/userscripts. Restoring exapmple userscripts..."
|
||||
tar -xf /opt/initial_userscripts.tar -C /
|
||||
chmod 755 /opt/userscripts/userscript_firststart_example.sh
|
||||
chmod 755 /opt/userscripts/userscript_everystart_example.sh
|
||||
tar -xf /opt/initial_userscripts.tar -C /
|
||||
chmod 755 /opt/userscripts/userscript_firststart_example.sh
|
||||
chmod 755 /opt/userscripts/userscript_everystart_example.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
elif [ -f /opt/userscripts/userscript_firststart.sh ] || [ -f /opt/userscripts/userscript_everystart.sh ]
|
||||
@@ -337,26 +422,23 @@ then
|
||||
then
|
||||
echo "Userscript for first start detected and this is the first start of a new container."
|
||||
echo "Running userscript_firststart.sh..."
|
||||
chmod 755 /opt/userscripts/userscript_firststart.sh
|
||||
bash /opt/userscripts/userscript_firststart.sh
|
||||
rm -f /opt/.firstrun
|
||||
chmod 755 /opt/userscripts/userscript_firststart.sh
|
||||
bash /opt/userscripts/userscript_firststart.sh
|
||||
rm -f /opt/.firstrun
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
if [ -f /opt/userscripts/userscript_everystart.sh ]
|
||||
then
|
||||
echo "Userscript for every start detected. Running userscript_everystart.sh..."
|
||||
chmod 755 /opt/userscripts/userscript_everystart.sh
|
||||
bash /opt/userscripts/userscript_everystart.sh
|
||||
chmod 755 /opt/userscripts/userscript_everystart.sh
|
||||
bash /opt/userscripts/userscript_everystart.sh
|
||||
echo "Done."
|
||||
echo ' '
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
sleep 5
|
||||
|
||||
|
||||
#####
|
||||
# Starting ioBroker
|
||||
#####
|
||||
@@ -367,7 +449,21 @@ echo ' '
|
||||
echo "Starting ioBroker..."
|
||||
echo ' '
|
||||
|
||||
gosu iobroker node node_modules/iobroker.js-controller/controller.js
|
||||
# Function for graceful shutdown by SIGTERM signal
|
||||
shut_down() {
|
||||
echo ' '
|
||||
echo "Recived termination signal (SIGTERM)."
|
||||
echo "Shutting down ioBroker..."
|
||||
pid=$(ps -ef | awk '/[j]s.controller/{print $2}')
|
||||
kill -SIGTERM "$pid"
|
||||
exit
|
||||
}
|
||||
|
||||
# Preventing container restart by keeping a process alive even if iobroker will be stopped
|
||||
# Trap to get signal for graceful shutdown
|
||||
trap 'shut_down' SIGTERM
|
||||
|
||||
# IoBroker start
|
||||
gosu iobroker node node_modules/iobroker.js-controller/controller.js & wait
|
||||
|
||||
# Fallback process for keeping container running when ioBroker is stopped for maintenance (e.g. js-controller update)
|
||||
tail -f /dev/null
|
||||
|
||||
Reference in New Issue
Block a user