From a615fea709806b1e620491641e2f0345ee25f6da Mon Sep 17 00:00:00 2001 From: buanet Date: Tue, 4 May 2021 21:36:30 +0200 Subject: [PATCH 01/37] some testing and small enhancements --- CHANGELOG.md | 11 +++++++---- amd64/Dockerfile | 3 +++ amd64/scripts/iobroker_startup.sh | 1 + arm32v7/scripts/iobroker_startup.sh | 1 + arm64v8/scripts/iobroker_startup.sh | 1 + 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d13163..2797de1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,12 @@ ## Changelog -### v5.2.0beta (2021-04-02) -* some renaming to optimize automated build -* changes in versioning -* delete travis for automated build +### v5.2.1beta (2021-05-04) +* added expose for default admin ui port (#172) +* added shortform for maintenance script +* v5.2.0beta (2021-04-02) + * some renaming to optimize automated build + * changes in versioning + * delete travis for automated build ### v5.1.0 (2020-11-05) * v5.0.2beta (2020-07-28) diff --git a/amd64/Dockerfile b/amd64/Dockerfile index c32b42b..b821850 100644 --- a/amd64/Dockerfile +++ b/amd64/Dockerfile @@ -95,6 +95,9 @@ ENV DEBIAN_FRONTEND="teletype" \ SETUID=1000 \ TZ="Europe/Berlin" +# Expose default admin ui port +EXPOSE 8081 + # Healthcheck HEALTHCHECK --interval=15s --timeout=5s --retries=5 \ CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"] diff --git a/amd64/scripts/iobroker_startup.sh b/amd64/scripts/iobroker_startup.sh index e9fa617..67c1ffb 100644 --- a/amd64/scripts/iobroker_startup.sh +++ b/amd64/scripts/iobroker_startup.sh @@ -96,6 +96,7 @@ then then echo "Registering maintenance script as command." echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc + echo "alias maint=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc echo "Done." echo ' ' fi diff --git a/arm32v7/scripts/iobroker_startup.sh b/arm32v7/scripts/iobroker_startup.sh index e9fa617..67c1ffb 100644 --- a/arm32v7/scripts/iobroker_startup.sh +++ b/arm32v7/scripts/iobroker_startup.sh @@ -96,6 +96,7 @@ then then echo "Registering maintenance script as command." echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc + echo "alias maint=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc echo "Done." echo ' ' fi diff --git a/arm64v8/scripts/iobroker_startup.sh b/arm64v8/scripts/iobroker_startup.sh index e9fa617..67c1ffb 100644 --- a/arm64v8/scripts/iobroker_startup.sh +++ b/arm64v8/scripts/iobroker_startup.sh @@ -96,6 +96,7 @@ then then echo "Registering maintenance script as command." echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc + echo "alias maint=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc echo "Done." echo ' ' fi From 6392a19cac1b81521878dc928d3f1e3b5c4bf4b3 Mon Sep 17 00:00:00 2001 From: buanet Date: Thu, 6 May 2021 22:40:28 +0200 Subject: [PATCH 02/37] addinf update parameter to maintenance script --- amd64/scripts/maintenance.sh | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/amd64/scripts/maintenance.sh b/amd64/scripts/maintenance.sh index 4f77980..314bf0b 100644 --- a/amd64/scripts/maintenance.sh +++ b/amd64/scripts/maintenance.sh @@ -13,7 +13,7 @@ then fi elif [ "$1" == "on" ] then - echo 'You are going to stop ioBroker and activating maintenance mode for this container.' + echo 'You are now going to stop ioBroker and activating maintenance mode for this container.' read -p 'Do you want to continue [yes/no]? ' A if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] then @@ -31,13 +31,43 @@ then fi elif [ "$1" == "off" ] then - echo 'You are going to deactivate maintenance mode for this container.' - echo 'Depending of the restart policy of this container, this will stop/ restart your container immediately.' + echo 'You are now going to deactivate maintenance mode for this container.' + echo 'Depending on the restart policy, your container will be stopped/ restarted immediately.' read -p 'Do you want to continue [yes/no]? ' A if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] then echo 'Deactivating maintenance mode and forcing container to stop/ restart...' + echo "stopping" > /opt/scripts/.docker_config/.healthcheck + pkill -u root + exit 0 + else + exit 0 + fi +elif [ "$1" == "upgrade" ] +then + echo 'You are now going to upgrade your js-controller.' + echo 'As this will change data in /opt/iobroker, make sure you have a backup!' + echo 'During the upgrade process the container will automatically switch into maintenance mode and stop ioBroker.' + echo 'Depending of the restart policy, you container will be stoped/ restarted automatically after the upgrade.' + read -p 'Do you want to continue [yes/no]? ' A + if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] + then + echo 'Activating maintenance mode...' echo "maintenance" > /opt/scripts/.docker_config/.healthcheck + sleep 1 + echo 'Done.' + echo 'Stopping ioBroker...' + pkill -u iobroker + sleep 1 + echo 'Done.' + echo 'Upgrading js-controller...' + iobroker update + iobroker upgrade self + sleep 1 + echo 'Done.' + echo 'Container will be stopped/ restarted in 5 seconds...' + sleep 5 + echo "stopping" > /opt/scripts/.docker_config/.healthcheck pkill -u root exit 0 else From f8d9f498afa325f5f825d3533a82f57fb2b017e6 Mon Sep 17 00:00:00 2001 From: buanet Date: Thu, 6 May 2021 22:42:58 +0200 Subject: [PATCH 03/37] updating changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2797de1..5bf351b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Changelog ### v5.2.1beta (2021-05-04) +* added upgrade parameter to maintenance script * added expose for default admin ui port (#172) * added shortform for maintenance script * v5.2.0beta (2021-04-02) From 88abb143a25637d518ec7d597440527623c309be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9?= Date: Sat, 26 Jun 2021 00:40:06 +0200 Subject: [PATCH 04/37] small fixes --- .VERSION | 2 +- CHANGELOG.md | 80 ++++++++++++++++--------------- README.md | 10 +++- amd64/scripts/iobroker_startup.sh | 3 ++ 4 files changed, 55 insertions(+), 40 deletions(-) diff --git a/.VERSION b/.VERSION index daf04d0..b3db390 100644 --- a/.VERSION +++ b/.VERSION @@ -1,2 +1,2 @@ -v5.2.0_beta +v5.2.0_beta1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bf351b..74c3336 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,139 +1,143 @@ ## Changelog -### v5.2.1beta (2021-05-04) -* added upgrade parameter to maintenance script -* added expose for default admin ui port (#172) -* added shortform for maintenance script -* v5.2.0beta (2021-04-02) +### * v5.2.0 beta2 (2021-06-26) +* adding file for docker detection by ioBroker adapters +* adding best practice for states db migation +* removing couchdb option for states db (no longer supported) +* v5.2.0 beta1 (2021-05-04) + * added upgrade parameter to maintenance script + * added expose for default admin ui port (#172) + * added shortform for maintenance script +* v5.2.0 beta (2021-04-02) * some renaming to optimize automated build * changes in versioning * delete travis for automated build ### v5.1.0 (2020-11-05) -* v5.0.2beta (2020-07-28) +* v5.0.2 beta (2020-07-28) * added docker tag for majorversion latest * extend readme.md doku * added maintenance script * added container healthcheck * fixed configuration procedure and logging for objects and states db setup -* v5.0.1beta (2020-07-01) +* v5.0.1 beta (2020-07-01) * fixing backup detection in startup script * fixing permission issue on iobroker restored * extended Logging * optimize multihost support ### v5.0.0 (2020-06-29) -* v4.2.4beta (2020-06-23) +* v4.2.4 beta (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) +* v4.2.3 beta (2020-06-05) * ~~updating js-controller to not stable version 3.1.5 to fix renaming issue~~ (is stable now) -* v4.2.2beta (2020-06-03) +* v4.2.2 beta (2020-06-03) * ~~workaround for renaming issues on startup~~ (fixed in js-controller) -* v4.2.1beta (2020-05-10) +* v4.2.1 beta (2020-05-10) * using node 12 instead of 10 * updated documentation in readme.md ### v4.2.0 (2020-04-14) -* v4.1.4beta (2020-04-07) +* v4.1.4 beta (2020-04-07) * switching base image to buster * optimizing installation of packages defined by ENV "PACKAGES" -* v4.1.3beta (2020-02-08) +* v4.1.3 beta (2020-02-08) * renamed ENV for adminport (new "IOB_ADMINPORT)") * added new ENVs for "iobroker setup custom" (replacing "REDIS") * enhancements in startup script logging -* v4.1.2beta (2020-02-02) +* v4.1.2 beta (2020-02-02) * added feature for running user defined scripts on startup * small fix for permissions issues on some systems -* v4.1.1beta (2020-01-17) +* v4.1.1 beta (2020-01-17) * updated openzwave to version 1.6.1007 ### v4.1.0 (2020-01-17) * improved readme.md -* v4.0.3beta (2020-01-06) +* v4.0.3 beta (2020-01-06) * added support to restore backup on startup * small fixes according to "docker best practices" -* v4.0.2beta (2019-12-10) +* v4.0.2 beta (2019-12-10) * ~~added env for activating redis~~ * enhancements in startup script and docker file -* v4.0.1beta (2019-11-25) +* v4.0.1 beta (2019-11-25) * added env for iobroker admin port * added env for usb-devices (setting permissions) * updateing prerequisites for iobroker installation * some small code fixes ### v4.0.0 (2019-10-25) -* v3.1.4beta (2019-10-23) +* v3.1.4 beta (2019-10-23) * added env for zwave support -* v3.1.3beta (2019-10-17) +* v3.1.3 beta (2019-10-17) * enhanced logging of startup-script * multi arch support (amd64, aarch64, armv7hf) -* v3.1.2beta (2019-09-03) +* v3.1.2 beta (2019-09-03) * using node 10 instead of node 8 -* v3.1.1beta (2019-09-02) +* v3.1.1 beta (2019-09-02) * adding env for setting uid/ gid for iobroker-user ### v3.1.0 (2019-08-21) -* v3.0.3beta (2019-08-21) +* v3.0.3 beta (2019-08-21) * switching base image from "debian:latest" to "debian:stretch" -* v3.0.2beta (2019-06-13) +* v3.0.2 beta (2019-06-13) * using gosu instead of sudo * changing output of ioBroker logging -* v3.0.1beta (2019-05-18) +* v3.0.1 beta (2019-05-18) * ~~switching back to iobroker-daemon for startup~~ ### v3.0.0 (2019-05-09) -* v2.0.6beta (2019-04-14) +* v2.0.6 beta (2019-04-14) * added some additional logging * fixing some issues for language env * added permission fixing on first start -* v2.0.5beta (2019-02-09) +* v2.0.5 beta (2019-02-09) * added ENV to docker file * added EXPOSE for admin * final testing -* v2.0.4beta (2019-01-28) +* v2.0.4 beta (2019-01-28) * added support for env variables "avahi" and "packages" * moving avahi-daemon installation into avahi startup script * added script for installing optional packages * optimizing logging output -* v2.0.3beta (2019-01-24) +* v2.0.3 beta (2019-01-24) * added support for running ioBroker under iobroker user * optimizing logging output * optimizing scripts -* v2.0.2beta (2019-01-23) +* v2.0.2 beta (2019-01-23) * optimizing and rearranged docker file * changes for new ioBroker install script * added restoring for empty mounted /opt/iobroker folder * some more small fixes -* v2.0.1beta (2019-01-07) +* v2.0.1 beta (2019-01-07) * some changes for supporting other docker-environments than synology ds ### v2.0.0 (2018-12-05) -* v1.2.2beta (2018-12-05) +* v1.2.2 beta (2018-12-05) * using node8 instead of node6 * changes for new iobroker setup -* v1.2.1beta (2018-09-12) +* v1.2.1 beta (2018-09-12) * added support for firetv-adapter ### v1.2.0 (2018-08-21) -* v1.1.3beta (2018-08-21) +* v1.1.3 beta (2018-08-21) * ~~added ffmpeg-package for yahka to support webcams~~ -* v1.1.2beta (2018-04-04) +* v1.1.2 beta (2018-04-04) * added ENV for timezone issue -* v1.1.1beta (2018-03-29) +* v1.1.1 beta (2018-03-29) * added wget package * updated readme.md ### v1.1.0 (2017-12-10) -* v1.0.2beta (2017-12-10) +* v1.0.2 beta (2017-12-10) * changed startup call to fix restart issue * fixed avahi startup issue * fixed hostname issue * added z-wave support * added logging to /opt/scripts/docker_iobroker_log.txt -* v1.0.1beta (2017-08-25) +* v1.0.1 beta (2017-08-25) * fixed locales issue ### v1.0.0 (2017-08-22) diff --git a/README.md b/README.md index 2583f94..3069c29 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ You do not have to declare every single variable when setting up your container. |IOB_MULTIHOST|[not set]|Sets ioBroker instance as "master" or "slave" for multihost support (needs additional config for objectsdb and statesdb!)| |IOB_OBJECTSDB_HOST|127.0.0.1|Sets host 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"
(at the moment redis as objects db is [not supported by ioBroker](https://github.com/ioBroker/ioBroker#databases))| +|IOB_OBJECTSDB_TYPE|file|Sets type of ioBroker objects db, cloud be "file" or "redis"
(at the moment redis as objects db is [not officially supported by ioBroker](https://github.com/ioBroker/ioBroker#databases))| |IOB_STATESDB_HOST|127.0.0.1|Sets host for ioBroker states db| |IOB_STATESDB_PORT|9000|Sets port for ioBroker states db| |IOB_STATESDB_TYPE|file|Sets type of ioBroker states db, could be "file" or "redis"| @@ -169,8 +169,16 @@ If you want to upgrade your ioBroker container to a new major version (e.g. from After this steps the startup script inside the container will automatically detect and restore your backup to a new ioBroker instance. When iobroker is started after the restore it will install your adapters to the new ioBroker instance by itself. This might take some time but will give you the best and cleanest results... +### Switching states db from file to redis + +If you want to switch states db from file to redis on a n existing installation you might want to keep all your actual states. As simply setting the needed ENVs won't migrate your existing states into the redis db it is best practice to first run "iobroker setup custom" inside your container before adding the ENVs. This will give you the choice to migrate your states. + ## Miscellaneous +### Detecting this Docker image by ioBroker (feature for adapter developers) + +For adapter developers it is now possible to easily detect if ioBroker is running inside the official docker container. Please simply check if the file `/opt/scripts/.docker_config/.thisisdocker"` exists. The content of the file will tell the image version. + ### Beta testing If you want to get the newest features and changes feel free to use/ test the beta version of the Docker image. You can find the readme.md file for beta versions [here](https://github.com/buanet/ioBroker.docker/blob/beta/README.md). Please make sure to read the changelog before testing beta versions. diff --git a/amd64/scripts/iobroker_startup.sh b/amd64/scripts/iobroker_startup.sh index 67c1ffb..9cbf0cf 100644 --- a/amd64/scripts/iobroker_startup.sh +++ b/amd64/scripts/iobroker_startup.sh @@ -71,6 +71,9 @@ echo "----- Step 1 of 5: Preparing container -----" echo "$(printf -- '-%.0s' {1..60})" echo ' ' +# Adding ckeck file for easy docker detection by ioBroker +echo "$VERSION" > /opt/scripts/.docker_config/.thisisdocker + # Installing additional packages and setting uid/gid if [ "$packages" != "" ] || [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] || [ -f /opt/.firstrun ] then From 8f66e5977e7e6e07df4f302eec20d023740037a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Germann?= Date: Fri, 2 Jul 2021 17:04:35 +0200 Subject: [PATCH 05/37] Update .VERSION --- .VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.VERSION b/.VERSION index b3db390..5d21ac8 100644 --- a/.VERSION +++ b/.VERSION @@ -1,2 +1,2 @@ -v5.2.0_beta1 +v5.2.0_beta2 From 7f31993ff69160019d0973f3b24ceae7665cef05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Germann?= Date: Mon, 2 Aug 2021 21:31:15 +0200 Subject: [PATCH 06/37] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3069c29..d12fd31 100644 --- a/README.md +++ b/README.md @@ -177,7 +177,7 @@ If you want to switch states db from file to redis on a n existing installation ### Detecting this Docker image by ioBroker (feature for adapter developers) -For adapter developers it is now possible to easily detect if ioBroker is running inside the official docker container. Please simply check if the file `/opt/scripts/.docker_config/.thisisdocker"` exists. The content of the file will tell the image version. +For adapter developers it is now possible to easily detect if ioBroker is running inside the official docker container. Please simply check if the file `/opt/scripts/.docker_config/.thisisdocker` exists. The content of the file will tell the image version. ### Beta testing From 0aba419e244ac2dd0ad1f5ab23c1bf8db67f33eb Mon Sep 17 00:00:00 2001 From: buanet Date: Wed, 4 Aug 2021 20:38:57 +0200 Subject: [PATCH 07/37] testing --- amd64/scripts/maintenance.sh | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/amd64/scripts/maintenance.sh b/amd64/scripts/maintenance.sh index 314bf0b..bacd49b 100644 --- a/amd64/scripts/maintenance.sh +++ b/amd64/scripts/maintenance.sh @@ -1,5 +1,35 @@ #!/bin/bash +# function to display help text +display_help() { + echo "This script is build to manage your ioBroker container!" + echo "Usage: maintenance [ COMMAND ] [ OPTIONS ]" + echo " maint [ COMMAND ] [ OPTIONS ]" + echo '' + echo "COMMANDS" + echo "------------------" + echo " status > gives the current state of maintenance mode" + echo " on > switches mantenance mode ON" + echo " off > switches mantenance mode OFF and shuts down/ restarts container" + echo " upgrade > will put container to maintenance mode and upgrade iobroker" + echo '' + echo "OPTIONS" + echo "------------------" + echo " -h|--help > shows this help" + echo " -y|--yes > confirms the used command without asking" + echo '' + exit 0 +} + +while getopts h opt +do + case $opt in + h | --help) + display_help ;; + esac +exit 0; +done + if [ "$1" == "status" ] then if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ] From e7ddf2f485020cc3220e3bb045211c7c6b5881a9 Mon Sep 17 00:00:00 2001 From: buanet Date: Wed, 4 Aug 2021 22:39:06 +0200 Subject: [PATCH 08/37] add github actions --- .github/workflows/docker_build_beta_image.yml | 128 +++++++++++++++++ .github/workflows/docker_build_dev_image.yml | 122 ++++++++++++++++ .github/workflows/docker_build_main_image.yml | 130 ++++++++++++++++++ manifest_ghcr.yml | 19 +++ 4 files changed, 399 insertions(+) create mode 100644 .github/workflows/docker_build_beta_image.yml create mode 100644 .github/workflows/docker_build_dev_image.yml create mode 100644 .github/workflows/docker_build_main_image.yml create mode 100644 manifest_ghcr.yml diff --git a/.github/workflows/docker_build_beta_image.yml b/.github/workflows/docker_build_beta_image.yml new file mode 100644 index 0000000..243d8ce --- /dev/null +++ b/.github/workflows/docker_build_beta_image.yml @@ -0,0 +1,128 @@ +# Github action to build Docker image from beta branch (tag: beta) + +name: Build Docker image from beta + +on: + pull_request: + branches: + - beta + types: + - closed + +jobs: + bulid_beta: + runs-on: ubuntu-latest + steps: + - name: Checkout (beta) + uses: actions/checkout@v2.3.4 + with: + repository: 'buanet/ioBroker.docker' + ref: 'beta' + + - name: Get and write version and date + id: version + run: | + VERSION="$(cat .VERSION)" + MAJORVERSION="$(cat .VERSION | cut -c 1-2 | sed -r 's#^(.{0})#\1latest-#')" + DATI="$(date --rfc-3339=seconds | sed 's/ /T/')" + echo "This is the Version: $VERSION" + echo "version=$VERSION" >> $GITHUB_ENV + echo "This is the Major Version: $MAJORVERSION" + echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV + echo "This is the Buildnumber/Timestamp: $DATI" + echo "dati=$DATI" >> $GITHUB_ENV + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp + mv -f ./amd64/Dockerfile.tmp ./amd64/Dockerfile + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp + mv -f ./arm32v7/Dockerfile.tmp ./arm32v7/Dockerfile + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp + mv -f ./arm64v8/Dockerfile.tmp ./arm64v8/Dockerfile + + - name: Set up manifest tool + run: | + wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool + chmod +x manifest-tool + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1.2.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1.3.0 + + - name: Login to DockerHub + uses: docker/login-action@v1.10.0 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ secrets.PACKAGES_USER }} + password: ${{ secrets.PACKAGES_PASS }} + + - name: Build Docker image (amd64) + uses: docker/build-push-action@v2.6.1 + with: + context: ./amd64 + file: ./amd64/Dockerfile + push: true + platforms: linux/amd64 + tags: | + buanet/iobroker:${{ env.version }}-amd64, + ghcr.io/buanet/iobroker:${{ env.version }}-amd64 + + - name: Build Docker image (armv32v7) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm32v7 + file: ./arm32v7/Dockerfile + push: true + platforms: linux/arm/v7 + tags: | + buanet/iobroker:${{ env.version }}-arm32v7, + ghcr.io/buanet/iobroker:${{ env.version }}-arm32v7 + + - name: Build Docker image (arm64v8) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm64v8 + file: ./arm64v8/Dockerfile + push: true + platforms: linux/arm64 + tags: | + buanet/iobroker:${{ env.version }}-arm64v8, + ghcr.io/buanet/iobroker:${{ env.version }}-arm64v8 + + - name: Create and push manifests + run: | + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/beta/g" ./manifest.yml > manifest_beta.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_beta.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/beta/g" ./manifest_ghcr.yml > manifest_ghcr_beta.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_beta.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest.yml > manifest_version.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_version.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest_ghcr.yml > manifest_ghcr_version.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_version.yaml + + - name: Delete untagged images from GitHub packages + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.PACKAGES_PASS }} + script: | + const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", + { per_page: ${{ env.PER_PAGE }} + }); + for(version of response.data) { + if (version.metadata.container.tags.length == 0) { + console.log("delete " + version.id) + const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); + console.log("status " + deleteResponse.status) + } + } + env: + OWNER: buanet + PACKAGE_NAME: iobroker + PER_PAGE: 100 diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/docker_build_dev_image.yml new file mode 100644 index 0000000..1b69bd6 --- /dev/null +++ b/.github/workflows/docker_build_dev_image.yml @@ -0,0 +1,122 @@ +# Github action to build Docker image from dev branch (tag: testing) + +name: Build Docker image from dev + +on: + push: + branches: + - dev + +jobs: + bulid_dev: + runs-on: ubuntu-latest + steps: + - name: Checkout repo (dev) + uses: actions/checkout@v2.3.4 + with: + repository: 'buanet/ioBroker.docker' + ref: 'dev' + + - name: Get and write version and date + id: version + run: | + VERSION="$(cat .VERSION)" + MAJORVERSION="$(cat .VERSION | cut -c 1-2 | sed -r 's#^(.{0})#\1latest-#')" + DATI="$(date --rfc-3339=seconds | sed 's/ /T/')" + echo "This is the Version: $VERSION" + echo "version=$VERSION" >> $GITHUB_ENV + echo "This is the Major Version: $MAJORVERSION" + echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV + echo "This is the Buildnumber/Timestamp: $DATI" + echo "dati=$DATI" >> $GITHUB_ENV + sed -e "s/\${VERSION}/$VERSION-devbuild/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp + mv -f ./amd64/Dockerfile.tmp ./amd64/Dockerfile + sed -e "s/\${VERSION}/$VERSION-devbuild/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp + mv -f ./arm32v7/Dockerfile.tmp ./arm32v7/Dockerfile + sed -e "s/\${VERSION}/$VERSION-devbuild/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp + mv -f ./arm64v8/Dockerfile.tmp ./arm64v8/Dockerfile + + - name: Set up manifest tool + run: | + wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool + chmod +x manifest-tool + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1.2.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1.3.0 + + - name: Login to DockerHub + uses: docker/login-action@v1.10.0 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ secrets.PACKAGES_USER }} + password: ${{ secrets.PACKAGES_PASS }} + + - name: Build Docker image (amd64) + uses: docker/build-push-action@v2.6.1 + with: + context: ./amd64 + file: ./amd64/Dockerfile + push: true + platforms: linux/amd64 + tags: | + buanet/iobroker:dev-amd64, + ghcr.io/buanet/iobroker:dev-amd64 + + - name: Build Docker image (armv32v7) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm32v7 + file: ./arm32v7/Dockerfile + push: true + platforms: linux/arm/v7 + tags: | + buanet/iobroker:dev-arm32v7, + ghcr.io/buanet/iobroker:dev-arm32v7 + + - name: Build Docker image (arm64v8) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm64v8 + file: ./arm64v8/Dockerfile + push: true + platforms: linux/arm64 + tags: | + buanet/iobroker:dev-arm64v8, + ghcr.io/buanet/iobroker:dev-arm64v8 + + - name: Create and push manifests + run: | + sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest.yml > manifest_dev.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev.yaml + sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest_ghcr.yml > manifest_ghcr_dev.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev.yaml + + - name: Delete untagged images from GitHub packages + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.PACKAGES_PASS }} + script: | + const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", + { per_page: ${{ env.PER_PAGE }} + }); + for(version of response.data) { + if (version.metadata.container.tags.length == 0) { + console.log("delete " + version.id) + const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); + console.log("status " + deleteResponse.status) + } + } + env: + OWNER: buanet + PACKAGE_NAME: iobroker + PER_PAGE: 100 diff --git a/.github/workflows/docker_build_main_image.yml b/.github/workflows/docker_build_main_image.yml new file mode 100644 index 0000000..75876a1 --- /dev/null +++ b/.github/workflows/docker_build_main_image.yml @@ -0,0 +1,130 @@ +# Github action to build Docker image from main branch (tag: latest) + +name: Build Docker image from main + +on: + release: + types: + - published + +jobs: + bulid_latest: + runs-on: ubuntu-latest + steps: + - name: Checkout (main) + uses: actions/checkout@v2.3.4 + with: + repository: 'buanet/ioBroker.docker' + ref: 'main' + + - name: Get and wirte version and date + id: version + run: | + VERSION="$(cat .VERSION)" + MAJORVERSION="$(cat .VERSION | cut -c 1-2 | sed -r 's#^(.{0})#\1latest-#')" + DATI="$(date --rfc-3339=seconds | sed 's/ /T/')" + echo "This is the Version: $VERSION" + echo "version=$VERSION" >> $GITHUB_ENV + echo "This is the Major Version: $MAJORVERSION" + echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV + echo "This is the Buildnumber/Timestamp: $DATI" + echo "dati=$DATI" >> $GITHUB_ENV + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp + mv -f ./amd64/Dockerfile.tmp ./amd64/Dockerfile + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp + mv -f ./arm32v7/Dockerfile.tmp ./arm32v7/Dockerfile + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp + mv -f ./arm64v8/Dockerfile.tmp ./arm64v8/Dockerfile + + - name: Set up manifest tool + run: | + wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool + chmod +x manifest-tool + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1.2.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1.3.0 + + - name: Login to DockerHub + uses: docker/login-action@v1.10.0 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ secrets.PACKAGES_USER }} + password: ${{ secrets.PACKAGES_PASS }} + + - name: Build Docker image (amd64) + uses: docker/build-push-action@v2.6.1 + with: + context: ./amd64 + file: ./amd64/Dockerfile + push: true + platforms: linux/amd64 + tags: | + buanet/iobroker:${{ env.version }}-amd64, + ghcr.io/buanet/iobroker:${{ env.version }}-amd64 + + - name: Build Docker image (armv32v7) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm32v7 + file: ./arm32v7/Dockerfile + push: true + platforms: linux/arm/v7 + tags: | + buanet/iobroker:${{ env.version }}-arm32v7, + ghcr.io/buanet/iobroker:${{ env.version }}-arm32v7 + + - name: Build Docker image (arm64v8) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm64v8 + file: ./arm64v8/Dockerfile + push: true + platforms: linux/arm64 + tags: | + buanet/iobroker:${{ env.version }}-arm64v8, + ghcr.io/buanet/iobroker:${{ env.version }}-arm64v8 + + - name: Create and push manifests + run: | + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/latest/g" ./manifest.yml > manifest_latest.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_latest.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.majorversion }}/g" ./manifest.yml > manifest_latestmajor.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_latestmajor.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest.yml > manifest_version.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_version.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/latest/g" ./manifest_ghcr.yml > manifest_ghcr_latest.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_latest.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.majorversion }}/g" ./manifest_ghcr.yml > manifest_ghcr_latestmajor.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_latestmajor.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest_ghcr.yml > manifest_ghcr_version.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_version.yaml + + - name: Delete untagged images from GitHub packages + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.PACKAGES_PASS }} + script: | + const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", + { per_page: ${{ env.PER_PAGE }} + }); + for(version of response.data) { + if (version.metadata.container.tags.length == 0) { + console.log("delete " + version.id) + const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); + console.log("status " + deleteResponse.status) + } + } + env: + OWNER: buanet + PACKAGE_NAME: iobroker + PER_PAGE: 100 diff --git a/manifest_ghcr.yml b/manifest_ghcr.yml new file mode 100644 index 0000000..3e3f8f9 --- /dev/null +++ b/manifest_ghcr.yml @@ -0,0 +1,19 @@ +image: ghcr.io/buanet/iobroker:${DOCKERTAG} +manifests: + - + image: ghcr.io/buanet/iobroker:${VERSION}-amd64 + platform: + architecture: amd64 + os: linux + - + image: ghcr.io/buanet/iobroker:${VERSION}-arm64v8 + platform: + architecture: arm64 + variant: v8 + os: linux + - + image: ghcr.io/buanet/iobroker:${VERSION}-arm32v7 + platform: + architecture: arm + variant: v7 + os: linux From 2250cc71f2966aa36c2129ba219d1707f1bb89c0 Mon Sep 17 00:00:00 2001 From: buanet Date: Wed, 4 Aug 2021 22:56:18 +0200 Subject: [PATCH 09/37] small fix --- .VERSION | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.VERSION b/.VERSION index 5d21ac8..1082867 100644 --- a/.VERSION +++ b/.VERSION @@ -1,2 +1 @@ -v5.2.0_beta2 - +v5.2.0_beta2 \ No newline at end of file From 4f66ea5285d0f7f6f13afdd29957f4723c049b57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Germann?= Date: Thu, 5 Aug 2021 19:27:58 +0200 Subject: [PATCH 10/37] Update docker_build_dev_image.yml --- .github/workflows/docker_build_dev_image.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/docker_build_dev_image.yml index 1b69bd6..fb35ade 100644 --- a/.github/workflows/docker_build_dev_image.yml +++ b/.github/workflows/docker_build_dev_image.yml @@ -43,6 +43,9 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@v1.2.0 + with: + image: multiarch/qemu-user-static:register + platforms: all - name: Set up Docker Buildx id: buildx From 66df29d28ae982a483145d0860b22980b34f12f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Germann?= Date: Thu, 5 Aug 2021 19:49:27 +0200 Subject: [PATCH 11/37] Update docker_build_dev_image.yml --- .github/workflows/docker_build_dev_image.yml | 77 +++----------------- 1 file changed, 12 insertions(+), 65 deletions(-) diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/docker_build_dev_image.yml index fb35ade..6c4e3ea 100644 --- a/.github/workflows/docker_build_dev_image.yml +++ b/.github/workflows/docker_build_dev_image.yml @@ -42,14 +42,7 @@ jobs: chmod +x manifest-tool - name: Set up QEMU - uses: docker/setup-qemu-action@v1.2.0 - with: - image: multiarch/qemu-user-static:register - platforms: all - - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v1.3.0 + run: docker run --rm --privileged multiarch/qemu-user-static:register - name: Login to DockerHub uses: docker/login-action@v1.10.0 @@ -64,62 +57,16 @@ jobs: username: ${{ secrets.PACKAGES_USER }} password: ${{ secrets.PACKAGES_PASS }} - - name: Build Docker image (amd64) - uses: docker/build-push-action@v2.6.1 - with: - context: ./amd64 - file: ./amd64/Dockerfile - push: true - platforms: linux/amd64 - tags: | - buanet/iobroker:dev-amd64, - ghcr.io/buanet/iobroker:dev-amd64 - - - name: Build Docker image (armv32v7) - uses: docker/build-push-action@v2.6.1 - with: - context: ./arm32v7 - file: ./arm32v7/Dockerfile - push: true - platforms: linux/arm/v7 - tags: | - buanet/iobroker:dev-arm32v7, - ghcr.io/buanet/iobroker:dev-arm32v7 - - - name: Build Docker image (arm64v8) - uses: docker/build-push-action@v2.6.1 - with: - context: ./arm64v8 - file: ./arm64v8/Dockerfile - push: true - platforms: linux/arm64 - tags: | - buanet/iobroker:dev-arm64v8, - ghcr.io/buanet/iobroker:dev-arm64v8 - - - name: Create and push manifests + - name: Build an push Docker image (amd64) run: | - sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest.yml > manifest_dev.yaml - ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev.yaml - sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest_ghcr.yml > manifest_ghcr_dev.yaml - ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev.yaml + echo "Building amd64..." + sed -i "s/\${VERSION}/devbuild/g" ./amd64/scripts/iobroker_startup.sh + docker build -t "buanet/iobroker:dev-amd64" ./amd64 + docker tag "buanet/iobroker:dev-amd64" "iobroker/iobroker:dev-amd64" + echo "Done." + echo '' + echo "Pushing images to buanet/iobroker..." + docker push "buanet/iobroker:dev-amd64" + echo "Done." + echo '' - - name: Delete untagged images from GitHub packages - uses: actions/github-script@v3 - with: - github-token: ${{ secrets.PACKAGES_PASS }} - script: | - const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", - { per_page: ${{ env.PER_PAGE }} - }); - for(version of response.data) { - if (version.metadata.container.tags.length == 0) { - console.log("delete " + version.id) - const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); - console.log("status " + deleteResponse.status) - } - } - env: - OWNER: buanet - PACKAGE_NAME: iobroker - PER_PAGE: 100 From 092afecb64dd7f37b9a191a4413d03783c15ed3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Germann?= Date: Thu, 5 Aug 2021 20:08:26 +0200 Subject: [PATCH 12/37] testing --- amd64/Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/amd64/Dockerfile b/amd64/Dockerfile index b821850..5cafec2 100644 --- a/amd64/Dockerfile +++ b/amd64/Dockerfile @@ -35,6 +35,9 @@ RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ && apt-get update && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* +# Testing +RUN setcap 'cap_net_bind_service,cap_net_raw+eip' $(eval readlink -f `which node`) + # Generating locales RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ From 97917d19fe18af648028e9e74b22703a35d457ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Germann?= Date: Thu, 5 Aug 2021 20:08:54 +0200 Subject: [PATCH 13/37] Update docker_build_dev_image.yml From 8a7818784db9eb022b29606c9e276d3c7a3f78b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Germann?= Date: Thu, 5 Aug 2021 20:46:08 +0200 Subject: [PATCH 14/37] Update Dockerfile --- amd64/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amd64/Dockerfile b/amd64/Dockerfile index 5cafec2..72c51e2 100644 --- a/amd64/Dockerfile +++ b/amd64/Dockerfile @@ -36,7 +36,7 @@ RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ && rm -rf /var/lib/apt/lists/* # Testing -RUN setcap 'cap_net_bind_service,cap_net_raw+eip' $(eval readlink -f `which node`) +RUN cat /proc/self/cgroup # Generating locales RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ From 7b1d444e5adb748b02c3e22d0839a3787dd85f02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Germann?= Date: Sat, 28 Aug 2021 13:06:27 +0200 Subject: [PATCH 15/37] Update docker_build_dev_image.yml --- .github/workflows/docker_build_dev_image.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/docker_build_dev_image.yml index 6c4e3ea..0660bc2 100644 --- a/.github/workflows/docker_build_dev_image.yml +++ b/.github/workflows/docker_build_dev_image.yml @@ -3,6 +3,7 @@ name: Build Docker image from dev on: + workflow_dispatch: push: branches: - dev From ef3a160a7ca5bdf1a8304a9355aa4c85d24fc359 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 13:29:37 +0200 Subject: [PATCH 16/37] github actions test --- .github/workflows/docker_build_dev_image.yml | 82 ++++++++++++++++---- amd64/Dockerfile | 3 - 2 files changed, 66 insertions(+), 19 deletions(-) diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/docker_build_dev_image.yml index 0660bc2..50c8120 100644 --- a/.github/workflows/docker_build_dev_image.yml +++ b/.github/workflows/docker_build_dev_image.yml @@ -1,4 +1,4 @@ -# Github action to build Docker image from dev branch (tag: testing) +# Github action to build Docker image from dev branch (tag: dev) name: Build Docker image from dev @@ -7,7 +7,7 @@ on: push: branches: - dev - + jobs: bulid_dev: runs-on: ubuntu-latest @@ -17,7 +17,7 @@ jobs: with: repository: 'buanet/ioBroker.docker' ref: 'dev' - + - name: Get and write version and date id: version run: | @@ -45,12 +45,16 @@ jobs: - name: Set up QEMU run: docker run --rm --privileged multiarch/qemu-user-static:register + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1.3.0 + - name: Login to DockerHub uses: docker/login-action@v1.10.0 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASS }} - + - name: Login to GitHub Container Registry uses: docker/login-action@v1.10.0 with: @@ -58,16 +62,62 @@ jobs: username: ${{ secrets.PACKAGES_USER }} password: ${{ secrets.PACKAGES_PASS }} - - name: Build an push Docker image (amd64) + - name: Build Docker image (amd64) + uses: docker/build-push-action@v2.6.1 + with: + context: ./amd64 + file: ./amd64/Dockerfile + push: true + platforms: linux/amd64 + tags: | + buanet/iobroker:dev-amd64, + ghcr.io/buanet/iobroker:dev-amd64 + + - name: Build Docker image (armv32v7) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm32v7 + file: ./arm32v7/Dockerfile + push: true + platforms: linux/arm/v7 + tags: | + buanet/iobroker:dev-arm32v7, + ghcr.io/buanet/iobroker:dev-arm32v7 + + - name: Build Docker image (arm64v8) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm64v8 + file: ./arm64v8/Dockerfile + push: true + platforms: linux/arm64 + tags: | + buanet/iobroker:dev-arm64v8, + ghcr.io/buanet/iobroker:dev-arm64v8 + + - name: Create and push manifests run: | - echo "Building amd64..." - sed -i "s/\${VERSION}/devbuild/g" ./amd64/scripts/iobroker_startup.sh - docker build -t "buanet/iobroker:dev-amd64" ./amd64 - docker tag "buanet/iobroker:dev-amd64" "iobroker/iobroker:dev-amd64" - echo "Done." - echo '' - echo "Pushing images to buanet/iobroker..." - docker push "buanet/iobroker:dev-amd64" - echo "Done." - echo '' - + sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest.yml > manifest_dev.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev.yaml + sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest_ghcr.yml > manifest_ghcr_dev.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev.yaml + + - name: Delete untagged images from GitHub packages + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.PACKAGES_PASS }} + script: | + const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", + { per_page: ${{ env.PER_PAGE }} + }); + for(version of response.data) { + if (version.metadata.container.tags.length == 0) { + console.log("delete " + version.id) + const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); + console.log("status " + deleteResponse.status) + } + } + env: + OWNER: buanet + PACKAGE_NAME: iobroker + PER_PAGE: 100 diff --git a/amd64/Dockerfile b/amd64/Dockerfile index 72c51e2..b821850 100644 --- a/amd64/Dockerfile +++ b/amd64/Dockerfile @@ -35,9 +35,6 @@ RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ && apt-get update && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* -# Testing -RUN cat /proc/self/cgroup - # Generating locales RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ From 91420465e71d494c65ad93f04f0b986b71b23655 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 13:45:15 +0200 Subject: [PATCH 17/37] github actions test --- arm32v7/Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arm32v7/Dockerfile b/arm32v7/Dockerfile index 3f8a35d..6f13d99 100644 --- a/arm32v7/Dockerfile +++ b/arm32v7/Dockerfile @@ -5,6 +5,10 @@ LABEL maintainer="Andre Germann" \ ENV DEBIAN_FRONTEND noninteractive +# Workaround for building image with buildx +RUN ln -s /usr/bin/dpkg-split /usr/sbin/dpkg-split && \ + ln -s /usr/bin/dpkg-deb /usr/sbin/dpkg-deb + # Install prerequisites (as listed in iobroker installer.sh) RUN apt-get update && apt-get install -y \ acl \ From 8e0467182b8ecdfd7169525d304f431a17f9771f Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 14:06:39 +0200 Subject: [PATCH 18/37] github actions test --- arm32v7/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arm32v7/Dockerfile b/arm32v7/Dockerfile index 6f13d99..04f4a01 100644 --- a/arm32v7/Dockerfile +++ b/arm32v7/Dockerfile @@ -7,7 +7,8 @@ ENV DEBIAN_FRONTEND noninteractive # Workaround for building image with buildx RUN ln -s /usr/bin/dpkg-split /usr/sbin/dpkg-split && \ - ln -s /usr/bin/dpkg-deb /usr/sbin/dpkg-deb + ln -s /usr/bin/dpkg-deb /usr/sbin/dpkg-deb && \ + ln -s /bin/tar /usr/sbin/tar # Install prerequisites (as listed in iobroker installer.sh) RUN apt-get update && apt-get install -y \ From e7e54f794f805b2b4142f7ba02000c21c3fa5ee3 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 14:19:27 +0200 Subject: [PATCH 19/37] sctions test --- .github/workflows/docker_build_dev_image.yml | 16 ++++++++++++++-- arm32v7/Dockerfile | 6 +++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/docker_build_dev_image.yml index 50c8120..a5ba9d9 100644 --- a/.github/workflows/docker_build_dev_image.yml +++ b/.github/workflows/docker_build_dev_image.yml @@ -42,12 +42,24 @@ jobs: wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool chmod +x manifest-tool +# - name: Set up QEMU +# run: docker run --rm --privileged multiarch/qemu-user-static:register + - name: Set up QEMU - run: docker run --rm --privileged multiarch/qemu-user-static:register + uses: docker/setup-qemu-action@v1.2.0 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v1.3.0 + uses: docker/setup-buildx-action@v1.5.1 + + # Just for troubleshooting + - name: Inspect builder + run: | + echo "Name: ${{ steps.buildx.outputs.name }}" + echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}" + echo "Status: ${{ steps.buildx.outputs.status }}" + echo "Flags: ${{ steps.buildx.outputs.flags }}" + echo "Platforms: ${{ steps.buildx.outputs.platforms }}" - name: Login to DockerHub uses: docker/login-action@v1.10.0 diff --git a/arm32v7/Dockerfile b/arm32v7/Dockerfile index 04f4a01..676fa57 100644 --- a/arm32v7/Dockerfile +++ b/arm32v7/Dockerfile @@ -6,9 +6,9 @@ LABEL maintainer="Andre Germann" \ ENV DEBIAN_FRONTEND noninteractive # Workaround for building image with buildx -RUN ln -s /usr/bin/dpkg-split /usr/sbin/dpkg-split && \ - ln -s /usr/bin/dpkg-deb /usr/sbin/dpkg-deb && \ - ln -s /bin/tar /usr/sbin/tar +#RUN ln -s /usr/bin/dpkg-split /usr/sbin/dpkg-split && \ +# ln -s /usr/bin/dpkg-deb /usr/sbin/dpkg-deb && \ +# ln -s /bin/tar /usr/sbin/tar # Install prerequisites (as listed in iobroker installer.sh) RUN apt-get update && apt-get install -y \ From e0d7f821355762bdd03f0d03c7a55e490e7a2270 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 14:58:21 +0200 Subject: [PATCH 20/37] actions test --- .github/dependabot.yml | 8 ++++++++ .github/workflows/docker_build_dev_image.yml | 6 +++--- amd64/Dockerfile | 8 ++++++-- arm32v7/Dockerfile | 13 ++++++------- arm64v8/Dockerfile | 9 +++++++-- manifest.yml | 8 ++++---- 6 files changed, 34 insertions(+), 18 deletions(-) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..da0ed1b --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + target-branch: "dev" diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/docker_build_dev_image.yml index a5ba9d9..440c4f6 100644 --- a/.github/workflows/docker_build_dev_image.yml +++ b/.github/workflows/docker_build_dev_image.yml @@ -30,11 +30,11 @@ jobs: echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV echo "This is the Buildnumber/Timestamp: $DATI" echo "dati=$DATI" >> $GITHUB_ENV - sed -e "s/\${VERSION}/$VERSION-devbuild/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp mv -f ./amd64/Dockerfile.tmp ./amd64/Dockerfile - sed -e "s/\${VERSION}/$VERSION-devbuild/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp mv -f ./arm32v7/Dockerfile.tmp ./arm32v7/Dockerfile - sed -e "s/\${VERSION}/$VERSION-devbuild/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp mv -f ./arm64v8/Dockerfile.tmp ./arm64v8/Dockerfile - name: Set up manifest tool diff --git a/amd64/Dockerfile b/amd64/Dockerfile index b821850..fc49f7e 100644 --- a/amd64/Dockerfile +++ b/amd64/Dockerfile @@ -1,7 +1,11 @@ FROM amd64/debian:buster -LABEL maintainer="Andre Germann" \ - url="https://buanet.de" +LABEL org.opencontainers.image.title="ioBroker Docker Image" \ + org.opencontainers.image.description="Docker image for ioBroker smarthome software" \ + org.opencontainers.image.authors="info@buanet.de" \ + org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.created="${DATI}" ENV DEBIAN_FRONTEND noninteractive diff --git a/arm32v7/Dockerfile b/arm32v7/Dockerfile index 676fa57..e082af9 100644 --- a/arm32v7/Dockerfile +++ b/arm32v7/Dockerfile @@ -1,15 +1,14 @@ FROM balenalib/armv7hf-debian:buster -LABEL maintainer="Andre Germann" \ - url="https://buanet.de" +LABEL org.opencontainers.image.title="ioBroker Docker Image" \ + org.opencontainers.image.description="Docker image for ioBroker smarthome software" \ + org.opencontainers.image.authors="info@buanet.de" \ + org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.created="${DATI}" ENV DEBIAN_FRONTEND noninteractive -# Workaround for building image with buildx -#RUN ln -s /usr/bin/dpkg-split /usr/sbin/dpkg-split && \ -# ln -s /usr/bin/dpkg-deb /usr/sbin/dpkg-deb && \ -# ln -s /bin/tar /usr/sbin/tar - # Install prerequisites (as listed in iobroker installer.sh) RUN apt-get update && apt-get install -y \ acl \ diff --git a/arm64v8/Dockerfile b/arm64v8/Dockerfile index fbe6c1c..6e23a59 100644 --- a/arm64v8/Dockerfile +++ b/arm64v8/Dockerfile @@ -1,7 +1,12 @@ FROM balenalib/aarch64-debian:buster -LABEL maintainer="Andre Germann" \ - url="https://buanet.de" +LABEL org.opencontainers.image.title="ioBroker Docker Image" \ + org.opencontainers.image.description="Docker image for ioBroker smarthome software" \ + org.opencontainers.image.authors="info@buanet.de" \ + org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.created="${DATI}" + ENV DEBIAN_FRONTEND noninteractive diff --git a/manifest.yml b/manifest.yml index eec7aa3..5c2a799 100644 --- a/manifest.yml +++ b/manifest.yml @@ -1,18 +1,18 @@ -image: buanet/iobroker:$DOCKERTAG +image: buanet/iobroker:${DOCKERTAG} manifests: - - image: buanet/iobroker:$VERSION-amd64 + image: buanet/iobroker:${VERSION}-amd64 platform: architecture: amd64 os: linux - - image: buanet/iobroker:$VERSION-arm64v8 + image: buanet/iobroker:${VERSION}-arm64v8 platform: architecture: arm64 variant: v8 os: linux - - image: buanet/iobroker:$VERSION-arm32v7 + image: buanet/iobroker:${VERSION}-arm32v7 platform: architecture: arm variant: v7 From 36c1695311dd3f9660dfe539cb461cff5498c4a2 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 18:08:58 +0200 Subject: [PATCH 21/37] some small improvements --- .VERSION | 2 +- .github/workflows/docker_build_dev_image.yml | 18 ++--- CHANGELOG.md | 75 ++++++++++---------- amd64/scripts/iobroker_startup.sh | 29 +++++--- amd64/scripts/setup_packages.sh | 17 +++-- 5 files changed, 75 insertions(+), 66 deletions(-) diff --git a/.VERSION b/.VERSION index 1082867..8a82f2e 100644 --- a/.VERSION +++ b/.VERSION @@ -1 +1 @@ -v5.2.0_beta2 \ No newline at end of file +v5.2.0-beta2 \ No newline at end of file diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/docker_build_dev_image.yml index 440c4f6..622431e 100644 --- a/.github/workflows/docker_build_dev_image.yml +++ b/.github/workflows/docker_build_dev_image.yml @@ -30,10 +30,16 @@ jobs: echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV echo "This is the Buildnumber/Timestamp: $DATI" echo "dati=$DATI" >> $GITHUB_ENV + # amd64 + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./amd64/scripts/iobroker_startup.sh sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp mv -f ./amd64/Dockerfile.tmp ./amd64/Dockerfile + # arm32v7 + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./arm32v7/scripts/iobroker_startup.sh sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp mv -f ./arm32v7/Dockerfile.tmp ./arm32v7/Dockerfile + # arm64v8 + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./arm64v8/scripts/iobroker_startup.sh sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp mv -f ./arm64v8/Dockerfile.tmp ./arm64v8/Dockerfile @@ -42,9 +48,6 @@ jobs: wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool chmod +x manifest-tool -# - name: Set up QEMU -# run: docker run --rm --privileged multiarch/qemu-user-static:register - - name: Set up QEMU uses: docker/setup-qemu-action@v1.2.0 @@ -52,15 +55,6 @@ jobs: id: buildx uses: docker/setup-buildx-action@v1.5.1 - # Just for troubleshooting - - name: Inspect builder - run: | - echo "Name: ${{ steps.buildx.outputs.name }}" - echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}" - echo "Status: ${{ steps.buildx.outputs.status }}" - echo "Flags: ${{ steps.buildx.outputs.flags }}" - echo "Platforms: ${{ steps.buildx.outputs.platforms }}" - - name: Login to DockerHub uses: docker/login-action@v1.10.0 with: diff --git a/CHANGELOG.md b/CHANGELOG.md index 74c3336..a9c1016 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,143 +1,146 @@ ## Changelog -### * v5.2.0 beta2 (2021-06-26) +### * v5.2.0-beta2 (2021-08-28) +* optimizing log output +* adding labels in OCI standard format +* adding packages update on first start * adding file for docker detection by ioBroker adapters * adding best practice for states db migation * removing couchdb option for states db (no longer supported) -* v5.2.0 beta1 (2021-05-04) +* v5.2.0-beta1 (2021-05-04) * added upgrade parameter to maintenance script * added expose for default admin ui port (#172) * added shortform for maintenance script -* v5.2.0 beta (2021-04-02) +* v5.2.0-beta (2021-04-02) * some renaming to optimize automated build * changes in versioning * delete travis for automated build ### v5.1.0 (2020-11-05) -* v5.0.2 beta (2020-07-28) +* v5.0.2-beta (2020-07-28) * added docker tag for majorversion latest * extend readme.md doku * added maintenance script * added container healthcheck * fixed configuration procedure and logging for objects and states db setup -* v5.0.1 beta (2020-07-01) +* v5.0.1-beta (2020-07-01) * fixing backup detection in startup script * fixing permission issue on iobroker restored * extended Logging * optimize multihost support ### v5.0.0 (2020-06-29) -* v4.2.4 beta (2020-06-23) +* v4.2.4-beta (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.3 beta (2020-06-05) +* v4.2.3-beta (2020-06-05) * ~~updating js-controller to not stable version 3.1.5 to fix renaming issue~~ (is stable now) -* v4.2.2 beta (2020-06-03) +* v4.2.2-beta (2020-06-03) * ~~workaround for renaming issues on startup~~ (fixed in js-controller) -* v4.2.1 beta (2020-05-10) +* v4.2.1-beta (2020-05-10) * using node 12 instead of 10 * updated documentation in readme.md ### v4.2.0 (2020-04-14) -* v4.1.4 beta (2020-04-07) +* v4.1.4-beta (2020-04-07) * switching base image to buster * optimizing installation of packages defined by ENV "PACKAGES" -* v4.1.3 beta (2020-02-08) +* v4.1.3-beta (2020-02-08) * renamed ENV for adminport (new "IOB_ADMINPORT)") * added new ENVs for "iobroker setup custom" (replacing "REDIS") * enhancements in startup script logging -* v4.1.2 beta (2020-02-02) +* v4.1.2-beta (2020-02-02) * added feature for running user defined scripts on startup * small fix for permissions issues on some systems -* v4.1.1 beta (2020-01-17) +* v4.1.1-beta (2020-01-17) * updated openzwave to version 1.6.1007 ### v4.1.0 (2020-01-17) * improved readme.md -* v4.0.3 beta (2020-01-06) +* v4.0.3-beta (2020-01-06) * added support to restore backup on startup * small fixes according to "docker best practices" -* v4.0.2 beta (2019-12-10) +* v4.0.2-beta (2019-12-10) * ~~added env for activating redis~~ * enhancements in startup script and docker file -* v4.0.1 beta (2019-11-25) +* v4.0.1-beta (2019-11-25) * added env for iobroker admin port * added env for usb-devices (setting permissions) * updateing prerequisites for iobroker installation * some small code fixes ### v4.0.0 (2019-10-25) -* v3.1.4 beta (2019-10-23) +* v3.1.4-beta (2019-10-23) * added env for zwave support -* v3.1.3 beta (2019-10-17) +* v3.1.3-beta (2019-10-17) * enhanced logging of startup-script * multi arch support (amd64, aarch64, armv7hf) -* v3.1.2 beta (2019-09-03) +* v3.1.2-beta (2019-09-03) * using node 10 instead of node 8 -* v3.1.1 beta (2019-09-02) +* v3.1.1-beta (2019-09-02) * adding env for setting uid/ gid for iobroker-user ### v3.1.0 (2019-08-21) -* v3.0.3 beta (2019-08-21) +* v3.0.3-beta (2019-08-21) * switching base image from "debian:latest" to "debian:stretch" -* v3.0.2 beta (2019-06-13) +* v3.0.2-beta (2019-06-13) * using gosu instead of sudo * changing output of ioBroker logging -* v3.0.1 beta (2019-05-18) +* v3.0.1-beta (2019-05-18) * ~~switching back to iobroker-daemon for startup~~ ### v3.0.0 (2019-05-09) -* v2.0.6 beta (2019-04-14) +* v2.0.6-beta (2019-04-14) * added some additional logging * fixing some issues for language env * added permission fixing on first start -* v2.0.5 beta (2019-02-09) +* v2.0.5-beta (2019-02-09) * added ENV to docker file * added EXPOSE for admin * final testing -* v2.0.4 beta (2019-01-28) +* v2.0.4-beta (2019-01-28) * added support for env variables "avahi" and "packages" * moving avahi-daemon installation into avahi startup script * added script for installing optional packages * optimizing logging output -* v2.0.3 beta (2019-01-24) +* v2.0.3-beta (2019-01-24) * added support for running ioBroker under iobroker user * optimizing logging output * optimizing scripts -* v2.0.2 beta (2019-01-23) +* v2.0.2-beta (2019-01-23) * optimizing and rearranged docker file * changes for new ioBroker install script * added restoring for empty mounted /opt/iobroker folder * some more small fixes -* v2.0.1 beta (2019-01-07) +* v2.0.1-beta (2019-01-07) * some changes for supporting other docker-environments than synology ds ### v2.0.0 (2018-12-05) -* v1.2.2 beta (2018-12-05) +* v1.2.2-beta (2018-12-05) * using node8 instead of node6 * changes for new iobroker setup -* v1.2.1 beta (2018-09-12) +* v1.2.1-beta (2018-09-12) * added support for firetv-adapter ### v1.2.0 (2018-08-21) -* v1.1.3 beta (2018-08-21) +* v1.1.3-beta (2018-08-21) * ~~added ffmpeg-package for yahka to support webcams~~ -* v1.1.2 beta (2018-04-04) +* v1.1.2-beta (2018-04-04) * added ENV for timezone issue -* v1.1.1 beta (2018-03-29) +* v1.1.1-beta (2018-03-29) * added wget package * updated readme.md ### v1.1.0 (2017-12-10) -* v1.0.2 beta (2017-12-10) +* v1.0.2-beta (2017-12-10) * changed startup call to fix restart issue * fixed avahi startup issue * fixed hostname issue * added z-wave support * added logging to /opt/scripts/docker_iobroker_log.txt -* v1.0.1 beta (2017-08-25) +* v1.0.1-beta (2017-08-25) * fixed locales issue ### v1.0.0 (2017-08-22) diff --git a/amd64/scripts/iobroker_startup.sh b/amd64/scripts/iobroker_startup.sh index 9cbf0cf..2962c87 100644 --- a/amd64/scripts/iobroker_startup.sh +++ b/amd64/scripts/iobroker_startup.sh @@ -40,8 +40,11 @@ echo "----- -----" echo "----- System -----" echo -n "----- " && echo -n "$(printf "%-10s %-23s" arch: $(uname -m))" && echo " -----" echo "----- -----" +echo "----- Docker-Image -----" +echo -n "----- " && echo -n "$(printf "%-10s %-23s" image: ${VERSION})" && echo " -----" +echo -n "----- " && echo -n "$(printf "%-10s %-23s" build: ${BUILD})" && echo " -----" +echo "----- -----" echo "----- Versions -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" image: $VERSION)" && echo " -----" echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -v))" && echo " -----" echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----" echo "----- -----" @@ -74,15 +77,27 @@ echo ' ' # Adding ckeck file for easy docker detection by ioBroker echo "$VERSION" > /opt/scripts/.docker_config/.thisisdocker -# Installing additional packages and setting uid/gid +# Installing/ updating additional packages and setting uid/gid if [ "$packages" != "" ] || [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] || [ -f /opt/.firstrun ] then + if [ -f /opt/.firstrun ] + then + echo "Updating Linux packages on first run..." + bash /opt/scripts/setup_packages.sh -update + echo "Done." + echo ' ' + echo "Registering maintenance script as command..." + echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc + echo "alias maint=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc + echo "Done." + echo ' ' + fi if [ "$packages" != "" ] 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 -install echo "Done." echo ' ' fi @@ -95,14 +110,6 @@ then echo "Done." echo ' ' fi - if [ -f /opt/.firstrun ] - then - echo "Registering maintenance script as command." - echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc - echo "alias maint=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc - echo "Done." - echo ' ' - fi else echo "Nothing to do here." echo ' ' diff --git a/amd64/scripts/setup_packages.sh b/amd64/scripts/setup_packages.sh index 449900f..175e212 100644 --- a/amd64/scripts/setup_packages.sh +++ b/amd64/scripts/setup_packages.sh @@ -1,11 +1,16 @@ #!/bin/bash -apt-get -qq update - -packages=$(cat /opt/scripts/.packages) -for i in $packages; do - sudo apt-get -qq -y install $i -done +if [ $1 == "-install" ] + then + apt-get -qq update + packages=$(cat /opt/scripts/.packages) + for i in $packages; do + sudo apt-get -qq -y install $i + done + elif [ $1 == "-update" ] + apt-get -qq update + apt-get -qq -y upgrade +fi rm -rf /var/lib/apt/lists/* rm -f /opt/scripts/.packages From 0621c8d8b24b65fb2f8f52619a62572132ba982b Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 19:11:30 +0200 Subject: [PATCH 22/37] small fix --- .github/workflows/docker_build_dev_image.yml | 9 ++++++--- amd64/scripts/setup_packages.sh | 20 ++++++++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/docker_build_dev_image.yml index 622431e..0ba462e 100644 --- a/.github/workflows/docker_build_dev_image.yml +++ b/.github/workflows/docker_build_dev_image.yml @@ -31,15 +31,18 @@ jobs: echo "This is the Buildnumber/Timestamp: $DATI" echo "dati=$DATI" >> $GITHUB_ENV # amd64 - sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./amd64/scripts/iobroker_startup.sh + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./amd64/scripts/iobroker_startup.sh > ./amd64/scripts/iobroker_startup.tmp + mv -f ./amd64/scripts/iobroker_startup.tmp ./amd64/scripts/iobroker_startup.sh sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp mv -f ./amd64/Dockerfile.tmp ./amd64/Dockerfile # arm32v7 - sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./arm32v7/scripts/iobroker_startup.sh + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./arm32v7/scripts/iobroker_startup.sh > ./arm32v7/scripts/iobroker_startup.tmp + mv -f ./arm32v7/scripts/iobroker_startup.tmp ./arm32v7/scripts/iobroker_startup.sh sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp mv -f ./arm32v7/Dockerfile.tmp ./arm32v7/Dockerfile # arm64v8 - sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./arm64v8/scripts/iobroker_startup.sh + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./arm64v8/scripts/iobroker_startup.sh > ./arm64v8/scripts/iobroker_startup.tmp + mv -f ./arm64v8/scripts/iobroker_startup.tmp ./arm64v8/scripts/iobroker_startup.sh sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp mv -f ./arm64v8/Dockerfile.tmp ./arm64v8/Dockerfile diff --git a/amd64/scripts/setup_packages.sh b/amd64/scripts/setup_packages.sh index 175e212..d959a5b 100644 --- a/amd64/scripts/setup_packages.sh +++ b/amd64/scripts/setup_packages.sh @@ -1,15 +1,19 @@ #!/bin/bash if [ $1 == "-install" ] - then - apt-get -qq update - packages=$(cat /opt/scripts/.packages) - for i in $packages; do +then + apt-get -qq update + packages=$(cat /opt/scripts/.packages) + for i in $packages; do sudo apt-get -qq -y install $i - done - elif [ $1 == "-update" ] - apt-get -qq update - apt-get -qq -y upgrade + done +elif [ $1 == "-update" ] +then + apt-get -qq update + apt-get -qq -y upgrade +else + echo "No paramerter found!" + exit 1 fi rm -rf /var/lib/apt/lists/* From 801015cb2899b472b86d82876a2e20c9f9b529c5 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 20:36:46 +0200 Subject: [PATCH 23/37] testing for slim image --- .github/workflows/build-image-dev-slim.yml | 101 ++++ slim/Dockerfile-slim-amd64 | 85 +++ slim/scripts/healthcheck.sh | 20 + slim/scripts/iobroker_startup.sh | 517 ++++++++++++++++++ slim/scripts/maintenance.sh | 110 ++++ slim/scripts/setup_avahi.sh | 35 ++ slim/scripts/setup_packages.sh | 22 + slim/scripts/setup_zwave.sh | 19 + .../userscript_everystart_example.sh | 13 + .../userscript_firststart_example.sh | 12 + 10 files changed, 934 insertions(+) create mode 100644 .github/workflows/build-image-dev-slim.yml create mode 100644 slim/Dockerfile-slim-amd64 create mode 100644 slim/scripts/healthcheck.sh create mode 100644 slim/scripts/iobroker_startup.sh create mode 100644 slim/scripts/maintenance.sh create mode 100644 slim/scripts/setup_avahi.sh create mode 100644 slim/scripts/setup_packages.sh create mode 100644 slim/scripts/setup_zwave.sh create mode 100644 slim/userscripts/userscript_everystart_example.sh create mode 100644 slim/userscripts/userscript_firststart_example.sh diff --git a/.github/workflows/build-image-dev-slim.yml b/.github/workflows/build-image-dev-slim.yml new file mode 100644 index 0000000..8b71f58 --- /dev/null +++ b/.github/workflows/build-image-dev-slim.yml @@ -0,0 +1,101 @@ +# Github action to build Docker image from dev branch (tag: dev) + +name: Build slim image from dev + +on: + workflow_dispatch: +# push: +# branches: +# - dev + +jobs: + bulid-dev-slim: + runs-on: ubuntu-latest + steps: + - name: Checkout repo (dev) + uses: actions/checkout@v2.3.4 + with: + repository: 'buanet/ioBroker.docker' + ref: 'dev' + + - name: Get and write version and date + id: version + run: | + VERSION="$(cat .VERSION)" + MAJORVERSION="$(cat .VERSION | cut -c 1-2 | sed -r 's#^(.{0})#\1latest-#')" + DATI="$(date --rfc-3339=seconds | sed 's/ /T/')" + echo "This is the Version: $VERSION" + echo "version=$VERSION" >> $GITHUB_ENV + echo "This is the Major Version: $MAJORVERSION" + echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV + echo "This is the Buildnumber/Timestamp: $DATI" + echo "dati=$DATI" >> $GITHUB_ENV + # startup script + sed -e "s/\${VERSION}/$VERSION-slim-dev/" -e "s/\${BUILD}/$DATI/" ./slim/scripts/iobroker_startup.sh > ./slim/scripts/iobroker_startup.tmp + mv -f ./slim/scripts/iobroker_startup.tmp ./slim/scripts/iobroker_startup.sh + # amd64 + sed -e "s/\${VERSION}/$VERSION-slim-dev/" -e "s/\${DATI}/$DATI/" ./slim/Dockerfile-slim-amd64 > ./slim/Dockerfile-slim-amd64.tmp + mv -f ./slim/Dockerfile-slim-amd64.tmp ./slim/Dockerfile-slim-amd64 + + - name: Set up manifest tool + run: | + wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool + chmod +x manifest-tool + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1.2.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1.5.1 + + - name: Login to DockerHub + uses: docker/login-action@v1.10.0 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ secrets.PACKAGES_USER }} + password: ${{ secrets.PACKAGES_PASS }} + + - name: Build Docker image (slim-amd64) + uses: docker/build-push-action@v2.6.1 + with: + context: ./slim + file: ./slim/Dockerfile-slim-amd64 + push: true + platforms: linux/amd64 + tags: | + buanet/iobroker:dev-slim-amd64, + ghcr.io/buanet/iobroker:dev-slim-amd64 + + - name: Create and push manifests + run: | + sed -e "s/\${VERSION}/dev-slim/g" -e "s/\${DOCKERTAG}/dev-slim/g" ./manifest.yml > manifest_dev-slim.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev-slim.yaml + sed -e "s/\${VERSION}/dev-slim/g" -e "s/\${DOCKERTAG}/dev-slim/g" ./manifest_ghcr.yml > manifest_ghcr_dev-slim.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev-slim.yaml + + - name: Delete untagged images from GitHub packages + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.PACKAGES_PASS }} + script: | + const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", + { per_page: ${{ env.PER_PAGE }} + }); + for(version of response.data) { + if (version.metadata.container.tags.length == 0) { + console.log("delete " + version.id) + const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); + console.log("status " + deleteResponse.status) + } + } + env: + OWNER: buanet + PACKAGE_NAME: iobroker + PER_PAGE: 100 diff --git a/slim/Dockerfile-slim-amd64 b/slim/Dockerfile-slim-amd64 new file mode 100644 index 0000000..560cc20 --- /dev/null +++ b/slim/Dockerfile-slim-amd64 @@ -0,0 +1,85 @@ +FROM debian:bullseye-slim + +LABEL org.opencontainers.image.title="ioBroker Docker Image" \ + org.opencontainers.image.description="Docker image for ioBroker smarthome software" \ + org.opencontainers.image.authors="info@buanet.de" \ + org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.created="${DATI}" + +ENV DEBIAN_FRONTEND noninteractive + +# Install prerequisites +RUN apt-get update && apt-get install -y \ + curl \ + gosu \ + jq \ + locales \ + sudo \ + udev \ + && rm -rf /var/lib/apt/lists/* + +# Install node +RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ + && apt-get update && apt-get install -y nodejs \ + && rm -rf /var/lib/apt/lists/* + +# Generating locales +RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ + && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ + && locale-gen + +# Create scripts directorys and copy scripts +RUN mkdir -p /opt/scripts/ \ + && mkdir -p /opt/userscripts/ \ + && chmod 777 /opt/scripts/ \ + && chmod 777 /opt/userscripts/ +WORKDIR /opt/scripts/ +COPY scripts/*.sh *.sh +RUN chmod +x *.sh +WORKDIR /opt/userscripts/ +COPY scripts/*.sh *.sh +RUN chmod +x *.sh + +# Install ioBroker +WORKDIR / +RUN apt-get update \ + && curl -sL https://iobroker.net/install.sh | bash - \ + && mkdir -p /opt/scripts/.docker_config/ \ + && echo $(hostname) > /opt/scripts/.docker_config/.install_host \ + && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ + && echo $(hostname) > /opt/.firstrun \ + && rm -rf /var/lib/apt/lists/* + +# Install node-gyp +# WORKDIR /opt/iobroker/ +# RUN npm install -g node-gyp + +# Backup initial ioBroker and userscript folder +RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \ + && tar -cf /opt/initial_userscripts.tar /opt/userscripts + +# Setting up iobroker-user (shell and home directory) +RUN chsh -s /bin/bash 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" \ + SETGID=1000 \ + SETUID=1000 \ + TZ="Europe/Berlin" + +# Expose default admin ui port +EXPOSE 8081 + +# Healthcheck +HEALTHCHECK --interval=15s --timeout=5s --retries=5 \ + CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"] + +# Run startup-script +ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"] diff --git a/slim/scripts/healthcheck.sh b/slim/scripts/healthcheck.sh new file mode 100644 index 0000000..072f9c0 --- /dev/null +++ b/slim/scripts/healthcheck.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Script checks health of running container + +if [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "starting" ] +then + echo 'Health status: OK - Startup script is still running.' + exit 0 +elif [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "maintenance" ] +then + echo 'Health status: OK - Container is running in maintenance mode.' + exit 0 +elif [ "$(ps -fe|grep "[i]obroker.js-controller"|awk '{print $2}')" != "" ] +then + echo 'Health status: OK - Main process (js-controller) is running.' + exit 0 +fi + +echo 'Health status: !!! NOT OK !!! - Something went wrong. Please see container logs for more details and/or try restarting the container.' +exit 1 diff --git a/slim/scripts/iobroker_startup.sh b/slim/scripts/iobroker_startup.sh new file mode 100644 index 0000000..2962c87 --- /dev/null +++ b/slim/scripts/iobroker_startup.sh @@ -0,0 +1,517 @@ +#!/bin/bash + +# Setting healthcheck status to "starting" +echo "starting" > /opt/scripts/.docker_config/.healthcheck + +# Reading ENV +adminport=$IOB_ADMINPORT +avahi=$AVAHI +multihost=$IOB_MULTIHOST +objectsdbhost=$IOB_OBJECTSDB_HOST +objectsdbport=$IOB_OBJECTSDB_PORT +objectsdbtype=$IOB_OBJECTSDB_TYPE +packages=$PACKAGES +setgid=$SETGID +setuid=$SETUID +statesdbhost=$IOB_STATESDB_HOST +statesdbport=$IOB_STATESDB_PORT +statesdbtype=$IOB_STATESDB_TYPE +usbdevices=$USBDEVICES +zwave=$ZWAVE + +# Getting date and time for logging +dati=`date '+%Y-%m-%d %H:%M:%S'` + +# Logging header +echo ' ' +echo "$(printf -- '-%.0s' {1..60})" +echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})" +echo "$(printf -- '-%.0s' {1..60})" +echo ' ' +echo "$(printf -- '-%.0s' {1..60})" +echo "----- Welcome to your ioBroker-container! -----" +echo "----- Startupscript is now running. -----" +echo "----- Please be patient! -----" +echo "$(printf -- '-%.0s' {1..60})" +echo ' ' +echo "$(printf -- '-%.0s' {1..60})" +echo "----- Debugging information -----" +echo "----- -----" +echo "----- System -----" +echo -n "----- " && echo -n "$(printf "%-10s %-23s" arch: $(uname -m))" && echo " -----" +echo "----- -----" +echo "----- Docker-Image -----" +echo -n "----- " && echo -n "$(printf "%-10s %-23s" image: ${VERSION})" && echo " -----" +echo -n "----- " && echo -n "$(printf "%-10s %-23s" build: ${BUILD})" && echo " -----" +echo "----- -----" +echo "----- Versions -----" +echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -v))" && echo " -----" +echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----" +echo "----- -----" +echo "----- ENV -----" +if [ "$adminport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_ADMINPORT: $adminport)" && echo " -----"; fi +if [ "$avahi" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $avahi)" && echo " -----"; fi +if [ "$multihost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_MULTIHOST: $multihost)" && echo " -----"; fi +if [ "$objectsdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_HOST: $objectsdbhost)" && echo " -----"; fi +if [ "$objectsdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_PORT: $objectsdbport)" && echo " -----"; fi +if [ "$objectsdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_TYPE: $objectsdbtype)" && echo " -----"; fi +if [ "$packages" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $packages)" && echo " -----"; fi +if [ "$setgid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $setgid)" && echo " -----"; fi +if [ "$setuid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $setuid)" && echo " -----"; fi +if [ "$statesdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_HOST: $statesdbhost)" && echo " -----"; fi +if [ "$statesdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_PORT: $statesdbport)" && echo " -----"; fi +if [ "$statesdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_TYPE: $statesdbtype)" && echo " -----"; fi +if [ "$usbdevices" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $usbdevices)" && echo " -----"; fi +if [ "$zwave" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $zwave)" && echo " -----"; fi +echo "$(printf -- '-%.0s' {1..60})" +echo ' ' + +##### +# STEP 1 - Preparing container +##### +echo "$(printf -- '-%.0s' {1..60})" +echo "----- Step 1 of 5: Preparing container -----" +echo "$(printf -- '-%.0s' {1..60})" +echo ' ' + +# Adding ckeck file for easy docker detection by ioBroker +echo "$VERSION" > /opt/scripts/.docker_config/.thisisdocker + +# Installing/ updating additional packages and setting uid/gid +if [ "$packages" != "" ] || [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] || [ -f /opt/.firstrun ] +then + if [ -f /opt/.firstrun ] + then + echo "Updating Linux packages on first run..." + bash /opt/scripts/setup_packages.sh -update + echo "Done." + echo ' ' + echo "Registering maintenance script as command..." + echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc + echo "alias maint=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc + echo "Done." + echo ' ' + fi + if [ "$packages" != "" ] + 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 -install + echo "Done." + echo ' ' + fi + if [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] + 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 + echo "Done." + echo ' ' + fi +else + echo "Nothing to do here." + echo ' ' +fi + +# Change directory for next steps +cd /opt/iobroker + + +##### +# Detecting ioBroker-Installation +##### +echo "$(printf -- '-%.0s' {1..60})" +echo "----- Step 2 of 5: Detecting ioBroker installation -----" +echo "$(printf -- '-%.0s' {1..60})" +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 / + echo "Done." +elif [ -f /opt/iobroker/iobroker ] +then + echo "Existing installation of ioBroker detected in /opt/iobroker." + rm -f /opt/scripts/.docker_config/.install_host +elif [ $(ls *_backupiobroker.tar.gz 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/*_backupiobroker.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ] +then + if [ "$multihost" = "slave" ] + 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)." + exit 1 + else + echo "IoBroker backup file detected in /opt/iobroker. Preparing restore..." + mv /opt/iobroker/*.tar.gz /opt/ + tar -xf /opt/initial_iobroker.tar -C / + mkdir /opt/iobroker/backups + mv /opt/*.tar.gz /opt/iobroker/backups/ + chown -R $setuid:$setgid /opt/iobroker # fixes permission error during restore + echo "Done." + echo "Restoring ioBroker..." + iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1 + echo "Done." + echo ' ' + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!! IMPORTANT NOTE !!!!!" + echo "!!!!! The sartup script restored iobroker from a backup file. !!!!!" + echo "!!!!! Check /opt/iobroker/log/restore.log to see if restore was successful. !!!!!" + echo "!!!!! When ioBroker now starts it will reinstall all Adapters automatically. !!!!!" + echo "!!!!! This might be take a looooong time! Please be patient! !!!!!" + echo "!!!!! You can view installation process by taking a look at ioBroker log. !!!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + fi +else + echo "There is data detected in /opt/iobroker but it looks like it is no instance of ioBroker or a valid backup file!" + echo "Please check/ recreate mounted folder/ volume and start over." + exit 1 +fi +echo ' ' + + +##### +# Checking ioBroker-Installation +##### +echo "$(printf -- '-%.0s' {1..60})" +echo "----- Step 3 of 5: Checking ioBroker installation -----" +echo "$(printf -- '-%.0s' {1..60})" +echo ' ' + +# (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts" +echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..." + chown -R $setuid:$setgid /opt/iobroker + chown -R $setuid:$setgid /opt/scripts +echo "Done." +echo ' ' + +# Backing up original iobroker-file and changing sudo to gosu +echo "Fixing \"sudo-bug\" by replacing sudo in iobroker with gosu..." + cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak + chmod 755 /opt/iobroker/iobroker + sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker +echo "Done." +echo ' ' + +# Checking for first run of a new installation and renaming ioBroker +if [ -f /opt/scripts/.docker_config/.install_host ] +then + echo "Looks like this is a new and empty installation of ioBroker." + echo "Hostname needs to be updated to " $(hostname)"..." + bash iobroker host $(cat /opt/scripts/.docker_config/.install_host) + rm -f /opt/scripts/.docker_config/.install_host + echo "Done." + echo ' ' +elif [ $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ] +then + echo "Hostname in ioBroker does not match the hostname of this container." + echo "Updating hostname to " $(hostname)"..." + bash iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') + echo "Done." + echo ' ' +fi + + +##### +# Setting up prerequisites for some ioBroker-adapters +##### +echo "$(printf -- '-%.0s' {1..60})" +echo "----- Step 4 of 5: Applying special settings -----" +echo "$(printf -- '-%.0s' {1..60})" +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 ' ' + + +# Checking ENV for Adminport +if [ "$adminport" != "" ] +then + if [ "$adminport" != $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="port": )[^,]*') ] + 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 + echo "Done." + echo ' ' + fi +fi + + +# Checking ENV for AVAHI +if [ "$avahi" != "" ] +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 + echo "Done." + echo ' ' + fi +fi + + +# Checking ENV for Z-WAVE +if [ "$zwave" != "" ] +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 + echo "Done." + echo ' ' + fi +fi + + +# checking ENV for USBDEVICES +if [ "$usbdevices" != "" ] +then + if [ "$usbdevices" != "none" ] + then + echo "Usb-device-support is activated by ENV." + IFS=';' read -ra devicearray <<< "$usbdevices" + for i in "${devicearray[@]}" + do + echo "Setting permissions for" $i"..." + chown root:dialout $i + chmod g+rw $i + done + echo "Done." + echo ' ' + fi +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 + chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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/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 + + +# Checking ENVs for custom setup of objects db +if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ] +then + 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 "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." + 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 "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." + 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 "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." + fi + echo ' ' +fi + + +# Checking ENVs for custom setup of states db# +if [ "$statesdbtype" != "" ] || [ "$statesdbhost" != "" ] || [ "$statesdbport" != "" ] +then + 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 "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." + 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 "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." + 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 "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." + fi + echo ' ' +fi + + +# Checking for Userscripts in /opt/userscripts +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 + echo "Done." + echo ' ' +elif [ -f /opt/userscripts/userscript_firststart.sh ] || [ -f /opt/userscripts/userscript_everystart.sh ] +then + if [ -f /opt/userscripts/userscript_firststart.sh ] && [ -f /opt/.firstrun ] + 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 + 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 + echo "Done." + echo ' ' + fi +fi + +# Removing first run marker when exists +if [ -f /opt/.firstrun ] +then +rm -f /opt/.firstrun +fi + +##### +# Starting ioBroker +##### +echo "$(printf -- '-%.0s' {1..60})" +echo "----- Step 5 of 5: ioBroker startup -----" +echo "$(printf -- '-%.0s' {1..60})" +echo ' ' +echo "Starting ioBroker..." +echo ' ' + +# Setting healthcheck status to "running" +echo "running" > /opt/scripts/.docker_config/.healthcheck + +# 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 +} + +# 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 diff --git a/slim/scripts/maintenance.sh b/slim/scripts/maintenance.sh new file mode 100644 index 0000000..bacd49b --- /dev/null +++ b/slim/scripts/maintenance.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +# function to display help text +display_help() { + echo "This script is build to manage your ioBroker container!" + echo "Usage: maintenance [ COMMAND ] [ OPTIONS ]" + echo " maint [ COMMAND ] [ OPTIONS ]" + echo '' + echo "COMMANDS" + echo "------------------" + echo " status > gives the current state of maintenance mode" + echo " on > switches mantenance mode ON" + echo " off > switches mantenance mode OFF and shuts down/ restarts container" + echo " upgrade > will put container to maintenance mode and upgrade iobroker" + echo '' + echo "OPTIONS" + echo "------------------" + echo " -h|--help > shows this help" + echo " -y|--yes > confirms the used command without asking" + echo '' + exit 0 +} + +while getopts h opt +do + case $opt in + h | --help) + display_help ;; + esac +exit 0; +done + +if [ "$1" == "status" ] +then + if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ] + then + echo 'Maintenance mode is ON.' + exit 0 + elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] + then + echo 'Maintenance mode is OFF.' + exit 0 + fi +elif [ "$1" == "on" ] +then + echo 'You are now going to stop ioBroker and activating maintenance mode for this container.' + read -p 'Do you want to continue [yes/no]? ' A + if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] + then + echo 'Activating maintenance mode...' + echo "maintenance" > /opt/scripts/.docker_config/.healthcheck + sleep 1 + echo 'Done.' + echo 'Stopping ioBroker...' + pkill -u iobroker + sleep 1 + echo 'Done.' + exit 0 + else + exit 0 + fi +elif [ "$1" == "off" ] +then + echo 'You are now going to deactivate maintenance mode for this container.' + echo 'Depending on the restart policy, your container will be stopped/ restarted immediately.' + read -p 'Do you want to continue [yes/no]? ' A + if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] + then + echo 'Deactivating maintenance mode and forcing container to stop/ restart...' + echo "stopping" > /opt/scripts/.docker_config/.healthcheck + pkill -u root + exit 0 + else + exit 0 + fi +elif [ "$1" == "upgrade" ] +then + echo 'You are now going to upgrade your js-controller.' + echo 'As this will change data in /opt/iobroker, make sure you have a backup!' + echo 'During the upgrade process the container will automatically switch into maintenance mode and stop ioBroker.' + echo 'Depending of the restart policy, you container will be stoped/ restarted automatically after the upgrade.' + read -p 'Do you want to continue [yes/no]? ' A + if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] + then + echo 'Activating maintenance mode...' + echo "maintenance" > /opt/scripts/.docker_config/.healthcheck + sleep 1 + echo 'Done.' + echo 'Stopping ioBroker...' + pkill -u iobroker + sleep 1 + echo 'Done.' + echo 'Upgrading js-controller...' + iobroker update + iobroker upgrade self + sleep 1 + echo 'Done.' + echo 'Container will be stopped/ restarted in 5 seconds...' + sleep 5 + echo "stopping" > /opt/scripts/.docker_config/.healthcheck + pkill -u root + exit 0 + else + exit 0 + fi +else + echo 'Invalid command. Please try again.' +fi + +exit 0 diff --git a/slim/scripts/setup_avahi.sh b/slim/scripts/setup_avahi.sh new file mode 100644 index 0000000..4fd1ab1 --- /dev/null +++ b/slim/scripts/setup_avahi.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +echo "Checking avahi-daemon installation state..." + +if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ] +then + echo "Avahi is already installed..." +else + echo "Avahi-daemon is NOT installed. Going to install it now..." + apt-get update > /opt/scripts/avahi_startup.log 2>&1 + apt-get install -y libavahi-compat-libdnssd-dev avahi-daemon >> /opt/scripts/avahi_startup.log 2>&1 + rm -rf /var/lib/apt/lists/* >> /opt/scripts/avahi_startup.log 2>&1 + echo "Configuring avahi-daemon..." + sed -i '/^rlimit-nproc/s/^\(.*\)/#\1/g' /etc/avahi/avahi-daemon.conf + echo "Configuring dbus..." + mkdir /var/run/dbus/ +fi + +if [ -f /var/run/dbus/pid ]; +then + rm -f /var/run/dbus/pid +fi + +if [ -f /var/run/avahi-daemon//pid ]; +then + rm -f /var/run/avahi-daemon//pid +fi + +echo "Starting dbus..." +dbus-daemon --system + +echo "Starting avahi-daemon..." +/etc/init.d/avahi-daemon start + +exit 0 diff --git a/slim/scripts/setup_packages.sh b/slim/scripts/setup_packages.sh new file mode 100644 index 0000000..d959a5b --- /dev/null +++ b/slim/scripts/setup_packages.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +if [ $1 == "-install" ] +then + apt-get -qq update + packages=$(cat /opt/scripts/.packages) + for i in $packages; do + sudo apt-get -qq -y install $i + done +elif [ $1 == "-update" ] +then + apt-get -qq update + apt-get -qq -y upgrade +else + echo "No paramerter found!" + exit 1 +fi + +rm -rf /var/lib/apt/lists/* +rm -f /opt/scripts/.packages + +exit 0 diff --git a/slim/scripts/setup_zwave.sh b/slim/scripts/setup_zwave.sh new file mode 100644 index 0000000..11d8024 --- /dev/null +++ b/slim/scripts/setup_zwave.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +echo "Checking openzwave installation state..." + +if [ -e /usr/local/lib64 ] +then + echo "Openzwave is already installed..." +else + echo "Openzwave is NOT installed. Going to install it now..." + cd /opt + curl -s -L -O http://old.openzwave.com/downloads/openzwave-1.6.1007.tar.gz + tar -xf openzwave-1.6.1007.tar.gz && rm openzwave-1.6.1007.tar.gz + cd openzwave-1.6.1007 && make > /dev/null 2>&1 && make install > /dev/null 2>&1 + ldconfig /usr/local/lib64 + cd /opt/iobroker + # echo "Openzwave is now installed..." +fi + +exit 0 diff --git a/slim/userscripts/userscript_everystart_example.sh b/slim/userscripts/userscript_everystart_example.sh new file mode 100644 index 0000000..9023677 --- /dev/null +++ b/slim/userscripts/userscript_everystart_example.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# This is an example script file. +# To run the Script on every start of the container you have to rename it to userscript_everystart.sh. + +# You can add your advanced script code here! + +echo ' ' +echo "I'm your startscript userscript_everystart.sh. I will run on EVERY container startup." +echo ' ' + + +exit 0 diff --git a/slim/userscripts/userscript_firststart_example.sh b/slim/userscripts/userscript_firststart_example.sh new file mode 100644 index 0000000..4fef50d --- /dev/null +++ b/slim/userscripts/userscript_firststart_example.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# This is an example script file. +# To run the Script on the first start of a new container you have to rename it to userscript_firststart.sh. + +# You can add your advanced script code here! + +echo ' ' +echo "I'm your startscript userscript_firststart.sh. I will run only on the FIRST startup of the container." +echo ' ' + +exit 0 From 7af84b08222614f7921600469cdd19c4f0949eda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Germann?= Date: Sat, 28 Aug 2021 20:43:00 +0200 Subject: [PATCH 24/37] Update build-image-dev-slim.yml --- .github/workflows/build-image-dev-slim.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-image-dev-slim.yml b/.github/workflows/build-image-dev-slim.yml index 8b71f58..cc8bae6 100644 --- a/.github/workflows/build-image-dev-slim.yml +++ b/.github/workflows/build-image-dev-slim.yml @@ -4,9 +4,9 @@ name: Build slim image from dev on: workflow_dispatch: -# push: -# branches: -# - dev + push: + branches: + - dev jobs: bulid-dev-slim: From 8e6e97d3752908534158749c2d1ceb74702386a4 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 20:52:09 +0200 Subject: [PATCH 25/37] testing --- .github/workflows/build-image-dev-slim.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-image-dev-slim.yml b/.github/workflows/build-image-dev-slim.yml index 8b71f58..ebfb37f 100644 --- a/.github/workflows/build-image-dev-slim.yml +++ b/.github/workflows/build-image-dev-slim.yml @@ -76,9 +76,9 @@ jobs: - name: Create and push manifests run: | sed -e "s/\${VERSION}/dev-slim/g" -e "s/\${DOCKERTAG}/dev-slim/g" ./manifest.yml > manifest_dev-slim.yaml - ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev-slim.yaml +# ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev-slim.yaml sed -e "s/\${VERSION}/dev-slim/g" -e "s/\${DOCKERTAG}/dev-slim/g" ./manifest_ghcr.yml > manifest_ghcr_dev-slim.yaml - ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev-slim.yaml +# ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev-slim.yaml - name: Delete untagged images from GitHub packages uses: actions/github-script@v3 From f906b49543b96e956609c2964f3836380873ca22 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 21:24:14 +0200 Subject: [PATCH 26/37] actions testing --- .github/workflows/build-image-dev-slim.yml | 1 - .../{docker_build_dev_image.yml => build-image-dev.yml} | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) rename .github/workflows/{docker_build_dev_image.yml => build-image-dev.yml} (99%) diff --git a/.github/workflows/build-image-dev-slim.yml b/.github/workflows/build-image-dev-slim.yml index 8600862..bf0dfbd 100644 --- a/.github/workflows/build-image-dev-slim.yml +++ b/.github/workflows/build-image-dev-slim.yml @@ -1,5 +1,4 @@ # Github action to build Docker image from dev branch (tag: dev) - name: Build slim image from dev on: diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/build-image-dev.yml similarity index 99% rename from .github/workflows/docker_build_dev_image.yml rename to .github/workflows/build-image-dev.yml index 0ba462e..1ad9425 100644 --- a/.github/workflows/docker_build_dev_image.yml +++ b/.github/workflows/build-image-dev.yml @@ -1,6 +1,5 @@ # Github action to build Docker image from dev branch (tag: dev) - -name: Build Docker image from dev +name: Build image from dev on: workflow_dispatch: From bedf8f9eca1e44d5700deb1200929580fc2f591f Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 21:26:55 +0200 Subject: [PATCH 27/37] testing --- .github/workflows/build-image-dev-slim.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-image-dev-slim.yml b/.github/workflows/build-image-dev-slim.yml index bf0dfbd..aec9e27 100644 --- a/.github/workflows/build-image-dev-slim.yml +++ b/.github/workflows/build-image-dev-slim.yml @@ -75,9 +75,9 @@ jobs: - name: Create and push manifests run: | sed -e "s/\${VERSION}/dev-slim/g" -e "s/\${DOCKERTAG}/dev-slim/g" ./manifest.yml > manifest_dev-slim.yaml -# ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev-slim.yaml + #./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev-slim.yaml sed -e "s/\${VERSION}/dev-slim/g" -e "s/\${DOCKERTAG}/dev-slim/g" ./manifest_ghcr.yml > manifest_ghcr_dev-slim.yaml -# ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev-slim.yaml + #./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev-slim.yaml - name: Delete untagged images from GitHub packages uses: actions/github-script@v3 From 6734e3f5e1fa7089568aa84b05b8a46a5f119173 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 21:50:38 +0200 Subject: [PATCH 28/37] testing --- slim/Dockerfile-slim-amd64 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slim/Dockerfile-slim-amd64 b/slim/Dockerfile-slim-amd64 index 560cc20..2aa4bfa 100644 --- a/slim/Dockerfile-slim-amd64 +++ b/slim/Dockerfile-slim-amd64 @@ -35,10 +35,10 @@ RUN mkdir -p /opt/scripts/ \ && chmod 777 /opt/scripts/ \ && chmod 777 /opt/userscripts/ WORKDIR /opt/scripts/ -COPY scripts/*.sh *.sh +COPY scripts/* ./ RUN chmod +x *.sh WORKDIR /opt/userscripts/ -COPY scripts/*.sh *.sh +COPY scripts/* ./ RUN chmod +x *.sh # Install ioBroker From d904c7d9dd715c32c124548b0dd9cdc99994226e Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 28 Aug 2021 23:45:14 +0200 Subject: [PATCH 29/37] renaming/restructuring --- ...ev-slim.yml => build-debian-image-dev.yml} | 28 +++++++++---------- .../Dockerfile-amd64 | 6 ++-- {slim => debian}/scripts/healthcheck.sh | 0 {slim => debian}/scripts/iobroker_startup.sh | 0 {slim => debian}/scripts/maintenance.sh | 0 {slim => debian}/scripts/setup_avahi.sh | 0 {slim => debian}/scripts/setup_packages.sh | 0 {slim => debian}/scripts/setup_zwave.sh | 0 .../userscript_everystart_example.sh | 0 .../userscript_firststart_example.sh | 0 10 files changed, 16 insertions(+), 18 deletions(-) rename .github/workflows/{build-image-dev-slim.yml => build-debian-image-dev.yml} (76%) rename slim/Dockerfile-slim-amd64 => debian/Dockerfile-amd64 (97%) rename {slim => debian}/scripts/healthcheck.sh (100%) rename {slim => debian}/scripts/iobroker_startup.sh (100%) rename {slim => debian}/scripts/maintenance.sh (100%) rename {slim => debian}/scripts/setup_avahi.sh (100%) rename {slim => debian}/scripts/setup_packages.sh (100%) rename {slim => debian}/scripts/setup_zwave.sh (100%) rename {slim => debian}/userscripts/userscript_everystart_example.sh (100%) rename {slim => debian}/userscripts/userscript_firststart_example.sh (100%) diff --git a/.github/workflows/build-image-dev-slim.yml b/.github/workflows/build-debian-image-dev.yml similarity index 76% rename from .github/workflows/build-image-dev-slim.yml rename to .github/workflows/build-debian-image-dev.yml index aec9e27..d86f6f9 100644 --- a/.github/workflows/build-image-dev-slim.yml +++ b/.github/workflows/build-debian-image-dev.yml @@ -1,5 +1,5 @@ # Github action to build Docker image from dev branch (tag: dev) -name: Build slim image from dev +name: Build debian based image from dev on: workflow_dispatch: @@ -8,7 +8,7 @@ on: - dev jobs: - bulid-dev-slim: + bulid-dev: runs-on: ubuntu-latest steps: - name: Checkout repo (dev) @@ -30,11 +30,11 @@ jobs: echo "This is the Buildnumber/Timestamp: $DATI" echo "dati=$DATI" >> $GITHUB_ENV # startup script - sed -e "s/\${VERSION}/$VERSION-slim-dev/" -e "s/\${BUILD}/$DATI/" ./slim/scripts/iobroker_startup.sh > ./slim/scripts/iobroker_startup.tmp - mv -f ./slim/scripts/iobroker_startup.tmp ./slim/scripts/iobroker_startup.sh + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./debian/scripts/iobroker_startup.sh > ./debian/scripts/iobroker_startup.tmp + mv -f ./debian/scripts/iobroker_startup.tmp ./debian/scripts/iobroker_startup.sh # amd64 - sed -e "s/\${VERSION}/$VERSION-slim-dev/" -e "s/\${DATI}/$DATI/" ./slim/Dockerfile-slim-amd64 > ./slim/Dockerfile-slim-amd64.tmp - mv -f ./slim/Dockerfile-slim-amd64.tmp ./slim/Dockerfile-slim-amd64 + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./debian/Dockerfile-amd64 > ./debian/Dockerfile-amd64.tmp + mv -f ./debian/Dockerfile-amd64.tmp ./debian/Dockerfile-amd64 - name: Set up manifest tool run: | @@ -64,20 +64,20 @@ jobs: - name: Build Docker image (slim-amd64) uses: docker/build-push-action@v2.6.1 with: - context: ./slim - file: ./slim/Dockerfile-slim-amd64 + context: ./debian + file: ./debian/Dockerfile-amd64 push: true platforms: linux/amd64 tags: | - buanet/iobroker:dev-slim-amd64, - ghcr.io/buanet/iobroker:dev-slim-amd64 + buanet/iobroker:dev-amd64, + ghcr.io/buanet/iobroker:dev-amd64 - name: Create and push manifests run: | - sed -e "s/\${VERSION}/dev-slim/g" -e "s/\${DOCKERTAG}/dev-slim/g" ./manifest.yml > manifest_dev-slim.yaml - #./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev-slim.yaml - sed -e "s/\${VERSION}/dev-slim/g" -e "s/\${DOCKERTAG}/dev-slim/g" ./manifest_ghcr.yml > manifest_ghcr_dev-slim.yaml - #./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev-slim.yaml + sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest.yml > manifest_dev.yaml + #./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev.yaml + sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest_ghcr.yml > manifest_ghcr_dev.yaml + #./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev.yaml - name: Delete untagged images from GitHub packages uses: actions/github-script@v3 diff --git a/slim/Dockerfile-slim-amd64 b/debian/Dockerfile-amd64 similarity index 97% rename from slim/Dockerfile-slim-amd64 rename to debian/Dockerfile-amd64 index 2aa4bfa..a05be5e 100644 --- a/slim/Dockerfile-slim-amd64 +++ b/debian/Dockerfile-amd64 @@ -15,8 +15,10 @@ RUN apt-get update && apt-get install -y \ gosu \ jq \ locales \ + procps \ sudo \ udev \ + wget \ && rm -rf /var/lib/apt/lists/* # Install node @@ -51,10 +53,6 @@ RUN apt-get update \ && echo $(hostname) > /opt/.firstrun \ && rm -rf /var/lib/apt/lists/* -# Install node-gyp -# WORKDIR /opt/iobroker/ -# RUN npm install -g node-gyp - # Backup initial ioBroker and userscript folder RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \ && tar -cf /opt/initial_userscripts.tar /opt/userscripts diff --git a/slim/scripts/healthcheck.sh b/debian/scripts/healthcheck.sh similarity index 100% rename from slim/scripts/healthcheck.sh rename to debian/scripts/healthcheck.sh diff --git a/slim/scripts/iobroker_startup.sh b/debian/scripts/iobroker_startup.sh similarity index 100% rename from slim/scripts/iobroker_startup.sh rename to debian/scripts/iobroker_startup.sh diff --git a/slim/scripts/maintenance.sh b/debian/scripts/maintenance.sh similarity index 100% rename from slim/scripts/maintenance.sh rename to debian/scripts/maintenance.sh diff --git a/slim/scripts/setup_avahi.sh b/debian/scripts/setup_avahi.sh similarity index 100% rename from slim/scripts/setup_avahi.sh rename to debian/scripts/setup_avahi.sh diff --git a/slim/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh similarity index 100% rename from slim/scripts/setup_packages.sh rename to debian/scripts/setup_packages.sh diff --git a/slim/scripts/setup_zwave.sh b/debian/scripts/setup_zwave.sh similarity index 100% rename from slim/scripts/setup_zwave.sh rename to debian/scripts/setup_zwave.sh diff --git a/slim/userscripts/userscript_everystart_example.sh b/debian/userscripts/userscript_everystart_example.sh similarity index 100% rename from slim/userscripts/userscript_everystart_example.sh rename to debian/userscripts/userscript_everystart_example.sh diff --git a/slim/userscripts/userscript_firststart_example.sh b/debian/userscripts/userscript_firststart_example.sh similarity index 100% rename from slim/userscripts/userscript_firststart_example.sh rename to debian/userscripts/userscript_firststart_example.sh From a202d8da2e85775e84fb6904d91769eda4f5a6cb Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 29 Aug 2021 00:23:31 +0200 Subject: [PATCH 30/37] testing multiarch --- .github/workflows/build-debian-image-dev.yml | 32 ++++++-- debian/Dockerfile-arm32v7 | 83 ++++++++++++++++++++ debian/Dockerfile-arm64v8 | 83 ++++++++++++++++++++ 3 files changed, 193 insertions(+), 5 deletions(-) create mode 100644 debian/Dockerfile-arm32v7 create mode 100644 debian/Dockerfile-arm64v8 diff --git a/.github/workflows/build-debian-image-dev.yml b/.github/workflows/build-debian-image-dev.yml index d86f6f9..319abab 100644 --- a/.github/workflows/build-debian-image-dev.yml +++ b/.github/workflows/build-debian-image-dev.yml @@ -1,5 +1,5 @@ # Github action to build Docker image from dev branch (tag: dev) -name: Build debian based image from dev +name: Build debian based image (dev) on: workflow_dispatch: @@ -8,7 +8,7 @@ on: - dev jobs: - bulid-dev: + bulid-dev-image: runs-on: ubuntu-latest steps: - name: Checkout repo (dev) @@ -61,7 +61,7 @@ jobs: username: ${{ secrets.PACKAGES_USER }} password: ${{ secrets.PACKAGES_PASS }} - - name: Build Docker image (slim-amd64) + - name: Build Docker image (amd64) uses: docker/build-push-action@v2.6.1 with: context: ./debian @@ -72,12 +72,34 @@ jobs: buanet/iobroker:dev-amd64, ghcr.io/buanet/iobroker:dev-amd64 + - name: Build Docker image (arm32v7) + uses: docker/build-push-action@v2.6.1 + with: + context: ./debian + file: ./debian/Dockerfile-arm32v7 + push: true + platforms: linux/arm/v7 + tags: | + buanet/iobroker:dev-arm32v7, + ghcr.io/buanet/iobroker:dev-arm32v7 + + - name: Build Docker image (arm64v8) + uses: docker/build-push-action@v2.6.1 + with: + context: ./debian + file: ./debian/Dockerfile-arm84v8 + push: true + platforms: linux/arm64/v8 + tags: | + buanet/iobroker:dev-arm64v8, + ghcr.io/buanet/iobroker:dev-arm64v8 + - name: Create and push manifests run: | sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest.yml > manifest_dev.yaml - #./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev.yaml sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest_ghcr.yml > manifest_ghcr_dev.yaml - #./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev.yaml - name: Delete untagged images from GitHub packages uses: actions/github-script@v3 diff --git a/debian/Dockerfile-arm32v7 b/debian/Dockerfile-arm32v7 new file mode 100644 index 0000000..a05be5e --- /dev/null +++ b/debian/Dockerfile-arm32v7 @@ -0,0 +1,83 @@ +FROM debian:bullseye-slim + +LABEL org.opencontainers.image.title="ioBroker Docker Image" \ + org.opencontainers.image.description="Docker image for ioBroker smarthome software" \ + org.opencontainers.image.authors="info@buanet.de" \ + org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.created="${DATI}" + +ENV DEBIAN_FRONTEND noninteractive + +# Install prerequisites +RUN apt-get update && apt-get install -y \ + curl \ + gosu \ + jq \ + locales \ + procps \ + sudo \ + udev \ + wget \ + && rm -rf /var/lib/apt/lists/* + +# Install node +RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ + && apt-get update && apt-get install -y nodejs \ + && rm -rf /var/lib/apt/lists/* + +# Generating locales +RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ + && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ + && locale-gen + +# Create scripts directorys and copy scripts +RUN mkdir -p /opt/scripts/ \ + && mkdir -p /opt/userscripts/ \ + && chmod 777 /opt/scripts/ \ + && chmod 777 /opt/userscripts/ +WORKDIR /opt/scripts/ +COPY scripts/* ./ +RUN chmod +x *.sh +WORKDIR /opt/userscripts/ +COPY scripts/* ./ +RUN chmod +x *.sh + +# Install ioBroker +WORKDIR / +RUN apt-get update \ + && curl -sL https://iobroker.net/install.sh | bash - \ + && mkdir -p /opt/scripts/.docker_config/ \ + && echo $(hostname) > /opt/scripts/.docker_config/.install_host \ + && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ + && echo $(hostname) > /opt/.firstrun \ + && rm -rf /var/lib/apt/lists/* + +# Backup initial ioBroker and userscript folder +RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \ + && tar -cf /opt/initial_userscripts.tar /opt/userscripts + +# Setting up iobroker-user (shell and home directory) +RUN chsh -s /bin/bash 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" \ + SETGID=1000 \ + SETUID=1000 \ + TZ="Europe/Berlin" + +# Expose default admin ui port +EXPOSE 8081 + +# Healthcheck +HEALTHCHECK --interval=15s --timeout=5s --retries=5 \ + CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"] + +# Run startup-script +ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"] diff --git a/debian/Dockerfile-arm64v8 b/debian/Dockerfile-arm64v8 new file mode 100644 index 0000000..a05be5e --- /dev/null +++ b/debian/Dockerfile-arm64v8 @@ -0,0 +1,83 @@ +FROM debian:bullseye-slim + +LABEL org.opencontainers.image.title="ioBroker Docker Image" \ + org.opencontainers.image.description="Docker image for ioBroker smarthome software" \ + org.opencontainers.image.authors="info@buanet.de" \ + org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.created="${DATI}" + +ENV DEBIAN_FRONTEND noninteractive + +# Install prerequisites +RUN apt-get update && apt-get install -y \ + curl \ + gosu \ + jq \ + locales \ + procps \ + sudo \ + udev \ + wget \ + && rm -rf /var/lib/apt/lists/* + +# Install node +RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ + && apt-get update && apt-get install -y nodejs \ + && rm -rf /var/lib/apt/lists/* + +# Generating locales +RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ + && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ + && locale-gen + +# Create scripts directorys and copy scripts +RUN mkdir -p /opt/scripts/ \ + && mkdir -p /opt/userscripts/ \ + && chmod 777 /opt/scripts/ \ + && chmod 777 /opt/userscripts/ +WORKDIR /opt/scripts/ +COPY scripts/* ./ +RUN chmod +x *.sh +WORKDIR /opt/userscripts/ +COPY scripts/* ./ +RUN chmod +x *.sh + +# Install ioBroker +WORKDIR / +RUN apt-get update \ + && curl -sL https://iobroker.net/install.sh | bash - \ + && mkdir -p /opt/scripts/.docker_config/ \ + && echo $(hostname) > /opt/scripts/.docker_config/.install_host \ + && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ + && echo $(hostname) > /opt/.firstrun \ + && rm -rf /var/lib/apt/lists/* + +# Backup initial ioBroker and userscript folder +RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \ + && tar -cf /opt/initial_userscripts.tar /opt/userscripts + +# Setting up iobroker-user (shell and home directory) +RUN chsh -s /bin/bash 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" \ + SETGID=1000 \ + SETUID=1000 \ + TZ="Europe/Berlin" + +# Expose default admin ui port +EXPOSE 8081 + +# Healthcheck +HEALTHCHECK --interval=15s --timeout=5s --retries=5 \ + CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"] + +# Run startup-script +ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"] From b16e5a41aa577fc962c00c739ccd130eaf937d11 Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 29 Aug 2021 00:43:27 +0200 Subject: [PATCH 31/37] fix typo --- .github/workflows/build-debian-image-dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-debian-image-dev.yml b/.github/workflows/build-debian-image-dev.yml index 319abab..fecae1f 100644 --- a/.github/workflows/build-debian-image-dev.yml +++ b/.github/workflows/build-debian-image-dev.yml @@ -87,7 +87,7 @@ jobs: uses: docker/build-push-action@v2.6.1 with: context: ./debian - file: ./debian/Dockerfile-arm84v8 + file: ./debian/Dockerfile-arm64v8 push: true platforms: linux/arm64/v8 tags: | From 904058c0f598c78934b44821f694095187bb1f89 Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 30 Aug 2021 15:57:12 +0200 Subject: [PATCH 32/37] testing --- amd64/scripts/maintenance.sh | 112 ++++++++++++++++++++++++++--------- 1 file changed, 83 insertions(+), 29 deletions(-) diff --git a/amd64/scripts/maintenance.sh b/amd64/scripts/maintenance.sh index bacd49b..c01919a 100644 --- a/amd64/scripts/maintenance.sh +++ b/amd64/scripts/maintenance.sh @@ -1,6 +1,17 @@ #!/bin/bash -# function to display help text +############################ +##### default settings ##### +############################ + +autoconfirm=no # yould be set to true by commandline option + + +#################################### +##### declaration of functions ##### +#################################### + +# display help text display_help() { echo "This script is build to manage your ioBroker container!" echo "Usage: maintenance [ COMMAND ] [ OPTIONS ]" @@ -21,32 +32,41 @@ display_help() { exit 0 } -while getopts h opt -do - case $opt in - h | --help) - display_help ;; - esac -exit 0; -done - -if [ "$1" == "status" ] -then +# checking maintenance mode status +check_status() { if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ] then - echo 'Maintenance mode is ON.' - exit 0 + echo 'Maintenance mode is turned ON.' elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] then - echo 'Maintenance mode is OFF.' - exit 0 + echo 'Maintenance mode is turned OFF.' fi -elif [ "$1" == "on" ] -then - echo 'You are now going to stop ioBroker and activating maintenance mode for this container.' - read -p 'Do you want to continue [yes/no]? ' A - if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] +} + +# turn maintenance mode ON +switch_on() { + if [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] && [ "$autoconfirm" == "no" ] # maintenance mode OFF / autoconfirm = no then + echo 'You are now going to stop ioBroker and activating maintenance mode for this container.' + read -p 'Do you want to continue [yes/no]? ' A + if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] + then + echo 'Activating maintenance mode...' + echo "maintenance" > /opt/scripts/.docker_config/.healthcheck + sleep 1 + echo 'Done.' + echo 'Stopping ioBroker...' + pkill -u iobroker + sleep 1 + echo 'Done.' + exit 0 + else + exit 0 + fi + elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] && [ "$autoconfirm" == "yes" ] # maintenance mode OFF / autoconfirm = yes + then + echo 'You are now going to stop ioBroker and activating maintenance mode for this container.' + echo 'This command was already confirmed by -y or --yes option.' echo 'Activating maintenance mode...' echo "maintenance" > /opt/scripts/.docker_config/.healthcheck sleep 1 @@ -57,10 +77,12 @@ then echo 'Done.' exit 0 else - exit 0 + echo 'Maintenance mode is already turned ON.' fi -elif [ "$1" == "off" ] -then +} + +# turn maintenance mode OFF +switch_off() { echo 'You are now going to deactivate maintenance mode for this container.' echo 'Depending on the restart policy, your container will be stopped/ restarted immediately.' read -p 'Do you want to continue [yes/no]? ' A @@ -73,8 +95,10 @@ then else exit 0 fi -elif [ "$1" == "upgrade" ] -then +} + +# upgrade js-controller +upgrade() { echo 'You are now going to upgrade your js-controller.' echo 'As this will change data in /opt/iobroker, make sure you have a backup!' echo 'During the upgrade process the container will automatically switch into maintenance mode and stop ioBroker.' @@ -103,8 +127,38 @@ then else exit 0 fi -else - echo 'Invalid command. Please try again.' -fi +} + +############################## +##### parsing parameters ##### +############################## +while :; do + case $1 in + -h|--help) + display_help # calling function to display help text + exit + ;; + -y|--yes) + autoconfirm=yes # answers prompts with "yes" + ;; + status) + check_status # calling function to check maintenance mode status + ;; + on|-on) + switch_on # calling function to switch maintenance mode on + exit + ;; + --) # End of all options. + shift + break + ;; + -?*) + printf 'WARN: Unknown option (ignored): %s\n' "$1" + ;; + *) # Default case: No more options, so break out of the loop. + break + esac + shift +done exit 0 From 97ca3aa72d8e3504c9450480e512614ea300b219 Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 30 Aug 2021 19:20:17 +0200 Subject: [PATCH 33/37] testing --- .github/workflows/build-debian-image-dev.yml | 6 +- CHANGELOG.md | 4 +- amd64/scripts/maintenance.sh | 36 +++++- debian/Dockerfile-arm64v8 | 83 ------------- .../{Dockerfile-amd64 => node12/Dockerfile} | 0 .../{Dockerfile-arm32v7 => node14/Dockerfile} | 2 +- debian/scripts/maintenance.sh | 113 +++++++++++++----- 7 files changed, 124 insertions(+), 120 deletions(-) delete mode 100644 debian/Dockerfile-arm64v8 rename debian/{Dockerfile-amd64 => node12/Dockerfile} (100%) rename debian/{Dockerfile-arm32v7 => node14/Dockerfile} (97%) diff --git a/.github/workflows/build-debian-image-dev.yml b/.github/workflows/build-debian-image-dev.yml index fecae1f..c7fa60d 100644 --- a/.github/workflows/build-debian-image-dev.yml +++ b/.github/workflows/build-debian-image-dev.yml @@ -65,7 +65,7 @@ jobs: uses: docker/build-push-action@v2.6.1 with: context: ./debian - file: ./debian/Dockerfile-amd64 + file: ./debian/node12/Dockerfile push: true platforms: linux/amd64 tags: | @@ -76,7 +76,7 @@ jobs: uses: docker/build-push-action@v2.6.1 with: context: ./debian - file: ./debian/Dockerfile-arm32v7 + file: ./debian/node12/Dockerfile push: true platforms: linux/arm/v7 tags: | @@ -87,7 +87,7 @@ jobs: uses: docker/build-push-action@v2.6.1 with: context: ./debian - file: ./debian/Dockerfile-arm64v8 + file: ./debian/node12/Dockerfile push: true platforms: linux/arm64/v8 tags: | diff --git a/CHANGELOG.md b/CHANGELOG.md index a9c1016..83a57e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,13 @@ ## Changelog ### * v5.2.0-beta2 (2021-08-28) +* redesign maintenance script +* switching amd64 base image to debian bullseye slim * optimizing log output * adding labels in OCI standard format * adding packages update on first start * adding file for docker detection by ioBroker adapters -* adding best practice for states db migation +* adding best practice for states db migation in readme * removing couchdb option for states db (no longer supported) * v5.2.0-beta1 (2021-05-04) * added upgrade parameter to maintenance script diff --git a/amd64/scripts/maintenance.sh b/amd64/scripts/maintenance.sh index c01919a..910c6b4 100644 --- a/amd64/scripts/maintenance.sh +++ b/amd64/scripts/maintenance.sh @@ -129,9 +129,39 @@ upgrade() { fi } -############################## -##### parsing parameters ##### -############################## +######################################## +##### parsing commands and options ##### +######################################## + +for i in "$@"; do + case $i in + help|-h|--help) + display_help # calling function to display help text + exit + ;; + status) + check_status # calling function to check maintenance mode status + ;; + -y|--yes) + autoconfirm=yes # answers prompts with "yes" + ;; + on|-on) + switch_on # calling function to switch maintenance mode on + exit + ;; + -a=*|--argument=*) # dummy exaple for parsing option with value + ARGUMENT="${i#*=}" + shift + ;; + -?*) + printf 'WARN: Unknown option (ignored): %s\n' "$1" + ;; + *) # Default case: No more options, so break out of the loop. + break + ;; + esac +done + while :; do case $1 in -h|--help) diff --git a/debian/Dockerfile-arm64v8 b/debian/Dockerfile-arm64v8 deleted file mode 100644 index a05be5e..0000000 --- a/debian/Dockerfile-arm64v8 +++ /dev/null @@ -1,83 +0,0 @@ -FROM debian:bullseye-slim - -LABEL org.opencontainers.image.title="ioBroker Docker Image" \ - org.opencontainers.image.description="Docker image for ioBroker smarthome software" \ - org.opencontainers.image.authors="info@buanet.de" \ - org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ - org.opencontainers.image.version="${VERSION}" \ - org.opencontainers.image.created="${DATI}" - -ENV DEBIAN_FRONTEND noninteractive - -# Install prerequisites -RUN apt-get update && apt-get install -y \ - curl \ - gosu \ - jq \ - locales \ - procps \ - sudo \ - udev \ - wget \ - && rm -rf /var/lib/apt/lists/* - -# Install node -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ - && apt-get update && apt-get install -y nodejs \ - && rm -rf /var/lib/apt/lists/* - -# Generating locales -RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ - && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ - && locale-gen - -# Create scripts directorys and copy scripts -RUN mkdir -p /opt/scripts/ \ - && mkdir -p /opt/userscripts/ \ - && chmod 777 /opt/scripts/ \ - && chmod 777 /opt/userscripts/ -WORKDIR /opt/scripts/ -COPY scripts/* ./ -RUN chmod +x *.sh -WORKDIR /opt/userscripts/ -COPY scripts/* ./ -RUN chmod +x *.sh - -# Install ioBroker -WORKDIR / -RUN apt-get update \ - && curl -sL https://iobroker.net/install.sh | bash - \ - && mkdir -p /opt/scripts/.docker_config/ \ - && echo $(hostname) > /opt/scripts/.docker_config/.install_host \ - && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ - && echo $(hostname) > /opt/.firstrun \ - && rm -rf /var/lib/apt/lists/* - -# Backup initial ioBroker and userscript folder -RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \ - && tar -cf /opt/initial_userscripts.tar /opt/userscripts - -# Setting up iobroker-user (shell and home directory) -RUN chsh -s /bin/bash 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" \ - SETGID=1000 \ - SETUID=1000 \ - TZ="Europe/Berlin" - -# Expose default admin ui port -EXPOSE 8081 - -# Healthcheck -HEALTHCHECK --interval=15s --timeout=5s --retries=5 \ - CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"] - -# Run startup-script -ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"] diff --git a/debian/Dockerfile-amd64 b/debian/node12/Dockerfile similarity index 100% rename from debian/Dockerfile-amd64 rename to debian/node12/Dockerfile diff --git a/debian/Dockerfile-arm32v7 b/debian/node14/Dockerfile similarity index 97% rename from debian/Dockerfile-arm32v7 rename to debian/node14/Dockerfile index a05be5e..e3b629f 100644 --- a/debian/Dockerfile-arm32v7 +++ b/debian/node14/Dockerfile @@ -22,7 +22,7 @@ RUN apt-get update && apt-get install -y \ && rm -rf /var/lib/apt/lists/* # Install node -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ +RUN curl -sL https://deb.nodesource.com/setup_14.x | bash \ && apt-get update && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* diff --git a/debian/scripts/maintenance.sh b/debian/scripts/maintenance.sh index bacd49b..fbb29d0 100644 --- a/debian/scripts/maintenance.sh +++ b/debian/scripts/maintenance.sh @@ -1,6 +1,17 @@ #!/bin/bash -# function to display help text +############################ +##### default settings ##### +############################ + +autoconfirm=no # yould be set to true by commandline option + + +#################################### +##### declaration of functions ##### +#################################### + +# display help text display_help() { echo "This script is build to manage your ioBroker container!" echo "Usage: maintenance [ COMMAND ] [ OPTIONS ]" @@ -21,32 +32,41 @@ display_help() { exit 0 } -while getopts h opt -do - case $opt in - h | --help) - display_help ;; - esac -exit 0; -done - -if [ "$1" == "status" ] -then +# checking maintenance mode status +check_status() { if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ] then - echo 'Maintenance mode is ON.' - exit 0 + echo 'Maintenance mode is turned ON.' elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] then - echo 'Maintenance mode is OFF.' - exit 0 + echo 'Maintenance mode is turned OFF.' fi -elif [ "$1" == "on" ] -then - echo 'You are now going to stop ioBroker and activating maintenance mode for this container.' - read -p 'Do you want to continue [yes/no]? ' A - if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] +} + +# turn maintenance mode ON +switch_on() { + if [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] && [ "$autoconfirm" == "no" ] # maintenance mode OFF / autoconfirm = no then + echo 'You are now going to stop ioBroker and activating maintenance mode for this container.' + read -p 'Do you want to continue [yes/no]? ' A + if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] + then + echo 'Activating maintenance mode...' + echo "maintenance" > /opt/scripts/.docker_config/.healthcheck + sleep 1 + echo 'Done.' + echo 'Stopping ioBroker...' + pkill -u iobroker + sleep 1 + echo 'Done.' + exit 0 + else + exit 0 + fi + elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] && [ "$autoconfirm" == "yes" ] # maintenance mode OFF / autoconfirm = yes + then + echo 'You are now going to stop ioBroker and activating maintenance mode for this container.' + echo 'This command was already confirmed by -y or --yes option.' echo 'Activating maintenance mode...' echo "maintenance" > /opt/scripts/.docker_config/.healthcheck sleep 1 @@ -57,10 +77,12 @@ then echo 'Done.' exit 0 else - exit 0 + echo 'Maintenance mode is already turned ON.' fi -elif [ "$1" == "off" ] -then +} + +# turn maintenance mode OFF +switch_off() { echo 'You are now going to deactivate maintenance mode for this container.' echo 'Depending on the restart policy, your container will be stopped/ restarted immediately.' read -p 'Do you want to continue [yes/no]? ' A @@ -73,8 +95,10 @@ then else exit 0 fi -elif [ "$1" == "upgrade" ] -then +} + +# upgrade js-controller +upgrade() { echo 'You are now going to upgrade your js-controller.' echo 'As this will change data in /opt/iobroker, make sure you have a backup!' echo 'During the upgrade process the container will automatically switch into maintenance mode and stop ioBroker.' @@ -103,8 +127,39 @@ then else exit 0 fi -else - echo 'Invalid command. Please try again.' -fi +} + +############################## +##### parsing parameters ##### +############################## + +while :; do + case $1 in + -h|--help) + display_help # calling function to display help text + exit + ;; + -y|--yes) + autoconfirm=yes # answers prompts with "yes" + ;; + status) + check_status # calling function to check maintenance mode status + ;; + on|-on) + switch_on # calling function to switch maintenance mode on + exit + ;; + --) # End of all options. + shift + break + ;; + -?*) + printf 'WARN: Unknown option (ignored): %s\n' "$1" + ;; + *) # Default case: No more options, so break out of the loop. + break + esac + shift +done exit 0 From 43cc2774d0197eeee9c5d94e61721a6270174888 Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 30 Aug 2021 19:22:53 +0200 Subject: [PATCH 34/37] testing --- .github/workflows/build-debian-image-dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-debian-image-dev.yml b/.github/workflows/build-debian-image-dev.yml index c7fa60d..929bbaa 100644 --- a/.github/workflows/build-debian-image-dev.yml +++ b/.github/workflows/build-debian-image-dev.yml @@ -33,8 +33,8 @@ jobs: sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./debian/scripts/iobroker_startup.sh > ./debian/scripts/iobroker_startup.tmp mv -f ./debian/scripts/iobroker_startup.tmp ./debian/scripts/iobroker_startup.sh # amd64 - sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./debian/Dockerfile-amd64 > ./debian/Dockerfile-amd64.tmp - mv -f ./debian/Dockerfile-amd64.tmp ./debian/Dockerfile-amd64 + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./debian/node12/Dockerfile > ./debian/node12/Dockerfile.tmp + mv -f ./debian/node12/Dockerfile.tmp ./debian/node12/Dockerfile - name: Set up manifest tool run: | From cf4fb976968dd944bc14f1cfe47e9ae98e78517b Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 30 Aug 2021 21:54:13 +0200 Subject: [PATCH 35/37] testing --- ....yml => build-debian-image-dev-node14.yml} | 63 ++++++++----------- debian/scripts/maintenance.sh | 54 +++++++++++----- 2 files changed, 64 insertions(+), 53 deletions(-) rename .github/workflows/{build-image-dev.yml => build-debian-image-dev-node14.yml} (62%) diff --git a/.github/workflows/build-image-dev.yml b/.github/workflows/build-debian-image-dev-node14.yml similarity index 62% rename from .github/workflows/build-image-dev.yml rename to .github/workflows/build-debian-image-dev-node14.yml index 1ad9425..b0fa875 100644 --- a/.github/workflows/build-image-dev.yml +++ b/.github/workflows/build-debian-image-dev-node14.yml @@ -1,5 +1,5 @@ # Github action to build Docker image from dev branch (tag: dev) -name: Build image from dev +name: Build debian based image (dev-node14) on: workflow_dispatch: @@ -8,7 +8,7 @@ on: - dev jobs: - bulid_dev: + bulid-dev-image: runs-on: ubuntu-latest steps: - name: Checkout repo (dev) @@ -29,21 +29,12 @@ jobs: echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV echo "This is the Buildnumber/Timestamp: $DATI" echo "dati=$DATI" >> $GITHUB_ENV + # startup script + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./debian/scripts/iobroker_startup.sh > ./debian/scripts/iobroker_startup.tmp + mv -f ./debian/scripts/iobroker_startup.tmp ./debian/scripts/iobroker_startup.sh # amd64 - sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./amd64/scripts/iobroker_startup.sh > ./amd64/scripts/iobroker_startup.tmp - mv -f ./amd64/scripts/iobroker_startup.tmp ./amd64/scripts/iobroker_startup.sh - sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp - mv -f ./amd64/Dockerfile.tmp ./amd64/Dockerfile - # arm32v7 - sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./arm32v7/scripts/iobroker_startup.sh > ./arm32v7/scripts/iobroker_startup.tmp - mv -f ./arm32v7/scripts/iobroker_startup.tmp ./arm32v7/scripts/iobroker_startup.sh - sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp - mv -f ./arm32v7/Dockerfile.tmp ./arm32v7/Dockerfile - # arm64v8 - sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${BUILD}/$DATI/" ./arm64v8/scripts/iobroker_startup.sh > ./arm64v8/scripts/iobroker_startup.tmp - mv -f ./arm64v8/scripts/iobroker_startup.tmp ./arm64v8/scripts/iobroker_startup.sh - sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp - mv -f ./arm64v8/Dockerfile.tmp ./arm64v8/Dockerfile + sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" ./debian/node14/Dockerfile > ./debian/node14/Dockerfile.tmp + mv -f ./debian/node14/Dockerfile.tmp ./debian/node14/Dockerfile - name: Set up manifest tool run: | @@ -70,45 +61,45 @@ jobs: username: ${{ secrets.PACKAGES_USER }} password: ${{ secrets.PACKAGES_PASS }} - - name: Build Docker image (amd64) + - name: Build Docker image (node14-amd64) uses: docker/build-push-action@v2.6.1 with: - context: ./amd64 - file: ./amd64/Dockerfile + context: ./debian + file: ./debian/node14/Dockerfile push: true platforms: linux/amd64 tags: | - buanet/iobroker:dev-amd64, - ghcr.io/buanet/iobroker:dev-amd64 + buanet/iobroker:dev-node14-amd64, + ghcr.io/buanet/iobroker:dev-node14-amd64 - - name: Build Docker image (armv32v7) + - name: Build Docker image (node14-arm32v7) uses: docker/build-push-action@v2.6.1 with: - context: ./arm32v7 - file: ./arm32v7/Dockerfile + context: ./debian + file: ./debian/node14/Dockerfile push: true platforms: linux/arm/v7 tags: | - buanet/iobroker:dev-arm32v7, - ghcr.io/buanet/iobroker:dev-arm32v7 + buanet/iobroker:dev-node14-arm32v7, + ghcr.io/buanet/iobroker:dev-node14-arm32v7 - - name: Build Docker image (arm64v8) + - name: Build Docker image (node14-arm64v8) uses: docker/build-push-action@v2.6.1 with: - context: ./arm64v8 - file: ./arm64v8/Dockerfile + context: ./debian + file: ./debian/node14/Dockerfile push: true - platforms: linux/arm64 + platforms: linux/arm64/v8 tags: | - buanet/iobroker:dev-arm64v8, - ghcr.io/buanet/iobroker:dev-arm64v8 + buanet/iobroker:dev-node14-arm64v8, + ghcr.io/buanet/iobroker:dev-node14-arm64v8 - name: Create and push manifests run: | - sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest.yml > manifest_dev.yaml - ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev.yaml - sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest_ghcr.yml > manifest_ghcr_dev.yaml - ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev.yaml + sed -e "s/\${VERSION}/dev-node14/g" -e "s/\${DOCKERTAG}/dev-node14/g" ./manifest.yml > manifest_dev-node14.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev-node14.yaml + sed -e "s/\${VERSION}/dev-node14/g" -e "s/\${DOCKERTAG}/dev-node14/g" ./manifest_ghcr.yml > manifest_ghcr_dev-node14.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev-node14.yaml - name: Delete untagged images from GitHub packages uses: actions/github-script@v3 diff --git a/debian/scripts/maintenance.sh b/debian/scripts/maintenance.sh index fbb29d0..07b9f19 100644 --- a/debian/scripts/maintenance.sh +++ b/debian/scripts/maintenance.sh @@ -5,6 +5,7 @@ ############################ autoconfirm=no # yould be set to true by commandline option +switch=none #################################### @@ -14,8 +15,9 @@ autoconfirm=no # yould be set to true by commandline option # display help text display_help() { echo "This script is build to manage your ioBroker container!" - echo "Usage: maintenance [ COMMAND ] [ OPTIONS ]" - echo " maint [ COMMAND ] [ OPTIONS ]" + echo '' + echo "Usage: maintenance [ COMMAND ] [ OPTION ]" + echo " maint [ COMMAND ] [ OPTION ]" echo '' echo "COMMANDS" echo "------------------" @@ -23,11 +25,12 @@ display_help() { echo " on > switches mantenance mode ON" echo " off > switches mantenance mode OFF and shuts down/ restarts container" echo " upgrade > will put container to maintenance mode and upgrade iobroker" + echo " help > shows this help" echo '' echo "OPTIONS" echo "------------------" - echo " -h|--help > shows this help" echo " -y|--yes > confirms the used command without asking" + echo " -h|--help > shows this help" echo '' exit 0 } @@ -129,37 +132,54 @@ upgrade() { fi } -############################## -##### parsing parameters ##### -############################## +######################################## +##### parsing commands and options ##### +######################################## -while :; do - case $1 in - -h|--help) +# reading all arguments and putting them in reverse +reverse= +for i in "$@"; do + reverse="$i $reverse" +done + +# checking the arguments +for i in $reverse; do + case $i in + help|-h|--help) display_help # calling function to display help text exit ;; - -y|--yes) - autoconfirm=yes # answers prompts with "yes" - ;; status) check_status # calling function to check maintenance mode status ;; - on|-on) + on) switch_on # calling function to switch maintenance mode on - exit + ;; + off) + switch_off # calling function to switch maintenance mode off + ;; + upgrade) + upgrade # calling function to upgrade js-controller + ;; + -y|--yes) + autoconfirm=yes # setting autoconfrm option to "yes" + ;; + -a=*|--argument=*) # dummy exaple for parsing option with value + ARGUMENT="${i#*=}" + shift ;; --) # End of all options. shift break ;; - -?*) - printf 'WARN: Unknown option (ignored): %s\n' "$1" + -?*|?*) + echo 'WARN: Unknown parameter. Please try again or see help (-h|--help).' + break ;; *) # Default case: No more options, so break out of the loop. break + ;; esac - shift done exit 0 From 5d3d75292ccf8c9511567b89f4f266610c76b26c Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 30 Aug 2021 23:13:35 +0200 Subject: [PATCH 36/37] small changes --- .github/workflows/build-debian-image-dev.yml | 2 +- debian/scripts/iobroker_startup.sh | 106 +++++++++---------- debian/scripts/maintenance.sh | 39 +++++-- 3 files changed, 83 insertions(+), 64 deletions(-) diff --git a/.github/workflows/build-debian-image-dev.yml b/.github/workflows/build-debian-image-dev.yml index 929bbaa..a8dc75d 100644 --- a/.github/workflows/build-debian-image-dev.yml +++ b/.github/workflows/build-debian-image-dev.yml @@ -8,7 +8,7 @@ on: - dev jobs: - bulid-dev-image: + bulid-dev-node14-image: runs-on: ubuntu-latest steps: - name: Checkout repo (dev) diff --git a/debian/scripts/iobroker_startup.sh b/debian/scripts/iobroker_startup.sh index 2962c87..b6f6dc1 100644 --- a/debian/scripts/iobroker_startup.sh +++ b/debian/scripts/iobroker_startup.sh @@ -24,54 +24,54 @@ dati=`date '+%Y-%m-%d %H:%M:%S'` # Logging header echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})" -echo "$(printf -- '-%.0s' {1..60})" +echo "$(printf -- '-%.0s' {1..80})" +echo -n "$(printf -- '-%.0s' {1..25})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..25})" +echo "$(printf -- '-%.0s' {1..80})" echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Welcome to your ioBroker-container! -----" -echo "----- Startupscript is now running. -----" -echo "----- Please be patient! -----" -echo "$(printf -- '-%.0s' {1..60})" +echo "$(printf -- '-%.0s' {1..80})" +echo "----- Welcome to your ioBroker-container! -----" +echo "----- Startupscript is now running. -----" +echo "----- Please be patient! -----" +echo "$(printf -- '-%.0s' {1..80})" echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Debugging information -----" -echo "----- -----" -echo "----- System -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" arch: $(uname -m))" && echo " -----" -echo "----- -----" -echo "----- Docker-Image -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" image: ${VERSION})" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" build: ${BUILD})" && echo " -----" -echo "----- -----" -echo "----- Versions -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -v))" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----" -echo "----- -----" -echo "----- ENV -----" -if [ "$adminport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_ADMINPORT: $adminport)" && echo " -----"; fi -if [ "$avahi" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $avahi)" && echo " -----"; fi -if [ "$multihost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_MULTIHOST: $multihost)" && echo " -----"; fi -if [ "$objectsdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_HOST: $objectsdbhost)" && echo " -----"; fi -if [ "$objectsdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_PORT: $objectsdbport)" && echo " -----"; fi -if [ "$objectsdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_TYPE: $objectsdbtype)" && echo " -----"; fi -if [ "$packages" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $packages)" && echo " -----"; fi -if [ "$setgid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $setgid)" && echo " -----"; fi -if [ "$setuid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $setuid)" && echo " -----"; fi -if [ "$statesdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_HOST: $statesdbhost)" && echo " -----"; fi -if [ "$statesdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_PORT: $statesdbport)" && echo " -----"; fi -if [ "$statesdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_TYPE: $statesdbtype)" && echo " -----"; fi -if [ "$usbdevices" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $usbdevices)" && echo " -----"; fi -if [ "$zwave" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $zwave)" && echo " -----"; fi -echo "$(printf -- '-%.0s' {1..60})" +echo "$(printf -- '-%.0s' {1..80})" +echo "----- Debugging information -----" +echo "----- -----" +echo "----- System -----" +echo -n "----- " && echo -n "$(printf "%-20s %-28s" arch: $(uname -m))" && echo " -----" +echo "----- -----" +echo "----- Docker-Image -----" +echo -n "----- " && echo -n "$(printf "%-20s %-28s" image: ${VERSION})" && echo " -----" +echo -n "----- " && echo -n "$(printf "%-20s %-28s" build: ${BUILD})" && echo " -----" +echo "----- -----" +echo "----- Versions -----" +echo -n "----- " && echo -n "$(printf "%-20s %-28s" node: $(node -v))" && echo " -----" +echo -n "----- " && echo -n "$(printf "%-20s %-28s" npm: $(npm -v))" && echo " -----" +echo "----- -----" +echo "----- ENV -----" +if [ "$adminport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_ADMINPORT: $adminport)" && echo " -----"; fi +if [ "$avahi" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" AVAHI: $avahi)" && echo " -----"; fi +if [ "$multihost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_MULTIHOST: $multihost)" && echo " -----"; fi +if [ "$objectsdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_OBJECTSDB_HOST: $objectsdbhost)" && echo " -----"; fi +if [ "$objectsdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_OBJECTSDB_PORT: $objectsdbport)" && echo " -----"; fi +if [ "$objectsdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_OBJECTSDB_TYPE: $objectsdbtype)" && echo " -----"; fi +if [ "$packages" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" PACKAGES: $packages)" && echo " -----"; fi +if [ "$setgid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" SETGID: $setgid)" && echo " -----"; fi +if [ "$setuid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" SETUID: $setuid)" && echo " -----"; fi +if [ "$statesdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_STATESDB_HOST: $statesdbhost)" && echo " -----"; fi +if [ "$statesdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_STATESDB_PORT: $statesdbport)" && echo " -----"; fi +if [ "$statesdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_STATESDB_TYPE: $statesdbtype)" && echo " -----"; fi +if [ "$usbdevices" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" USBDEVICES: $usbdevices)" && echo " -----"; fi +if [ "$zwave" != "" ]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" ZWAVE: $zwave)" && echo " -----"; fi +echo "$(printf -- '-%.0s' {1..80})" echo ' ' ##### # STEP 1 - Preparing container ##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 1 of 5: Preparing container -----" -echo "$(printf -- '-%.0s' {1..60})" +echo "$(printf -- '-%.0s' {1..80})" +echo "----- Step 1 of 5: Preparing container -----" +echo "$(printf -- '-%.0s' {1..80})" echo ' ' # Adding ckeck file for easy docker detection by ioBroker @@ -122,9 +122,9 @@ cd /opt/iobroker ##### # Detecting ioBroker-Installation ##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 2 of 5: Detecting ioBroker installation -----" -echo "$(printf -- '-%.0s' {1..60})" +echo "$(printf -- '-%.0s' {1..80})" +echo "----- Step 2 of 5: Detecting ioBroker installation -----" +echo "$(printf -- '-%.0s' {1..80})" echo ' ' if [ `find /opt/iobroker -type f | wc -l` -lt 1 ] @@ -176,9 +176,9 @@ echo ' ' ##### # Checking ioBroker-Installation ##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 3 of 5: Checking ioBroker installation -----" -echo "$(printf -- '-%.0s' {1..60})" +echo "$(printf -- '-%.0s' {1..80})" +echo "----- Step 3 of 5: Checking ioBroker installation -----" +echo "$(printf -- '-%.0s' {1..80})" echo ' ' # (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts" @@ -218,9 +218,9 @@ fi ##### # Setting up prerequisites for some ioBroker-adapters ##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 4 of 5: Applying special settings -----" -echo "$(printf -- '-%.0s' {1..60})" +echo "$(printf -- '-%.0s' {1..80})" +echo "----- Step 4 of 5: Applying special settings -----" +echo "$(printf -- '-%.0s' {1..80})" echo ' ' echo "Some adapters have special requirements/ settings which can be activated by the use of environment variables." @@ -487,9 +487,9 @@ fi ##### # Starting ioBroker ##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 5 of 5: ioBroker startup -----" -echo "$(printf -- '-%.0s' {1..60})" +echo "$(printf -- '-%.0s' {1..80})" +echo "----- Step 5 of 5: ioBroker startup -----" +echo "$(printf -- '-%.0s' {1..80})" echo ' ' echo "Starting ioBroker..." echo ' ' diff --git a/debian/scripts/maintenance.sh b/debian/scripts/maintenance.sh index 07b9f19..6d384db 100644 --- a/debian/scripts/maintenance.sh +++ b/debian/scripts/maintenance.sh @@ -4,9 +4,7 @@ ##### default settings ##### ############################ -autoconfirm=no # yould be set to true by commandline option -switch=none - +autoconfirm=no # could be set to true by commandline option #################################### ##### declaration of functions ##### @@ -86,17 +84,33 @@ switch_on() { # turn maintenance mode OFF switch_off() { - echo 'You are now going to deactivate maintenance mode for this container.' - echo 'Depending on the restart policy, your container will be stopped/ restarted immediately.' - read -p 'Do you want to continue [yes/no]? ' A - if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] + if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ] && [ "$autoconfirm" == "no" ] # maintenance mode ON / autoconfirm = no then + echo 'You are now going to deactivate maintenance mode for this container.' + echo 'Depending on the restart policy, your container will be stopped/ restarted immediately.' + read -p 'Do you want to continue [yes/no]? ' A + if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] + then + echo 'Deactivating maintenance mode and forcing container to stop/ restart...' + echo "stopping" > /opt/scripts/.docker_config/.healthcheck + pkill -u root + echo 'Done.' + exit 0 + else + exit 0 + fi + elif [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ] && [ "$autoconfirm" == "yes" ] # maintenance mode ON / autoconfirm = yes + then + echo 'You are now going to deactivate maintenance mode for this container.' + echo 'Depending on the restart policy, your container will be stopped/ restarted immediately.' + echo 'This command was already confirmed by -y or --yes option.' echo 'Deactivating maintenance mode and forcing container to stop/ restart...' echo "stopping" > /opt/scripts/.docker_config/.healthcheck pkill -u root + echo 'Done.' exit 0 else - exit 0 + echo 'Maintenance mode is already turned OFF.' fi } @@ -147,22 +161,27 @@ for i in $reverse; do case $i in help|-h|--help) display_help # calling function to display help text - exit + break ;; status) check_status # calling function to check maintenance mode status + break ;; on) switch_on # calling function to switch maintenance mode on + break ;; off) switch_off # calling function to switch maintenance mode off + break ;; upgrade) upgrade # calling function to upgrade js-controller + break ;; -y|--yes) autoconfirm=yes # setting autoconfrm option to "yes" + shift ;; -a=*|--argument=*) # dummy exaple for parsing option with value ARGUMENT="${i#*=}" @@ -182,4 +201,4 @@ for i in $reverse; do esac done -exit 0 +exit 0 \ No newline at end of file From 718c21421044096f1dbf8a245cec32bdca7590f5 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 4 Sep 2021 09:38:35 +0200 Subject: [PATCH 37/37] preparing new beta version --- .VERSION | 2 +- .../build-debian-image-beta-node14.yml | 130 +++++ .github/workflows/build-debian-image-beta.yml | 130 +++++ .../build-debian-image-dev-node14.yml | 2 +- .github/workflows/build-debian-image-dev.yml | 2 +- CHANGELOG.md | 22 +- amd64/Dockerfile | 110 ---- amd64/manifest.yml | 7 - amd64/scripts/healthcheck.sh | 20 - amd64/scripts/iobroker_startup.sh | 517 ------------------ amd64/scripts/maintenance.sh | 194 ------- amd64/scripts/setup_avahi.sh | 35 -- amd64/scripts/setup_packages.sh | 22 - amd64/scripts/setup_zwave.sh | 19 - .../scripts/userscript_everystart_example.sh | 13 - .../scripts/userscript_firststart_example.sh | 12 - arm32v7/Dockerfile | 107 ---- arm32v7/manifest.yml | 8 - arm32v7/scripts/healthcheck.sh | 20 - arm32v7/scripts/iobroker_startup.sh | 507 ----------------- arm32v7/scripts/maintenance.sh | 50 -- arm32v7/scripts/setup_avahi.sh | 35 -- arm32v7/scripts/setup_packages.sh | 13 - arm32v7/scripts/setup_zwave.sh | 19 - .../scripts/userscript_everystart_example.sh | 13 - .../scripts/userscript_firststart_example.sh | 12 - arm64v8/Dockerfile | 108 ---- arm64v8/manifest.yml | 8 - arm64v8/scripts/healthcheck.sh | 20 - arm64v8/scripts/iobroker_startup.sh | 507 ----------------- arm64v8/scripts/maintenance.sh | 50 -- arm64v8/scripts/setup_avahi.sh | 35 -- arm64v8/scripts/setup_packages.sh | 13 - arm64v8/scripts/setup_zwave.sh | 19 - .../scripts/userscript_everystart_example.sh | 13 - .../scripts/userscript_firststart_example.sh | 12 - debian/node12/Dockerfile | 28 +- debian/node14/Dockerfile | 28 +- debian/scripts/iobroker_startup.sh | 48 +- 39 files changed, 330 insertions(+), 2580 deletions(-) create mode 100644 .github/workflows/build-debian-image-beta-node14.yml create mode 100644 .github/workflows/build-debian-image-beta.yml delete mode 100644 amd64/Dockerfile delete mode 100644 amd64/manifest.yml delete mode 100644 amd64/scripts/healthcheck.sh delete mode 100644 amd64/scripts/iobroker_startup.sh delete mode 100644 amd64/scripts/maintenance.sh delete mode 100644 amd64/scripts/setup_avahi.sh delete mode 100644 amd64/scripts/setup_packages.sh delete mode 100644 amd64/scripts/setup_zwave.sh delete mode 100644 amd64/scripts/userscript_everystart_example.sh delete mode 100644 amd64/scripts/userscript_firststart_example.sh delete mode 100644 arm32v7/Dockerfile delete mode 100644 arm32v7/manifest.yml delete mode 100644 arm32v7/scripts/healthcheck.sh delete mode 100644 arm32v7/scripts/iobroker_startup.sh delete mode 100644 arm32v7/scripts/maintenance.sh delete mode 100644 arm32v7/scripts/setup_avahi.sh delete mode 100644 arm32v7/scripts/setup_packages.sh delete mode 100644 arm32v7/scripts/setup_zwave.sh delete mode 100644 arm32v7/scripts/userscript_everystart_example.sh delete mode 100644 arm32v7/scripts/userscript_firststart_example.sh delete mode 100644 arm64v8/Dockerfile delete mode 100644 arm64v8/manifest.yml delete mode 100644 arm64v8/scripts/healthcheck.sh delete mode 100644 arm64v8/scripts/iobroker_startup.sh delete mode 100644 arm64v8/scripts/maintenance.sh delete mode 100644 arm64v8/scripts/setup_avahi.sh delete mode 100644 arm64v8/scripts/setup_packages.sh delete mode 100644 arm64v8/scripts/setup_zwave.sh delete mode 100644 arm64v8/scripts/userscript_everystart_example.sh delete mode 100644 arm64v8/scripts/userscript_firststart_example.sh diff --git a/.VERSION b/.VERSION index 8a82f2e..a9e5fdc 100644 --- a/.VERSION +++ b/.VERSION @@ -1 +1 @@ -v5.2.0-beta2 \ No newline at end of file +v5.2.0-beta3 \ No newline at end of file diff --git a/.github/workflows/build-debian-image-beta-node14.yml b/.github/workflows/build-debian-image-beta-node14.yml new file mode 100644 index 0000000..3224edf --- /dev/null +++ b/.github/workflows/build-debian-image-beta-node14.yml @@ -0,0 +1,130 @@ +# Github action to build Docker image from beta branch (tag: beta) +name: Build debian based image (beta-node14) + +on: + workflow_dispatch: + pull_request: + branches: + - beta + types: + - closed + schedule: + - cron: '42 3 * * 1' + +jobs: + bulid-beta-node14-image: + runs-on: ubuntu-latest + steps: + - name: Checkout repo (beta) + uses: actions/checkout@v2.3.4 + with: + repository: 'buanet/ioBroker.docker' + ref: 'beta' + + - name: Get and write version and date + id: version + run: | + VERSION="$(cat .VERSION)" + MAJORVERSION="$(cat .VERSION | cut -c 1-2 | sed -r 's#^(.{0})#\1latest-#')" + DATI="$(date --rfc-3339=seconds | sed 's/ /T/')" + echo "This is the Version: $VERSION" + echo "version=$VERSION" >> $GITHUB_ENV + echo "This is the Major Version: $MAJORVERSION" + echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV + echo "This is the Buildnumber/Timestamp: $DATI" + echo "dati=$DATI" >> $GITHUB_ENV + # startup script + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${BUILD}/$DATI/" ./debian/scripts/iobroker_startup.sh > ./debian/scripts/iobroker_startup.tmp + mv -f ./debian/scripts/iobroker_startup.tmp ./debian/scripts/iobroker_startup.sh + # amd64 + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./debian/node14/Dockerfile > ./debian/node14/Dockerfile.tmp + mv -f ./debian/node14/Dockerfile.tmp ./debian/node14/Dockerfile + + - name: Set up manifest tool + run: | + wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool + chmod +x manifest-tool + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1.2.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1.5.1 + + - name: Login to DockerHub + uses: docker/login-action@v1.10.0 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ secrets.PACKAGES_USER }} + password: ${{ secrets.PACKAGES_PASS }} + + - name: Build Docker image (node14-amd64) + uses: docker/build-push-action@v2.6.1 + with: + context: ./debian + file: ./debian/node14/Dockerfile + push: true + platforms: linux/amd64 + tags: | + buanet/iobroker:${{ env.version }}-node14-amd64, + ghcr.io/buanet/iobroker:${{ env.version }}-node14-amd64 + + - name: Build Docker image (node14-arm32v7) + uses: docker/build-push-action@v2.6.1 + with: + context: ./debian + file: ./debian/node14/Dockerfile + push: true + platforms: linux/arm/v7 + tags: | + buanet/iobroker:${{ env.version }}-node14-arm32v7, + ghcr.io/buanet/iobroker:${{ env.version }}-node14-arm32v7 + + - name: Build Docker image (node14-arm64v8) + uses: docker/build-push-action@v2.6.1 + with: + context: ./debian + file: ./debian/node14/Dockerfile + push: true + platforms: linux/arm64/v8 + tags: | + buanet/iobroker:${{ env.version }}-node14-arm64v8, + ghcr.io/buanet/iobroker:${{ env.version }}-node14-arm64v8 + + - name: Create and push manifests + run: | + sed -e "s/\${VERSION}/${{ env.version }}-node14/g" -e "s/\${DOCKERTAG}/beta-node14/g" ./manifest.yml > manifest_beta-node14.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_beta-node14.yaml + sed -e "s/\${VERSION}/${{ env.version }}-node14/g" -e "s/\${DOCKERTAG}/beta-node14/g" ./manifest_ghcr.yml > manifest_ghcr_beta-node14.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_beta-node14.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest.yml > manifest_version.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_version.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest_ghcr.yml > manifest_ghcr_version.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_version.yaml + + - name: Delete untagged images from GitHub packages + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.PACKAGES_PASS }} + script: | + const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", + { per_page: ${{ env.PER_PAGE }} + }); + for(version of response.data) { + if (version.metadata.container.tags.length == 0) { + console.log("delete " + version.id) + const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); + console.log("status " + deleteResponse.status) + } + } + env: + OWNER: buanet + PACKAGE_NAME: iobroker + PER_PAGE: 100 diff --git a/.github/workflows/build-debian-image-beta.yml b/.github/workflows/build-debian-image-beta.yml new file mode 100644 index 0000000..c4ec724 --- /dev/null +++ b/.github/workflows/build-debian-image-beta.yml @@ -0,0 +1,130 @@ +# Github action to build Docker image from beta branch (tag: beta) +name: Build debian based image (beta) + +on: + workflow_dispatch: + pull_request: + branches: + - beta + types: + - closed + schedule: + - cron: '42 3 * * 1' + +jobs: + bulid-beta-image: + runs-on: ubuntu-latest + steps: + - name: Checkout repo (beta) + uses: actions/checkout@v2.3.4 + with: + repository: 'buanet/ioBroker.docker' + ref: 'beta' + + - name: Get and write version and date + id: version + run: | + VERSION="$(cat .VERSION)" + MAJORVERSION="$(cat .VERSION | cut -c 1-2 | sed -r 's#^(.{0})#\1latest-#')" + DATI="$(date --rfc-3339=seconds | sed 's/ /T/')" + echo "This is the Version: $VERSION" + echo "version=$VERSION" >> $GITHUB_ENV + echo "This is the Major Version: $MAJORVERSION" + echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV + echo "This is the Buildnumber/Timestamp: $DATI" + echo "dati=$DATI" >> $GITHUB_ENV + # startup script + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${BUILD}/$DATI/" ./debian/scripts/iobroker_startup.sh > ./debian/scripts/iobroker_startup.tmp + mv -f ./debian/scripts/iobroker_startup.tmp ./debian/scripts/iobroker_startup.sh + # amd64 + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./debian/node12/Dockerfile > ./debian/node12/Dockerfile.tmp + mv -f ./debian/node12/Dockerfile.tmp ./debian/node12/Dockerfile + + - name: Set up manifest tool + run: | + wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool + chmod +x manifest-tool + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1.2.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1.5.1 + + - name: Login to DockerHub + uses: docker/login-action@v1.10.0 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ secrets.PACKAGES_USER }} + password: ${{ secrets.PACKAGES_PASS }} + + - name: Build Docker image (amd64) + uses: docker/build-push-action@v2.6.1 + with: + context: ./debian + file: ./debian/node12/Dockerfile + push: true + platforms: linux/amd64 + tags: | + buanet/iobroker:${{ env.version }}-amd64, + ghcr.io/buanet/iobroker:${{ env.version }}-amd64 + + - name: Build Docker image (arm32v7) + uses: docker/build-push-action@v2.6.1 + with: + context: ./debian + file: ./debian/node12/Dockerfile + push: true + platforms: linux/arm/v7 + tags: | + buanet/iobroker:${{ env.version }}-arm32v7, + ghcr.io/buanet/iobroker:${{ env.version }}-arm32v7 + + - name: Build Docker image (arm64v8) + uses: docker/build-push-action@v2.6.1 + with: + context: ./debian + file: ./debian/node12/Dockerfile + push: true + platforms: linux/arm64/v8 + tags: | + buanet/iobroker:${{ env.version }}-arm64v8, + ghcr.io/buanet/iobroker:${{ env.version }}-arm64v8 + + - name: Create and push manifests + run: | + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/beta/g" ./manifest.yml > manifest_beta.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_beta.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/beta/g" ./manifest_ghcr.yml > manifest_ghcr_beta.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_beta.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest.yml > manifest_version.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_version.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest_ghcr.yml > manifest_ghcr_version.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_version.yaml + + - name: Delete untagged images from GitHub packages + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.PACKAGES_PASS }} + script: | + const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", + { per_page: ${{ env.PER_PAGE }} + }); + for(version of response.data) { + if (version.metadata.container.tags.length == 0) { + console.log("delete " + version.id) + const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); + console.log("status " + deleteResponse.status) + } + } + env: + OWNER: buanet + PACKAGE_NAME: iobroker + PER_PAGE: 100 diff --git a/.github/workflows/build-debian-image-dev-node14.yml b/.github/workflows/build-debian-image-dev-node14.yml index b0fa875..0d6c0ac 100644 --- a/.github/workflows/build-debian-image-dev-node14.yml +++ b/.github/workflows/build-debian-image-dev-node14.yml @@ -8,7 +8,7 @@ on: - dev jobs: - bulid-dev-image: + bulid-dev-node14-image: runs-on: ubuntu-latest steps: - name: Checkout repo (dev) diff --git a/.github/workflows/build-debian-image-dev.yml b/.github/workflows/build-debian-image-dev.yml index a8dc75d..929bbaa 100644 --- a/.github/workflows/build-debian-image-dev.yml +++ b/.github/workflows/build-debian-image-dev.yml @@ -8,7 +8,7 @@ on: - dev jobs: - bulid-dev-node14-image: + bulid-dev-image: runs-on: ubuntu-latest steps: - name: Checkout repo (dev) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83a57e7..634ddfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,18 @@ ## Changelog -### * v5.2.0-beta2 (2021-08-28) -* redesign maintenance script -* switching amd64 base image to debian bullseye slim -* optimizing log output -* adding labels in OCI standard format -* adding packages update on first start -* adding file for docker detection by ioBroker adapters -* adding best practice for states db migation in readme -* removing couchdb option for states db (no longer supported) +### v5.2.0-beta3 (2021-09-04) +* reducing layers in dockerfile +* making hostname check mandatory for startup +* optimize startup log +* v5.2.0-beta2 (2021-08-28) + * redesign maintenance script + * switching amd64 base image to debian bullseye slim + * optimizing log output + * adding labels in OCI standard format + * adding packages update on first start + * adding file for docker detection by ioBroker adapters + * adding best practice for states db migation in readme + * removing couchdb option for states db (no longer supported) * v5.2.0-beta1 (2021-05-04) * added upgrade parameter to maintenance script * added expose for default admin ui port (#172) diff --git a/amd64/Dockerfile b/amd64/Dockerfile deleted file mode 100644 index fc49f7e..0000000 --- a/amd64/Dockerfile +++ /dev/null @@ -1,110 +0,0 @@ -FROM amd64/debian:buster - -LABEL org.opencontainers.image.title="ioBroker Docker Image" \ - org.opencontainers.image.description="Docker image for ioBroker smarthome software" \ - org.opencontainers.image.authors="info@buanet.de" \ - org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ - org.opencontainers.image.version="${VERSION}" \ - org.opencontainers.image.created="${DATI}" - -ENV DEBIAN_FRONTEND noninteractive - -# Install prerequisites (as listed in iobroker installer.sh) -RUN apt-get update && apt-get install -y \ - acl \ - apt-utils \ - build-essential \ - curl \ - git \ - gnupg2 \ - gosu \ - jq \ - libavahi-compat-libdnssd-dev \ - libcap2-bin \ - libpam0g-dev \ - libudev-dev \ - locales \ - pkg-config \ - procps \ - python \ - python-dev \ - sudo \ - udev \ - unzip \ - wget \ - && rm -rf /var/lib/apt/lists/* - -# Install node -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ - && apt-get update && apt-get install -y nodejs \ - && rm -rf /var/lib/apt/lists/* - -# Generating locales -RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ - && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ - && locale-gen - -# Create scripts directorys and copy scripts -RUN mkdir -p /opt/scripts/ \ - && mkdir -p /opt/userscripts/ \ - && chmod 777 /opt/scripts/ \ - && chmod 777 /opt/userscripts/ -WORKDIR /opt/scripts/ -COPY scripts/iobroker_startup.sh iobroker_startup.sh -COPY scripts/setup_avahi.sh setup_avahi.sh -COPY scripts/setup_packages.sh setup_packages.sh -COPY scripts/setup_zwave.sh setup_zwave.sh -COPY scripts/healthcheck.sh healthcheck.sh -COPY scripts/maintenance.sh maintenance.sh -RUN chmod +x iobroker_startup.sh \ - && chmod +x setup_avahi.sh \ - && chmod +x setup_packages.sh \ - && chmod +x setup_zwave.sh \ - && chmod +x healthcheck.sh \ - && chmod +x maintenance.sh -WORKDIR /opt/userscripts/ -COPY scripts/userscript_firststart_example.sh userscript_firststart_example.sh -COPY scripts/userscript_everystart_example.sh userscript_everystart_example.sh - -# Install ioBroker -WORKDIR / -RUN apt-get update \ - && curl -sL https://iobroker.net/install.sh | bash - \ - && mkdir -p /opt/scripts/.docker_config/ \ - && echo $(hostname) > /opt/scripts/.docker_config/.install_host \ - && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ - && echo $(hostname) > /opt/.firstrun \ - && rm -rf /var/lib/apt/lists/* - -# Install node-gyp -WORKDIR /opt/iobroker/ -RUN npm install -g node-gyp - -# Backup initial ioBroker and userscript folder -RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \ - && tar -cf /opt/initial_userscripts.tar /opt/userscripts - -# Setting up iobroker-user (shell and home directory) -RUN chsh -s /bin/bash 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" \ - SETGID=1000 \ - SETUID=1000 \ - TZ="Europe/Berlin" - -# Expose default admin ui port -EXPOSE 8081 - -# Healthcheck -HEALTHCHECK --interval=15s --timeout=5s --retries=5 \ - CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"] - -# Run startup-script -ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"] diff --git a/amd64/manifest.yml b/amd64/manifest.yml deleted file mode 100644 index c508c10..0000000 --- a/amd64/manifest.yml +++ /dev/null @@ -1,7 +0,0 @@ -image: buanet/iobroker:$VERSION-amd64 -manifests: - - - image: buanet/iobroker:$VERSION-amd64 - platform: - architecture: amd64 - os: linux diff --git a/amd64/scripts/healthcheck.sh b/amd64/scripts/healthcheck.sh deleted file mode 100644 index 072f9c0..0000000 --- a/amd64/scripts/healthcheck.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -# Script checks health of running container - -if [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "starting" ] -then - echo 'Health status: OK - Startup script is still running.' - exit 0 -elif [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "maintenance" ] -then - echo 'Health status: OK - Container is running in maintenance mode.' - exit 0 -elif [ "$(ps -fe|grep "[i]obroker.js-controller"|awk '{print $2}')" != "" ] -then - echo 'Health status: OK - Main process (js-controller) is running.' - exit 0 -fi - -echo 'Health status: !!! NOT OK !!! - Something went wrong. Please see container logs for more details and/or try restarting the container.' -exit 1 diff --git a/amd64/scripts/iobroker_startup.sh b/amd64/scripts/iobroker_startup.sh deleted file mode 100644 index 2962c87..0000000 --- a/amd64/scripts/iobroker_startup.sh +++ /dev/null @@ -1,517 +0,0 @@ -#!/bin/bash - -# Setting healthcheck status to "starting" -echo "starting" > /opt/scripts/.docker_config/.healthcheck - -# Reading ENV -adminport=$IOB_ADMINPORT -avahi=$AVAHI -multihost=$IOB_MULTIHOST -objectsdbhost=$IOB_OBJECTSDB_HOST -objectsdbport=$IOB_OBJECTSDB_PORT -objectsdbtype=$IOB_OBJECTSDB_TYPE -packages=$PACKAGES -setgid=$SETGID -setuid=$SETUID -statesdbhost=$IOB_STATESDB_HOST -statesdbport=$IOB_STATESDB_PORT -statesdbtype=$IOB_STATESDB_TYPE -usbdevices=$USBDEVICES -zwave=$ZWAVE - -# Getting date and time for logging -dati=`date '+%Y-%m-%d %H:%M:%S'` - -# Logging header -echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Welcome to your ioBroker-container! -----" -echo "----- Startupscript is now running. -----" -echo "----- Please be patient! -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Debugging information -----" -echo "----- -----" -echo "----- System -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" arch: $(uname -m))" && echo " -----" -echo "----- -----" -echo "----- Docker-Image -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" image: ${VERSION})" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" build: ${BUILD})" && echo " -----" -echo "----- -----" -echo "----- Versions -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -v))" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----" -echo "----- -----" -echo "----- ENV -----" -if [ "$adminport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_ADMINPORT: $adminport)" && echo " -----"; fi -if [ "$avahi" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $avahi)" && echo " -----"; fi -if [ "$multihost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_MULTIHOST: $multihost)" && echo " -----"; fi -if [ "$objectsdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_HOST: $objectsdbhost)" && echo " -----"; fi -if [ "$objectsdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_PORT: $objectsdbport)" && echo " -----"; fi -if [ "$objectsdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_TYPE: $objectsdbtype)" && echo " -----"; fi -if [ "$packages" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $packages)" && echo " -----"; fi -if [ "$setgid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $setgid)" && echo " -----"; fi -if [ "$setuid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $setuid)" && echo " -----"; fi -if [ "$statesdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_HOST: $statesdbhost)" && echo " -----"; fi -if [ "$statesdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_PORT: $statesdbport)" && echo " -----"; fi -if [ "$statesdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_TYPE: $statesdbtype)" && echo " -----"; fi -if [ "$usbdevices" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $usbdevices)" && echo " -----"; fi -if [ "$zwave" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $zwave)" && echo " -----"; fi -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' - -##### -# STEP 1 - Preparing container -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 1 of 5: Preparing container -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' - -# Adding ckeck file for easy docker detection by ioBroker -echo "$VERSION" > /opt/scripts/.docker_config/.thisisdocker - -# Installing/ updating additional packages and setting uid/gid -if [ "$packages" != "" ] || [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] || [ -f /opt/.firstrun ] -then - if [ -f /opt/.firstrun ] - then - echo "Updating Linux packages on first run..." - bash /opt/scripts/setup_packages.sh -update - echo "Done." - echo ' ' - echo "Registering maintenance script as command..." - echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc - echo "alias maint=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc - echo "Done." - echo ' ' - fi - if [ "$packages" != "" ] - 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 -install - echo "Done." - echo ' ' - fi - if [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] - 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 - echo "Done." - echo ' ' - fi -else - echo "Nothing to do here." - echo ' ' -fi - -# Change directory for next steps -cd /opt/iobroker - - -##### -# Detecting ioBroker-Installation -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 2 of 5: Detecting ioBroker installation -----" -echo "$(printf -- '-%.0s' {1..60})" -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 / - echo "Done." -elif [ -f /opt/iobroker/iobroker ] -then - echo "Existing installation of ioBroker detected in /opt/iobroker." - rm -f /opt/scripts/.docker_config/.install_host -elif [ $(ls *_backupiobroker.tar.gz 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/*_backupiobroker.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ] -then - if [ "$multihost" = "slave" ] - 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)." - exit 1 - else - echo "IoBroker backup file detected in /opt/iobroker. Preparing restore..." - mv /opt/iobroker/*.tar.gz /opt/ - tar -xf /opt/initial_iobroker.tar -C / - mkdir /opt/iobroker/backups - mv /opt/*.tar.gz /opt/iobroker/backups/ - chown -R $setuid:$setgid /opt/iobroker # fixes permission error during restore - echo "Done." - echo "Restoring ioBroker..." - iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1 - echo "Done." - echo ' ' - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "!!!!! IMPORTANT NOTE !!!!!" - echo "!!!!! The sartup script restored iobroker from a backup file. !!!!!" - echo "!!!!! Check /opt/iobroker/log/restore.log to see if restore was successful. !!!!!" - echo "!!!!! When ioBroker now starts it will reinstall all Adapters automatically. !!!!!" - echo "!!!!! This might be take a looooong time! Please be patient! !!!!!" - echo "!!!!! You can view installation process by taking a look at ioBroker log. !!!!!" - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - fi -else - echo "There is data detected in /opt/iobroker but it looks like it is no instance of ioBroker or a valid backup file!" - echo "Please check/ recreate mounted folder/ volume and start over." - exit 1 -fi -echo ' ' - - -##### -# Checking ioBroker-Installation -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 3 of 5: Checking ioBroker installation -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' - -# (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts" -echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..." - chown -R $setuid:$setgid /opt/iobroker - chown -R $setuid:$setgid /opt/scripts -echo "Done." -echo ' ' - -# Backing up original iobroker-file and changing sudo to gosu -echo "Fixing \"sudo-bug\" by replacing sudo in iobroker with gosu..." - cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak - chmod 755 /opt/iobroker/iobroker - sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker -echo "Done." -echo ' ' - -# Checking for first run of a new installation and renaming ioBroker -if [ -f /opt/scripts/.docker_config/.install_host ] -then - echo "Looks like this is a new and empty installation of ioBroker." - echo "Hostname needs to be updated to " $(hostname)"..." - bash iobroker host $(cat /opt/scripts/.docker_config/.install_host) - rm -f /opt/scripts/.docker_config/.install_host - echo "Done." - echo ' ' -elif [ $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ] -then - echo "Hostname in ioBroker does not match the hostname of this container." - echo "Updating hostname to " $(hostname)"..." - bash iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') - echo "Done." - echo ' ' -fi - - -##### -# Setting up prerequisites for some ioBroker-adapters -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 4 of 5: Applying special settings -----" -echo "$(printf -- '-%.0s' {1..60})" -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 ' ' - - -# Checking ENV for Adminport -if [ "$adminport" != "" ] -then - if [ "$adminport" != $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="port": )[^,]*') ] - 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 - echo "Done." - echo ' ' - fi -fi - - -# Checking ENV for AVAHI -if [ "$avahi" != "" ] -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 - echo "Done." - echo ' ' - fi -fi - - -# Checking ENV for Z-WAVE -if [ "$zwave" != "" ] -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 - echo "Done." - echo ' ' - fi -fi - - -# checking ENV for USBDEVICES -if [ "$usbdevices" != "" ] -then - if [ "$usbdevices" != "none" ] - then - echo "Usb-device-support is activated by ENV." - IFS=';' read -ra devicearray <<< "$usbdevices" - for i in "${devicearray[@]}" - do - echo "Setting permissions for" $i"..." - chown root:dialout $i - chmod g+rw $i - done - echo "Done." - echo ' ' - fi -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 - chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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/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 - - -# Checking ENVs for custom setup of objects db -if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ] -then - 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 "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." - 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 "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." - 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 "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." - fi - echo ' ' -fi - - -# Checking ENVs for custom setup of states db# -if [ "$statesdbtype" != "" ] || [ "$statesdbhost" != "" ] || [ "$statesdbport" != "" ] -then - 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 "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." - 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 "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." - 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 "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." - fi - echo ' ' -fi - - -# Checking for Userscripts in /opt/userscripts -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 - echo "Done." - echo ' ' -elif [ -f /opt/userscripts/userscript_firststart.sh ] || [ -f /opt/userscripts/userscript_everystart.sh ] -then - if [ -f /opt/userscripts/userscript_firststart.sh ] && [ -f /opt/.firstrun ] - 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 - 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 - echo "Done." - echo ' ' - fi -fi - -# Removing first run marker when exists -if [ -f /opt/.firstrun ] -then -rm -f /opt/.firstrun -fi - -##### -# Starting ioBroker -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 5 of 5: ioBroker startup -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' -echo "Starting ioBroker..." -echo ' ' - -# Setting healthcheck status to "running" -echo "running" > /opt/scripts/.docker_config/.healthcheck - -# 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 -} - -# 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 diff --git a/amd64/scripts/maintenance.sh b/amd64/scripts/maintenance.sh deleted file mode 100644 index 910c6b4..0000000 --- a/amd64/scripts/maintenance.sh +++ /dev/null @@ -1,194 +0,0 @@ -#!/bin/bash - -############################ -##### default settings ##### -############################ - -autoconfirm=no # yould be set to true by commandline option - - -#################################### -##### declaration of functions ##### -#################################### - -# display help text -display_help() { - echo "This script is build to manage your ioBroker container!" - echo "Usage: maintenance [ COMMAND ] [ OPTIONS ]" - echo " maint [ COMMAND ] [ OPTIONS ]" - echo '' - echo "COMMANDS" - echo "------------------" - echo " status > gives the current state of maintenance mode" - echo " on > switches mantenance mode ON" - echo " off > switches mantenance mode OFF and shuts down/ restarts container" - echo " upgrade > will put container to maintenance mode and upgrade iobroker" - echo '' - echo "OPTIONS" - echo "------------------" - echo " -h|--help > shows this help" - echo " -y|--yes > confirms the used command without asking" - echo '' - exit 0 -} - -# checking maintenance mode status -check_status() { - if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ] - then - echo 'Maintenance mode is turned ON.' - elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] - then - echo 'Maintenance mode is turned OFF.' - fi -} - -# turn maintenance mode ON -switch_on() { - if [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] && [ "$autoconfirm" == "no" ] # maintenance mode OFF / autoconfirm = no - then - echo 'You are now going to stop ioBroker and activating maintenance mode for this container.' - read -p 'Do you want to continue [yes/no]? ' A - if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] - then - echo 'Activating maintenance mode...' - echo "maintenance" > /opt/scripts/.docker_config/.healthcheck - sleep 1 - echo 'Done.' - echo 'Stopping ioBroker...' - pkill -u iobroker - sleep 1 - echo 'Done.' - exit 0 - else - exit 0 - fi - elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] && [ "$autoconfirm" == "yes" ] # maintenance mode OFF / autoconfirm = yes - then - echo 'You are now going to stop ioBroker and activating maintenance mode for this container.' - echo 'This command was already confirmed by -y or --yes option.' - echo 'Activating maintenance mode...' - echo "maintenance" > /opt/scripts/.docker_config/.healthcheck - sleep 1 - echo 'Done.' - echo 'Stopping ioBroker...' - pkill -u iobroker - sleep 1 - echo 'Done.' - exit 0 - else - echo 'Maintenance mode is already turned ON.' - fi -} - -# turn maintenance mode OFF -switch_off() { - echo 'You are now going to deactivate maintenance mode for this container.' - echo 'Depending on the restart policy, your container will be stopped/ restarted immediately.' - read -p 'Do you want to continue [yes/no]? ' A - if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] - then - echo 'Deactivating maintenance mode and forcing container to stop/ restart...' - echo "stopping" > /opt/scripts/.docker_config/.healthcheck - pkill -u root - exit 0 - else - exit 0 - fi -} - -# upgrade js-controller -upgrade() { - echo 'You are now going to upgrade your js-controller.' - echo 'As this will change data in /opt/iobroker, make sure you have a backup!' - echo 'During the upgrade process the container will automatically switch into maintenance mode and stop ioBroker.' - echo 'Depending of the restart policy, you container will be stoped/ restarted automatically after the upgrade.' - read -p 'Do you want to continue [yes/no]? ' A - if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] - then - echo 'Activating maintenance mode...' - echo "maintenance" > /opt/scripts/.docker_config/.healthcheck - sleep 1 - echo 'Done.' - echo 'Stopping ioBroker...' - pkill -u iobroker - sleep 1 - echo 'Done.' - echo 'Upgrading js-controller...' - iobroker update - iobroker upgrade self - sleep 1 - echo 'Done.' - echo 'Container will be stopped/ restarted in 5 seconds...' - sleep 5 - echo "stopping" > /opt/scripts/.docker_config/.healthcheck - pkill -u root - exit 0 - else - exit 0 - fi -} - -######################################## -##### parsing commands and options ##### -######################################## - -for i in "$@"; do - case $i in - help|-h|--help) - display_help # calling function to display help text - exit - ;; - status) - check_status # calling function to check maintenance mode status - ;; - -y|--yes) - autoconfirm=yes # answers prompts with "yes" - ;; - on|-on) - switch_on # calling function to switch maintenance mode on - exit - ;; - -a=*|--argument=*) # dummy exaple for parsing option with value - ARGUMENT="${i#*=}" - shift - ;; - -?*) - printf 'WARN: Unknown option (ignored): %s\n' "$1" - ;; - *) # Default case: No more options, so break out of the loop. - break - ;; - esac -done - -while :; do - case $1 in - -h|--help) - display_help # calling function to display help text - exit - ;; - -y|--yes) - autoconfirm=yes # answers prompts with "yes" - ;; - status) - check_status # calling function to check maintenance mode status - ;; - on|-on) - switch_on # calling function to switch maintenance mode on - exit - ;; - --) # End of all options. - shift - break - ;; - -?*) - printf 'WARN: Unknown option (ignored): %s\n' "$1" - ;; - *) # Default case: No more options, so break out of the loop. - break - esac - shift -done - -exit 0 diff --git a/amd64/scripts/setup_avahi.sh b/amd64/scripts/setup_avahi.sh deleted file mode 100644 index 4fd1ab1..0000000 --- a/amd64/scripts/setup_avahi.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -echo "Checking avahi-daemon installation state..." - -if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ] -then - echo "Avahi is already installed..." -else - echo "Avahi-daemon is NOT installed. Going to install it now..." - apt-get update > /opt/scripts/avahi_startup.log 2>&1 - apt-get install -y libavahi-compat-libdnssd-dev avahi-daemon >> /opt/scripts/avahi_startup.log 2>&1 - rm -rf /var/lib/apt/lists/* >> /opt/scripts/avahi_startup.log 2>&1 - echo "Configuring avahi-daemon..." - sed -i '/^rlimit-nproc/s/^\(.*\)/#\1/g' /etc/avahi/avahi-daemon.conf - echo "Configuring dbus..." - mkdir /var/run/dbus/ -fi - -if [ -f /var/run/dbus/pid ]; -then - rm -f /var/run/dbus/pid -fi - -if [ -f /var/run/avahi-daemon//pid ]; -then - rm -f /var/run/avahi-daemon//pid -fi - -echo "Starting dbus..." -dbus-daemon --system - -echo "Starting avahi-daemon..." -/etc/init.d/avahi-daemon start - -exit 0 diff --git a/amd64/scripts/setup_packages.sh b/amd64/scripts/setup_packages.sh deleted file mode 100644 index d959a5b..0000000 --- a/amd64/scripts/setup_packages.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -if [ $1 == "-install" ] -then - apt-get -qq update - packages=$(cat /opt/scripts/.packages) - for i in $packages; do - sudo apt-get -qq -y install $i - done -elif [ $1 == "-update" ] -then - apt-get -qq update - apt-get -qq -y upgrade -else - echo "No paramerter found!" - exit 1 -fi - -rm -rf /var/lib/apt/lists/* -rm -f /opt/scripts/.packages - -exit 0 diff --git a/amd64/scripts/setup_zwave.sh b/amd64/scripts/setup_zwave.sh deleted file mode 100644 index 11d8024..0000000 --- a/amd64/scripts/setup_zwave.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -echo "Checking openzwave installation state..." - -if [ -e /usr/local/lib64 ] -then - echo "Openzwave is already installed..." -else - echo "Openzwave is NOT installed. Going to install it now..." - cd /opt - curl -s -L -O http://old.openzwave.com/downloads/openzwave-1.6.1007.tar.gz - tar -xf openzwave-1.6.1007.tar.gz && rm openzwave-1.6.1007.tar.gz - cd openzwave-1.6.1007 && make > /dev/null 2>&1 && make install > /dev/null 2>&1 - ldconfig /usr/local/lib64 - cd /opt/iobroker - # echo "Openzwave is now installed..." -fi - -exit 0 diff --git a/amd64/scripts/userscript_everystart_example.sh b/amd64/scripts/userscript_everystart_example.sh deleted file mode 100644 index 9023677..0000000 --- a/amd64/scripts/userscript_everystart_example.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -# This is an example script file. -# To run the Script on every start of the container you have to rename it to userscript_everystart.sh. - -# You can add your advanced script code here! - -echo ' ' -echo "I'm your startscript userscript_everystart.sh. I will run on EVERY container startup." -echo ' ' - - -exit 0 diff --git a/amd64/scripts/userscript_firststart_example.sh b/amd64/scripts/userscript_firststart_example.sh deleted file mode 100644 index 4fef50d..0000000 --- a/amd64/scripts/userscript_firststart_example.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# This is an example script file. -# To run the Script on the first start of a new container you have to rename it to userscript_firststart.sh. - -# You can add your advanced script code here! - -echo ' ' -echo "I'm your startscript userscript_firststart.sh. I will run only on the FIRST startup of the container." -echo ' ' - -exit 0 diff --git a/arm32v7/Dockerfile b/arm32v7/Dockerfile deleted file mode 100644 index e082af9..0000000 --- a/arm32v7/Dockerfile +++ /dev/null @@ -1,107 +0,0 @@ -FROM balenalib/armv7hf-debian:buster - -LABEL org.opencontainers.image.title="ioBroker Docker Image" \ - org.opencontainers.image.description="Docker image for ioBroker smarthome software" \ - org.opencontainers.image.authors="info@buanet.de" \ - org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ - org.opencontainers.image.version="${VERSION}" \ - org.opencontainers.image.created="${DATI}" - -ENV DEBIAN_FRONTEND noninteractive - -# Install prerequisites (as listed in iobroker installer.sh) -RUN apt-get update && apt-get install -y \ - acl \ - apt-utils \ - build-essential \ - curl \ - git \ - gnupg2 \ - gosu \ - jq \ - libavahi-compat-libdnssd-dev \ - libcap2-bin \ - libpam0g-dev \ - libudev-dev \ - locales \ - pkg-config \ - procps \ - python \ - python-dev \ - sudo \ - udev \ - unzip \ - wget \ - && rm -rf /var/lib/apt/lists/* - -# Install node -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ - && apt-get update && apt-get install -y nodejs \ - && rm -rf /var/lib/apt/lists/* - -# Generating locales -RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ - && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ - && locale-gen - -# Create scripts directorys and copy scripts -RUN mkdir -p /opt/scripts/ \ - && mkdir -p /opt/userscripts/ \ - && chmod 777 /opt/scripts/ \ - && chmod 777 /opt/userscripts/ -WORKDIR /opt/scripts/ -COPY scripts/iobroker_startup.sh iobroker_startup.sh -COPY scripts/setup_avahi.sh setup_avahi.sh -COPY scripts/setup_packages.sh setup_packages.sh -COPY scripts/setup_zwave.sh setup_zwave.sh -COPY scripts/healthcheck.sh healthcheck.sh -COPY scripts/maintenance.sh maintenance.sh -RUN chmod +x iobroker_startup.sh \ - && chmod +x setup_avahi.sh \ - && chmod +x setup_packages.sh \ - && chmod +x setup_zwave.sh \ - && chmod +x healthcheck.sh \ - && chmod +x maintenance.sh -WORKDIR /opt/userscripts/ -COPY scripts/userscript_firststart_example.sh userscript_firststart_example.sh -COPY scripts/userscript_everystart_example.sh userscript_everystart_example.sh - -# Install ioBroker -WORKDIR / -RUN apt-get update \ - && curl -sL https://iobroker.net/install.sh | bash - \ - && mkdir -p /opt/scripts/.docker_config/ \ - && echo $(hostname) > /opt/scripts/.docker_config/.install_host \ - && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ - && echo $(hostname) > /opt/.firstrun \ - && rm -rf /var/lib/apt/lists/* - -# Install node-gyp -WORKDIR /opt/iobroker/ -RUN npm install -g node-gyp - -# Backup initial ioBroker and userscript folder -RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \ - && tar -cf /opt/initial_userscripts.tar /opt/userscripts - -# Setting up iobroker-user (shell and home directory) -RUN chsh -s /bin/bash 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" \ - SETGID=1000 \ - SETUID=1000 \ - TZ="Europe/Berlin" - -# Healthcheck -HEALTHCHECK --interval=15s --timeout=5s --retries=5 \ - CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"] - -# Run startup-script -ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"] diff --git a/arm32v7/manifest.yml b/arm32v7/manifest.yml deleted file mode 100644 index eba6823..0000000 --- a/arm32v7/manifest.yml +++ /dev/null @@ -1,8 +0,0 @@ -image: buanet/iobroker:$VERSION-arm32v7 -manifests: - - - image: buanet/iobroker:$VERSION-arm32v7 - platform: - architecture: arm - variant: v7 - os: linux diff --git a/arm32v7/scripts/healthcheck.sh b/arm32v7/scripts/healthcheck.sh deleted file mode 100644 index 072f9c0..0000000 --- a/arm32v7/scripts/healthcheck.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -# Script checks health of running container - -if [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "starting" ] -then - echo 'Health status: OK - Startup script is still running.' - exit 0 -elif [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "maintenance" ] -then - echo 'Health status: OK - Container is running in maintenance mode.' - exit 0 -elif [ "$(ps -fe|grep "[i]obroker.js-controller"|awk '{print $2}')" != "" ] -then - echo 'Health status: OK - Main process (js-controller) is running.' - exit 0 -fi - -echo 'Health status: !!! NOT OK !!! - Something went wrong. Please see container logs for more details and/or try restarting the container.' -exit 1 diff --git a/arm32v7/scripts/iobroker_startup.sh b/arm32v7/scripts/iobroker_startup.sh deleted file mode 100644 index 67c1ffb..0000000 --- a/arm32v7/scripts/iobroker_startup.sh +++ /dev/null @@ -1,507 +0,0 @@ -#!/bin/bash - -# Setting healthcheck status to "starting" -echo "starting" > /opt/scripts/.docker_config/.healthcheck - -# Reading ENV -adminport=$IOB_ADMINPORT -avahi=$AVAHI -multihost=$IOB_MULTIHOST -objectsdbhost=$IOB_OBJECTSDB_HOST -objectsdbport=$IOB_OBJECTSDB_PORT -objectsdbtype=$IOB_OBJECTSDB_TYPE -packages=$PACKAGES -setgid=$SETGID -setuid=$SETUID -statesdbhost=$IOB_STATESDB_HOST -statesdbport=$IOB_STATESDB_PORT -statesdbtype=$IOB_STATESDB_TYPE -usbdevices=$USBDEVICES -zwave=$ZWAVE - -# Getting date and time for logging -dati=`date '+%Y-%m-%d %H:%M:%S'` - -# Logging header -echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Welcome to your ioBroker-container! -----" -echo "----- Startupscript is now running. -----" -echo "----- Please be patient! -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Debugging information -----" -echo "----- -----" -echo "----- System -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" arch: $(uname -m))" && echo " -----" -echo "----- -----" -echo "----- Versions -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" image: $VERSION)" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -v))" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----" -echo "----- -----" -echo "----- ENV -----" -if [ "$adminport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_ADMINPORT: $adminport)" && echo " -----"; fi -if [ "$avahi" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $avahi)" && echo " -----"; fi -if [ "$multihost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_MULTIHOST: $multihost)" && echo " -----"; fi -if [ "$objectsdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_HOST: $objectsdbhost)" && echo " -----"; fi -if [ "$objectsdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_PORT: $objectsdbport)" && echo " -----"; fi -if [ "$objectsdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_TYPE: $objectsdbtype)" && echo " -----"; fi -if [ "$packages" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $packages)" && echo " -----"; fi -if [ "$setgid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $setgid)" && echo " -----"; fi -if [ "$setuid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $setuid)" && echo " -----"; fi -if [ "$statesdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_HOST: $statesdbhost)" && echo " -----"; fi -if [ "$statesdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_PORT: $statesdbport)" && echo " -----"; fi -if [ "$statesdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_TYPE: $statesdbtype)" && echo " -----"; fi -if [ "$usbdevices" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $usbdevices)" && echo " -----"; fi -if [ "$zwave" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $zwave)" && echo " -----"; fi -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' - -##### -# STEP 1 - Preparing container -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 1 of 5: Preparing container -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' - -# Installing additional packages and setting uid/gid -if [ "$packages" != "" ] || [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] || [ -f /opt/.firstrun ] -then - if [ "$packages" != "" ] - 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 - echo "Done." - echo ' ' - fi - if [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] - 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 - echo "Done." - echo ' ' - fi - if [ -f /opt/.firstrun ] - then - echo "Registering maintenance script as command." - echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc - echo "alias maint=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc - echo "Done." - echo ' ' - fi -else - echo "Nothing to do here." - echo ' ' -fi - -# Change directory for next steps -cd /opt/iobroker - - -##### -# Detecting ioBroker-Installation -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 2 of 5: Detecting ioBroker installation -----" -echo "$(printf -- '-%.0s' {1..60})" -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 / - echo "Done." -elif [ -f /opt/iobroker/iobroker ] -then - echo "Existing installation of ioBroker detected in /opt/iobroker." - rm -f /opt/scripts/.docker_config/.install_host -elif [ $(ls *_backupiobroker.tar.gz 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/*_backupiobroker.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ] -then - if [ "$multihost" = "slave" ] - 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)." - exit 1 - else - echo "IoBroker backup file detected in /opt/iobroker. Preparing restore..." - mv /opt/iobroker/*.tar.gz /opt/ - tar -xf /opt/initial_iobroker.tar -C / - mkdir /opt/iobroker/backups - mv /opt/*.tar.gz /opt/iobroker/backups/ - chown -R $setuid:$setgid /opt/iobroker # fixes permission error during restore - echo "Done." - echo "Restoring ioBroker..." - iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1 - echo "Done." - echo ' ' - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "!!!!! IMPORTANT NOTE !!!!!" - echo "!!!!! The sartup script restored iobroker from a backup file. !!!!!" - echo "!!!!! Check /opt/iobroker/log/restore.log to see if restore was successful. !!!!!" - echo "!!!!! When ioBroker now starts it will reinstall all Adapters automatically. !!!!!" - echo "!!!!! This might be take a looooong time! Please be patient! !!!!!" - echo "!!!!! You can view installation process by taking a look at ioBroker log. !!!!!" - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - fi -else - echo "There is data detected in /opt/iobroker but it looks like it is no instance of ioBroker or a valid backup file!" - echo "Please check/ recreate mounted folder/ volume and start over." - exit 1 -fi -echo ' ' - - -##### -# Checking ioBroker-Installation -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 3 of 5: Checking ioBroker installation -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' - -# (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts" -echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..." - chown -R $setuid:$setgid /opt/iobroker - chown -R $setuid:$setgid /opt/scripts -echo "Done." -echo ' ' - -# Backing up original iobroker-file and changing sudo to gosu -echo "Fixing \"sudo-bug\" by replacing sudo in iobroker with gosu..." - cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak - chmod 755 /opt/iobroker/iobroker - sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker -echo "Done." -echo ' ' - -# Checking for first run of a new installation and renaming ioBroker -if [ -f /opt/scripts/.docker_config/.install_host ] -then - echo "Looks like this is a new and empty installation of ioBroker." - echo "Hostname needs to be updated to " $(hostname)"..." - bash iobroker host $(cat /opt/scripts/.docker_config/.install_host) - rm -f /opt/scripts/.docker_config/.install_host - echo "Done." - echo ' ' -elif [ $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ] -then - echo "Hostname in ioBroker does not match the hostname of this container." - echo "Updating hostname to " $(hostname)"..." - bash iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') - echo "Done." - echo ' ' -fi - - -##### -# Setting up prerequisites for some ioBroker-adapters -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 4 of 5: Applying special settings -----" -echo "$(printf -- '-%.0s' {1..60})" -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 ' ' - - -# Checking ENV for Adminport -if [ "$adminport" != "" ] -then - if [ "$adminport" != $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="port": )[^,]*') ] - 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 - echo "Done." - echo ' ' - fi -fi - - -# Checking ENV for AVAHI -if [ "$avahi" != "" ] -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 - echo "Done." - echo ' ' - fi -fi - - -# Checking ENV for Z-WAVE -if [ "$zwave" != "" ] -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 - echo "Done." - echo ' ' - fi -fi - - -# checking ENV for USBDEVICES -if [ "$usbdevices" != "" ] -then - if [ "$usbdevices" != "none" ] - then - echo "Usb-device-support is activated by ENV." - IFS=';' read -ra devicearray <<< "$usbdevices" - for i in "${devicearray[@]}" - do - echo "Setting permissions for" $i"..." - chown root:dialout $i - chmod g+rw $i - done - echo "Done." - echo ' ' - fi -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 - chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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/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 - - -# Checking ENVs for custom setup of objects db -if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ] -then - 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 "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." - 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 "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." - 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 "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." - fi - echo ' ' -fi - - -# Checking ENVs for custom setup of states db# -if [ "$statesdbtype" != "" ] || [ "$statesdbhost" != "" ] || [ "$statesdbport" != "" ] -then - 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 "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." - 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 "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." - 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 "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." - fi - echo ' ' -fi - - -# Checking for Userscripts in /opt/userscripts -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 - echo "Done." - echo ' ' -elif [ -f /opt/userscripts/userscript_firststart.sh ] || [ -f /opt/userscripts/userscript_everystart.sh ] -then - if [ -f /opt/userscripts/userscript_firststart.sh ] && [ -f /opt/.firstrun ] - 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 - 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 - echo "Done." - echo ' ' - fi -fi - -# Removing first run marker when exists -if [ -f /opt/.firstrun ] -then -rm -f /opt/.firstrun -fi - -##### -# Starting ioBroker -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 5 of 5: ioBroker startup -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' -echo "Starting ioBroker..." -echo ' ' - -# Setting healthcheck status to "running" -echo "running" > /opt/scripts/.docker_config/.healthcheck - -# 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 -} - -# 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 diff --git a/arm32v7/scripts/maintenance.sh b/arm32v7/scripts/maintenance.sh deleted file mode 100644 index 4f77980..0000000 --- a/arm32v7/scripts/maintenance.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -if [ "$1" == "status" ] -then - if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ] - then - echo 'Maintenance mode is ON.' - exit 0 - elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] - then - echo 'Maintenance mode is OFF.' - exit 0 - fi -elif [ "$1" == "on" ] -then - echo 'You are going to stop ioBroker and activating maintenance mode for this container.' - read -p 'Do you want to continue [yes/no]? ' A - if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] - then - echo 'Activating maintenance mode...' - echo "maintenance" > /opt/scripts/.docker_config/.healthcheck - sleep 1 - echo 'Done.' - echo 'Stopping ioBroker...' - pkill -u iobroker - sleep 1 - echo 'Done.' - exit 0 - else - exit 0 - fi -elif [ "$1" == "off" ] -then - echo 'You are going to deactivate maintenance mode for this container.' - echo 'Depending of the restart policy of this container, this will stop/ restart your container immediately.' - read -p 'Do you want to continue [yes/no]? ' A - if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] - then - echo 'Deactivating maintenance mode and forcing container to stop/ restart...' - echo "maintenance" > /opt/scripts/.docker_config/.healthcheck - pkill -u root - exit 0 - else - exit 0 - fi -else - echo 'Invalid command. Please try again.' -fi - -exit 0 diff --git a/arm32v7/scripts/setup_avahi.sh b/arm32v7/scripts/setup_avahi.sh deleted file mode 100644 index 4fd1ab1..0000000 --- a/arm32v7/scripts/setup_avahi.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -echo "Checking avahi-daemon installation state..." - -if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ] -then - echo "Avahi is already installed..." -else - echo "Avahi-daemon is NOT installed. Going to install it now..." - apt-get update > /opt/scripts/avahi_startup.log 2>&1 - apt-get install -y libavahi-compat-libdnssd-dev avahi-daemon >> /opt/scripts/avahi_startup.log 2>&1 - rm -rf /var/lib/apt/lists/* >> /opt/scripts/avahi_startup.log 2>&1 - echo "Configuring avahi-daemon..." - sed -i '/^rlimit-nproc/s/^\(.*\)/#\1/g' /etc/avahi/avahi-daemon.conf - echo "Configuring dbus..." - mkdir /var/run/dbus/ -fi - -if [ -f /var/run/dbus/pid ]; -then - rm -f /var/run/dbus/pid -fi - -if [ -f /var/run/avahi-daemon//pid ]; -then - rm -f /var/run/avahi-daemon//pid -fi - -echo "Starting dbus..." -dbus-daemon --system - -echo "Starting avahi-daemon..." -/etc/init.d/avahi-daemon start - -exit 0 diff --git a/arm32v7/scripts/setup_packages.sh b/arm32v7/scripts/setup_packages.sh deleted file mode 100644 index 449900f..0000000 --- a/arm32v7/scripts/setup_packages.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -apt-get -qq update - -packages=$(cat /opt/scripts/.packages) -for i in $packages; do - sudo apt-get -qq -y install $i -done - -rm -rf /var/lib/apt/lists/* -rm -f /opt/scripts/.packages - -exit 0 diff --git a/arm32v7/scripts/setup_zwave.sh b/arm32v7/scripts/setup_zwave.sh deleted file mode 100644 index 11d8024..0000000 --- a/arm32v7/scripts/setup_zwave.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -echo "Checking openzwave installation state..." - -if [ -e /usr/local/lib64 ] -then - echo "Openzwave is already installed..." -else - echo "Openzwave is NOT installed. Going to install it now..." - cd /opt - curl -s -L -O http://old.openzwave.com/downloads/openzwave-1.6.1007.tar.gz - tar -xf openzwave-1.6.1007.tar.gz && rm openzwave-1.6.1007.tar.gz - cd openzwave-1.6.1007 && make > /dev/null 2>&1 && make install > /dev/null 2>&1 - ldconfig /usr/local/lib64 - cd /opt/iobroker - # echo "Openzwave is now installed..." -fi - -exit 0 diff --git a/arm32v7/scripts/userscript_everystart_example.sh b/arm32v7/scripts/userscript_everystart_example.sh deleted file mode 100644 index 9023677..0000000 --- a/arm32v7/scripts/userscript_everystart_example.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -# This is an example script file. -# To run the Script on every start of the container you have to rename it to userscript_everystart.sh. - -# You can add your advanced script code here! - -echo ' ' -echo "I'm your startscript userscript_everystart.sh. I will run on EVERY container startup." -echo ' ' - - -exit 0 diff --git a/arm32v7/scripts/userscript_firststart_example.sh b/arm32v7/scripts/userscript_firststart_example.sh deleted file mode 100644 index 4fef50d..0000000 --- a/arm32v7/scripts/userscript_firststart_example.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# This is an example script file. -# To run the Script on the first start of a new container you have to rename it to userscript_firststart.sh. - -# You can add your advanced script code here! - -echo ' ' -echo "I'm your startscript userscript_firststart.sh. I will run only on the FIRST startup of the container." -echo ' ' - -exit 0 diff --git a/arm64v8/Dockerfile b/arm64v8/Dockerfile deleted file mode 100644 index 6e23a59..0000000 --- a/arm64v8/Dockerfile +++ /dev/null @@ -1,108 +0,0 @@ -FROM balenalib/aarch64-debian:buster - -LABEL org.opencontainers.image.title="ioBroker Docker Image" \ - org.opencontainers.image.description="Docker image for ioBroker smarthome software" \ - org.opencontainers.image.authors="info@buanet.de" \ - org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ - org.opencontainers.image.version="${VERSION}" \ - org.opencontainers.image.created="${DATI}" - - -ENV DEBIAN_FRONTEND noninteractive - -# Install prerequisites (as listed in iobroker installer.sh) -RUN apt-get update && apt-get install -y \ - acl \ - apt-utils \ - build-essential \ - curl \ - git \ - gnupg2 \ - gosu \ - jq \ - libavahi-compat-libdnssd-dev \ - libcap2-bin \ - libpam0g-dev \ - libudev-dev \ - locales \ - pkg-config \ - procps \ - python \ - python-dev \ - sudo \ - udev \ - unzip \ - wget \ - && rm -rf /var/lib/apt/lists/* - -# Install node -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ - && apt-get update && apt-get install -y nodejs \ - && rm -rf /var/lib/apt/lists/* - -# Generating locales -RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ - && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ - && locale-gen - -# Create scripts directorys and copy scripts -RUN mkdir -p /opt/scripts/ \ - && mkdir -p /opt/userscripts/ \ - && chmod 777 /opt/scripts/ \ - && chmod 777 /opt/userscripts/ -WORKDIR /opt/scripts/ -COPY scripts/iobroker_startup.sh iobroker_startup.sh -COPY scripts/setup_avahi.sh setup_avahi.sh -COPY scripts/setup_packages.sh setup_packages.sh -COPY scripts/setup_zwave.sh setup_zwave.sh -COPY scripts/healthcheck.sh healthcheck.sh -COPY scripts/maintenance.sh maintenance.sh -RUN chmod +x iobroker_startup.sh \ - && chmod +x setup_avahi.sh \ - && chmod +x setup_packages.sh \ - && chmod +x setup_zwave.sh \ - && chmod +x healthcheck.sh \ - && chmod +x maintenance.sh -WORKDIR /opt/userscripts/ -COPY scripts/userscript_firststart_example.sh userscript_firststart_example.sh -COPY scripts/userscript_everystart_example.sh userscript_everystart_example.sh - -# Install ioBroker -WORKDIR / -RUN apt-get update \ - && curl -sL https://iobroker.net/install.sh | bash - \ - && mkdir -p /opt/scripts/.docker_config/ \ - && echo $(hostname) > /opt/scripts/.docker_config/.install_host \ - && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ - && echo $(hostname) > /opt/.firstrun \ - && rm -rf /var/lib/apt/lists/* - -# Install node-gyp -WORKDIR /opt/iobroker/ -RUN npm install -g node-gyp - -# Backup initial ioBroker and userscript folder -RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \ - && tar -cf /opt/initial_userscripts.tar /opt/userscripts - -# Setting up iobroker-user (shell and home directory) -RUN chsh -s /bin/bash 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" \ - SETGID=1000 \ - SETUID=1000 \ - TZ="Europe/Berlin" - -# Healthcheck -HEALTHCHECK --interval=15s --timeout=5s --retries=5 \ - CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"] - -# Run startup-script -ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"] diff --git a/arm64v8/manifest.yml b/arm64v8/manifest.yml deleted file mode 100644 index 657cde3..0000000 --- a/arm64v8/manifest.yml +++ /dev/null @@ -1,8 +0,0 @@ -image: buanet/iobroker:$VERSION-arm64v8 -manifests: - - - image: buanet/iobroker:$VERSION-arm64v8 - platform: - architecture: arm64 - variant: v8 - os: linux diff --git a/arm64v8/scripts/healthcheck.sh b/arm64v8/scripts/healthcheck.sh deleted file mode 100644 index 072f9c0..0000000 --- a/arm64v8/scripts/healthcheck.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -# Script checks health of running container - -if [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "starting" ] -then - echo 'Health status: OK - Startup script is still running.' - exit 0 -elif [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "maintenance" ] -then - echo 'Health status: OK - Container is running in maintenance mode.' - exit 0 -elif [ "$(ps -fe|grep "[i]obroker.js-controller"|awk '{print $2}')" != "" ] -then - echo 'Health status: OK - Main process (js-controller) is running.' - exit 0 -fi - -echo 'Health status: !!! NOT OK !!! - Something went wrong. Please see container logs for more details and/or try restarting the container.' -exit 1 diff --git a/arm64v8/scripts/iobroker_startup.sh b/arm64v8/scripts/iobroker_startup.sh deleted file mode 100644 index 67c1ffb..0000000 --- a/arm64v8/scripts/iobroker_startup.sh +++ /dev/null @@ -1,507 +0,0 @@ -#!/bin/bash - -# Setting healthcheck status to "starting" -echo "starting" > /opt/scripts/.docker_config/.healthcheck - -# Reading ENV -adminport=$IOB_ADMINPORT -avahi=$AVAHI -multihost=$IOB_MULTIHOST -objectsdbhost=$IOB_OBJECTSDB_HOST -objectsdbport=$IOB_OBJECTSDB_PORT -objectsdbtype=$IOB_OBJECTSDB_TYPE -packages=$PACKAGES -setgid=$SETGID -setuid=$SETUID -statesdbhost=$IOB_STATESDB_HOST -statesdbport=$IOB_STATESDB_PORT -statesdbtype=$IOB_STATESDB_TYPE -usbdevices=$USBDEVICES -zwave=$ZWAVE - -# Getting date and time for logging -dati=`date '+%Y-%m-%d %H:%M:%S'` - -# Logging header -echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Welcome to your ioBroker-container! -----" -echo "----- Startupscript is now running. -----" -echo "----- Please be patient! -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Debugging information -----" -echo "----- -----" -echo "----- System -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" arch: $(uname -m))" && echo " -----" -echo "----- -----" -echo "----- Versions -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" image: $VERSION)" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -v))" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----" -echo "----- -----" -echo "----- ENV -----" -if [ "$adminport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_ADMINPORT: $adminport)" && echo " -----"; fi -if [ "$avahi" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $avahi)" && echo " -----"; fi -if [ "$multihost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_MULTIHOST: $multihost)" && echo " -----"; fi -if [ "$objectsdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_HOST: $objectsdbhost)" && echo " -----"; fi -if [ "$objectsdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_PORT: $objectsdbport)" && echo " -----"; fi -if [ "$objectsdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_TYPE: $objectsdbtype)" && echo " -----"; fi -if [ "$packages" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $packages)" && echo " -----"; fi -if [ "$setgid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $setgid)" && echo " -----"; fi -if [ "$setuid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $setuid)" && echo " -----"; fi -if [ "$statesdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_HOST: $statesdbhost)" && echo " -----"; fi -if [ "$statesdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_PORT: $statesdbport)" && echo " -----"; fi -if [ "$statesdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_TYPE: $statesdbtype)" && echo " -----"; fi -if [ "$usbdevices" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $usbdevices)" && echo " -----"; fi -if [ "$zwave" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $zwave)" && echo " -----"; fi -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' - -##### -# STEP 1 - Preparing container -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 1 of 5: Preparing container -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' - -# Installing additional packages and setting uid/gid -if [ "$packages" != "" ] || [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] || [ -f /opt/.firstrun ] -then - if [ "$packages" != "" ] - 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 - echo "Done." - echo ' ' - fi - if [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] - 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 - echo "Done." - echo ' ' - fi - if [ -f /opt/.firstrun ] - then - echo "Registering maintenance script as command." - echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc - echo "alias maint=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc - echo "Done." - echo ' ' - fi -else - echo "Nothing to do here." - echo ' ' -fi - -# Change directory for next steps -cd /opt/iobroker - - -##### -# Detecting ioBroker-Installation -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 2 of 5: Detecting ioBroker installation -----" -echo "$(printf -- '-%.0s' {1..60})" -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 / - echo "Done." -elif [ -f /opt/iobroker/iobroker ] -then - echo "Existing installation of ioBroker detected in /opt/iobroker." - rm -f /opt/scripts/.docker_config/.install_host -elif [ $(ls *_backupiobroker.tar.gz 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/*_backupiobroker.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ] -then - if [ "$multihost" = "slave" ] - 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)." - exit 1 - else - echo "IoBroker backup file detected in /opt/iobroker. Preparing restore..." - mv /opt/iobroker/*.tar.gz /opt/ - tar -xf /opt/initial_iobroker.tar -C / - mkdir /opt/iobroker/backups - mv /opt/*.tar.gz /opt/iobroker/backups/ - chown -R $setuid:$setgid /opt/iobroker # fixes permission error during restore - echo "Done." - echo "Restoring ioBroker..." - iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1 - echo "Done." - echo ' ' - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "!!!!! IMPORTANT NOTE !!!!!" - echo "!!!!! The sartup script restored iobroker from a backup file. !!!!!" - echo "!!!!! Check /opt/iobroker/log/restore.log to see if restore was successful. !!!!!" - echo "!!!!! When ioBroker now starts it will reinstall all Adapters automatically. !!!!!" - echo "!!!!! This might be take a looooong time! Please be patient! !!!!!" - echo "!!!!! You can view installation process by taking a look at ioBroker log. !!!!!" - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - fi -else - echo "There is data detected in /opt/iobroker but it looks like it is no instance of ioBroker or a valid backup file!" - echo "Please check/ recreate mounted folder/ volume and start over." - exit 1 -fi -echo ' ' - - -##### -# Checking ioBroker-Installation -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 3 of 5: Checking ioBroker installation -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' - -# (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts" -echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..." - chown -R $setuid:$setgid /opt/iobroker - chown -R $setuid:$setgid /opt/scripts -echo "Done." -echo ' ' - -# Backing up original iobroker-file and changing sudo to gosu -echo "Fixing \"sudo-bug\" by replacing sudo in iobroker with gosu..." - cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak - chmod 755 /opt/iobroker/iobroker - sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker -echo "Done." -echo ' ' - -# Checking for first run of a new installation and renaming ioBroker -if [ -f /opt/scripts/.docker_config/.install_host ] -then - echo "Looks like this is a new and empty installation of ioBroker." - echo "Hostname needs to be updated to " $(hostname)"..." - bash iobroker host $(cat /opt/scripts/.docker_config/.install_host) - rm -f /opt/scripts/.docker_config/.install_host - echo "Done." - echo ' ' -elif [ $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ] -then - echo "Hostname in ioBroker does not match the hostname of this container." - echo "Updating hostname to " $(hostname)"..." - bash iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') - echo "Done." - echo ' ' -fi - - -##### -# Setting up prerequisites for some ioBroker-adapters -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 4 of 5: Applying special settings -----" -echo "$(printf -- '-%.0s' {1..60})" -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 ' ' - - -# Checking ENV for Adminport -if [ "$adminport" != "" ] -then - if [ "$adminport" != $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="port": )[^,]*') ] - 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 - echo "Done." - echo ' ' - fi -fi - - -# Checking ENV for AVAHI -if [ "$avahi" != "" ] -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 - echo "Done." - echo ' ' - fi -fi - - -# Checking ENV for Z-WAVE -if [ "$zwave" != "" ] -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 - echo "Done." - echo ' ' - fi -fi - - -# checking ENV for USBDEVICES -if [ "$usbdevices" != "" ] -then - if [ "$usbdevices" != "none" ] - then - echo "Usb-device-support is activated by ENV." - IFS=';' read -ra devicearray <<< "$usbdevices" - for i in "${devicearray[@]}" - do - echo "Setting permissions for" $i"..." - chown root:dialout $i - chmod g+rw $i - done - echo "Done." - echo ' ' - fi -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 - chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /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/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 - - -# Checking ENVs for custom setup of objects db -if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ] -then - 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 "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." - 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 "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." - 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 "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." - fi - echo ' ' -fi - - -# Checking ENVs for custom setup of states db# -if [ "$statesdbtype" != "" ] || [ "$statesdbhost" != "" ] || [ "$statesdbport" != "" ] -then - 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 "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." - 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 "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." - 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 "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." - fi - echo ' ' -fi - - -# Checking for Userscripts in /opt/userscripts -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 - echo "Done." - echo ' ' -elif [ -f /opt/userscripts/userscript_firststart.sh ] || [ -f /opt/userscripts/userscript_everystart.sh ] -then - if [ -f /opt/userscripts/userscript_firststart.sh ] && [ -f /opt/.firstrun ] - 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 - 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 - echo "Done." - echo ' ' - fi -fi - -# Removing first run marker when exists -if [ -f /opt/.firstrun ] -then -rm -f /opt/.firstrun -fi - -##### -# Starting ioBroker -##### -echo "$(printf -- '-%.0s' {1..60})" -echo "----- Step 5 of 5: ioBroker startup -----" -echo "$(printf -- '-%.0s' {1..60})" -echo ' ' -echo "Starting ioBroker..." -echo ' ' - -# Setting healthcheck status to "running" -echo "running" > /opt/scripts/.docker_config/.healthcheck - -# 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 -} - -# 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 diff --git a/arm64v8/scripts/maintenance.sh b/arm64v8/scripts/maintenance.sh deleted file mode 100644 index 4f77980..0000000 --- a/arm64v8/scripts/maintenance.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -if [ "$1" == "status" ] -then - if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ] - then - echo 'Maintenance mode is ON.' - exit 0 - elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ] - then - echo 'Maintenance mode is OFF.' - exit 0 - fi -elif [ "$1" == "on" ] -then - echo 'You are going to stop ioBroker and activating maintenance mode for this container.' - read -p 'Do you want to continue [yes/no]? ' A - if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] - then - echo 'Activating maintenance mode...' - echo "maintenance" > /opt/scripts/.docker_config/.healthcheck - sleep 1 - echo 'Done.' - echo 'Stopping ioBroker...' - pkill -u iobroker - sleep 1 - echo 'Done.' - exit 0 - else - exit 0 - fi -elif [ "$1" == "off" ] -then - echo 'You are going to deactivate maintenance mode for this container.' - echo 'Depending of the restart policy of this container, this will stop/ restart your container immediately.' - read -p 'Do you want to continue [yes/no]? ' A - if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ] - then - echo 'Deactivating maintenance mode and forcing container to stop/ restart...' - echo "maintenance" > /opt/scripts/.docker_config/.healthcheck - pkill -u root - exit 0 - else - exit 0 - fi -else - echo 'Invalid command. Please try again.' -fi - -exit 0 diff --git a/arm64v8/scripts/setup_avahi.sh b/arm64v8/scripts/setup_avahi.sh deleted file mode 100644 index 4fd1ab1..0000000 --- a/arm64v8/scripts/setup_avahi.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -echo "Checking avahi-daemon installation state..." - -if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ] -then - echo "Avahi is already installed..." -else - echo "Avahi-daemon is NOT installed. Going to install it now..." - apt-get update > /opt/scripts/avahi_startup.log 2>&1 - apt-get install -y libavahi-compat-libdnssd-dev avahi-daemon >> /opt/scripts/avahi_startup.log 2>&1 - rm -rf /var/lib/apt/lists/* >> /opt/scripts/avahi_startup.log 2>&1 - echo "Configuring avahi-daemon..." - sed -i '/^rlimit-nproc/s/^\(.*\)/#\1/g' /etc/avahi/avahi-daemon.conf - echo "Configuring dbus..." - mkdir /var/run/dbus/ -fi - -if [ -f /var/run/dbus/pid ]; -then - rm -f /var/run/dbus/pid -fi - -if [ -f /var/run/avahi-daemon//pid ]; -then - rm -f /var/run/avahi-daemon//pid -fi - -echo "Starting dbus..." -dbus-daemon --system - -echo "Starting avahi-daemon..." -/etc/init.d/avahi-daemon start - -exit 0 diff --git a/arm64v8/scripts/setup_packages.sh b/arm64v8/scripts/setup_packages.sh deleted file mode 100644 index 449900f..0000000 --- a/arm64v8/scripts/setup_packages.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -apt-get -qq update - -packages=$(cat /opt/scripts/.packages) -for i in $packages; do - sudo apt-get -qq -y install $i -done - -rm -rf /var/lib/apt/lists/* -rm -f /opt/scripts/.packages - -exit 0 diff --git a/arm64v8/scripts/setup_zwave.sh b/arm64v8/scripts/setup_zwave.sh deleted file mode 100644 index 11d8024..0000000 --- a/arm64v8/scripts/setup_zwave.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -echo "Checking openzwave installation state..." - -if [ -e /usr/local/lib64 ] -then - echo "Openzwave is already installed..." -else - echo "Openzwave is NOT installed. Going to install it now..." - cd /opt - curl -s -L -O http://old.openzwave.com/downloads/openzwave-1.6.1007.tar.gz - tar -xf openzwave-1.6.1007.tar.gz && rm openzwave-1.6.1007.tar.gz - cd openzwave-1.6.1007 && make > /dev/null 2>&1 && make install > /dev/null 2>&1 - ldconfig /usr/local/lib64 - cd /opt/iobroker - # echo "Openzwave is now installed..." -fi - -exit 0 diff --git a/arm64v8/scripts/userscript_everystart_example.sh b/arm64v8/scripts/userscript_everystart_example.sh deleted file mode 100644 index 9023677..0000000 --- a/arm64v8/scripts/userscript_everystart_example.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -# This is an example script file. -# To run the Script on every start of the container you have to rename it to userscript_everystart.sh. - -# You can add your advanced script code here! - -echo ' ' -echo "I'm your startscript userscript_everystart.sh. I will run on EVERY container startup." -echo ' ' - - -exit 0 diff --git a/arm64v8/scripts/userscript_firststart_example.sh b/arm64v8/scripts/userscript_firststart_example.sh deleted file mode 100644 index 4fef50d..0000000 --- a/arm64v8/scripts/userscript_firststart_example.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# This is an example script file. -# To run the Script on the first start of a new container you have to rename it to userscript_firststart.sh. - -# You can add your advanced script code here! - -echo ' ' -echo "I'm your startscript userscript_firststart.sh. I will run only on the FIRST startup of the container." -echo ' ' - -exit 0 diff --git a/debian/node12/Dockerfile b/debian/node12/Dockerfile index a05be5e..f4757e6 100644 --- a/debian/node12/Dockerfile +++ b/debian/node12/Dockerfile @@ -9,7 +9,7 @@ LABEL org.opencontainers.image.title="ioBroker Docker Image" \ ENV DEBIAN_FRONTEND noninteractive -# Install prerequisites +# Install prerequisites (including node) and generating locales RUN apt-get update && apt-get install -y \ curl \ gosu \ @@ -19,18 +19,15 @@ RUN apt-get update && apt-get install -y \ sudo \ udev \ wget \ - && rm -rf /var/lib/apt/lists/* - -# Install node -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ + # Generating locales + && sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ + && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ + && locale-gen \ + # Install node + && curl -sL https://deb.nodesource.com/setup_12.x | bash \ && apt-get update && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* -# Generating locales -RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ - && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ - && locale-gen - # Create scripts directorys and copy scripts RUN mkdir -p /opt/scripts/ \ && mkdir -p /opt/userscripts/ \ @@ -40,7 +37,7 @@ WORKDIR /opt/scripts/ COPY scripts/* ./ RUN chmod +x *.sh WORKDIR /opt/userscripts/ -COPY scripts/* ./ +COPY userscripts/* ./ RUN chmod +x *.sh # Install ioBroker @@ -51,19 +48,18 @@ RUN apt-get update \ && echo $(hostname) > /opt/scripts/.docker_config/.install_host \ && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ && echo $(hostname) > /opt/.firstrun \ + # Backup initial ioBroker and userscript folder + && tar -cf /opt/initial_iobroker.tar /opt/iobroker \ + && tar -cf /opt/initial_userscripts.tar /opt/userscripts \ && rm -rf /var/lib/apt/lists/* -# Backup initial ioBroker and userscript folder -RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \ - && tar -cf /opt/initial_userscripts.tar /opt/userscripts - # Setting up iobroker-user (shell and home directory) RUN chsh -s /bin/bash iobroker \ && usermod --home /opt/iobroker iobroker \ && usermod -u 1000 iobroker \ && groupmod -g 1000 iobroker -# Setting up ENVs +# Setting up default ENVs ENV DEBIAN_FRONTEND="teletype" \ LANG="de_DE.UTF-8" \ LANGUAGE="de_DE:de" \ diff --git a/debian/node14/Dockerfile b/debian/node14/Dockerfile index e3b629f..36ec884 100644 --- a/debian/node14/Dockerfile +++ b/debian/node14/Dockerfile @@ -9,7 +9,7 @@ LABEL org.opencontainers.image.title="ioBroker Docker Image" \ ENV DEBIAN_FRONTEND noninteractive -# Install prerequisites +# Install prerequisites (including node) and generating locales RUN apt-get update && apt-get install -y \ curl \ gosu \ @@ -19,18 +19,15 @@ RUN apt-get update && apt-get install -y \ sudo \ udev \ wget \ - && rm -rf /var/lib/apt/lists/* - -# Install node -RUN curl -sL https://deb.nodesource.com/setup_14.x | bash \ + # Generating locales + && sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ + && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ + && locale-gen \ + # Install node + && curl -sL https://deb.nodesource.com/setup_14.x | bash \ && apt-get update && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* -# Generating locales -RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \ - && sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \ - && locale-gen - # Create scripts directorys and copy scripts RUN mkdir -p /opt/scripts/ \ && mkdir -p /opt/userscripts/ \ @@ -40,7 +37,7 @@ WORKDIR /opt/scripts/ COPY scripts/* ./ RUN chmod +x *.sh WORKDIR /opt/userscripts/ -COPY scripts/* ./ +COPY userscripts/* ./ RUN chmod +x *.sh # Install ioBroker @@ -51,19 +48,18 @@ RUN apt-get update \ && echo $(hostname) > /opt/scripts/.docker_config/.install_host \ && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ && echo $(hostname) > /opt/.firstrun \ + # Backup initial ioBroker and userscript folder + && tar -cf /opt/initial_iobroker.tar /opt/iobroker \ + && tar -cf /opt/initial_userscripts.tar /opt/userscripts \ && rm -rf /var/lib/apt/lists/* -# Backup initial ioBroker and userscript folder -RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \ - && tar -cf /opt/initial_userscripts.tar /opt/userscripts - # Setting up iobroker-user (shell and home directory) RUN chsh -s /bin/bash iobroker \ && usermod --home /opt/iobroker iobroker \ && usermod -u 1000 iobroker \ && groupmod -g 1000 iobroker -# Setting up ENVs +# Setting up default ENVs ENV DEBIAN_FRONTEND="teletype" \ LANG="de_DE.UTF-8" \ LANGUAGE="de_DE:de" \ diff --git a/debian/scripts/iobroker_startup.sh b/debian/scripts/iobroker_startup.sh index b6f6dc1..b378f3d 100644 --- a/debian/scripts/iobroker_startup.sh +++ b/debian/scripts/iobroker_startup.sh @@ -75,12 +75,12 @@ echo "$(printf -- '-%.0s' {1..80})" echo ' ' # Adding ckeck file for easy docker detection by ioBroker -echo "$VERSION" > /opt/scripts/.docker_config/.thisisdocker +echo "${VERSION}" > /opt/scripts/.docker_config/.thisisdocker -# Installing/ updating additional packages and setting uid/gid +# Installing/updating additional packages, registering maintenance script and setting uid/gid if [ "$packages" != "" ] || [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] || [ -f /opt/.firstrun ] then - if [ -f /opt/.firstrun ] + if [ -f /opt/.firstrun ] then echo "Updating Linux packages on first run..." bash /opt/scripts/setup_packages.sh -update @@ -120,7 +120,7 @@ cd /opt/iobroker ##### -# Detecting ioBroker-Installation +# STEP 2 - Detecting ioBroker-Installation ##### echo "$(printf -- '-%.0s' {1..80})" echo "----- Step 2 of 5: Detecting ioBroker installation -----" @@ -131,6 +131,8 @@ 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 / + # Removing UUID generated on docker image build + iobroker unsetup echo "Done." elif [ -f /opt/iobroker/iobroker ] then @@ -167,14 +169,14 @@ then fi else echo "There is data detected in /opt/iobroker but it looks like it is no instance of ioBroker or a valid backup file!" - echo "Please check/ recreate mounted folder/ volume and start over." + echo "Please check/ recreate mounted folder or volume and start over." exit 1 fi echo ' ' ##### -# Checking ioBroker-Installation +# STEP 3 - Checking ioBroker-Installation ##### echo "$(printf -- '-%.0s' {1..80})" echo "----- Step 3 of 5: Checking ioBroker installation -----" @@ -196,16 +198,8 @@ echo "Fixing \"sudo-bug\" by replacing sudo in iobroker with gosu..." echo "Done." echo ' ' -# Checking for first run of a new installation and renaming ioBroker -if [ -f /opt/scripts/.docker_config/.install_host ] -then - echo "Looks like this is a new and empty installation of ioBroker." - echo "Hostname needs to be updated to " $(hostname)"..." - bash iobroker host $(cat /opt/scripts/.docker_config/.install_host) - rm -f /opt/scripts/.docker_config/.install_host - echo "Done." - echo ' ' -elif [ $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ] +# checking hostname in ioBroker to match container hostname +if [ $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ] then echo "Hostname in ioBroker does not match the hostname of this container." echo "Updating hostname to " $(hostname)"..." @@ -214,9 +208,27 @@ then echo ' ' fi +# Checking for first run of a new installation and renaming ioBroker +#if [ -f /opt/scripts/.docker_config/.install_host ] +#then +# echo "Looks like this is a new and empty installation of ioBroker." +# echo "Hostname needs to be updated to " $(hostname)"..." +# bash iobroker host $(cat /opt/scripts/.docker_config/.install_host) +# rm -f /opt/scripts/.docker_config/.install_host +# echo "Done." +# echo ' ' +#elif [ $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ] +#then +# echo "Hostname in ioBroker does not match the hostname of this container." +# echo "Updating hostname to " $(hostname)"..." +# bash iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') +# echo "Done." +# echo ' ' +#fi + ##### -# Setting up prerequisites for some ioBroker-adapters +# STEP 4 - Setting up prerequisites for some ioBroker-adapters ##### echo "$(printf -- '-%.0s' {1..80})" echo "----- Step 4 of 5: Applying special settings -----" @@ -485,7 +497,7 @@ rm -f /opt/.firstrun fi ##### -# Starting ioBroker +# STEP 5 - Starting ioBroker ##### echo "$(printf -- '-%.0s' {1..80})" echo "----- Step 5 of 5: ioBroker startup -----"