diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e2832a..ce648e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ ## Changelog ### v6.1.0-beta.2 (upcoming) +* remove hostname check for multihost slave +* optimize startup script logging * adding breaks and optimizing maintenance script (fixes [#233](https://github.com/buanet/ioBroker.docker/issues/233)) * v6.1.0-beta.1 (2021-12-23) * some more corrections in maintenance script ([#232 @agross](https://github.com/buanet/ioBroker.docker/pull/232)) diff --git a/debian/scripts/iobroker_startup.sh b/debian/scripts/iobroker_startup.sh index e268ff5..9574c5f 100644 --- a/debian/scripts/iobroker_startup.sh +++ b/debian/scripts/iobroker_startup.sh @@ -39,6 +39,7 @@ echo "----- Debugging information echo "----- -----" echo "----- System -----" echo -n "----- " && echo -n "$(printf "%-20s %-28s" arch: $(uname -m))" && echo " -----" +echo -n "----- " && echo -n "$(printf "%-20s %-28s" hostname: $(hostname))" && echo " -----" echo "----- -----" echo "----- Docker-Image -----" echo -n "----- " && echo -n "$(printf "%-20s %-28s" image: ${VERSION})" && echo " -----" @@ -140,7 +141,7 @@ then then echo "IoBroker backup file detected in /opt/iobroker. But Multihost is set to \"slave\"." echo "Restoring a backup is not supported on Multihost slaves. Please check configuration and start over." - echo "For more information see readme.md on Github (https://github.com/buanet/ioBroker.docker)." + echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." exit 1 else echo "IoBroker backup file detected in /opt/iobroker." @@ -197,7 +198,7 @@ echo "Done." echo ' ' # checking hostname in ioBroker to match container hostname -if [ $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ] +if [ $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ] && [ "$multihost" != "slave" ] then echo "Hostname in ioBroker does not match the hostname of this container." echo "Updating hostname to " $(hostname)"..." @@ -216,7 +217,7 @@ echo "$(printf -- '-%.0s' {1..80})" echo ' ' echo "Some adapters have special requirements/ settings which can be activated by the use of environment variables." -echo "For more information take a look at readme.md on Github!" +echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." echo ' ' @@ -282,161 +283,164 @@ fi # Checking ENV for multihost setup -# Configuring objects db host -if [ "$multihost" = "master" ] && [ "$objectsdbtype" = "" ] && [ "$objectsdbhost" = "" ] && [ "$objectsdbport" = "" ] +if [ "$multihost" != "" ] 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 - chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json - echo "Done." + echo "Checking Multihost Setup..." + echo ' ' + # 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 + chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json + echo "Done." + 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 allow slaves to connect the objects db! Please change or remove ENV \"IOB_OBJECTSDB_HOST\" and start over!" + echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." + exit 1 + elif [ "$multihost" = "master" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ] + then + echo "Multihost is set as \"master\" by ENV and external objects db is set." + 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 ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." + exit 1 + elif [ "$multihost" = "slave" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ] + then + echo "Multihost is set as \"slave\" by ENV and external objects db is set." + 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 ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." + exit 1 + fi 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/ioBroker.docker)." - 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/ioBroker.docker)." - 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/ioBroker.docker)." - 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 - chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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/ioBroker.docker)." - 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/ioBroker.docker)." - 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/ioBroker.docker)." - 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 + chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json + echo "Done." + 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 ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." + exit 1 + elif [ "$multihost" = "master" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ] + then + echo "Multihost is set as \"master\" by ENV and external states db is set." + 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 ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." + exit 1 + elif [ "$multihost" = "slave" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ] + then + echo "Multihost is set as \"slave\" by ENV and external states db is set." + 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 ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." + exit 1 + fi + echo ' ' + echo "Done." + echo ' ' +fi # Checking ENVs for custom setup of objects db if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ] then + echo "Checking custom settings for objects db..." + echo ' ' if [ "$objectsdbtype" != $(jq -r '.objects.type' /opt/iobroker/iobroker-data/iobroker.json) ] then - echo "ENV IOB_OBJECTSDB_TYPE is set and value is different from detected ioBroker installation." + echo "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 chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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." + echo "IOB_OBJECTSDB_TYPE is set and value meets detected ioBroker installation." fi if [ "$objectsdbhost" != $(jq -r '.objects.host' /opt/iobroker/iobroker-data/iobroker.json) ] then - echo "ENV IOB_OBJECTSDB_HOST is set and value is different from detected ioBroker installation." + echo "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 chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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." + echo "IOB_OBJECTSDB_HOST is set and value meets detected ioBroker installation." fi if [ "$objectsdbport" != $(jq -r '.objects.port' /opt/iobroker/iobroker-data/iobroker.json) ] then - echo "ENV IOB_OBJECTSDB_PORT is set and value is different from detected ioBroker installation." + echo "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 chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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." + echo "IOB_OBJECTSDB_PORT is set and value meets detected ioBroker installation." fi echo ' ' + echo "Done." + echo ' ' fi # Checking ENVs for custom setup of states db# if [ "$statesdbtype" != "" ] || [ "$statesdbhost" != "" ] || [ "$statesdbport" != "" ] then + echo "Checking custom settings for states db..." + echo ' ' if [ "$statesdbtype" != $(jq -r '.states.type' /opt/iobroker/iobroker-data/iobroker.json) ] then - echo "ENV IOB_STATESDB_TYPE is set and value is different from detected ioBroker installation." + echo "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 chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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." + echo "IOB_STATESDB_TYPE is set and value meets detected ioBroker installation." fi if [ "$statesdbhost" != $(jq -r '.states.host' /opt/iobroker/iobroker-data/iobroker.json) ] then - echo "ENV IOB_STATESDB_HOST is set and value is different from detected ioBroker installation." + echo "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 chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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." + echo "IOB_STATESDB_HOST is set and value meets detected ioBroker installation." fi if [ "$statesdbport" != $(jq -r '.states.port' /opt/iobroker/iobroker-data/iobroker.json) ] then - echo "ENV IOB_STATESDB_PORT is set and value is different from detected ioBroker installation." + echo "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 chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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." + echo "IOB_STATESDB_PORT is set and value meets detected ioBroker installation." fi echo ' ' + echo "Done." + echo ' ' fi