From 814cfae65724779cd15a2b566e8350b201784d58 Mon Sep 17 00:00:00 2001 From: buanet Date: Wed, 11 Oct 2023 09:20:33 +0200 Subject: [PATCH 01/31] add error handling for user scripts --- .VERSION | 2 +- CHANGELOG.md | 4 ++++ debian12/scripts/iobroker_startup.sh | 29 ++++++++++++++-------------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/.VERSION b/.VERSION index 8f80905..6c9bb72 100644 --- a/.VERSION +++ b/.VERSION @@ -1 +1 @@ -v9.0.1 \ No newline at end of file +v9.1.0-beta.1 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a15126..d766ebe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## Changelog +### v9.1.0-beta.1 (coming soon) +* enhance logging in iobroker_startup.sh +* add error handling for user scripts + ### v9.0.1 (10.10.2023) * fix issue with avahi setup ([#384](https://github.com/buanet/ioBroker.docker/issues/384); [#385 by @z1r0](https://github.com/buanet/ioBroker.docker/pull/385)) * add silent cleanup to setup_avahi.sh diff --git a/debian12/scripts/iobroker_startup.sh b/debian12/scripts/iobroker_startup.sh index 52da59f..c751b26 100644 --- a/debian12/scripts/iobroker_startup.sh +++ b/debian12/scripts/iobroker_startup.sh @@ -133,11 +133,7 @@ if [[ -f /opt/.docker_config/.first_run ]]; then if [[ "$offlinemode" = "true" ]]; then echo "OFFLINE_MODE is \"true\". Skipping Linux package updates on first run." else - if bash /opt/scripts/setup_packages.sh -update; then - echo " " - else - echo "Error: Updating failed." - fi + if ! bash /opt/scripts/setup_packages.sh -update; then echo "Failed."; fi fi echo " " # Installing packages from ENV @@ -145,11 +141,7 @@ if [[ -f /opt/.docker_config/.first_run ]]; then echo "PACKAGES is set, but OFFLINE_MODE is \"true\". Skipping Linux package installation." elif [[ "$packages" != "" ]]; then echo "PACKAGES is set. Installing the following additional Linux packages: ""$packages" - if bash /opt/scripts/setup_packages.sh -install; then - echo " " - else - echo "Error: Installation failed." - fi + if ! bash /opt/scripts/setup_packages.sh -install; then echo "Failed."; fi fi echo " " # Register maintenance script @@ -505,17 +497,24 @@ elif [[ -f /opt/userscripts/userscript_firststart.sh || -f /opt/userscripts/user 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." + if ! bash /opt/userscripts/userscript_firststart.sh; then + echo "Failed." + else + echo "Done." + fi 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." + if ! bash /opt/userscripts/userscript_everystart.sh; then + echo "Failed." + else + echo "Done." + fi fi + echo " " fi -echo " " + # Removing first run an fresh install markers when exists if [[ -f /opt/.docker_config/.first_run ]]; then rm -f /opt/.docker_config/.first_run; fi From 375d192c7ca02bcc9aca22ceb7b46723b5c72cee Mon Sep 17 00:00:00 2001 From: buanet Date: Fri, 3 Nov 2023 18:02:10 +0100 Subject: [PATCH 02/31] fix restore/ adding backup file selection --- CHANGELOG.md | 2 + debian12/scripts/iobroker.sh | 49 +++++++++++++++++------- debian12/scripts/maintenance.sh | 67 +++++++++++++++++++++++---------- 3 files changed, 85 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d766ebe..924593d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ ## Changelog ### v9.1.0-beta.1 (coming soon) +* fix restore/ adding backup file selection ([#394](https://github.com/buanet/ioBroker.docker/issues/394)) +* fix calling iob start|stop with parameters * enhance logging in iobroker_startup.sh * add error handling for user scripts diff --git a/debian12/scripts/iobroker.sh b/debian12/scripts/iobroker.sh index fdc55c2..edcb4d0 100644 --- a/debian12/scripts/iobroker.sh +++ b/debian12/scripts/iobroker.sh @@ -39,27 +39,48 @@ iob_diag () { fi } -if [ "$1" = "fix" ]; then # call iobroker fixer - iob_fix -elif [ "$1" = "node fix" ]; then # call iobroker node fixer - echo "The execution of this command is blocked as your ioBroker is running inside a Docker container!" - echo "To fix any issues with nodejs, please pull the latest version of the Docker image and recreate your container." -elif [ "$1" = "diag" ]; then # call iobroker diag script - iob_diag -elif [ "$1" = "start" ] || [ "$1" = "stop" ] || [ "$1" = "restart" ]; then # block execution of iobroker start | stop | restart - echo "The execution of this command is blocked as your ioBroker is running inside a Docker container!" - echo "For more details see ioBroker Docker image docs (https://docs.buanet.de/iobroker-docker-image/docs/) or use the maintenance script 'maintenance --help'." -elif [ "$1" = "m" ] || [ "$1" = "maint" ] || [ "$1" = "maintenance" ]; then # call iobroker maintenance script +# run iobroker maintenance script +iob_maint() { shift - if [ "$(id -u)" -eq 0 ]; then # check for execution as root + if [ "$(id -u)" -eq 0 ]; then gosu iobroker bash /opt/scripts/maintenance.sh "$@" else bash /opt/scripts/maintenance.sh "$@" fi -else # passing all other parameters to iobroker.js - if [ "$(id -u)" -eq 0 ]; then # check for execution as root +} + +# pass parameters and run iobroker.js +iob_run() { + if [ "$(id -u)" -eq 0 ]; then gosu iobroker node /opt/iobroker/node_modules/iobroker.js-controller/iobroker.js "$@" else node /opt/iobroker/node_modules/iobroker.js-controller/iobroker.js "$@" fi +} + +if [ "$1" = "fix" ]; then + # call iobroker fixer + iob_fix +elif [ "$1" = "node fix" ]; then + # call iobroker node fixer + echo "The execution of this command is blocked as your ioBroker is running inside a Docker container!" + echo "To fix any issues with nodejs, please pull the latest version of the Docker image and recreate your container." +elif [ "$1" = "diag" ]; then + # call iobroker diag script + iob_diag +elif [ "$1" = "start" ] || [ "$1" = "stop" ] || [ "$1" = "restart" ]; then + # block execution of iobroker start | stop | restart but pass start | stop for adapters + if [ ! "$2" ]; then + echo "The execution of this command is blocked as your ioBroker is running inside a Docker container!" + echo "For more details see ioBroker Docker image docs (https://docs.buanet.de/iobroker-docker-image/docs/) or use the maintenance script 'maintenance --help'." + else + # passing all other parameters to iobroker.js but check for execution as root + iob_run "$@" + fi +elif [ "$1" = "m" ] || [ "$1" = "maint" ] || [ "$1" = "maintenance" ]; then + # call iobroker maintenance script but check for execution as root + iob_maint "$@" +else + # passing all other parameters to iobroker.js but check for execution as root + iob_run "$@" fi diff --git a/debian12/scripts/maintenance.sh b/debian12/scripts/maintenance.sh index a3b2774..6357966 100644 --- a/debian12/scripts/maintenance.sh +++ b/debian12/scripts/maintenance.sh @@ -165,12 +165,12 @@ stop_iob() { if [[ "$killbyname" != yes ]]; then # pgrep exits with status 1 when there are no matches - while pgrep -u iobroker -f 'io.' > /dev/null; (( $? != 1 )); do + while pgrep -u iobroker -f 'io\..' > /dev/null; (( $? != 1 )); do if (($(date +%s) > timeout)); then echo -e "\nTimeout reached. Killing remaining processes..." - pgrep --list-full -u iobroker - pkill --signal SIGKILL -u iobroker -f 'io.' - echo "\nDone." + pgrep --list-full -u iobroker -f 'io\..' + pkill --signal SIGKILL -u iobroker -f 'io\..' + echo "Done." return fi sleep 1 @@ -184,6 +184,7 @@ stop_iob() { fi echo -e "Done." + echo " " } # restart container @@ -218,40 +219,68 @@ restore_iobroker() { echo "You are now going to perform a restore of your iobroker." echo "During the restore process, the container will automatically switch into maintenance mode and stop ioBroker." echo "Depending on the restart policy, your container will be stopped or restarted automatically after the restore." - + + # check autoconfirm if [[ "$autoconfirm" != yes ]]; then local reply read -rp 'Do you want to continue [yes/no]? ' reply - if [[ "$reply" == y || "$reply" == Y || "$reply" == yes ]]; then - : # continue - else - return 1 + if [[ "$reply" != y && "$reply" != Y && "$reply" != yes ]]; then + return 1 fi fi + echo " " + # check startup script running if check_starting > /dev/null; then echo "Startup script is still running." echo "Please check container log and wait until ioBroker is sucessfully started." - echo "Then try again." return 1 fi + # check mainenance mode if ! maintenance_enabled > /dev/null; then autoconfirm=yes enable_maintenance fi - echo -n "Restoring ioBroker... " + # list backup files + backup_dir="/opt/iobroker/backups" + backup_files=($(find $backup_dir -type f)) + backup_count=${#backup_files[@]} + + if [[ $backup_count -eq 0 ]]; then + echo "Ther are no backup files in $backup_dir." + echo "Please check and try again." + return 1 + elif [[ $backup_count -eq 1 ]]; then + selected_backup=$(basename "${backup_files[0]}") + echo "There is one backup file in $backup_dir." + else + # more than one backup file found, ask user to select + echo "There is more than one backup file in $backup_dir." + echo "Please select file for restore:" + for ((i=0; i<$backup_count; i++)); do + echo "$i: $(basename "${backup_files[$i]}")" + done + echo + + read -rp "Enter the number of the backup to restore (0-$((backup_count - 1))): " selected_number + selected_backup=$(basename "${backup_files[$selected_number]}") + fi + + # restoe backup + echo -n "Restoring ioBroker from $selected_backup... " set +e - bash iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1 - return=$? + bash iobroker restore "$selected_backup" > /opt/iobroker/log/restore.log 2>&1 + return_value=$? set -e - if [[ "$return" -ne 0 ]]; then - echo "Failed." - echo "For more details see \"/opt/iobroker/log/restore.log\"." - echo "Please check backup file location and permissions and try again." - return 1 + + if [[ "$return_value" -ne 0 ]]; then + echo "Failed." + echo "For more details see \"/opt/iobroker/log/restore.log\"." + echo "Please check backup file location and permissions and try again." + return 1 fi echo "Done." echo " " @@ -265,8 +294,8 @@ restore_iobroker() { echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" sleep 10 echo "Container will be stopped or restarted in 10 seconds..." - sleep 10 echo "stopping" > "$healthcheck" + sleep 10 pkill -u iobroker } From bf87667fc0c0644fa31e01ebeb7b5c6e7cae79f4 Mon Sep 17 00:00:00 2001 From: buanet Date: Fri, 3 Nov 2023 20:37:49 +0100 Subject: [PATCH 03/31] improve maintenance command by symlinking --- CHANGELOG.md | 3 ++- debian12/scripts/iobroker_startup.sh | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 924593d..badb3d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Changelog -### v9.1.0-beta.1 (coming soon) +### v9.1.0-beta.1 (03.11.2023) +* improve maintenance command by symlinking ([#390](https://github.com/buanet/ioBroker.docker/issues/390)) * fix restore/ adding backup file selection ([#394](https://github.com/buanet/ioBroker.docker/issues/394)) * fix calling iob start|stop with parameters * enhance logging in iobroker_startup.sh diff --git a/debian12/scripts/iobroker_startup.sh b/debian12/scripts/iobroker_startup.sh index c751b26..617b3dc 100644 --- a/debian12/scripts/iobroker_startup.sh +++ b/debian12/scripts/iobroker_startup.sh @@ -146,9 +146,9 @@ if [[ -f /opt/.docker_config/.first_run ]]; then echo " " # Register maintenance script echo -n "Registering maintenance script as command... " - echo "alias maintenance='/opt/scripts/maintenance.sh'" >> /etc/bash.bashrc - echo "alias maint='/opt/scripts/maintenance.sh'" >> /etc/bash.bashrc - echo "alias m='/opt/scripts/maintenance.sh'" >> /etc/bash.bashrc + ln -s /opt/scripts/maintenance.sh /bin/maintenance + ln -s /opt/scripts/maintenance.sh /bin/maint + ln -s /opt/scripts/maintenance.sh /bin/m echo "Done." else echo "This is not the first run of this container. Skipping first run preparation." From bc483cc5f01cd5ce675ca8a90f9bb9f121d8b975 Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 6 Nov 2023 15:49:22 +0100 Subject: [PATCH 04/31] small enhancements for beta testing --- .VERSION | 2 +- CHANGELOG.md | 16 ++++++++++------ debian12/Dockerfile | 4 ++++ debian12/scripts/iobroker_startup.sh | 23 ++++++++++------------- docs/README_docker_hub_buanet.md | 1 + docs/README_docker_hub_iobroker.md | 1 + 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/.VERSION b/.VERSION index 6c9bb72..6a80297 100644 --- a/.VERSION +++ b/.VERSION @@ -1 +1 @@ -v9.1.0-beta.1 \ No newline at end of file +v9.1.0-beta.2 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index badb3d7..a2acd4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,15 @@ ## Changelog -### v9.1.0-beta.1 (03.11.2023) -* improve maintenance command by symlinking ([#390](https://github.com/buanet/ioBroker.docker/issues/390)) -* fix restore/ adding backup file selection ([#394](https://github.com/buanet/ioBroker.docker/issues/394)) -* fix calling iob start|stop with parameters -* enhance logging in iobroker_startup.sh -* add error handling for user scripts +### v9.1.0-beta.2 (coming soon) +* add env PACKAGES_UPDATE and remove automatic package updates on first container start +* improve setuid/setgid handling during startup ([#397](https://github.com/buanet/ioBroker.docker/issues/397)) +* move maintenance script registration to dockerfile ([#390](https://github.com/buanet/ioBroker.docker/issues/390)) +* v9.1.0-beta.1 (03.11.2023) + * improve maintenance command by symlinking ([#390](https://github.com/buanet/ioBroker.docker/issues/390)) + * fix restore/ adding backup file selection ([#394](https://github.com/buanet/ioBroker.docker/issues/394)) + * fix calling iob start|stop with parameters + * enhance logging in iobroker_startup.sh + * add error handling for user scripts ### v9.0.1 (10.10.2023) * fix issue with avahi setup ([#384](https://github.com/buanet/ioBroker.docker/issues/384); [#385 by @z1r0](https://github.com/buanet/ioBroker.docker/pull/385)) diff --git a/debian12/Dockerfile b/debian12/Dockerfile index 4069a41..5b36c45 100644 --- a/debian12/Dockerfile +++ b/debian12/Dockerfile @@ -75,6 +75,10 @@ RUN apt-get update && apt-get upgrade -y \ && chown -R iobroker:iobroker /opt/scripts /opt/userscripts \ && chmod 755 /opt/scripts/*.sh \ && chmod 755 /opt/userscripts/*.sh \ + # register maintenance command + && ln -s /opt/scripts/maintenance.sh /bin/maintenance \ + && ln -s /opt/scripts/maintenance.sh /bin/maint \ + && ln -s /opt/scripts/maintenance.sh /bin/m \ # Clean up installation cache && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ && apt-get autoclean -y \ diff --git a/debian12/scripts/iobroker_startup.sh b/debian12/scripts/iobroker_startup.sh index 617b3dc..d47f364 100644 --- a/debian12/scripts/iobroker_startup.sh +++ b/debian12/scripts/iobroker_startup.sh @@ -17,17 +17,18 @@ offlinemode=$OFFLINE_MODE objectsdbhost=$IOB_OBJECTSDB_HOST objectsdbport=$IOB_OBJECTSDB_PORT objectsdbtype=$IOB_OBJECTSDB_TYPE -objectsdbname=$IOB_OBJECTSDB_NAME # new for sentinel support -objectsdbpass=$IOB_OBJECTSDB_PASS # new for auth support +objectsdbname=$IOB_OBJECTSDB_NAME +objectsdbpass=$IOB_OBJECTSDB_PASS packages=$PACKAGES +packagesupdate=$PACKAGES_UPDATE permissioncheck=$PERMISSION_CHECK setgid=$SETGID setuid=$SETUID statesdbhost=$IOB_STATESDB_HOST statesdbport=$IOB_STATESDB_PORT statesdbtype=$IOB_STATESDB_TYPE -statesdbname=$IOB_STATESDB_NAME # new for sentinel support -statesdbpass=$IOB_STATESDB_PASS # new for auth support +statesdbname=$IOB_STATESDB_NAME +statesdbpass=$IOB_STATESDB_PASS usbdevices=$USBDEVICES set -u @@ -132,10 +133,12 @@ if [[ -f /opt/.docker_config/.first_run ]]; then # Updating Linux packages if [[ "$offlinemode" = "true" ]]; then echo "OFFLINE_MODE is \"true\". Skipping Linux package updates on first run." - else + echo " " + elif [[ "$packagesupdate" = "true" ]]; then if ! bash /opt/scripts/setup_packages.sh -update; then echo "Failed."; fi + echo " " fi - echo " " + # Installing packages from ENV if [[ "$packages" != "" && "$offlinemode" = "true" ]]; then echo "PACKAGES is set, but OFFLINE_MODE is \"true\". Skipping Linux package installation." @@ -144,19 +147,13 @@ if [[ -f /opt/.docker_config/.first_run ]]; then if ! bash /opt/scripts/setup_packages.sh -install; then echo "Failed."; fi fi echo " " - # Register maintenance script - echo -n "Registering maintenance script as command... " - ln -s /opt/scripts/maintenance.sh /bin/maintenance - ln -s /opt/scripts/maintenance.sh /bin/maint - ln -s /opt/scripts/maintenance.sh /bin/m - echo "Done." else echo "This is not the first run of this container. Skipping first run preparation." fi echo " " # Setting UID and/ or GID -if [[ "$setgid" != "$(cat /etc/group | grep 'iobroker:' | cut -d':' -f3)" || "$setuid" != "$(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3)" ]]; then +if [[ "$setgid" != "$(id -u iobroker)" || "$setuid" != "$(id -u iobroker)" ]]; then echo "SETUID and/ or SETGID are set to custom values." echo -n "Changing UID to \"""$setuid""\" and GID to \"""$setgid""\"... " usermod -u "$setuid" iobroker diff --git a/docs/README_docker_hub_buanet.md b/docs/README_docker_hub_buanet.md index 1f83f72..8f0d50d 100644 --- a/docs/README_docker_hub_buanet.md +++ b/docs/README_docker_hub_buanet.md @@ -124,6 +124,7 @@ You could use environment variables to auto configure your ioBroker container on * `LC_ALL` (optional, default: de_DE.UTF-8) The following locales are pre-generated: de_DE.UTF-8, en_US.UTF-8 * `OFFLINE_MODE` (optional) Set `true` if your container has no or limited internet connection * `PACKAGES` (optional) Install additional Linux packages to your container, packages should be separated by whitespace like this: `package1 package2 package3`. +* `PACKAGES_UPDATE` (optional) Set `true` if you want to apply Linux package updates at the first start of a new container. * `PERMISSION_CHECK` (optional, default: true) Set "false" to skip checking and correcting all relevant permissions on container startup (Use at own risk!!!) * `SETGID` (default: 1000) In some cases it might be useful to specify the gid of the containers iobroker user to match an existing group on the docker host * `SETUID` (default: 1000) In some cases it might be useful to specify the uid of the containers iobroker user to match an existing user on the docker host diff --git a/docs/README_docker_hub_iobroker.md b/docs/README_docker_hub_iobroker.md index b3f8df1..7e260b3 100644 --- a/docs/README_docker_hub_iobroker.md +++ b/docs/README_docker_hub_iobroker.md @@ -126,6 +126,7 @@ You could use environment variables to auto configure your ioBroker container on * `LC_ALL` (optional, default: de_DE.UTF-8) The following locales are pre-generated: de_DE.UTF-8, en_US.UTF-8 * `OFFLINE_MODE` (optional) Set `true` if your container has no or limited internet connection * `PACKAGES` (optional) Install additional Linux packages to your container, packages should be separated by whitespace like this: `package1 package2 package3`. +* `PACKAGES_UPDATE` (optional) Set `true` if you want to apply Linux package updates at the first start of a new container. * `PERMISSION_CHECK` (optional, default: true) Set "false" to skip checking and correcting all relevant permissions on container startup (Use at own risk!!!) * `SETGID` (default: 1000) In some cases it might be useful to specify the gid of the containers iobroker user to match an existing group on the docker host * `SETUID` (default: 1000) In some cases it might be useful to specify the uid of the containers iobroker user to match an existing user on the docker host From e1910d6f3b90b649e7d0d87ef514899ebb1a8fa3 Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 6 Nov 2023 15:55:15 +0100 Subject: [PATCH 05/31] add logging for new env --- debian12/scripts/iobroker_startup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/debian12/scripts/iobroker_startup.sh b/debian12/scripts/iobroker_startup.sh index d47f364..8ba3215 100644 --- a/debian12/scripts/iobroker_startup.sh +++ b/debian12/scripts/iobroker_startup.sh @@ -100,6 +100,7 @@ if [[ "$statesdbname" != "" ]]; then echo -n "----- " && echo if [[ "$statesdbpass" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_STATESDB_PASS: "***")" && echo " -----"; fi if [[ "$offlinemode" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" OFFLINE_MODE: "$offlinemode")" && echo " -----"; fi if [[ "$packages" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" PACKAGES: "$packages")" && echo " -----"; fi +if [[ "$packagesupdate" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" PACKAGES_UPDATE: "$packagesupdate")" && echo " -----"; fi if [[ "$permissioncheck" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" PERMISSION_CHECK: "$permissioncheck")" && 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 From 68b285d55f8bcc39bc2d3248ef0b9347255f574f Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 6 Nov 2023 16:01:12 +0100 Subject: [PATCH 06/31] update comment --- debian12/scripts/iobroker_startup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian12/scripts/iobroker_startup.sh b/debian12/scripts/iobroker_startup.sh index 8ba3215..0e3b01e 100644 --- a/debian12/scripts/iobroker_startup.sh +++ b/debian12/scripts/iobroker_startup.sh @@ -216,7 +216,7 @@ echo "----- Step 3 of 5: Checking ioBroker installation echo "$(printf -- '-%.0s' {1..80})" echo " " -# Backing up original iobroker executable to fix sudo bug with gosu +# Backing up and replace original iobroker executable to fix sudo bug with gosu if [[ -n $(cmp /opt/scripts/iobroker.sh /opt/iobroker/iobroker) ]]; then echo -n "Replacing ioBroker executable to fix sudo bug... " cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak From cef5ed1ef5c6e8b97e07a8ab01d27e109d0c0efb Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 6 Nov 2023 16:53:34 +0100 Subject: [PATCH 07/31] fix typos in logging --- debian12/scripts/iobroker_startup.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/debian12/scripts/iobroker_startup.sh b/debian12/scripts/iobroker_startup.sh index 0e3b01e..e624871 100644 --- a/debian12/scripts/iobroker_startup.sh +++ b/debian12/scripts/iobroker_startup.sh @@ -125,7 +125,7 @@ fi # STEP 1 - Preparing container ##### echo "$(printf -- '-%.0s' {1..80})" -echo "----- Step 1 of 5: Preparing container -----" +echo "----- Step 1 of 5: Preparing Container -----" echo "$(printf -- '-%.0s' {1..80})" echo " " @@ -170,7 +170,7 @@ cd /opt/iobroker # STEP 2 - Detecting ioBroker-Installation ##### echo "$(printf -- '-%.0s' {1..80})" -echo "----- Step 2 of 5: Detecting ioBroker installation -----" +echo "----- Step 2 of 5: Detecting ioBroker Installation -----" echo "$(printf -- '-%.0s' {1..80})" echo " " @@ -184,10 +184,10 @@ elif [[ -f /opt/iobroker/iobroker ]]; then 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 echo "IoBroker backup file detected in /opt/iobroker." if [[ "$debug" == "true" ]]; then echo "[DEBUG] Backup file name: " "$(ls *_backupiobroker.tar.gz)"; fi - echo "Since Docker Image v8, automatic initial restore is no longer supported!" + echo "Since Docker image v8, automatic initial restore is no longer supported!" echo "IoBroker will start with a fresh installation, while your backup file will be copied into the backup directory." echo "You will be able to restore your backup file manually by using the backitup adapter or the containers maintenance script." - echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." + echo "For more information see ioBroker Docker image docs (https://docs.buanet.de/iobroker-docker-image/docs/)." echo " " echo -n "Copying backup file and restoring initial ioBroker installation... " mv /opt/iobroker/*.tar.gz /opt/ @@ -212,7 +212,7 @@ echo " " # STEP 3 - Checking ioBroker-Installation ##### echo "$(printf -- '-%.0s' {1..80})" -echo "----- Step 3 of 5: Checking ioBroker installation -----" +echo "----- Step 3 of 5: Checking ioBroker Installation -----" echo "$(printf -- '-%.0s' {1..80})" echo " " @@ -297,7 +297,7 @@ elif [[ "$multihost" == "" || "$multihost" == "false" ]]; then else echo "IOB_MULTIHOST is set, but the value is not valid. Please check your configuration." if [[ "$debug" == "true" ]]; then echo "[DEBUG] IOB_MULTIHOST = ""$multihost"; fi - echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/#environment-variables-env)." + echo "For more information see ioBroker Docker image docs (https://docs.buanet.de/iobroker-docker-image/docs/#environment-variables-env)." stop_on_error fi @@ -319,7 +319,7 @@ if [[ -f /opt/iobroker/.fresh_install && "$multihost" != "slave" ]]; then echo "Done." echo " " else - echo -n "Checking Database connection... " + echo -n "Checking database connection... " set +e if gosu iobroker iob uuid &> /dev/null; then echo "Done." @@ -332,7 +332,7 @@ else echo "$errormsg" fi echo "Please check your configuration and try again." - echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs)." + echo "For more information see ioBroker Docker image docs (https://docs.buanet.de/iobroker-docker-image/docs)." stop_on_error fi set -e @@ -419,12 +419,12 @@ fi # STEP 4 - Setting up special sessting for ioBroker-adapters ##### echo "$(printf -- '-%.0s' {1..80})" -echo "----- Step 4 of 5: Applying special settings -----" +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." -echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." +echo "For more information see ioBroker Docker image docs (https://docs.buanet.de/iobroker-docker-image/docs/)." echo " " # Checking ENV for Adminport @@ -476,7 +476,7 @@ if [[ "$usbdevices" != "" && "$usbdevices" != "none" ]]; then else echo "Looks like the device \"""$i""\" does not exist." echo "Did you mount it correctly by using the \"--device\" option?" - echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/#mounting-usb-devices)." + echo "For more information see ioBroker Docker image docs (https://docs.buanet.de/iobroker-docker-image/docs/#mounting-usb-devices)." stop_on_error fi done @@ -522,7 +522,7 @@ if [[ -f /opt/iobroker/.fresh_install ]]; then rm -f /opt/iobroker/.fresh_instal # STEP 5 - Starting ioBroker ##### echo "$(printf -- '-%.0s' {1..80})" -echo "----- Step 5 of 5: ioBroker startup -----" +echo "----- Step 5 of 5: ioBroker Startup -----" echo "$(printf -- '-%.0s' {1..80})" echo " " echo "Starting ioBroker... " From b6260636477d11558178e54481a8e09356544115 Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 6 Nov 2023 16:57:56 +0100 Subject: [PATCH 08/31] enhance logging/ fix typos --- CHANGELOG.md | 1 + debian12/scripts/setup_packages.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2acd4f..4d9844b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Changelog ### v9.1.0-beta.2 (coming soon) +* enhance logging/ fix typos * add env PACKAGES_UPDATE and remove automatic package updates on first container start * improve setuid/setgid handling during startup ([#397](https://github.com/buanet/ioBroker.docker/issues/397)) * move maintenance script registration to dockerfile ([#390](https://github.com/buanet/ioBroker.docker/issues/390)) diff --git a/debian12/scripts/setup_packages.sh b/debian12/scripts/setup_packages.sh index cdaa589..0a4df46 100644 --- a/debian12/scripts/setup_packages.sh +++ b/debian12/scripts/setup_packages.sh @@ -58,7 +58,7 @@ if [[ "$1" == "-install" ]]; then fi done elif [[ "$1" == "-update" ]]; then - echo -n "Updating Linux packages on first run... " + echo -n "PACKAGES_UPDATE is set. Updating Linux packages on first run... " apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 return1=$? apt-get -q -y upgrade >> /opt/scripts/setup_packages.log 2>&1 From 2eb7f4e71f359e39c681467623227e4e90077768 Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 6 Nov 2023 18:14:25 +0100 Subject: [PATCH 09/31] fix typo --- debian12/scripts/iobroker_startup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian12/scripts/iobroker_startup.sh b/debian12/scripts/iobroker_startup.sh index e624871..fd4291e 100644 --- a/debian12/scripts/iobroker_startup.sh +++ b/debian12/scripts/iobroker_startup.sh @@ -154,7 +154,7 @@ fi echo " " # Setting UID and/ or GID -if [[ "$setgid" != "$(id -u iobroker)" || "$setuid" != "$(id -u iobroker)" ]]; then +if [[ "$setgid" != "$(id -u iobroker)" || "$setuid" != "$(id -g iobroker)" ]]; then echo "SETUID and/ or SETGID are set to custom values." echo -n "Changing UID to \"""$setuid""\" and GID to \"""$setgid""\"... " usermod -u "$setuid" iobroker From 92821ab262211c68b3e6beddf5adb86a076b01b5 Mon Sep 17 00:00:00 2001 From: buanet Date: Tue, 14 Nov 2023 20:29:17 +0100 Subject: [PATCH 10/31] improve shebang in scripts --- CHANGELOG.md | 1 + debian12/scripts/healthcheck.sh | 2 +- debian12/scripts/iobroker.sh | 2 +- debian12/scripts/setup_avahi.sh | 2 +- debian12/scripts/setup_iob_db.sh | 2 +- debian12/scripts/setup_packages.sh | 2 +- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d9844b..3a8bcaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Changelog ### v9.1.0-beta.2 (coming soon) +* improve shebang in scripts for downgrade and portability * enhance logging/ fix typos * add env PACKAGES_UPDATE and remove automatic package updates on first container start * improve setuid/setgid handling during startup ([#397](https://github.com/buanet/ioBroker.docker/issues/397)) diff --git a/debian12/scripts/healthcheck.sh b/debian12/scripts/healthcheck.sh index 5c95005..5c57498 100644 --- a/debian12/scripts/healthcheck.sh +++ b/debian12/scripts/healthcheck.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Script checks health of running container diff --git a/debian12/scripts/iobroker.sh b/debian12/scripts/iobroker.sh index edcb4d0..b02e1fc 100644 --- a/debian12/scripts/iobroker.sh +++ b/debian12/scripts/iobroker.sh @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/usr/bin/env bash # run iob fix iob_fix () { diff --git a/debian12/scripts/setup_avahi.sh b/debian12/scripts/setup_avahi.sh index 26c7cd5..34499a8 100644 --- a/debian12/scripts/setup_avahi.sh +++ b/debian12/scripts/setup_avahi.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ] then diff --git a/debian12/scripts/setup_iob_db.sh b/debian12/scripts/setup_iob_db.sh index df1d679..7a20fe8 100644 --- a/debian12/scripts/setup_iob_db.sh +++ b/debian12/scripts/setup_iob_db.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # reading env debug=$DEBUG diff --git a/debian12/scripts/setup_packages.sh b/debian12/scripts/setup_packages.sh index 0a4df46..4a2e579 100644 --- a/debian12/scripts/setup_packages.sh +++ b/debian12/scripts/setup_packages.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # bash strict mode set -euo pipefail From 6c34c0a0819b28769a4033d32a24e2aa2ad2ddee Mon Sep 17 00:00:00 2001 From: buanet Date: Tue, 14 Nov 2023 20:45:10 +0100 Subject: [PATCH 11/31] add --force to restore in maintenance script --- CHANGELOG.md | 1 + debian12/scripts/maintenance.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a8bcaf..fc85da2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Changelog ### v9.1.0-beta.2 (coming soon) +* add --force to restore in maintenance script * improve shebang in scripts for downgrade and portability * enhance logging/ fix typos * add env PACKAGES_UPDATE and remove automatic package updates on first container start diff --git a/debian12/scripts/maintenance.sh b/debian12/scripts/maintenance.sh index 6357966..8de246b 100644 --- a/debian12/scripts/maintenance.sh +++ b/debian12/scripts/maintenance.sh @@ -272,7 +272,7 @@ restore_iobroker() { # restoe backup echo -n "Restoring ioBroker from $selected_backup... " set +e - bash iobroker restore "$selected_backup" > /opt/iobroker/log/restore.log 2>&1 + bash iobroker restore "$selected_backup" --force > /opt/iobroker/log/restore.log 2>&1 return_value=$? set -e From 59ffff608a996f4cdcefb8b70371651b2ac6d0ac Mon Sep 17 00:00:00 2001 From: buanet Date: Fri, 17 Nov 2023 18:40:08 +0100 Subject: [PATCH 12/31] change target branch for dependabot --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 257a9e2..1c50b7e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,4 +5,4 @@ updates: directory: "/" schedule: interval: "daily" - target-branch: "main" + target-branch: "beta" From c6b0d307b563db91ef2fb8063f9cf30c26d1c84d Mon Sep 17 00:00:00 2001 From: buanet Date: Fri, 17 Nov 2023 22:54:04 +0100 Subject: [PATCH 13/31] prepare new beta --- .VERSION | 2 +- CHANGELOG.md | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.VERSION b/.VERSION index 6a80297..83be1c0 100644 --- a/.VERSION +++ b/.VERSION @@ -1 +1 @@ -v9.1.0-beta.2 \ No newline at end of file +v9.1.0-beta.3 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index fc85da2..692f19f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,13 @@ ## Changelog -### v9.1.0-beta.2 (coming soon) +### v9.1.0-beta.3 (coming soon) * add --force to restore in maintenance script * improve shebang in scripts for downgrade and portability -* enhance logging/ fix typos -* add env PACKAGES_UPDATE and remove automatic package updates on first container start -* improve setuid/setgid handling during startup ([#397](https://github.com/buanet/ioBroker.docker/issues/397)) -* move maintenance script registration to dockerfile ([#390](https://github.com/buanet/ioBroker.docker/issues/390)) +* v9.1.0-beta.2 (06.11.2023) + * enhance logging/ fix typos + * add env PACKAGES_UPDATE and remove automatic package updates on first container start + * improve setuid/setgid handling during startup ([#397](https://github.com/buanet/ioBroker.docker/issues/397)) + * move maintenance script registration to dockerfile ([#390](https://github.com/buanet/ioBroker.docker/issues/390)) * v9.1.0-beta.1 (03.11.2023) * improve maintenance command by symlinking ([#390](https://github.com/buanet/ioBroker.docker/issues/390)) * fix restore/ adding backup file selection ([#394](https://github.com/buanet/ioBroker.docker/issues/394)) From 5c97b2a041e961fbf13ff4bda347fa1f5d5fd4e0 Mon Sep 17 00:00:00 2001 From: buanet Date: Thu, 23 Nov 2023 15:53:08 +0100 Subject: [PATCH 14/31] release v9.1.0-beta.3 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 692f19f..0f290c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## Changelog -### v9.1.0-beta.3 (coming soon) +### v9.1.0-beta.3 (23.11.2023) * add --force to restore in maintenance script * improve shebang in scripts for downgrade and portability * v9.1.0-beta.2 (06.11.2023) From fa9e09ed1bb95817bcb8e2315148eb878ba01b37 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Nov 2023 14:57:28 +0000 Subject: [PATCH 15/31] Bump actions/checkout from 4.1.0 to 4.1.1 Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.0 to 4.1.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4.1.0...v4.1.1) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/build-debian12-beta.yml | 4 ++-- .github/workflows/build-debian12-dev.yml | 4 ++-- .github/workflows/build-debian12-latest.yml | 4 ++-- .github/workflows/update-docker-readme.yml | 2 +- .github/workflows/version-checks.yml | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-debian12-beta.yml b/.github/workflows/build-debian12-beta.yml index b68336a..d297556 100644 --- a/.github/workflows/build-debian12-beta.yml +++ b/.github/workflows/build-debian12-beta.yml @@ -24,7 +24,7 @@ jobs: run: echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - name: Checkout repo - uses: actions/checkout@v4.1.0 + uses: actions/checkout@v4.1.1 with: repository: 'buanet/ioBroker.docker' ref: ${{ env.RELEASE_TAG }} @@ -96,7 +96,7 @@ jobs: run: echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - name: Checkout repo - uses: actions/checkout@v4.1.0 + uses: actions/checkout@v4.1.1 with: repository: 'buanet/ioBroker.docker' ref: ${{ env.RELEASE_TAG }} diff --git a/.github/workflows/build-debian12-dev.yml b/.github/workflows/build-debian12-dev.yml index 145f2bd..ecd7e28 100644 --- a/.github/workflows/build-debian12-dev.yml +++ b/.github/workflows/build-debian12-dev.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v4.1.0 + uses: actions/checkout@v4.1.1 with: repository: 'buanet/ioBroker.docker' @@ -85,7 +85,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v4.1.0 + uses: actions/checkout@v4.1.1 with: repository: 'buanet/ioBroker.docker' diff --git a/.github/workflows/build-debian12-latest.yml b/.github/workflows/build-debian12-latest.yml index 987405b..f6a7499 100644 --- a/.github/workflows/build-debian12-latest.yml +++ b/.github/workflows/build-debian12-latest.yml @@ -18,7 +18,7 @@ jobs: echo "RELEASE_TAG=$LATESTRELEASE" >> $GITHUB_ENV - name: Checkout repo - uses: actions/checkout@v4.1.0 + uses: actions/checkout@v4.1.1 with: repository: 'buanet/ioBroker.docker' ref: ${{ env.RELEASE_TAG }} @@ -94,7 +94,7 @@ jobs: echo "RELEASE_TAG=$LATESTRELEASE" >> $GITHUB_ENV - name: Checkout repo - uses: actions/checkout@v4.1.0 + uses: actions/checkout@v4.1.1 with: repository: 'buanet/ioBroker.docker' ref: ${{ env.RELEASE_TAG }} diff --git a/.github/workflows/update-docker-readme.yml b/.github/workflows/update-docker-readme.yml index 16e6160..a2e202d 100644 --- a/.github/workflows/update-docker-readme.yml +++ b/.github/workflows/update-docker-readme.yml @@ -12,7 +12,7 @@ jobs: update-docker-readme: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4.1.0 + - uses: actions/checkout@v4.1.1 - name: Update Docker Hub Readme (buanet) uses: peter-evans/dockerhub-description@v3.4.2 diff --git a/.github/workflows/version-checks.yml b/.github/workflows/version-checks.yml index b6edb23..5e8d6f4 100644 --- a/.github/workflows/version-checks.yml +++ b/.github/workflows/version-checks.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v4.1.0 + uses: actions/checkout@v4.1.1 with: repository: 'buanet/ioBroker.docker' token: ${{ secrets.ACTIONS_PAT }} From 3f3cfdb07790c7d3f024a02ac134525ac7c084af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Nov 2023 10:00:35 +0000 Subject: [PATCH 16/31] Bump docker/build-push-action from 5.0.0 to 5.1.0 Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.0.0 to 5.1.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v5.0.0...v5.1.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build-debian12-beta.yml | 4 ++-- .github/workflows/build-debian12-dev.yml | 4 ++-- .github/workflows/build-debian12-latest.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-debian12-beta.yml b/.github/workflows/build-debian12-beta.yml index d297556..99e8611 100644 --- a/.github/workflows/build-debian12-beta.yml +++ b/.github/workflows/build-debian12-beta.yml @@ -70,7 +70,7 @@ jobs: password: ${{ secrets.PACKAGES_PASS }} - name: Build and push Docker image - uses: docker/build-push-action@v5.0.0 + uses: docker/build-push-action@v5.1.0 with: context: ./debian12 file: ./debian12/Dockerfile @@ -142,7 +142,7 @@ jobs: password: ${{ secrets.PACKAGES_PASS }} - name: Build and push Docker image - uses: docker/build-push-action@v5.0.0 + uses: docker/build-push-action@v5.1.0 with: context: ./debian12 file: ./debian12/Dockerfile diff --git a/.github/workflows/build-debian12-dev.yml b/.github/workflows/build-debian12-dev.yml index ecd7e28..9913a82 100644 --- a/.github/workflows/build-debian12-dev.yml +++ b/.github/workflows/build-debian12-dev.yml @@ -64,7 +64,7 @@ jobs: password: ${{ secrets.PACKAGES_PASS }} - name: Build and push Docker image - uses: docker/build-push-action@v5.0.0 + uses: docker/build-push-action@v5.1.0 with: context: ./debian12 file: ./debian12/Dockerfile @@ -130,7 +130,7 @@ jobs: password: ${{ secrets.PACKAGES_PASS }} - name: Build and push Docker image - uses: docker/build-push-action@v5.0.0 + uses: docker/build-push-action@v5.1.0 with: context: ./debian12 file: ./debian12/Dockerfile diff --git a/.github/workflows/build-debian12-latest.yml b/.github/workflows/build-debian12-latest.yml index f6a7499..9583b48 100644 --- a/.github/workflows/build-debian12-latest.yml +++ b/.github/workflows/build-debian12-latest.yml @@ -64,7 +64,7 @@ jobs: password: ${{ secrets.PACKAGES_PASS }} - name: Build and push Docker image - uses: docker/build-push-action@v5.0.0 + uses: docker/build-push-action@v5.1.0 with: context: ./debian12 file: ./debian12/Dockerfile @@ -133,7 +133,7 @@ jobs: password: ${{ secrets.DOCKER_PASS_IOB }} - name: Build and push Docker image - uses: docker/build-push-action@v5.0.0 + uses: docker/build-push-action@v5.1.0 with: context: ./debian12 file: ./debian12/Dockerfile From feb02a7a33bb7ef9fa706b4735f317d2f9f9d0e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Nov 2023 10:00:42 +0000 Subject: [PATCH 17/31] Bump actions/github-script from 6.4.1 to 7.0.1 Bumps [actions/github-script](https://github.com/actions/github-script) from 6.4.1 to 7.0.1. - [Release notes](https://github.com/actions/github-script/releases) - [Commits](https://github.com/actions/github-script/compare/v6.4.1...v7.0.1) --- updated-dependencies: - dependency-name: actions/github-script dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build-debian12-beta.yml | 2 +- .github/workflows/build-debian12-dev.yml | 2 +- .github/workflows/build-debian12-latest.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-debian12-beta.yml b/.github/workflows/build-debian12-beta.yml index d297556..0896583 100644 --- a/.github/workflows/build-debian12-beta.yml +++ b/.github/workflows/build-debian12-beta.yml @@ -166,7 +166,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Delete images - uses: actions/github-script@v6.4.1 + uses: actions/github-script@v7.0.1 with: github-token: ${{ secrets.PACKAGES_PASS }} script: | diff --git a/.github/workflows/build-debian12-dev.yml b/.github/workflows/build-debian12-dev.yml index ecd7e28..454fe45 100644 --- a/.github/workflows/build-debian12-dev.yml +++ b/.github/workflows/build-debian12-dev.yml @@ -150,7 +150,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Delete images - uses: actions/github-script@v6.4.1 + uses: actions/github-script@v7.0.1 with: github-token: ${{ secrets.PACKAGES_PASS }} script: | diff --git a/.github/workflows/build-debian12-latest.yml b/.github/workflows/build-debian12-latest.yml index f6a7499..d14990d 100644 --- a/.github/workflows/build-debian12-latest.yml +++ b/.github/workflows/build-debian12-latest.yml @@ -156,7 +156,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Delete images - uses: actions/github-script@v6.4.1 + uses: actions/github-script@v7.0.1 with: github-token: ${{ secrets.PACKAGES_PASS }} script: | From d1bbbfff58f0f187a2645abb425abc7402d2dc5c Mon Sep 17 00:00:00 2001 From: buanet Date: Thu, 14 Dec 2023 17:16:19 +0100 Subject: [PATCH 18/31] add js-controller version check to restore --- debian12/scripts/maintenance.sh | 71 ++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 6 deletions(-) diff --git a/debian12/scripts/maintenance.sh b/debian12/scripts/maintenance.sh index 8de246b..b4815db 100644 --- a/debian12/scripts/maintenance.sh +++ b/debian12/scripts/maintenance.sh @@ -223,7 +223,6 @@ restore_iobroker() { # check autoconfirm if [[ "$autoconfirm" != yes ]]; then local reply - read -rp 'Do you want to continue [yes/no]? ' reply if [[ "$reply" != y && "$reply" != Y && "$reply" != yes ]]; then return 1 @@ -255,10 +254,11 @@ restore_iobroker() { return 1 elif [[ $backup_count -eq 1 ]]; then selected_backup=$(basename "${backup_files[0]}") - echo "There is one backup file in $backup_dir." + echo "Selected backup file is \"$selected_backup\"." else # more than one backup file found, ask user to select - echo "There is more than one backup file in $backup_dir." + echo "There are more than one backup file in \"$backup_dir\"." + echo ' ' echo "Please select file for restore:" for ((i=0; i<$backup_count; i++)); do echo "$i: $(basename "${backup_files[$i]}")" @@ -267,10 +267,69 @@ restore_iobroker() { read -rp "Enter the number of the backup to restore (0-$((backup_count - 1))): " selected_number selected_backup=$(basename "${backup_files[$selected_number]}") + echo ' ' + echo "Selected backup file is \"$selected_backup\"." + echo ' ' fi - # restoe backup - echo -n "Restoring ioBroker from $selected_backup... " + # extract backup.json from backup + tar -xvzf $backup_dir/$selected_backup -C $backup_dir --strip-components=1 "backup/backup.json" > /dev/null 2>&1 + # write js-controller versions from backup.json into array + jq_output=$(jq --arg TITLE "JS controller" -r '.objects[] | select(.value.common.title == $TITLE)' $backup_dir/backup.json) + # remove backup.json + rm $backup_dir/backup.json + + result=() + while read -r line; do + entry=$(echo "$line" | jq -r '.value.common.installedVersion') + result+=("$entry") + done <<< "$(echo "$jq_output" | jq -c '.')" + + # check for empty array + if [[ "${#result[@]}" -eq 0 ]]; then + echo "There was a problem detecting the js-controller version in the seclected backup file." + return 1 + else + # check if all found js-controller versions are equal (for multihost systems!) + first_version=${result[0]} + all_versions_equal=true + for i in "${result[@]}"; do + version=$i + if [[ "$version" != "$first_version" ]]; then + all_versions_equal=false + break + fi + done + + if [[ "$all_versions_equal" != true ]]; then + echo "Detected different js-controller versions in the selected backup file." + return 1 + fi + fi + + # compare installed js-controller version with version from backup file + echo -n "Checking js-controller versions... " + installed_version=$(iob version js-controller) + echo "Done." + echo ' ' + echo "Installed js-controller version: $installed_version" + echo "Backup js-controller version: $first_version" + echo ' ' + + if [[ "$first_version" != "$installed_version" ]]; then + echo "The installed js-controller version is different from the version in the selected backup file." + echo "If you continue, the script will use the \"--force\" option to restore your backup." + echo "Although this is normally safe with small version differences, you should know," + echo "that the recommended way is to first install the same js-controller version before restoring the backup file." + local reply + read -rp 'Do you want to continue [yes/no]? ' reply + if [[ "$reply" != y && "$reply" != Y && "$reply" != yes ]]; then + return 1 + fi + fi + + echo -n "Restoring ioBroker from \"$selected_backup\"... " + set +e bash iobroker restore "$selected_backup" --force > /opt/iobroker/log/restore.log 2>&1 return_value=$? @@ -344,4 +403,4 @@ for arg in "$@"; do esac done -"${run[@]}" \ No newline at end of file +"${run[@]}" From 4c83128e84f52bef56911b11b168404da0c0081e Mon Sep 17 00:00:00 2001 From: buanet Date: Thu, 14 Dec 2023 17:52:01 +0100 Subject: [PATCH 19/31] ad option to stop startup --- debian12/scripts/iobroker_startup.sh | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/debian12/scripts/iobroker_startup.sh b/debian12/scripts/iobroker_startup.sh index fd4291e..f38bf23 100644 --- a/debian12/scripts/iobroker_startup.sh +++ b/debian12/scripts/iobroker_startup.sh @@ -36,7 +36,7 @@ pkill_timeout=10 # timeout for iobroker shutdown in seconds # Stop on error function stop_on_error() { - if [[ "$debug" == "true" ]]; then + if [[ "$debug" == "true" || "$debug" == "42" ]]; then echo " " echo "[DEBUG] Debug mode prevents the container from exiting on errors." echo "[DEBUG] This enables you to investigate or fix your issue on the command line." @@ -109,7 +109,18 @@ echo "$(printf -- '-%.0s' {1..80})" echo " " # Debug logging notice -if [[ "$debug" == "true" ]]; then +if [[ "$debug" == "42" ]]; then + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!! DON'T PANIC! !!!!" + echo "!!!! Just grab your towel. Environment variable DEBUG is set to 42. !!!!" + echo "!!!! What looks like the answer to everything is just a undocumented value. !!!!" + echo "!!!! Startup script will do nothing, except keeping your container running. !!!!" + echo "!!!! This might be useful for investigating errors during startup. !!!!" + echo "!!!! If you did this by mistake, just remove environment variable DEBUG. !!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo " " + stop_on_error +elif [[ "$debug" == "true" ]]; then echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "!!!! DEBUG LOG ACTIVE !!!!" echo "!!!! Environment variable DEBUG is set to true. !!!!" @@ -121,6 +132,7 @@ if [[ "$debug" == "true" ]]; then echo " " fi + ##### # STEP 1 - Preparing container ##### From 014f6e5fc8a7c2b61768cb2825f52f2b2f1552af Mon Sep 17 00:00:00 2001 From: buanet Date: Thu, 14 Dec 2023 22:35:09 +0100 Subject: [PATCH 20/31] fix logging --- debian12/scripts/iobroker_startup.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/debian12/scripts/iobroker_startup.sh b/debian12/scripts/iobroker_startup.sh index f38bf23..8418264 100644 --- a/debian12/scripts/iobroker_startup.sh +++ b/debian12/scripts/iobroker_startup.sh @@ -118,7 +118,6 @@ if [[ "$debug" == "42" ]]; then echo "!!!! This might be useful for investigating errors during startup. !!!!" echo "!!!! If you did this by mistake, just remove environment variable DEBUG. !!!!" echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo " " stop_on_error elif [[ "$debug" == "true" ]]; then echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" From 1404e8b0db64bb692acdd0f035ddc2373288575b Mon Sep 17 00:00:00 2001 From: buanet Date: Thu, 4 Jan 2024 20:29:20 +0100 Subject: [PATCH 21/31] test dev workflow --- .github/workflows/build-debian12-dev.yml | 50 ++++++++++++------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/build-debian12-dev.yml b/.github/workflows/build-debian12-dev.yml index 7acbf3c..6c9f49a 100644 --- a/.github/workflows/build-debian12-dev.yml +++ b/.github/workflows/build-debian12-dev.yml @@ -143,28 +143,28 @@ jobs: buanet/iobroker:dev-node${{ vars.EXPERIMENTAL_NODE_VERSION }}, ghcr.io/buanet/iobroker:dev-node${{ vars.EXPERIMENTAL_NODE_VERSION }} - delete-untagged-images: - if: ${{ always() }} - needs: [build-with-recommended-node, build-with-experimental-node] - name: Delete untagged images from GitHub Container Registry - runs-on: ubuntu-latest - steps: - - name: Delete images - uses: actions/github-script@v7.0.1 - 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 +# delete-untagged-images: +# if: ${{ always() }} +# needs: [build-with-recommended-node, build-with-experimental-node] +# name: Delete untagged images from GitHub Container Registry +# runs-on: ubuntu-latest +# steps: +# - name: Delete images +# uses: actions/github-script@v7.0.1 +# 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 e5b55180b8151889a23bd8b356521c7c1506cc57 Mon Sep 17 00:00:00 2001 From: buanet Date: Thu, 4 Jan 2024 20:41:42 +0100 Subject: [PATCH 22/31] test --- debian12/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian12/Dockerfile b/debian12/Dockerfile index 5b36c45..9457390 100644 --- a/debian12/Dockerfile +++ b/debian12/Dockerfile @@ -42,7 +42,7 @@ RUN apt-get update && apt-get upgrade -y \ && mkdir -p /etc/apt/keyrings \ && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE}.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ - && apt-get update && apt-get install -y nodejs \ + && apt-get update && apt-get install -y nodejs npm \ # Install node-gyp && npm install --production -g node-gyp \ # Generating locales From 38fbe167986777bfc1d1553ad9bdb93304eebe4b Mon Sep 17 00:00:00 2001 From: buanet Date: Thu, 4 Jan 2024 21:04:39 +0100 Subject: [PATCH 23/31] temp fix --- debian12/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/debian12/Dockerfile b/debian12/Dockerfile index 9457390..3865686 100644 --- a/debian12/Dockerfile +++ b/debian12/Dockerfile @@ -34,6 +34,8 @@ RUN apt-get update && apt-get upgrade -y \ procps \ python3 \ python3-dev \ + # temporär! + sudo \ tar \ tzdata \ udev \ From c86a60853796e0a69979885559d8c884df499ca8 Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 8 Jan 2024 10:34:45 +0100 Subject: [PATCH 24/31] prepare beta.4 --- .VERSION | 2 +- .github/workflows/build-debian12-beta.yml | 26 - .github/workflows/build-debian12-dev.yml | 26 - .github/workflows/build-debian12-latest.yml | 26 - CHANGELOG.md | 12 +- debian11/node16/Dockerfile | 98 --- debian11/node18/Dockerfile | 102 --- debian11/scripts/healthcheck.sh | 20 - debian11/scripts/iobroker_startup.sh | 581 ------------------ debian11/scripts/maintenance.sh | 312 ---------- debian11/scripts/setup_avahi.sh | 38 -- debian11/scripts/setup_iob_db.sh | 357 ----------- debian11/scripts/setup_packages.sh | 84 --- debian11/scripts/setup_zwave.sh | 17 - .../userscript_everystart_example.sh | 13 - .../userscript_firststart_example.sh | 12 - debian12/scripts/healthcheck.sh | 3 + debian12/scripts/iobroker_startup.sh | 15 +- 18 files changed, 24 insertions(+), 1720 deletions(-) delete mode 100644 debian11/node16/Dockerfile delete mode 100644 debian11/node18/Dockerfile delete mode 100644 debian11/scripts/healthcheck.sh delete mode 100644 debian11/scripts/iobroker_startup.sh delete mode 100644 debian11/scripts/maintenance.sh delete mode 100644 debian11/scripts/setup_avahi.sh delete mode 100644 debian11/scripts/setup_iob_db.sh delete mode 100644 debian11/scripts/setup_packages.sh delete mode 100644 debian11/scripts/setup_zwave.sh delete mode 100644 debian11/userscripts/userscript_everystart_example.sh delete mode 100644 debian11/userscripts/userscript_firststart_example.sh diff --git a/.VERSION b/.VERSION index 83be1c0..aac3eaf 100644 --- a/.VERSION +++ b/.VERSION @@ -1 +1 @@ -v9.1.0-beta.3 \ No newline at end of file +v9.1.0-beta.4 \ No newline at end of file diff --git a/.github/workflows/build-debian12-beta.yml b/.github/workflows/build-debian12-beta.yml index c49a940..0ce29bf 100644 --- a/.github/workflows/build-debian12-beta.yml +++ b/.github/workflows/build-debian12-beta.yml @@ -158,29 +158,3 @@ jobs: ghcr.io/buanet/iobroker:${{ env.version }}-node${{ vars.EXPERIMENTAL_NODE_VERSION }} provenance: false outputs: type=image,name=target,annotation-index.org.opencontainers.image.description=Official Docker image for ioBroker smarthome software (https://www.iobroker.net) - - delete-untagged-images: - if: ${{ always() }} - needs: [build-with-recommended-node, build-with-experimental-node] - name: Delete untagged images from GitHub Container Registry - runs-on: ubuntu-latest - steps: - - name: Delete images - uses: actions/github-script@v7.0.1 - 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-debian12-dev.yml b/.github/workflows/build-debian12-dev.yml index 6c9f49a..319d16d 100644 --- a/.github/workflows/build-debian12-dev.yml +++ b/.github/workflows/build-debian12-dev.yml @@ -142,29 +142,3 @@ jobs: tags: | buanet/iobroker:dev-node${{ vars.EXPERIMENTAL_NODE_VERSION }}, ghcr.io/buanet/iobroker:dev-node${{ vars.EXPERIMENTAL_NODE_VERSION }} - -# delete-untagged-images: -# if: ${{ always() }} -# needs: [build-with-recommended-node, build-with-experimental-node] -# name: Delete untagged images from GitHub Container Registry -# runs-on: ubuntu-latest -# steps: -# - name: Delete images -# uses: actions/github-script@v7.0.1 -# 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-debian12-latest.yml b/.github/workflows/build-debian12-latest.yml index a5ff93b..873d411 100644 --- a/.github/workflows/build-debian12-latest.yml +++ b/.github/workflows/build-debian12-latest.yml @@ -148,29 +148,3 @@ jobs: iobroker/iobroker:${{ env.version }}, provenance: false outputs: type=image,name=target,annotation-index.org.opencontainers.image.description=Official Docker image for ioBroker smarthome software (https://www.iobroker.net) - - delete-untagged-images: - if: ${{ always() }} - needs: [build-latest-for-buanet, build-latest-for-iobroker] - name: Delete untagged images from GitHub Container Registry - runs-on: ubuntu-latest - steps: - - name: Delete images - uses: actions/github-script@v7.0.1 - 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/CHANGELOG.md b/CHANGELOG.md index 0f290c4..5e81e40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,14 @@ ## Changelog -### v9.1.0-beta.3 (23.11.2023) -* add --force to restore in maintenance script -* improve shebang in scripts for downgrade and portability +### v9.1.0-beta.4 (08.01.2023) +* add trap for debugging mode ([#421](https://github.com/buanet/ioBroker.docker/issues/421)) +* fix ownership of userscripts ([#423 by @EugenMayer](https://github.com/buanet/ioBroker.docker/pull/423)) +* add strict mode to healthcheck.sh ([#424 by @EugenMayer](https://github.com/buanet/ioBroker.docker/pull/424)) +* fixes for ci process and dockerfile +* remove deprecated files from repo +* v9.1.0-beta.3 (23.11.2023) + * add --force to restore in maintenance script + * improve shebang in scripts for downgrade and portability * v9.1.0-beta.2 (06.11.2023) * enhance logging/ fix typos * add env PACKAGES_UPDATE and remove automatic package updates on first container start diff --git a/debian11/node16/Dockerfile b/debian11/node16/Dockerfile deleted file mode 100644 index 32323ae..0000000 --- a/debian11/node16/Dockerfile +++ /dev/null @@ -1,98 +0,0 @@ -FROM debian:bullseye-slim - -LABEL org.opencontainers.image.title="Official ioBroker Docker Image" \ - org.opencontainers.image.description="Officical Docker image for ioBroker smarthome software (https://www.iobroker.net)" \ - org.opencontainers.image.documentation="https://github.com/buanet/ioBroker.docker#readme" \ - org.opencontainers.image.authors="André Germann " \ - org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ - org.opencontainers.image.source="https://github.com/buanet/ioBroker.docker" \ - org.opencontainers.image.base.name="docker.io/library/debian:bullseye-slim" \ - org.opencontainers.image.version="${VERSION}" \ - org.opencontainers.image.created="${DATI}" - -ENV DEBIAN_FRONTEND noninteractive - -# Install prerequisites (including node) and generating locales -RUN apt-get update && apt-get install -y \ - apt-utils \ - cifs-utils \ - curl \ - gosu \ - iputils-ping \ - jq \ - locales \ - nfs-common \ - procps \ - python3 \ - python3-dev \ - sudo \ - tar \ - tzdata \ - udev \ - wget \ - # Install node - && curl -sL https://deb.nodesource.com/setup_16.x | bash \ - && apt-get update && apt-get install -y nodejs \ - # Install node-gyp - && npm install -g node-gyp \ - # 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 - -# Create directorys and copy scripts -COPY scripts /opt/scripts -COPY userscripts /opt/userscripts -RUN chmod 777 /opt/scripts/ \ - && chmod 777 /opt/userscripts/ \ - && chmod +x /opt/scripts/*.sh \ - && chmod +x /opt/userscripts/*.sh - -# Prepare and install ioBroker -RUN mkdir -p /opt/scripts/.docker_config/ \ - && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ - && echo "${VERSION}" > /opt/scripts/.docker_config/.thisisdocker \ - && echo $(hostname) > /opt/.firstrun \ - # Run installer - && curl -sL https://iobroker.net/install.sh | bash - \ - # Deleting UUID from build - && iobroker unsetup -y \ - # Backup initial ioBroker and userscript folder - && tar -cf /opt/initial_iobroker.tar /opt/iobroker \ - && tar -cf /opt/initial_userscripts.tar /opt/userscripts \ - # Setting up iobroker-user (shell, home dir and rights) - && chsh -s /bin/bash iobroker \ - && usermod --home /opt/iobroker iobroker \ - && usermod -u 1000 iobroker \ - && groupmod -g 1000 iobroker \ - && chown root:iobroker /usr/sbin/gosu \ - && chmod +s /usr/sbin/gosu \ - # Clean up installation cache - && apt-get autoclean -y \ - && apt-get autoremove \ - && apt-get clean \ - && rm -rf /tmp/* /var/tmp/* \ - && rm -rf /root/.cache/* /root/.npm/* \ - && rm -rf /var/lib/apt/lists/* - -# Setting up default 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 - -# Change work dir -WORKDIR /opt/iobroker/ - -# 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/debian11/node18/Dockerfile b/debian11/node18/Dockerfile deleted file mode 100644 index 3435eac..0000000 --- a/debian11/node18/Dockerfile +++ /dev/null @@ -1,102 +0,0 @@ -FROM debian:bullseye-slim - -LABEL org.opencontainers.image.title="Official ioBroker Docker Image" \ - org.opencontainers.image.description="Official Docker image for ioBroker smarthome software (https://www.iobroker.net)" \ - org.opencontainers.image.documentation="https://github.com/buanet/ioBroker.docker#readme" \ - org.opencontainers.image.authors="André Germann " \ - org.opencontainers.image.url="https://github.com/buanet/ioBroker.docker" \ - org.opencontainers.image.source="https://github.com/buanet/ioBroker.docker" \ - org.opencontainers.image.base.name="docker.io/library/debian:bullseye-slim" \ - org.opencontainers.image.version="${VERSION}" \ - org.opencontainers.image.created="${DATI}" - -ENV DEBIAN_FRONTEND noninteractive - -# Copy scripts -COPY scripts /opt/scripts -COPY userscripts /opt/userscripts - -# Install prerequisites (including node) and generating locales -RUN apt-get update && apt-get install -y \ - apt-utils \ - cifs-utils \ - curl \ - gosu \ - iputils-ping \ - jq \ - locales \ - nfs-common \ - procps \ - python3 \ - python3-dev \ - sudo \ - tar \ - tzdata \ - udev \ - wget \ - # Install node - && curl -sL https://deb.nodesource.com/setup_18.x | bash \ - && apt-get update && apt-get install -y nodejs \ - # Install node-gyp - && npm install -g node-gyp \ - # 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 \ - # Change permissions for scripts - && chmod 777 /opt/scripts/ \ - && chmod 777 /opt/userscripts/ \ - && chmod +x /opt/scripts/*.sh \ - && chmod +x /opt/userscripts/*.sh \ - # Prepare - && mkdir -p /opt/scripts/.docker_config/ \ - && echo "starting" > /opt/scripts/.docker_config/.healthcheck \ - && echo "${VERSION}" > /opt/scripts/.docker_config/.thisisdocker \ - && echo "true" > /opt/.first_run \ - # Run installer - && curl -sL https://iobroker.net/install.sh | bash - \ - # Deleting UUID from build - && iobroker unsetup -y \ - && echo "true" > /opt/iobroker/.fresh_install \ - # Backup initial ioBroker and userscript folder - && tar -cf /opt/initial_iobroker.tar /opt/iobroker \ - && tar -cf /opt/initial_userscripts.tar /opt/userscripts \ - # Setting up iobroker-user (shell, home dir and rights) - && chsh -s /bin/bash iobroker \ - && usermod --home /opt/iobroker iobroker \ - && usermod -u 1000 iobroker \ - && groupmod -g 1000 iobroker \ - && chown root:iobroker /usr/sbin/gosu \ - && chmod +s /usr/sbin/gosu \ - # Clean up installation cache - && apt-get autoclean -y \ - && apt-get autoremove \ - && apt-get clean \ - && rm -rf /tmp/* /var/tmp/* \ - && rm -rf /root/.cache/* /root/.npm/* \ - && rm -rf /var/lib/apt/lists/* - -# Setting up default 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 - -# Change work dir -WORKDIR /opt/iobroker/ - -# Healthcheck -HEALTHCHECK --interval=15s --timeout=5s --retries=5 \ - CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"] - -# Volumes for persistent data -VOLUME ["/opt/iobroker"] - -# Run startup-script -ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"] diff --git a/debian11/scripts/healthcheck.sh b/debian11/scripts/healthcheck.sh deleted file mode 100644 index d55d1f4..0000000 --- a/debian11/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/debian11/scripts/iobroker_startup.sh b/debian11/scripts/iobroker_startup.sh deleted file mode 100644 index 3131964..0000000 --- a/debian11/scripts/iobroker_startup.sh +++ /dev/null @@ -1,581 +0,0 @@ -#!/usr/bin/env bash - -# bash strict mode -set -euo pipefail - -# Setting healthcheck status to "starting" -echo "starting" > /opt/scripts/.docker_config/.healthcheck - -# Reading ENV -set +u -adminport=$IOB_ADMINPORT -avahi=$AVAHI -backitup=$IOB_BACKITUP_EXTDB -debug=$DEBUG -multihost=$IOB_MULTIHOST -offlinemode=$OFFLINE_MODE -objectsdbhost=$IOB_OBJECTSDB_HOST -objectsdbport=$IOB_OBJECTSDB_PORT -objectsdbtype=$IOB_OBJECTSDB_TYPE -objectsdbname=$IOB_OBJECTSDB_NAME # new for sentinel support -objectsdbpass=$IOB_OBJECTSDB_PASS # new for auth support -packages=$PACKAGES -permissioncheck=$PERMISSION_CHECK -setgid=$SETGID -setuid=$SETUID -statesdbhost=$IOB_STATESDB_HOST -statesdbport=$IOB_STATESDB_PORT -statesdbtype=$IOB_STATESDB_TYPE -statesdbname=$IOB_STATESDB_NAME # new for sentinel support -statesdbpass=$IOB_STATESDB_PASS # new for auth support -usbdevices=$USBDEVICES -zwave=$ZWAVE -set -u - -pkill_timeout=10 # timeout for iobroker shutdown in seconds - -# Stop on error function -stop_on_error() { - if [[ "$debug" == "true" ]]; then - echo " " - echo "[DEBUG] Debug mode prevents the container from exiting on errors." - echo "[DEBUG] This enables you to investigate or fix your issue on the command line." - echo "[DEBUG] If you want to stop or restart your container you have to do it manually." - echo "[DEBUG] IoBroker is not running!" - tail -f /dev/null - else - echo " " - echo "This Script will exit now." - exit 1 - fi -} - -# Getting date and time for logging -dati=$(date '+%Y-%m-%d %H:%M:%S') - -# Logging header -echo " " -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 "----- ██╗ ██████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ ██████╗ -----" -echo "----- ██║ ██╔═══██╗ ██╔══██╗ ██╔══██╗ ██╔═══██╗ ██║ ██╔╝ ██╔════╝ ██╔══██╗ -----" -echo "----- ██║ ██║ ██║ ██████╔╝ ██████╔╝ ██║ ██║ █████╔╝ █████╗ ██████╔╝ -----" -echo "----- ██║ ██║ ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██╔═██╗ ██╔══╝ ██╔══██╗ -----" -echo "----- ██║ ╚██████╔╝ ██████╔╝ ██║ ██║ ╚██████╔╝ ██║ ██╗ ███████╗ ██║ ██║ -----" -echo "----- ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝ -----" -echo "----- -----" -echo "----- Welcome to your ioBroker Docker container! -----" -echo "----- Startupscript is now running! -----" -echo "----- Please be patient! -----" -echo "$(printf -- '-%.0s' {1..80})" -echo " " -echo "$(printf -- '-%.0s' {1..80})" -echo "----- System Information -----" -echo -n "----- " && echo -n "$(printf "%-20s %-28s" arch: "$(uname -m)")" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-20s %-28s" hostname: "$(hostname)")" && echo " -----" -echo "----- -----" -echo "----- Version Information -----" -echo -n "----- " && echo -n "$(printf "%-20s %-28s" image: "${VERSION}")" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-20s %-28s" build: "${BUILD}")" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-20s %-28s" node: "$(node -v)")" && echo " -----" -echo -n "----- " && echo -n "$(printf "%-20s %-28s" npm: "$(npm -v)")" && echo " -----" -echo "----- -----" -echo "----- Environment Variables -----" -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 [[ "$debug" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" DEBUG: "$debug")" && echo " -----"; fi -if [[ "$backitup" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_BACKITUP_EXTDB: "$backitup")" && echo " -----"; fi -if [[ "$multihost" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_MULTIHOST: "$multihost")" && echo " -----"; fi -if [[ "$objectsdbtype" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_OBJECTSDB_TYPE: "$objectsdbtype")" && 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 [[ "$objectsdbname" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_OBJECTSDB_NAME: "$objectsdbname")" && echo " -----"; fi -if [[ "$objectsdbpass" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_OBJECTSDB_PASS: "***")" && echo " -----"; fi -if [[ "$statesdbtype" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_STATESDB_TYPE: "$statesdbtype")" && 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 [[ "$statesdbname" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_STATESDB_NAME: "$statesdbname")" && echo " -----"; fi -if [[ "$statesdbpass" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_STATESDB_PASS: "***")" && echo " -----"; fi -if [[ "$offlinemode" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" OFFLINE_MODE: "$offlinemode")" && echo " -----"; fi -if [[ "$packages" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" PACKAGES: "$packages")" && echo " -----"; fi -if [[ "$permissioncheck" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" PERMISSION_CHECK: "$permissioncheck")" && 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 [[ "$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 " " - -# Debug logging notice -if [[ "$debug" == "true" ]]; then - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "!!!! DEBUG LOG ACTIVE !!!!" - echo "!!!! Environment variable DEBUG is set to true. !!!!" - echo "!!!! This will extend the logging output and may slow down container start. !!!!" - echo "!!!! Please make sure to deactivate if no longer needed. !!!!" - echo "!!!! For more information see ioBroker Docker image documentation: !!!!" - echo "!!!! https://docs.buanet.de/iobroker-docker-image/docs/ !!!!" - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo " " -fi - -##### -# STEP 1 - Preparing container -##### -echo "$(printf -- '-%.0s' {1..80})" -echo "----- Step 1 of 5: Preparing container -----" -echo "$(printf -- '-%.0s' {1..80})" -echo " " - -# Actions running on first start only -if [[ -f /opt/.first_run ]]; then - # Updating Linux packages - if [[ "$offlinemode" = "true" ]]; then - echo "OFFLINE_MODE is \"true\". Skipping Linux package updates on first run." - else - bash /opt/scripts/setup_packages.sh -update - fi - echo " " - # Installing packages from ENV - if [[ "$packages" != "" && "$offlinemode" = "true" ]]; then - echo "PACKAGES is set, but OFFLINE_MODE is \"true\". Skipping Linux package installation." - elif [[ "$packages" != "" ]]; then - echo "PACKAGES is set. Installing the following additional Linux packages: ""$packages" - bash /opt/scripts/setup_packages.sh -install - fi - echo " " - # Register maintenance script - echo -n "Registering maintenance script as command... " - echo "alias maintenance='/opt/scripts/maintenance.sh'" >> /etc/bash.bashrc - echo "alias maint='/opt/scripts/maintenance.sh'" >> /etc/bash.bashrc - echo "alias m='/opt/scripts/maintenance.sh'" >> /etc/bash.bashrc - echo "Done." -else - echo "This is not the first run of this container. Skipping first run preparation." -fi -echo " " - -# Setting UID and/ or GID -if [[ "$setgid" != "$(cat /etc/group | grep 'iobroker:' | cut -d':' -f3)" || "$setuid" != "$(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3)" ]]; then - echo "SETUID and/ or SETGID are set to custom values." - echo -n "Changing UID to \"""$setuid""\" and GID to \"""$setgid""\"... " - usermod -u "$setuid" iobroker - groupmod -og "$setgid" iobroker - echo "Done." - echo " " -fi - -# Change directory for next steps -cd /opt/iobroker - -##### -# STEP 2 - Detecting ioBroker-Installation -##### -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 ]]; then - echo "There is no data detected in /opt/iobroker." - echo -n "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\"." -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 - echo "IoBroker backup file detected in /opt/iobroker." - if [[ "$debug" == "true" ]]; then echo "[DEBUG] Backup file name: " "$(ls *_backupiobroker.tar.gz)"; fi - echo "Since Docker Image v8, automatic initial restore is no longer supported!" - echo "IoBroker will start with a fresh installation, while your backup file will be copied into the backup directory." - echo "You will be able to restore your backup file manually by using the backitup adapter or the containers maintenance script." - echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." - echo " " - echo -n "Copying backup file and restoring initial ioBroker installation... " - mv /opt/iobroker/*.tar.gz /opt/ - tar -xf /opt/initial_iobroker.tar -C / - mkdir /opt/iobroker/backups - mv /opt/*.tar.gz /opt/iobroker/backups/ - # fixing permission errors during restore - chown -R "$setuid":"$setgid" /opt/iobroker - echo "Done." -else - echo "There is data detected in /opt/iobroker but it looks like it is no instance of ioBroker!" - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] Detected files:" - ls -al - fi - echo "Please check/ recreate mounted folder or volume and try again." - stop_on_error -fi -echo " " - -##### -# STEP 3 - Checking ioBroker-Installation -##### -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" -if [[ "$permissioncheck" == "false" ]]; then - echo "PERMISSION_CHECK is set to false. Use this at your own risk!" -else - echo -n "(Re)setting permissions (This might take a while! Please be patient!)... " - chown -R "$setuid":"$setgid" /opt/iobroker - chown -R "$setuid":"$setgid" /opt/scripts - echo "Done." -fi -echo " " - -# Backing up original iobroker-file and changing sudo to gosu -echo -n "Fixing \"sudo-bug\" by replacing sudo 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 multihost and db setup -if [[ "$multihost" == "master" || "$multihost" == "slave" ]]; then - # multihost enabled - if [[ "$multihost" == "master" ]]; then - set +e - bash /opt/scripts/setup_iob_db.sh -master - return=$? - set -e - if [[ "$return" -ne 0 ]]; then stop_on_error; fi - elif [[ "$multihost" == "slave" ]]; then - set +e - bash /opt/scripts/setup_iob_db.sh -slave - return=$? - set -e - if [[ "$return" -ne 0 ]]; then stop_on_error; fi - fi -elif [[ "$multihost" == "" || "$multihost" == "false" ]]; then - # no multihost, only debug output - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] Checking multihost settings... " - echo "[DEBUG] No multihost settings detected." - echo "[DEBUG] Done." - echo " " - fi - # checking custom objects db settings - if [[ "$objectsdbtype" != "" || "$objectsdbhost" != "" || "$objectsdbport" != "" ]]; then - set +e - bash /opt/scripts/setup_iob_db.sh -objectsdb - return=$? - set -e - if [[ "$return" -ne 0 ]]; then stop_on_error; fi - else - #no custom objects db settings, only debug output - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] Checking custom objects db settings... " - echo "[DEBUG] No custom objects db settings detected." - echo "[DEBUG] Done." - echo " " - fi - fi - # checking custom states db settings - if [[ "$statesdbtype" != "" || "$statesdbhost" != "" || "$statesdbport" != "" ]]; then - set +e - bash /opt/scripts/setup_iob_db.sh -statesdb - return=$? - set -e - if [[ "$return" -ne 0 ]]; then stop_on_error; fi - else - #no custom states db settings, only debug output - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] Checking custom states db settings... " - echo "[DEBUG] No custom states db settings detected." - echo "[DEBUG] Done." - echo " " - fi - fi -else - echo "IOB_MULTIHOST is set, but the value is not valid. Please check your configuration." - if [[ "$debug" == "true" ]]; then echo "[DEBUG] IOB_MULTIHOST = ""$multihost"; fi - echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/#environment-variables-env)." - stop_on_error -fi - -# if restored a fresh install, running "iob setup first" for database init (but not on slaves!), otherwise check database connection -if [[ -f /opt/iobroker/.fresh_install && "$multihost" != "slave" ]]; then - echo -n "Initializing a fresh installation of ioBroker... " - set +e - bash iob setup first > /opt/iobroker/log/iob_setup_first.log 2>&1 - return=$? - set -e - rm -f /opt/iobroker/.fresh_install - if [[ "$return" -ne 0 ]]; then - echo "Failed." - echo "For more details see \"/opt/iobroker/log/iob_setup_first.log\"." - echo "Please check your configuration and try again." - stop_on_error - fi - echo "Done." - echo " " -else - echo -n "Checking Database connection... " - set +e - if iob uuid &> /dev/null; then - echo "Done." - echo " " - else - errormsg=$(iob uuid 2>&1 | sed 's/^/[DEBUG] /') - echo "Failed." - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] Error message: " - echo "$errormsg" - fi - echo "Please check your configuration and try again." - echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs)." - stop_on_error - fi - set -e -fi - -# hostname check -if [[ "$multihost" == "slave" ]]; then - echo "IOB_MULTIHOST is set to \"slave\". Hostname check will be skipped." - echo " " -else - # get admin instance and hostname - set +e - admininstance=$(bash iobroker list instances | grep 'enabled' | grep -m 1 -o 'system.adapter.admin..') - set -e - if [[ "$admininstance" != "" ]]; then - if [[ "$debug" == "true" ]]; then echo "[DEBUG] Detected admin instance is:" "$admininstance"; fi - adminhostname=$(bash iobroker object get "$admininstance" --pretty | grep -oP '(?<="host": ")[^"]*') - if [[ "$debug" == "true" ]]; then echo "[DEBUG] Detected admin hostname is:" "$adminhostname"; fi - else - set +e - admininstance=$(bash iobroker list instances | grep 'disabled' | grep -m 1 -o 'system.adapter.admin..') - set -e - if [[ "$admininstance" != "" ]]; then - if [[ "$debug" == "true" ]]; then echo "[DEBUG] Detected admin instance is disabled."; fi - if [[ "$debug" == "true" ]]; then echo "[DEBUG] Detected admin instance is:" "$admininstance"; fi - adminhostname=$(bash iobroker object get "$admininstance" --pretty | grep -oP '(?<="host": ")[^"]*') - if [[ "$debug" == "true" ]]; then echo "[DEBUG] Detected admin hostname is:" "$adminhostname"; fi - else - echo "There was a problem detecting the admin instance of your iobroker." - echo "Make sure the ioBroker installation you use has an admin instance or try again with a fresh installation and restore your configuration." - echo "For more details see https://docs.buanet.de/iobroker-docker-image/docs/#restore" - stop_on_error - fi - fi - # check hostname - if [[ "$adminhostname" != "" && "$adminhostname" != "$(hostname)" ]]; then - echo "Hostname in ioBroker does not match the hostname of this container." - echo -n "Updating hostname to \"""$(hostname)""\"... " - bash iobroker host "$adminhostname" - echo "Done." - echo " " - elif [[ "$adminhostname" = "$(hostname)" ]]; then - echo "Hostname in ioBroker matches the hostname of this container." - echo "No action required." - echo " " - else - echo "There was a problem checking the hostname." - stop_on_error - fi -fi - -# extended debug output -if [[ "$debug" == "true" && "$multihost" != "slave" ]]; then - echo "[DEBUG] Collecting some more ioBroker debug information... " - echo " " - # get information and send to array - IFS=$'\n' - instances_array=("$(iob list instances)") - repos_array=("$(iob repo list)") - updates_array=("$(iob update)") - # list iob instances - echo "[DEBUG] ##### iobroker list instances #####" - for i in "${instances_array[@]}" - do - echo "$i" - done - echo " " - echo "[DEBUG] ##### iobroker repo list #####" - for i in "${repos_array[@]}" - do - echo "$i" - done - echo " " - echo "[DEBUG] ##### iobroker update #####" - for i in "${updates_array[@]}" - do - echo "$i" - done - echo " " - unset IFS -fi - -##### -# STEP 4 - Setting up special sessting for ioBroker-adapters -##### -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." -echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." -echo " " - -# Checking ENV for Adminport -if [[ "$adminport" != "" && "$multihost" != "slave" ]]; then - adminportold=$(bash iobroker object get "$admininstance" --pretty | grep -oP '(?<="port": )[^,]*') - admininstanceshort=$(echo "$admininstance" | grep -m 1 -o 'admin..') - if [[ "$adminport" != "$adminportold" ]]; then - echo "IOB_ADMINPORT is set and does not match port configured in ioBroker." - if [[ "$debug" == "true" ]]; then echo "[DEBUG] Detected Admin Port in ioBroker: " "$adminportold"; fi - echo "Setting Adminport to \"""$adminport""\"... " - bash iobroker set "$admininstanceshort" --port "$adminport" - echo "Done." - echo " " - fi -fi - -# Checking ENV for Backitup (external database backups) -if [[ "$backitup" == "true" ]]; then - echo -n "IOB_BACKITUP_EXTDB is \"true\". Unlocking features..." - echo "true" > /opt/scripts/.docker_config/.backitup - echo "Done." - echo " " -fi - -# Checking ENV for AVAHI -if [[ "$avahi" = "true" && "$offlinemode" = "true" ]]; then - echo "AVAHI is \"true\", but OFFLINE_MODE is also \"true\". Skipping Avahi daemon setup." -elif [[ "$avahi" = "true" ]]; then - echo "AVAHI is \"true\". Running setup script... " - chmod 755 /opt/scripts/setup_avahi.sh - bash /opt/scripts/setup_avahi.sh - echo "Done." - echo " " -fi - -# Checking ENV for Z-WAVE -if [[ "$zwave" = "true" && "$offlinemode" = "true" ]]; then - echo "ZWAVE is \"true\", but OFFLINE_MODE is also \"true\". Skipping Z-Wave setup." -elif [[ "$zwave" = "true" ]]; then - echo "ZWAVE is \"true\". Running setup script... " - chmod 755 /opt/scripts/setup_zwave.sh - bash /opt/scripts/setup_zwave.sh - echo "Done." - echo " " -fi - -# checking ENV for USBDEVICES -if [[ "$usbdevices" != "" && "$usbdevices" != "none" ]]; then - echo "USBDEVICES is set." - IFS=';' read -ra devicearray <<< "$usbdevices" - for i in "${devicearray[@]}" - do - if [[ -e "$i" ]]; then - echo -n "Setting permissions for \"""$i""\"... " - chown root:dialout "$i" - chmod g+rw "$i" - echo "Done." - if [[ "$debug" == "true" ]]; then echo "[DEBUG] Permissions set: " "$(ls -al "$i")"; fi - else - echo "Looks like the device \"""$i""\" does not exist." - echo "Did you mount it correctly by using the \"--device\" option?" - echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/#mounting-usb-devices)." - stop_on_error - fi - done - echo " " -fi - -# Checking for Userscripts in /opt/userscripts -if [[ $(find /opt/userscripts -type f | wc -l) -lt 1 ]]; then - echo -n "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." -elif [[ -f /opt/userscripts/userscript_firststart.sh || -f /opt/userscripts/userscript_everystart.sh ]]; then - if [[ -f /opt/userscripts/userscript_firststart.sh && -f /opt/.first_run ]]; 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." - 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." - fi -fi -echo " " - -# Removing first run an fresh install markers when exists -if [[ -f /opt/.first_run ]]; then rm -f /opt/.first_run; fi -if [[ -f /opt/iobroker/.fresh_install ]]; then rm -f /opt/iobroker/.fresh_install; fi - -##### -# STEP 5 - Starting ioBroker -##### -echo "$(printf -- '-%.0s' {1..80})" -echo "----- Step 5 of 5: ioBroker startup -----" -echo "$(printf -- '-%.0s' {1..80})" -echo " " -echo "Starting ioBroker... " -echo " " -echo "##### #### ### ## # iobroker.js-controller log output # ## ### #### #####" - -# 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... " - - local status timeout - - timeout="$(date --date="now + ""$pkill_timeout"" sec" +%s)" - pkill -u iobroker -f iobroker.js-controller - status=$? - if (( status >= 2 )); then # syntax error or fatal error - return 1 - fi - - if (( status == 1 )); then # no processes matched - return - fi - - # pgrep exits with status 1 when there are no matches - while pgrep -u iobroker > /dev/null; (( $? != 1 )); do - if (($(date +%s) > timeout)); then - echo -e "\nTimeout reached. Killing remaining processes... " - pkill --signal SIGKILL -u iobroker - echo "Done. Have a nice day!" - exit - fi - - echo -n "." - sleep 1 - done - - echo -e '\nDone. Have a nice day!' - 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/debian11/scripts/maintenance.sh b/debian11/scripts/maintenance.sh deleted file mode 100644 index c0ab532..0000000 --- a/debian11/scripts/maintenance.sh +++ /dev/null @@ -1,312 +0,0 @@ -#!/usr/bin/env bash - -# bash strict mode -set -euo pipefail - -autoconfirm= # can be set to 'yes' by command line option -killbyname= # can be set to 'yes' by command line option (undocumented, only for use with backitup restore scripts) -healthcheck=/opt/scripts/.docker_config/.healthcheck # path of healthcheck file -pkill_timeout=10 # timeout for stopping iobroker in seconds - -# display help text -display_help() { - echo "This script helps you manage your ioBroker container!" - echo " " - echo "Usage: maintenance [ COMMAND ] [ OPTION ]" - echo " maint [ COMMAND ] [ OPTION ]" - echo " m [ COMMAND ] [ OPTION ]" - echo " " - echo "COMMANDS" - echo "------------------" - echo " status > reports the current state of maintenance mode" - echo " on > switches mantenance mode ON" - echo " off > switches mantenance mode OFF and stops or restarts the container" - echo " upgrade > puts the container to maintenance mode and upgrades ioBroker" - echo " restart > stops iobroker and stops or restarts the container" - echo " restore > stops iobroker and restores the last backup" - echo " help > shows this help" - echo " " - echo "OPTIONS" - echo "------------------" - echo " -y|--yes > confirms the used command without asking" - echo " -h|--help > shows this help" - echo " " -} - -# check maintenance enabled -maintenance_enabled() { - [[ -f "$healthcheck" && "$(cat "$healthcheck")" == maintenance ]] -} - -# check status starting -check_starting() { - [[ -f "$healthcheck" && "$(cat "$healthcheck")" == starting ]] -} - -# display maintenance status -maintenance_status() { - if maintenance_enabled; then - echo "Maintenance mode is turned ON." - else - echo "Maintenance mode is turned OFF." - fi -} - -# enable maintenance mode -enable_maintenance() { - if maintenance_enabled; then - echo "Maintenance mode is already turned ON." - return - fi - - echo "You are now going to stop ioBroker and activate maintenance mode for this container." - - if [[ "$killbyname" != yes ]]; then - if [[ "$autoconfirm" != yes ]]; then - local reply - - read -rp 'Do you want to continue [yes/no]? ' reply - if [[ "$reply" == y || "$reply" == Y || "$reply" == yes ]]; then - : # continue - else - return 1 - fi - fi - fi - - echo "Activating maintenance mode..." - echo "maintenance" > "$healthcheck" - sleep 1 - echo -n "Stopping ioBroker..." - stop_iob -} - -# disable maintenance mode -disable_maintenance() { - if ! maintenance_enabled; then - echo "Maintenance mode is already turned OFF." - return - fi - - echo "You are now going to deactivate maintenance mode for this container." - echo "Depending on the restart policy, your container will be stopped or restarted immediately." - - if [[ "$autoconfirm" != yes ]]; then - local reply - - read -rp 'Do you want to continue [yes/no]? ' reply - if [[ "$reply" == y || "$reply" == Y || "$reply" == yes ]]; then - : # continue - else - return 1 - fi - fi - - echo "Deactivating maintenance mode and forcing container to stop or restart..." - echo "stopping" > "$healthcheck" - gosu root pkill -u root - echo "Done." -} - -# upgrade js-controller -upgrade_jscontroller() { - 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 on the restart policy, your container will be stopped or restarted automatically after the upgrade." - - if [[ "$autoconfirm" != yes ]]; then - local reply - - read -rp 'Do you want to continue [yes/no]? ' reply - if [[ "$reply" == y || "$reply" == Y || "$reply" == yes ]]; then - : # continue - else - return 1 - fi - fi - - if ! maintenance_enabled > /dev/null; then - autoconfirm=yes - enable_maintenance - fi - - echo "Upgrading js-controller..." - iobroker update - sleep 1 - iobroker upgrade self - sleep 1 - echo "Done." - - echo "Container will be stopped or restarted in 5 seconds..." - sleep 5 - echo "stopping" > "$healthcheck" - gosu root pkill -u root -} - -# stop iobroker and wait until all processes stopped or pkill_timeout is reached -stop_iob() { - local status timeout - - timeout="$(date --date="now + $pkill_timeout sec" +%s)" - pkill -u iobroker -f 'iobroker.js-controller[^/]*$' - status=$? - if (( status >= 2 )); then # syntax error or fatal error - return 1 - elif (( status == 1 )); then # no processes matched - return - fi - - if [[ "$killbyname" != yes ]]; then - # pgrep exits with status 1 when there are no matches - while pgrep -u iobroker -f 'io.' > /dev/null; (( $? != 1 )); do - if (($(date +%s) > timeout)); then - echo -e "\nTimeout reached. Killing remaining processes..." - pgrep --list-full -u iobroker - pkill --signal SIGKILL -u iobroker -f 'io.' - echo "\nDone." - return - fi - sleep 1 - echo -n "." - done - else - for ((i=0; i<3; i++)); do - sleep 1 - echo -n "." - done - fi - - echo -e "Done." -} - -# restart container -restart_container() { - echo "You are now going to call a restart of your container." - echo "Restarting will work depending on the configured restart policy." - - if [[ "$autoconfirm" != yes ]]; then - local reply - - read -rp 'Do you want to continue [yes/no]? ' reply - if [[ "$reply" == y || "$reply" == Y || "$reply" == yes ]]; then - : # continue - else - return 1 - fi - fi - - if ! maintenance_enabled > /dev/null; then - echo -n "Stopping ioBroker..." - stop_iob - fi - - echo "Container will be stopped or restarted in 5 seconds..." - sleep 5 - echo "stopping" > "$healthcheck" - gosu root pkill -u root -} - -# restore iobroker -restore_iobroker() { - echo "You are now going to perform a restore of your iobroker." - echo "During the restore process, the container will automatically switch into maintenance mode and stop ioBroker." - echo "Depending on the restart policy, your container will be stopped or restarted automatically after the restore." - - if [[ "$autoconfirm" != yes ]]; then - local reply - - read -rp 'Do you want to continue [yes/no]? ' reply - if [[ "$reply" == y || "$reply" == Y || "$reply" == yes ]]; then - : # continue - else - return 1 - fi - fi - - if check_starting > /dev/null; then - echo "Startup script is still running." - echo "Please check container log and wait until ioBroker is sucessfully started." - echo "Then try again." - return 1 - fi - - if ! maintenance_enabled > /dev/null; then - autoconfirm=yes - enable_maintenance - fi - - echo -n "Restoring ioBroker... " - set +e - bash iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1 - return=$? - set -e - if [[ "$return" -ne 0 ]]; then - echo "Failed." - echo "For more details see \"/opt/iobroker/log/restore.log\"." - echo "Please check backup file location and permissions and try again." - return 1 - fi - echo "Done." - echo " " - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "!!!! IMPORTANT NOTE !!!!" - echo "!!!! The maintenance script restored iobroker from a backup file. !!!!" - echo "!!!! Check /opt/iobroker/log/restore.log to see if restore was successful. !!!!" - echo "!!!! When ioBroker 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 "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - sleep 10 - echo "Container will be stopped or restarted in 10 seconds..." - sleep 10 - echo "stopping" > "$healthcheck" - gosu root pkill -u root -} - -# parsing commands and options - -# default command to run unless another was given -run=(display_help) - -for arg in "$@"; do - case $arg in - help|-h|--help) - run=(display_help) - ;; - status|stat|s) - run=(maintenance_status) - ;; - on) - run=(enable_maintenance) - ;; - off) - run=(disable_maintenance) - ;; - upgrade|upgr|u) - run=(upgrade_jscontroller) - ;; - restart|rest|r) - run=(restart_container) - ;; - restore) - run=(restore_iobroker) - ;; - -y|--yes) - autoconfirm=yes - ;; - -kbn|--killbyname) - killbyname=yes - ;; - --) - break - ;; - *) - >&2 echo "Unknown parameter: $arg" - >&2 echo "Please try again or see help (help|-h|--help)." - exit 1 - ;; - esac -done - -"${run[@]}" \ No newline at end of file diff --git a/debian11/scripts/setup_avahi.sh b/debian11/scripts/setup_avahi.sh deleted file mode 100644 index 46d5873..0000000 --- a/debian11/scripts/setup_avahi.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ] -then - echo "[setup_avahi.sh] Avahi is already installed. Nothing to do here." -else - echo -n "[setup_avahi.sh] Avahi-daemon is NOT installed. Going to install it now... " - apt-get update > /opt/scripts/avahi_startup.log 2>&1 - apt-get install -y --no-install-recommends 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 "Done." - echo -n "[setup_avahi.sh] Configuring avahi-daemon... " - sed -i '/^rlimit-nproc/s/^\(.*\)/#\1/g' /etc/avahi/avahi-daemon.conf - echo "Done." - echo -n "[setup_avahi.sh] Configuring dbus... " - mkdir /var/run/dbus/ - echo "Done." -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 -n "[setup_avahi.sh] Starting dbus... " - dbus-daemon --system >> /opt/scripts/avahi_startup.log 2>&1 -echo "Done." - -echo -n "[setup_avahi.sh] Starting avahi-daemon... " - /etc/init.d/avahi-daemon start >> /opt/scripts/avahi_startup.log 2>&1 -echo "Done." - -exit 0 diff --git a/debian11/scripts/setup_iob_db.sh b/debian11/scripts/setup_iob_db.sh deleted file mode 100644 index df1d679..0000000 --- a/debian11/scripts/setup_iob_db.sh +++ /dev/null @@ -1,357 +0,0 @@ -#!/bin/bash - -# reading env -debug=$DEBUG -objectsdbhost=$IOB_OBJECTSDB_HOST -objectsdbport=$IOB_OBJECTSDB_PORT -objectsdbtype=$IOB_OBJECTSDB_TYPE -objectsdbname=$IOB_OBJECTSDB_NAME # new for sentinel support -objectsdbpass=$IOB_OBJECTSDB_PASS # new for auth support -setgid=$SETGID -setuid=$SETUID -statesdbhost=$IOB_STATESDB_HOST -statesdbport=$IOB_STATESDB_PORT -statesdbtype=$IOB_STATESDB_TYPE -statesdbname=$IOB_STATESDB_NAME # new for sentinel support -statesdbpass=$IOB_STATESDB_PASS # new for auth support - -# functions -write_iobroker_json() { - 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 -} -set_objectsdb_type() { - if [[ "$objectsdbtype" != "$(jq -r '.objects.type' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_OBJECTSDB_TYPE is available but value is different from detected ioBroker installation." - echo -n "Setting type of objects db to \"""$objectsdbtype""\"... " - jq --arg value "$objectsdbtype" '.objects.type = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_OBJECTSDB_TYPE is available and value meets detected ioBroker installation." - fi -} -set_objectsdb_host() { - if [[ $objectsdbhost == *","* ]]; then - if [[ "$(jq -c -n --arg value "$objectsdbhost" '$value|split(",")')" != "$(jq -r '.objects.host' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_OBJECTSDB_HOST is available but value is different from detected ioBroker installation." - echo -n "Setting host of objects db to \"""$objectsdbhost""\"... " - jq --arg value "$objectsdbhost" '.objects.host = ($value|split(","))' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_OBJECTSDB_HOST is available and value meets detected ioBroker installation." - fi - if [[ $objectsdbname != "" ]]; then - if [[ "$objectsdbname" != "$(jq -r '.objects.sentinelName' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_OBJECTSDB_NAME is available but value is different from detected ioBroker installation." - echo -n "Setting name of objects db to \"""$objectsdbname""\"... " - jq --arg value "$objectsdbname" '.objects.sentinelName = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_OBJECTSDB_NAME is available and value meets detected ioBroker installation." - fi - else - if [[ "$(jq -r '.objects.sentinelName' /opt/iobroker/iobroker-data/iobroker.json)" != "mymaster" ]]; then - echo "IOB_OBJECTSDB_NAME is not available. Using default value \"mymaster\" instead." - echo -n "Setting name of objects db to \"mymaster\"... " - jq --arg value "mymaster" '.objects.sentinelName = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_OBJECTSDB_NAME is not available but default value \"mymaster\" meets detected ioBroker installation.." - fi - fi - else - if [[ "$objectsdbhost" != "$(jq -r '.objects.host' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_OBJECTSDB_HOST is available but value is different from detected ioBroker installation." - echo -n "Setting host of objects db to \"""$objectsdbhost""\"... " - jq --arg value "$objectsdbhost" '.objects.host = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_OBJECTSDB_HOST is available and value meets detected ioBroker installation." - fi - fi -} -set_objectsdb_port() { - if [[ $objectsdbport == *","* ]]; then - if [[ "$(jq -c -n --arg value "$objectsdbport" '$value|split(",")')" != "$(jq -r '.objects.port' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_OBJECTSDB_PORT is available but value is different from detected ioBroker installation." - echo -n "Setting port of objects db to \"""$objectsdbport""\"... " - jq --arg value "$objectsdbport" '.objects.port = ($value|split(","))' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_OBJECTSDB_PORT is available and value meets detected ioBroker installation." - fi - else - if [[ "$objectsdbport" != "$(jq -r '.objects.port' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_OBJECTSDB_PORT is available but value is different from detected ioBroker installation." - echo -n "Setting port of objects db to \"""$objectsdbport""\"... " - jq --arg value "$objectsdbport" '.objects.port = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_OBJECTSDB_PORT is available and value meets detected ioBroker installation." - fi - fi -} -set_objectsdb_pass() { - if [[ "$objectsdbpass" == "none" ]]; then - echo "IOB_OBJECTSDB_PASS is available but value is set to \"none\"." - echo -n "Removing password of objects db... " - jq '.objects.options.auth_pass = null' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - elif [[ "$objectsdbpass" != "$(jq -r '.objects.options.auth_pass' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_OBJECTSDB_PASS is available but value is different from detected ioBroker installation." - echo -n "Setting password of objects db... " - jq --arg value "$objectsdbpass" '.objects.options.auth_pass = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_OBJECTSDB_PASS is available and value meets detected ioBroker installation." - fi -} -set_statesdb_type() { - if [[ "$statesdbtype" != "$(jq -r '.states.type' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_STATESDB_TYPE is available but value is different from detected ioBroker installation." - echo -n "Setting type of states db to \"""$statesdbtype""\"... " - jq --arg value "$statesdbtype" '.states.type = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_STATESDB_TYPE is available and value meets detected ioBroker installation." - fi -} -set_statesdb_host() { - if [[ $statesdbhost == *","* ]]; then - if [[ "$(jq -c -n --arg parm "$statesdbhost" '$parm|split(",")')" != "$(jq -r '.states.host' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_STATESDB_HOST is available but value is different from detected ioBroker installation." - echo -n "Setting host of states db to \"""$statesdbhost""\"... " - jq --arg value "$statesdbhost" '.states.host = ($value|split(","))' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_STATESDB_HOST is available and value meets detected ioBroker installation." - fi - if [[ $statesdbname != "" ]]; then - if [[ "$statesdbname" != "$(jq -r '.states.sentinelName' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_STATESDB_NAME is available but value is different from detected ioBroker installation." - echo -n "Setting name of states db to \"""$statesdbname""\"... " - jq --arg value "$statesdbname" '.states.sentinelName = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_STATESDB_NAME is available and value meets detected ioBroker installation." - fi - else - if [[ "$(jq -r '.states.sentinelName' /opt/iobroker/iobroker-data/iobroker.json)" != "mymaster" ]]; then - echo "IOB_STATESDB_NAME is not available. Using default value \"mymaster\" instead." - echo -n "Setting name of states db to \"mymaster\"... " - jq --arg value "mymaster" '.states.sentinelName = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_STATESDB_NAME is not available but default value \"mymaster\" meets detected ioBroker installation.." - fi - fi - else - if [[ "$statesdbhost" != "$(jq -r '.states.host' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_STATESDB_HOST is available but value is different from detected ioBroker installation." - echo -n "Setting host of states db to \"""$statesdbhost""\"... " - jq --arg value "$statesdbhost" '.states.host = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_STATESDB_HOST is available and value meets detected ioBroker installation." - fi - fi -} -set_statesdb_port() { - if [[ $statesdbport == *","* ]]; then - if [[ "$(jq -c -n --arg value "$statesdbport" '$value|split(",")')" != "$(jq -r '.states.port' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_STATESDB_PORT is available but value is different from detected ioBroker installation." - echo -n "Setting port of states db to \"""$statesdbport""\"... " - jq --arg value "$statesdbport" '.states.port = ($value|split(","))' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_STATESDB_PORT is available and value meets detected ioBroker installation." - fi - else - if [[ "$statesdbport" != "$(jq -r '.states.port' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_STATESDB_PORT is available but value is different from detected ioBroker installation." - echo -n "Setting port of states db to \"""$statesdbport""\"... " - jq --arg value "$statesdbport" '.states.port = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_STATESDB_PORT is available and value meets detected ioBroker installation." - fi - fi -} -set_statesdb_pass() { - if [[ "$statesdbpass" == "none" ]]; then - echo "IOB_STATESDB_PASS is available but value is set to \"none\"." - echo -n "Removing password of states db... " - jq '.states.options.auth_pass = null' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - elif [[ "$statesdbpass" != "$(jq -r '.states.options.auth_pass' /opt/iobroker/iobroker-data/iobroker.json)" ]]; then - echo "IOB_STATESDB_PASS is available but value is different from detected ioBroker installation." - echo -n "Setting password of states db... " - jq --arg value "$statesdbpass" '.states.options.auth_pass = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "IOB_STATESDB_PASS is available and value meets detected ioBroker installation." - fi -} -config_error_output() { - echo " " - echo "Something went wrong. Looks like at least one parameter defining the custom db connection was not set properly or is missing." - echo "Please check your configuration and try again." - echo "For more information see ioBroker Docker Image Docs (https://docs.buanet.de/iobroker-docker-image/docs/)." -} - -# parameter check -if [[ "$1" == "-master" ]]; then # setup master - echo "IOB_MULTIHOST is available and set to \"master\"." - echo "Done." - echo " " - # multihost objects db - if [[ "$objectsdbtype" != "" && "$objectsdbhost" != "" && "$objectsdbport" != "" ]]; then - echo "Configuring custom objects db..." - set_objectsdb_type - set_objectsdb_host - set_objectsdb_port - if [[ "$objectsdbpass" != "" ]]; then set_objectsdb_pass; fi - echo "Done." - echo " " - elif [[ "$objectsdbtype" == "" && "$objectsdbhost" == "" && "$objectsdbport" == "" ]]; then - echo "No custom objects db is set." - if [[ "$(jq -r '.objects.host' /opt/iobroker/iobroker-data/iobroker.json)" != "0.0.0.0" ]]; then - echo -n "Configuring default objects db to accept external connections... " - jq --arg value "0.0.0.0" '.objects.host = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "Default objects db is accepting external connections." - fi - else - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] IOB_OBJECTSDB_TYPE = ""$objectsdbtype" - echo "[DEBUG] IOB_OBJECTSDB_HOST = ""$objectsdbhost" - echo "[DEBUG] IOB_OBJECTSDB_PORT = ""$objectsdbport" - fi - config_error_output - exit 1 - fi - # multihost states db - if [[ "$statesdbtype" != "" && "$statesdbhost" != "" && "$statesdbport" != "" ]]; then - echo "Configuring custom states db..." - set_statesdb_type - set_statesdb_host - set_statesdb_port - if [[ "$statesdbpass" != "" ]]; then set_statesdb_pass; fi - echo "Done." - echo " " - elif [[ "$statesdbtype" == "" && "$statesdbhost" == "" && "$statesdbport" == "" ]]; then - echo "No custom states db is set." - if [[ "$(jq -r '.states.host' /opt/iobroker/iobroker-data/iobroker.json)" != "0.0.0.0" ]]; then - echo -n "Configuring default states db to accept external connections... " - jq --arg value "0.0.0.0" '.states.host = $value' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp - write_iobroker_json - echo "Done." - else - echo "Default states db is accepting external connections." - fi - else - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] IOB_STATESDB_TYPE = ""$statesdbtype" - echo "[DEBUG] IOB_STATESDB_HOST = ""$statesdbhost" - echo "[DEBUG] IOB_STATESDB_PORT = ""$statesdbport" - fi - config_error_output - exit 1 - fi -elif [[ "$1" == "-slave" ]]; then # setup slave - echo "IOB_MULTIHOST is available and set to \"slave\"." - echo "Done." - echo " " - # multihost slave objects db connection - if [[ "$objectsdbtype" != "" && "$objectsdbhost" != "" && "$objectsdbport" != "" ]]; then - echo "Configuring objects db connection..." - set_objectsdb_type - set_objectsdb_host - set_objectsdb_port - if [[ "$objectsdbpass" != "" ]]; then set_objectsdb_pass; fi - echo "Done." - echo " " - else - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] IOB_OBJECTSDB_TYPE = ""$objectsdbtype" - echo "[DEBUG] IOB_OBJECTSDB_HOST = ""$objectsdbhost" - echo "[DEBUG] IOB_OBJECTSDB_PORT = ""$objectsdbport" - fi - config_error_output - exit 1 - fi - # multihost slave states db connection - if [[ "$statesdbtype" != "" && "$statesdbhost" != "" && "$statesdbport" != "" ]]; then - echo "Configuring states db connection..." - set_statesdb_type - set_statesdb_host - set_statesdb_port - if [[ "$statesdbpass" != "" ]]; then set_statesdb_pass; fi - echo "Done." - echo " " - else - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] IOB_STATESDB_TYPE = ""$statesdbtype" - echo "[DEBUG] IOB_STATESDB_HOST = ""$statesdbhost" - echo "[DEBUG] IOB_STATESDB_PORT = ""$statesdbport" - fi - config_error_output - exit 1 - fi -elif [[ "$1" == "-objectsdb" ]]; then # setup objects db standalone - if [[ "$objectsdbtype" != "" && "$objectsdbhost" != "" && "$objectsdbport" != "" ]]; then - echo "Configuring custom objects db..." - set_objectsdb_type - set_objectsdb_host - set_objectsdb_port - if [[ "$objectsdbpass" != "" ]]; then set_objectsdb_pass; fi - echo "Done." - echo " " - else - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] IOB_OBJECTSDB_TYPE = ""$objectsdbtype" - echo "[DEBUG] IOB_OBJECTSDB_HOST = ""$objectsdbhost" - echo "[DEBUG] IOB_OBJECTSDB_PORT = ""$objectsdbport" - fi - config_error_output - exit 1 - fi -elif [[ "$1" == "-statesdb" ]]; then # setup states db standalone - if [[ "$statesdbtype" != "" && "$statesdbhost" != "" && "$statesdbport" != "" ]]; then - echo "Configuring custom states db..." - set_statesdb_type - set_statesdb_host - set_statesdb_port - if [[ "$statesdbpass" != "" ]]; then set_statesdb_pass; fi - echo "Done." - echo " " - else - if [[ "$debug" == "true" ]]; then - echo "[DEBUG] IOB_STATESDB_TYPE = ""$statesdbtype" - echo "[DEBUG] IOB_STATESDB_HOST = ""$statesdbhost" - echo "[DEBUG] IOB_STATESDB_PORT = ""$statesdbport" - fi - config_error_output - exit 1 - fi -fi diff --git a/debian11/scripts/setup_packages.sh b/debian11/scripts/setup_packages.sh deleted file mode 100644 index 1db9a5f..0000000 --- a/debian11/scripts/setup_packages.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash - -# bash strict mode -set -euo pipefail - -# Reading ENV -set +u -packages=$PACKAGES -debug=$DEBUG -set -u - -export DEBIAN_FRONTEND=noninteractive - -check_package_preq() { - # check for influx packages - if [[ "$i" == "influxdb" || "$i" == "influxdb2-cli" ]]; then - # add influxdata repo keys - wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null - echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main" | sudo tee /etc/apt/sources.list.d/influxdata.list - apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 - fi -} -check_package_validity() { - # check string for double spaces - while echo "$packages" | grep -q ' '; do - packages=$(echo "$packages" | sed 's/ / /g') - done - # remove packages when "influxdb" AND "influxdb2-cli" - if echo "$packages" | grep -qw "influxdb" && echo "$packages" | grep -qw "influxdb2-cli"; then - echo "PACKAGES includes influxdb AND influxdb2-cli." - echo "As installing both packages together is not possible, they will be skipped." - packages=$(echo "$packages" | sed 's/influxdb2-cli//g;s/influxdb//g') - # check string for double spaces again - while echo "$packages" | grep -q ' '; do - packages=$(echo "$packages" | sed 's/ / /g') - done - if [[ $debug == "true" ]]; then echo "[DEBUG] New list of packages: ""$packages"; fi - echo " " - fi -} - -if [[ "$1" == "-install" ]]; then - echo " " - apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 - check_package_validity - for i in $packages; do - if ! dpkg -s "$i" >/dev/null 2>&1; then - echo -n "$i is not installed. Installing... " - check_package_preq >> /opt/scripts/setup_packages.log 2>&1 - if ! apt-get -q -y --no-install-recommends install "$i" >> /opt/scripts/setup_packages.log 2>&1; then - echo "Failed." - echo "For more details see \"/opt/scripts/setup_packages.log\"." - else - echo "Done." - fi - else - echo "$i is already installed." - fi - done -elif [[ "$1" == "-update" ]]; then - echo -n "Updating Linux packages on first run... " - apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 - return1=$? - apt-get -q -y upgrade >> /opt/scripts/setup_packages.log 2>&1 - return2=$? - if [[ "$return1" -ne 0 || "$return2" -ne 0 ]]; then - echo "Failed." - echo "For more details see \"/opt/scripts/setup_packages.log\"." - echo "Make sure the container has internet access to get the latest package updates." - echo "This has no impact to the setup process. The script will continue." - else - echo "Done." - fi -else - echo "No paramerter found!" - exit 1 -fi - -# Silent Cleanup -apt-get -qq autoclean -y && apt-get -qq autoremove && apt-get -qq clean -rm -rf /tmp/* /var/tmp/* /root/.cache/* /var/lib/apt/lists/* -rm -f /opt/scripts/.packages /opt/scripts/.docker_config/.packages - -exit 0 \ No newline at end of file diff --git a/debian11/scripts/setup_zwave.sh b/debian11/scripts/setup_zwave.sh deleted file mode 100644 index 8efd62e..0000000 --- a/debian11/scripts/setup_zwave.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -if [ -e /usr/local/lib64 ] -then - echo "[setup_zwave.sh] Openzwave is already installed. Nothing to do here." -else - echo -n "[setup_zwave.sh] Openzwave is NOT installed. Going to install it now... " - cd /opt || exit - 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 || exit - echo "Done." -fi - -exit 0 diff --git a/debian11/userscripts/userscript_everystart_example.sh b/debian11/userscripts/userscript_everystart_example.sh deleted file mode 100644 index 320e6a9..0000000 --- a/debian11/userscripts/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/debian11/userscripts/userscript_firststart_example.sh b/debian11/userscripts/userscript_firststart_example.sh deleted file mode 100644 index 1e25e34..0000000 --- a/debian11/userscripts/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/debian12/scripts/healthcheck.sh b/debian12/scripts/healthcheck.sh index 5c57498..060cc92 100644 --- a/debian12/scripts/healthcheck.sh +++ b/debian12/scripts/healthcheck.sh @@ -1,5 +1,8 @@ #!/usr/bin/env bash +# bash strict mode +set -euo pipefail + # Script checks health of running container if [ "$(cat /opt/.docker_config/.healthcheck)" == "starting" ] diff --git a/debian12/scripts/iobroker_startup.sh b/debian12/scripts/iobroker_startup.sh index 8418264..3cb51e2 100644 --- a/debian12/scripts/iobroker_startup.sh +++ b/debian12/scripts/iobroker_startup.sh @@ -34,6 +34,13 @@ set -u pkill_timeout=10 # timeout for iobroker shutdown in seconds +# Exit with error function +exit_with_error() { + echo " " + echo "This Script will exit now." + exit 1 +} + # Stop on error function stop_on_error() { if [[ "$debug" == "true" || "$debug" == "42" ]]; then @@ -42,11 +49,10 @@ stop_on_error() { echo "[DEBUG] This enables you to investigate or fix your issue on the command line." echo "[DEBUG] If you want to stop or restart your container you have to do it manually." echo "[DEBUG] IoBroker is not running!" - tail -f /dev/null + trap 'exit_with_error' SIGTERM SIGKILL + tail -f /dev/null & wait else - echo " " - echo "This Script will exit now." - exit 1 + exit_with_error fi } @@ -244,6 +250,7 @@ else echo -n "(Re)setting permissions (This might take a while! Please be patient!)... " chown -R "$setuid":"$setgid" /opt/iobroker chown -R "$setuid":"$setgid" /opt/scripts + chown -R "$setuid":"$setgid" /opt/userscripts chown -R "$setuid":"$setgid" /opt/.docker_config echo "Done." fi From e2ca6793ff7607abbe0539ed061b5f9c5f15d7bf Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 8 Jan 2024 11:20:45 +0100 Subject: [PATCH 25/31] testing --- debian12/Dockerfile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/debian12/Dockerfile b/debian12/Dockerfile index 3865686..8013eca 100644 --- a/debian12/Dockerfile +++ b/debian12/Dockerfile @@ -19,7 +19,7 @@ COPY userscripts /opt/userscripts # Set up ioBroker RUN apt-get update && apt-get upgrade -y \ # Install prerequisites - && apt-get install -y \ + && apt-get install -q -y --no-install-recommends \ apt-utils \ ca-certificates \ cifs-utils \ @@ -34,17 +34,19 @@ RUN apt-get update && apt-get upgrade -y \ procps \ python3 \ python3-dev \ - # temporär! - sudo \ tar \ tzdata \ udev \ wget \ + # teporär + && apt-get install -q -y --no-install-recommends sudo \ # Install node && mkdir -p /etc/apt/keyrings \ && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE}.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ - && apt-get update && apt-get install -y nodejs npm \ + && apt-get update && apt-get install -q -y --no-install-recommends nodejs \ + # Install npm (does no longer come with nodejs?) + && apt-get update && apt-get install -q -y --no-install-recommends npm \ # Install node-gyp && npm install --production -g node-gyp \ # Generating locales From 9a59347e646e754584967952dcda7aab9bf542a3 Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 8 Jan 2024 11:46:29 +0100 Subject: [PATCH 26/31] test without arm v7 --- .github/workflows/build-debian12-dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-debian12-dev.yml b/.github/workflows/build-debian12-dev.yml index 319d16d..263c0c0 100644 --- a/.github/workflows/build-debian12-dev.yml +++ b/.github/workflows/build-debian12-dev.yml @@ -72,7 +72,7 @@ jobs: platforms: | linux/amd64 linux/arm64 - linux/arm/v7 +# linux/arm/v7 tags: | buanet/iobroker:dev, ghcr.io/buanet/iobroker:dev From fd504446b30e664bb4bdcb5fbe9f47b271281a1c Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 8 Jan 2024 14:16:23 +0100 Subject: [PATCH 27/31] testing ci --- .github/workflows/build-debian12-dev.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-debian12-dev.yml b/.github/workflows/build-debian12-dev.yml index 263c0c0..dfb87c1 100644 --- a/.github/workflows/build-debian12-dev.yml +++ b/.github/workflows/build-debian12-dev.yml @@ -108,6 +108,9 @@ jobs: # Set values in Dockerfile sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" -e "s/\${NODE}/${{ vars.EXPERIMENTAL_NODE_VERSION }}/" ./debian12/Dockerfile > ./debian12/Dockerfile.tmp mv -f ./debian12/Dockerfile.tmp ./debian12/Dockerfile + # Remove separate npm install as fix for Node 20 + sed "/&& apt-get update && apt-get install -q -y --no-install-recommends npm \/d" ./debian12/Dockerfile > ./debian12/Dockerfile.tmp + mv -f ./debian12/Dockerfile.tmp ./debian12/Dockerfile - name: Set up QEMU uses: docker/setup-qemu-action@v3.0.0 From 6538b3ff993ac2de6bd84844f3ab8aae510e722b Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 8 Jan 2024 14:18:32 +0100 Subject: [PATCH 28/31] test ci --- .github/workflows/build-debian12-dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-debian12-dev.yml b/.github/workflows/build-debian12-dev.yml index dfb87c1..59c1c2f 100644 --- a/.github/workflows/build-debian12-dev.yml +++ b/.github/workflows/build-debian12-dev.yml @@ -109,7 +109,7 @@ jobs: sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" -e "s/\${NODE}/${{ vars.EXPERIMENTAL_NODE_VERSION }}/" ./debian12/Dockerfile > ./debian12/Dockerfile.tmp mv -f ./debian12/Dockerfile.tmp ./debian12/Dockerfile # Remove separate npm install as fix for Node 20 - sed "/&& apt-get update && apt-get install -q -y --no-install-recommends npm \/d" ./debian12/Dockerfile > ./debian12/Dockerfile.tmp + sed "/&& apt-get update && apt-get install -q -y --no-install-recommends npm/d" ./debian12/Dockerfile > ./debian12/Dockerfile.tmp mv -f ./debian12/Dockerfile.tmp ./debian12/Dockerfile - name: Set up QEMU From 16c741733f81d2aefa5042c0ba999cd5d710621e Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 8 Jan 2024 14:38:41 +0100 Subject: [PATCH 29/31] node dependency fix in dockerfile --- .github/workflows/build-debian12-dev.yml | 6 +++--- debian12/Dockerfile | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-debian12-dev.yml b/.github/workflows/build-debian12-dev.yml index 59c1c2f..8f8765f 100644 --- a/.github/workflows/build-debian12-dev.yml +++ b/.github/workflows/build-debian12-dev.yml @@ -108,9 +108,9 @@ jobs: # Set values in Dockerfile sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" -e "s/\${NODE}/${{ vars.EXPERIMENTAL_NODE_VERSION }}/" ./debian12/Dockerfile > ./debian12/Dockerfile.tmp mv -f ./debian12/Dockerfile.tmp ./debian12/Dockerfile - # Remove separate npm install as fix for Node 20 - sed "/&& apt-get update && apt-get install -q -y --no-install-recommends npm/d" ./debian12/Dockerfile > ./debian12/Dockerfile.tmp - mv -f ./debian12/Dockerfile.tmp ./debian12/Dockerfile + # Remove separate npm install as fix for Node 20 (fixed in dockerfile??) + # sed "/&& apt-get update && apt-get install -q -y --no-install-recommends npm/d" ./debian12/Dockerfile > ./debian12/Dockerfile.tmp + # mv -f ./debian12/Dockerfile.tmp ./debian12/Dockerfile - name: Set up QEMU uses: docker/setup-qemu-action@v3.0.0 diff --git a/debian12/Dockerfile b/debian12/Dockerfile index 8013eca..37ee4f8 100644 --- a/debian12/Dockerfile +++ b/debian12/Dockerfile @@ -45,8 +45,8 @@ RUN apt-get update && apt-get upgrade -y \ && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE}.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ && apt-get update && apt-get install -q -y --no-install-recommends nodejs \ - # Install npm (does no longer come with nodejs?) - && apt-get update && apt-get install -q -y --no-install-recommends npm \ + # Check for and install npm if not installed (no longer comes with nodejs? Bug?) + && npm --version || apt-get update && apt-get install -q -y --no-install-recommends npm \ # Install node-gyp && npm install --production -g node-gyp \ # Generating locales From b9618d92d2e197b4cd4fb0e9815ffde54186f045 Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 8 Jan 2024 15:59:37 +0100 Subject: [PATCH 30/31] test fix --- debian12/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian12/Dockerfile b/debian12/Dockerfile index 37ee4f8..f0b999e 100644 --- a/debian12/Dockerfile +++ b/debian12/Dockerfile @@ -46,7 +46,7 @@ RUN apt-get update && apt-get upgrade -y \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE}.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ && apt-get update && apt-get install -q -y --no-install-recommends nodejs \ # Check for and install npm if not installed (no longer comes with nodejs? Bug?) - && npm --version || apt-get update && apt-get install -q -y --no-install-recommends npm \ + && npm --version || apt-get install -q -y --no-install-recommends npm \ # Install node-gyp && npm install --production -g node-gyp \ # Generating locales From a1fff8f81c10b4fd86816f8c4bce6d4c2057d85e Mon Sep 17 00:00:00 2001 From: buanet Date: Mon, 8 Jan 2024 21:43:47 +0100 Subject: [PATCH 31/31] fix ci --- .github/workflows/build-debian12-beta.yml | 4 ++-- .github/workflows/build-debian12-dev.yml | 9 +++------ .github/workflows/build-debian12-latest.yml | 4 ++-- CHANGELOG.md | 1 + 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-debian12-beta.yml b/.github/workflows/build-debian12-beta.yml index 0ce29bf..4654364 100644 --- a/.github/workflows/build-debian12-beta.yml +++ b/.github/workflows/build-debian12-beta.yml @@ -77,8 +77,8 @@ jobs: push: true platforms: | linux/amd64 - linux/arm/v7 linux/arm64/v8 +# linux/arm/v7 tags: | buanet/iobroker:beta, buanet/iobroker:${{ env.version }}, @@ -150,7 +150,7 @@ jobs: platforms: | linux/amd64 linux/arm64/v8 -# linux/arm/v7 +# linux/arm/v7 tags: | buanet/iobroker:beta-node${{ vars.EXPERIMENTAL_NODE_VERSION }}, buanet/iobroker:${{ env.version }}-node${{ vars.EXPERIMENTAL_NODE_VERSION }}, diff --git a/.github/workflows/build-debian12-dev.yml b/.github/workflows/build-debian12-dev.yml index 8f8765f..96d11c2 100644 --- a/.github/workflows/build-debian12-dev.yml +++ b/.github/workflows/build-debian12-dev.yml @@ -71,12 +71,12 @@ jobs: push: true platforms: | linux/amd64 - linux/arm64 + linux/arm64/v8 # linux/arm/v7 tags: | buanet/iobroker:dev, - ghcr.io/buanet/iobroker:dev buanet/iobroker:dev-node${{ vars.RECOMMENDED_NODE_VERSION }}, + ghcr.io/buanet/iobroker:dev, ghcr.io/buanet/iobroker:dev-node${{ vars.RECOMMENDED_NODE_VERSION }} build-with-experimental-node: @@ -108,9 +108,6 @@ jobs: # Set values in Dockerfile sed -e "s/\${VERSION}/$VERSION-dev/" -e "s/\${DATI}/$DATI/" -e "s/\${NODE}/${{ vars.EXPERIMENTAL_NODE_VERSION }}/" ./debian12/Dockerfile > ./debian12/Dockerfile.tmp mv -f ./debian12/Dockerfile.tmp ./debian12/Dockerfile - # Remove separate npm install as fix for Node 20 (fixed in dockerfile??) - # sed "/&& apt-get update && apt-get install -q -y --no-install-recommends npm/d" ./debian12/Dockerfile > ./debian12/Dockerfile.tmp - # mv -f ./debian12/Dockerfile.tmp ./debian12/Dockerfile - name: Set up QEMU uses: docker/setup-qemu-action@v3.0.0 @@ -140,7 +137,7 @@ jobs: push: true platforms: | linux/amd64 - linux/arm64 + linux/arm64/v8 # linux/arm/v7 tags: | buanet/iobroker:dev-node${{ vars.EXPERIMENTAL_NODE_VERSION }}, diff --git a/.github/workflows/build-debian12-latest.yml b/.github/workflows/build-debian12-latest.yml index 873d411..bd7f5a9 100644 --- a/.github/workflows/build-debian12-latest.yml +++ b/.github/workflows/build-debian12-latest.yml @@ -71,8 +71,8 @@ jobs: push: true platforms: | linux/amd64 - linux/arm/v7 linux/arm64/v8 +# linux/arm/v7 tags: | buanet/iobroker:latest, buanet/iobroker:${{ env.majorversion }}, @@ -140,8 +140,8 @@ jobs: push: true platforms: | linux/amd64 - linux/arm/v7 linux/arm64/v8 +# linux/arm/v7 tags: | iobroker/iobroker:latest, iobroker/iobroker:${{ env.majorversion }}, diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e81e40..bc590a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Changelog ### v9.1.0-beta.4 (08.01.2023) +* dropping arm/v7 support (temporary) * add trap for debugging mode ([#421](https://github.com/buanet/ioBroker.docker/issues/421)) * fix ownership of userscripts ([#423 by @EugenMayer](https://github.com/buanet/ioBroker.docker/pull/423)) * add strict mode to healthcheck.sh ([#424 by @EugenMayer](https://github.com/buanet/ioBroker.docker/pull/424))