From bbac132f284c453477c95315c3ef09aac987d327 Mon Sep 17 00:00:00 2001 From: buanet Date: Sat, 15 Apr 2023 22:30:19 +0200 Subject: [PATCH 01/11] testing influx repo integration --- debian/scripts/iobroker_startup.sh | 2 +- debian/scripts/setup_packages.sh | 40 +++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/debian/scripts/iobroker_startup.sh b/debian/scripts/iobroker_startup.sh index 3977436..d720508 100644 --- a/debian/scripts/iobroker_startup.sh +++ b/debian/scripts/iobroker_startup.sh @@ -143,7 +143,7 @@ if [[ -f /opt/.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" - echo "$packages" > /opt/scripts/.docker_config/.packages +# echo "$packages" > /opt/scripts/.docker_config/.packages bash /opt/scripts/setup_packages.sh -install fi # Register maintenance script diff --git a/debian/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh index 48fcd66..7be1f7c 100644 --- a/debian/scripts/setup_packages.sh +++ b/debian/scripts/setup_packages.sh @@ -1,16 +1,37 @@ #!/bin/bash +# bash strict mode +set -euo pipefail + +# Reading ENV +set +u +packages=$PACKAGES +set -u + export DEBIAN_FRONTEND=noninteractive -if [ "$1" == "-install" ] -then +check_package_preq() { + if [[ "$i" == "influxdb" || "$i" == "influxdb2-cli" ]]; then + # add influxdata repo + wget -q https://repos.influxdata.com/influxdata-archive_compat.key + cat 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 + fi +} + +if [[ "$1" == "-install" ]]; then apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 - packages=$(cat /opt/scripts/.docker_config/.packages) echo ' ' for i in $packages; do - if [ "$(dpkg-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]; - then - echo -n "$i is not installed. Installing... " + if [[ "$(dpkg-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]]; then + echo -n "$i is not installed. Installing... " + check_package_preq >> /opt/scripts/setup_packages.log 2>&1 + return=$? + if [[ "$return" -ne 0 ]]; then + echo "Failed." + echo "For more details see \"/opt/scripts/setup_packages.log\"." + echo ' ' + else DEBIAN_FRONTEND=noninteractive apt-get -q -y install "$i" >> /opt/scripts/setup_packages.log 2>&1 return=$? if [[ "$return" -ne 0 ]]; then @@ -20,11 +41,12 @@ then else echo "Done." fi - else - echo "$i is already installed." fi + else + echo "$i is already installed." + fi done -elif [ "$1" == "-update" ]; then +elif [[ "$1" == "-update" ]]; then echo -n "Updating Linux packages on first run... " apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 return=$? From 6a55923669c6f6fcaa7b4b0f1dd05d1f08662141 Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 16 Apr 2023 00:08:10 +0200 Subject: [PATCH 02/11] add check for package validity --- debian/scripts/setup_packages.sh | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/debian/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh index 7be1f7c..5ad055a 100644 --- a/debian/scripts/setup_packages.sh +++ b/debian/scripts/setup_packages.sh @@ -6,11 +6,13 @@ 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 wget -q https://repos.influxdata.com/influxdata-archive_compat.key @@ -18,10 +20,26 @@ check_package_preq() { 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 fi } +check_package_validity() { + # 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/influxdb//g' | sed 's/influxdb2-cli//g') + if [[ "$debug" == "true" ]]; then echo "[DEBUG] New list of packages: = ""$packages"; fi + echo ' ' + fi + # check string for double spaces + while echo "$packages" | grep -q ' '; do + # remove double spaces + packages=$(echo "$packages" | sed 's/ / /g') + done +} if [[ "$1" == "-install" ]]; then - apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 echo ' ' + apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 + check_package_validity for i in $packages; do if [[ "$(dpkg-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]]; then echo -n "$i is not installed. Installing... " From a954b51223a1b3e8f8e45b524dde1792d960051b Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 16 Apr 2023 00:54:15 +0200 Subject: [PATCH 03/11] small fixes --- debian/scripts/setup_packages.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/debian/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh index 5ad055a..2b9d848 100644 --- a/debian/scripts/setup_packages.sh +++ b/debian/scripts/setup_packages.sh @@ -15,8 +15,7 @@ check_package_preq() { # check for influx packages if [[ "$i" == "influxdb" || "$i" == "influxdb2-cli" ]]; then # add influxdata repo - wget -q https://repos.influxdata.com/influxdata-archive_compat.key - cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null + 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 fi } @@ -25,7 +24,7 @@ check_package_validity() { 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/influxdb//g' | sed 's/influxdb2-cli//g') + packages=$(echo "$packages" | sed 's/influxdb//g;s/influxdb2-cli//g') if [[ "$debug" == "true" ]]; then echo "[DEBUG] New list of packages: = ""$packages"; fi echo ' ' fi @@ -61,7 +60,7 @@ if [[ "$1" == "-install" ]]; then fi fi else - echo "$i is already installed." + echo "$i is already installed." fi done elif [[ "$1" == "-update" ]]; then @@ -87,4 +86,4 @@ fi apt-get -qq autoclean -y && apt-get -qq autoremove && apt-get -qq clean rm -rf /tmp/* /var/tmp/* && rm -rf /root/.cache/* && rm -rf /var/lib/apt/lists/* && rm -f /opt/scripts/.docker_config/.packages -exit 0 +exit 0 \ No newline at end of file From 16e30c392d0a41d6d5112972719a01522ab171df Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 16 Apr 2023 01:10:05 +0200 Subject: [PATCH 04/11] fix typo --- debian/scripts/setup_packages.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh index 2b9d848..8b71305 100644 --- a/debian/scripts/setup_packages.sh +++ b/debian/scripts/setup_packages.sh @@ -14,7 +14,7 @@ export DEBIAN_FRONTEND=noninteractive check_package_preq() { # check for influx packages if [[ "$i" == "influxdb" || "$i" == "influxdb2-cli" ]]; then - # add influxdata repo + # 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 fi From 893908f29d938dbc1584782d3d7de3cb6e64c0c4 Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 16 Apr 2023 13:44:18 +0200 Subject: [PATCH 05/11] fix typo --- debian/scripts/setup_packages.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/debian/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh index 8b71305..9769bb0 100644 --- a/debian/scripts/setup_packages.sh +++ b/debian/scripts/setup_packages.sh @@ -21,11 +21,11 @@ check_package_preq() { } check_package_validity() { # 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\"." + 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/influxdb//g;s/influxdb2-cli//g') - if [[ "$debug" == "true" ]]; then echo "[DEBUG] New list of packages: = ""$packages"; fi + if [[ $debug == "true" ]]; then echo "[DEBUG] New list of packages: = ""$packages"; fi echo ' ' fi # check string for double spaces From e283d2571064cd55d9fcce25a561dcee6e67c144 Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 16 Apr 2023 14:57:10 +0200 Subject: [PATCH 06/11] small fixes --- debian/scripts/setup_packages.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/debian/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh index 9769bb0..49c9521 100644 --- a/debian/scripts/setup_packages.sh +++ b/debian/scripts/setup_packages.sh @@ -24,8 +24,8 @@ check_package_validity() { 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/influxdb//g;s/influxdb2-cli//g') - if [[ $debug == "true" ]]; then echo "[DEBUG] New list of packages: = ""$packages"; fi + packages=$(echo "$packages" | sed 's/influxdb2-cli//g;s/influxdb//g') + if [[ $debug == "true" ]]; then echo "[DEBUG] New list of packages: ""$packages"; fi echo ' ' fi # check string for double spaces @@ -50,8 +50,8 @@ if [[ "$1" == "-install" ]]; then echo ' ' else DEBIAN_FRONTEND=noninteractive apt-get -q -y install "$i" >> /opt/scripts/setup_packages.log 2>&1 - return=$? - if [[ "$return" -ne 0 ]]; then + return1=$? + if [[ "$return1" -ne 0 ]]; then echo "Failed." echo "For more details see \"/opt/scripts/setup_packages.log\"." echo ' ' From 8fe4d775f57bc90d54428886e6edb1992dec7499 Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 16 Apr 2023 15:16:37 +0200 Subject: [PATCH 07/11] testing --- debian/scripts/iobroker_startup.sh | 1 + debian/scripts/setup_packages.sh | 9 +-------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/debian/scripts/iobroker_startup.sh b/debian/scripts/iobroker_startup.sh index d720508..14606b4 100644 --- a/debian/scripts/iobroker_startup.sh +++ b/debian/scripts/iobroker_startup.sh @@ -146,6 +146,7 @@ if [[ -f /opt/.first_run ]]; then # echo "$packages" > /opt/scripts/.docker_config/.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\'" >> /root/.bashrc diff --git a/debian/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh index 49c9521..655d063 100644 --- a/debian/scripts/setup_packages.sh +++ b/debian/scripts/setup_packages.sh @@ -43,21 +43,14 @@ if [[ "$1" == "-install" ]]; then if [[ "$(dpkg-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]]; then echo -n "$i is not installed. Installing... " check_package_preq >> /opt/scripts/setup_packages.log 2>&1 + apt-get -q -y install "$i" >> /opt/scripts/setup_packages.log 2>&1 return=$? if [[ "$return" -ne 0 ]]; then echo "Failed." echo "For more details see \"/opt/scripts/setup_packages.log\"." echo ' ' else - DEBIAN_FRONTEND=noninteractive apt-get -q -y install "$i" >> /opt/scripts/setup_packages.log 2>&1 - return1=$? - if [[ "$return1" -ne 0 ]]; then - echo "Failed." - echo "For more details see \"/opt/scripts/setup_packages.log\"." - echo ' ' - else echo "Done." - fi fi else echo "$i is already installed." From acad72922e7ecb488019fca2c437bfd341f1dad4 Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 16 Apr 2023 21:55:23 +0200 Subject: [PATCH 08/11] testing --- debian/scripts/setup_packages.sh | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/debian/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh index 655d063..1e5da26 100644 --- a/debian/scripts/setup_packages.sh +++ b/debian/scripts/setup_packages.sh @@ -39,13 +39,11 @@ 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-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]]; then + 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 - apt-get -q -y install "$i" >> /opt/scripts/setup_packages.log 2>&1 - return=$? - if [[ "$return" -ne 0 ]]; then + if ! apt-get -q -y install "$i" >> /opt/scripts/setup_packages.log 2>&1; then echo "Failed." echo "For more details see \"/opt/scripts/setup_packages.log\"." echo ' ' @@ -59,10 +57,10 @@ if [[ "$1" == "-install" ]]; then elif [[ "$1" == "-update" ]]; then echo -n "Updating Linux packages on first run... " apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 - return=$? - apt-get -q -y upgrade >> /opt/scripts/setup_packages.log 2>&1 return1=$? - if [[ "$return" -ne 0 || "$return1" -ne 0 ]]; then + 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." From 065d0cb4df93ede3c188d03eb365956aaffda75c Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 16 Apr 2023 22:14:03 +0200 Subject: [PATCH 09/11] syntax change --- debian/scripts/setup_packages.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh index 1e5da26..2de041f 100644 --- a/debian/scripts/setup_packages.sh +++ b/debian/scripts/setup_packages.sh @@ -39,7 +39,7 @@ if [[ "$1" == "-install" ]]; then echo ' ' apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 check_package_validity - for i in "$packages"; do + 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 From 8c9279b86704deb160a65337090af12157505576 Mon Sep 17 00:00:00 2001 From: buanet Date: Sun, 16 Apr 2023 23:03:23 +0200 Subject: [PATCH 10/11] enhance output --- debian/scripts/setup_packages.sh | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/debian/scripts/setup_packages.sh b/debian/scripts/setup_packages.sh index 2de041f..4d6ddb6 100644 --- a/debian/scripts/setup_packages.sh +++ b/debian/scripts/setup_packages.sh @@ -17,22 +17,26 @@ check_package_preq() { # 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 - # check string for double spaces - while echo "$packages" | grep -q ' '; do - # remove double spaces - packages=$(echo "$packages" | sed 's/ / /g') - done } if [[ "$1" == "-install" ]]; then @@ -46,7 +50,6 @@ if [[ "$1" == "-install" ]]; then if ! apt-get -q -y install "$i" >> /opt/scripts/setup_packages.log 2>&1; then echo "Failed." echo "For more details see \"/opt/scripts/setup_packages.log\"." - echo ' ' else echo "Done." fi From 7a455952dd4f3b23027fa08b4acbd015abae6591 Mon Sep 17 00:00:00 2001 From: buanet Date: Tue, 25 Apr 2023 22:30:15 +0200 Subject: [PATCH 11/11] enhance maintenance script --- CHANGELOG.md | 2 ++ debian/scripts/maintenance.sh | 25 +++++++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b92969d..60d227d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ ## Changelog ### v8.1.0-beta.2 (coming soon) +* prohibit restore when startup script is still running +* extend time before restart after restore is done * v8.1.0-beta.1 (14.04.2023) * enhance github actions * enhance log output of maintenance script on restore ([#333](https://github.com/buanet/ioBroker.docker/issues/333)) diff --git a/debian/scripts/maintenance.sh b/debian/scripts/maintenance.sh index 13f133d..dc423bc 100644 --- a/debian/scripts/maintenance.sh +++ b/debian/scripts/maintenance.sh @@ -38,6 +38,11 @@ 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 @@ -221,6 +226,8 @@ restart_container() { # 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 @@ -235,11 +242,17 @@ restore_iobroker() { echo 'This command was already confirmed by the -y or --yes option.' fi - echo -n 'Stopping ioBroker...' - stop_iob + 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 - # fixing permission errors during restore - #chown -R $setuid:$setgid /opt/iobroker/backup + if ! maintenance_enabled > /dev/null; then + autoconfirm=yes + enable_maintenance + fi echo -n "Restoring ioBroker... " set +e @@ -263,8 +276,8 @@ restore_iobroker() { echo "!!!! You can view installation process by taking a look at ioBroker log. !!!!" echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" sleep 10 - echo 'Container will be stopped or restarted in 5 seconds...' - sleep 5 + echo 'Container will be stopped or restarted in 10 seconds...' + sleep 10 echo 'stopping' > "$healthcheck" pkill -u root }