Compare commits

..

1 Commits

Author SHA1 Message Date
André Germann
a37ddf14ec Merge pull request #389 from buanet/beta
prepare hotfix
2023-10-11 09:28:22 +02:00
19 changed files with 101 additions and 260 deletions

View File

@@ -1 +1 @@
v9.1.0-beta.3 v9.0.1

View File

@@ -5,4 +5,4 @@ updates:
directory: "/" directory: "/"
schedule: schedule:
interval: "daily" interval: "daily"
target-branch: "beta" target-branch: "main"

View File

@@ -24,7 +24,7 @@ jobs:
run: echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV run: echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@v4.1.1 uses: actions/checkout@v4.1.0
with: with:
repository: 'buanet/ioBroker.docker' repository: 'buanet/ioBroker.docker'
ref: ${{ env.RELEASE_TAG }} ref: ${{ env.RELEASE_TAG }}
@@ -70,7 +70,7 @@ jobs:
password: ${{ secrets.PACKAGES_PASS }} password: ${{ secrets.PACKAGES_PASS }}
- name: Build and push Docker image - name: Build and push Docker image
uses: docker/build-push-action@v5.1.0 uses: docker/build-push-action@v5.0.0
with: with:
context: ./debian12 context: ./debian12
file: ./debian12/Dockerfile file: ./debian12/Dockerfile
@@ -96,7 +96,7 @@ jobs:
run: echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV run: echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@v4.1.1 uses: actions/checkout@v4.1.0
with: with:
repository: 'buanet/ioBroker.docker' repository: 'buanet/ioBroker.docker'
ref: ${{ env.RELEASE_TAG }} ref: ${{ env.RELEASE_TAG }}
@@ -142,7 +142,7 @@ jobs:
password: ${{ secrets.PACKAGES_PASS }} password: ${{ secrets.PACKAGES_PASS }}
- name: Build and push Docker image - name: Build and push Docker image
uses: docker/build-push-action@v5.1.0 uses: docker/build-push-action@v5.0.0
with: with:
context: ./debian12 context: ./debian12
file: ./debian12/Dockerfile file: ./debian12/Dockerfile
@@ -166,7 +166,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Delete images - name: Delete images
uses: actions/github-script@v7.0.1 uses: actions/github-script@v6.4.1
with: with:
github-token: ${{ secrets.PACKAGES_PASS }} github-token: ${{ secrets.PACKAGES_PASS }}
script: | script: |

View File

@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@v4.1.1 uses: actions/checkout@v4.1.0
with: with:
repository: 'buanet/ioBroker.docker' repository: 'buanet/ioBroker.docker'
@@ -64,7 +64,7 @@ jobs:
password: ${{ secrets.PACKAGES_PASS }} password: ${{ secrets.PACKAGES_PASS }}
- name: Build and push Docker image - name: Build and push Docker image
uses: docker/build-push-action@v5.1.0 uses: docker/build-push-action@v5.0.0
with: with:
context: ./debian12 context: ./debian12
file: ./debian12/Dockerfile file: ./debian12/Dockerfile
@@ -85,7 +85,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@v4.1.1 uses: actions/checkout@v4.1.0
with: with:
repository: 'buanet/ioBroker.docker' repository: 'buanet/ioBroker.docker'
@@ -130,7 +130,7 @@ jobs:
password: ${{ secrets.PACKAGES_PASS }} password: ${{ secrets.PACKAGES_PASS }}
- name: Build and push Docker image - name: Build and push Docker image
uses: docker/build-push-action@v5.1.0 uses: docker/build-push-action@v5.0.0
with: with:
context: ./debian12 context: ./debian12
file: ./debian12/Dockerfile file: ./debian12/Dockerfile
@@ -150,7 +150,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Delete images - name: Delete images
uses: actions/github-script@v7.0.1 uses: actions/github-script@v6.4.1
with: with:
github-token: ${{ secrets.PACKAGES_PASS }} github-token: ${{ secrets.PACKAGES_PASS }}
script: | script: |

View File

@@ -18,7 +18,7 @@ jobs:
echo "RELEASE_TAG=$LATESTRELEASE" >> $GITHUB_ENV echo "RELEASE_TAG=$LATESTRELEASE" >> $GITHUB_ENV
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@v4.1.1 uses: actions/checkout@v4.1.0
with: with:
repository: 'buanet/ioBroker.docker' repository: 'buanet/ioBroker.docker'
ref: ${{ env.RELEASE_TAG }} ref: ${{ env.RELEASE_TAG }}
@@ -64,7 +64,7 @@ jobs:
password: ${{ secrets.PACKAGES_PASS }} password: ${{ secrets.PACKAGES_PASS }}
- name: Build and push Docker image - name: Build and push Docker image
uses: docker/build-push-action@v5.1.0 uses: docker/build-push-action@v5.0.0
with: with:
context: ./debian12 context: ./debian12
file: ./debian12/Dockerfile file: ./debian12/Dockerfile
@@ -94,7 +94,7 @@ jobs:
echo "RELEASE_TAG=$LATESTRELEASE" >> $GITHUB_ENV echo "RELEASE_TAG=$LATESTRELEASE" >> $GITHUB_ENV
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@v4.1.1 uses: actions/checkout@v4.1.0
with: with:
repository: 'buanet/ioBroker.docker' repository: 'buanet/ioBroker.docker'
ref: ${{ env.RELEASE_TAG }} ref: ${{ env.RELEASE_TAG }}
@@ -133,7 +133,7 @@ jobs:
password: ${{ secrets.DOCKER_PASS_IOB }} password: ${{ secrets.DOCKER_PASS_IOB }}
- name: Build and push Docker image - name: Build and push Docker image
uses: docker/build-push-action@v5.1.0 uses: docker/build-push-action@v5.0.0
with: with:
context: ./debian12 context: ./debian12
file: ./debian12/Dockerfile file: ./debian12/Dockerfile
@@ -156,7 +156,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Delete images - name: Delete images
uses: actions/github-script@v7.0.1 uses: actions/github-script@v6.4.1
with: with:
github-token: ${{ secrets.PACKAGES_PASS }} github-token: ${{ secrets.PACKAGES_PASS }}
script: | script: |

View File

@@ -12,7 +12,7 @@ jobs:
update-docker-readme: update-docker-readme:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4.1.1 - uses: actions/checkout@v4.1.0
- name: Update Docker Hub Readme (buanet) - name: Update Docker Hub Readme (buanet)
uses: peter-evans/dockerhub-description@v3.4.2 uses: peter-evans/dockerhub-description@v3.4.2

View File

@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout repo - name: Checkout repo
uses: actions/checkout@v4.1.1 uses: actions/checkout@v4.1.0
with: with:
repository: 'buanet/ioBroker.docker' repository: 'buanet/ioBroker.docker'
token: ${{ secrets.ACTIONS_PAT }} token: ${{ secrets.ACTIONS_PAT }}

View File

@@ -1,20 +1,5 @@
## Changelog ## 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.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))
* 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) ### 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)) * 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 * add silent cleanup to setup_avahi.sh

View File

@@ -75,10 +75,6 @@ RUN apt-get update && apt-get upgrade -y \
&& chown -R iobroker:iobroker /opt/scripts /opt/userscripts \ && chown -R iobroker:iobroker /opt/scripts /opt/userscripts \
&& chmod 755 /opt/scripts/*.sh \ && chmod 755 /opt/scripts/*.sh \
&& chmod 755 /opt/userscripts/*.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 # Clean up installation cache
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
&& apt-get autoclean -y \ && apt-get autoclean -y \

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/bin/bash
# Script checks health of running container # Script checks health of running container

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/bash
# run iob fix # run iob fix
iob_fix () { iob_fix () {
@@ -39,48 +39,27 @@ iob_diag () {
fi fi
} }
# run iobroker maintenance script if [ "$1" = "fix" ]; then # call iobroker fixer
iob_maint() { 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
shift shift
if [ "$(id -u)" -eq 0 ]; then if [ "$(id -u)" -eq 0 ]; then # check for execution as root
gosu iobroker bash /opt/scripts/maintenance.sh "$@" gosu iobroker bash /opt/scripts/maintenance.sh "$@"
else else
bash /opt/scripts/maintenance.sh "$@" bash /opt/scripts/maintenance.sh "$@"
fi 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 "$@" gosu iobroker node /opt/iobroker/node_modules/iobroker.js-controller/iobroker.js "$@"
else else
node /opt/iobroker/node_modules/iobroker.js-controller/iobroker.js "$@" node /opt/iobroker/node_modules/iobroker.js-controller/iobroker.js "$@"
fi 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 fi

View File

@@ -17,18 +17,17 @@ offlinemode=$OFFLINE_MODE
objectsdbhost=$IOB_OBJECTSDB_HOST objectsdbhost=$IOB_OBJECTSDB_HOST
objectsdbport=$IOB_OBJECTSDB_PORT objectsdbport=$IOB_OBJECTSDB_PORT
objectsdbtype=$IOB_OBJECTSDB_TYPE objectsdbtype=$IOB_OBJECTSDB_TYPE
objectsdbname=$IOB_OBJECTSDB_NAME objectsdbname=$IOB_OBJECTSDB_NAME # new for sentinel support
objectsdbpass=$IOB_OBJECTSDB_PASS objectsdbpass=$IOB_OBJECTSDB_PASS # new for auth support
packages=$PACKAGES packages=$PACKAGES
packagesupdate=$PACKAGES_UPDATE
permissioncheck=$PERMISSION_CHECK permissioncheck=$PERMISSION_CHECK
setgid=$SETGID setgid=$SETGID
setuid=$SETUID setuid=$SETUID
statesdbhost=$IOB_STATESDB_HOST statesdbhost=$IOB_STATESDB_HOST
statesdbport=$IOB_STATESDB_PORT statesdbport=$IOB_STATESDB_PORT
statesdbtype=$IOB_STATESDB_TYPE statesdbtype=$IOB_STATESDB_TYPE
statesdbname=$IOB_STATESDB_NAME statesdbname=$IOB_STATESDB_NAME # new for sentinel support
statesdbpass=$IOB_STATESDB_PASS statesdbpass=$IOB_STATESDB_PASS # new for auth support
usbdevices=$USBDEVICES usbdevices=$USBDEVICES
set -u set -u
@@ -100,7 +99,6 @@ if [[ "$statesdbname" != "" ]]; then echo -n "----- " && echo
if [[ "$statesdbpass" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" IOB_STATESDB_PASS: "***")" && 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 [[ "$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 [[ "$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 [[ "$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 [[ "$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 [[ "$setuid" != "" ]]; then echo -n "----- " && echo -n "$(printf "%-20s %-28s" SETUID: "$setuid")" && echo " -----"; fi
@@ -125,7 +123,7 @@ fi
# STEP 1 - Preparing container # STEP 1 - Preparing container
##### #####
echo "$(printf -- '-%.0s' {1..80})" 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 "$(printf -- '-%.0s' {1..80})"
echo " " echo " "
@@ -134,27 +132,39 @@ if [[ -f /opt/.docker_config/.first_run ]]; then
# Updating Linux packages # Updating Linux packages
if [[ "$offlinemode" = "true" ]]; then if [[ "$offlinemode" = "true" ]]; then
echo "OFFLINE_MODE is \"true\". Skipping Linux package updates on first run." echo "OFFLINE_MODE is \"true\". Skipping Linux package updates on first run."
echo " " else
elif [[ "$packagesupdate" = "true" ]]; then if bash /opt/scripts/setup_packages.sh -update; then
if ! bash /opt/scripts/setup_packages.sh -update; then echo "Failed."; fi echo " "
echo " " else
echo "Error: Updating failed."
fi
fi fi
echo " "
# Installing packages from ENV # Installing packages from ENV
if [[ "$packages" != "" && "$offlinemode" = "true" ]]; then if [[ "$packages" != "" && "$offlinemode" = "true" ]]; then
echo "PACKAGES is set, but OFFLINE_MODE is \"true\". Skipping Linux package installation." echo "PACKAGES is set, but OFFLINE_MODE is \"true\". Skipping Linux package installation."
elif [[ "$packages" != "" ]]; then elif [[ "$packages" != "" ]]; then
echo "PACKAGES is set. Installing the following additional Linux packages: ""$packages" echo "PACKAGES is set. Installing the following additional Linux packages: ""$packages"
if ! bash /opt/scripts/setup_packages.sh -install; then echo "Failed."; fi if bash /opt/scripts/setup_packages.sh -install; then
echo " "
else
echo "Error: Installation failed."
fi
fi fi
echo " " 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 else
echo "This is not the first run of this container. Skipping first run preparation." echo "This is not the first run of this container. Skipping first run preparation."
fi fi
echo " " echo " "
# Setting UID and/ or GID # Setting UID and/ or GID
if [[ "$setgid" != "$(id -u iobroker)" || "$setuid" != "$(id -g iobroker)" ]]; then 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 "SETUID and/ or SETGID are set to custom values."
echo -n "Changing UID to \"""$setuid""\" and GID to \"""$setgid""\"... " echo -n "Changing UID to \"""$setuid""\" and GID to \"""$setgid""\"... "
usermod -u "$setuid" iobroker usermod -u "$setuid" iobroker
@@ -170,7 +180,7 @@ cd /opt/iobroker
# STEP 2 - Detecting ioBroker-Installation # STEP 2 - Detecting ioBroker-Installation
##### #####
echo "$(printf -- '-%.0s' {1..80})" 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 "$(printf -- '-%.0s' {1..80})"
echo " " echo " "
@@ -184,10 +194,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 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." echo "IoBroker backup file detected in /opt/iobroker."
if [[ "$debug" == "true" ]]; then echo "[DEBUG] Backup file name: " "$(ls *_backupiobroker.tar.gz)"; fi 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 "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 "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 " "
echo -n "Copying backup file and restoring initial ioBroker installation... " echo -n "Copying backup file and restoring initial ioBroker installation... "
mv /opt/iobroker/*.tar.gz /opt/ mv /opt/iobroker/*.tar.gz /opt/
@@ -212,11 +222,11 @@ echo " "
# STEP 3 - Checking ioBroker-Installation # STEP 3 - Checking ioBroker-Installation
##### #####
echo "$(printf -- '-%.0s' {1..80})" 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 "$(printf -- '-%.0s' {1..80})"
echo " " echo " "
# Backing up and replace original iobroker executable to fix sudo bug with gosu # Backing up original iobroker executable to fix sudo bug with gosu
if [[ -n $(cmp /opt/scripts/iobroker.sh /opt/iobroker/iobroker) ]]; then if [[ -n $(cmp /opt/scripts/iobroker.sh /opt/iobroker/iobroker) ]]; then
echo -n "Replacing ioBroker executable to fix sudo bug... " echo -n "Replacing ioBroker executable to fix sudo bug... "
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
@@ -297,7 +307,7 @@ elif [[ "$multihost" == "" || "$multihost" == "false" ]]; then
else else
echo "IOB_MULTIHOST is set, but the value is not valid. Please check your configuration." 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 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 stop_on_error
fi fi
@@ -319,7 +329,7 @@ if [[ -f /opt/iobroker/.fresh_install && "$multihost" != "slave" ]]; then
echo "Done." echo "Done."
echo " " echo " "
else else
echo -n "Checking database connection... " echo -n "Checking Database connection... "
set +e set +e
if gosu iobroker iob uuid &> /dev/null; then if gosu iobroker iob uuid &> /dev/null; then
echo "Done." echo "Done."
@@ -332,7 +342,7 @@ else
echo "$errormsg" echo "$errormsg"
fi fi
echo "Please check your configuration and try again." 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 stop_on_error
fi fi
set -e set -e
@@ -419,12 +429,12 @@ fi
# STEP 4 - Setting up special sessting for ioBroker-adapters # STEP 4 - Setting up special sessting for ioBroker-adapters
##### #####
echo "$(printf -- '-%.0s' {1..80})" 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 "$(printf -- '-%.0s' {1..80})"
echo " " echo " "
echo "Some adapters have special requirements/ settings which can be activated by the use of environment variables." 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 " " echo " "
# Checking ENV for Adminport # Checking ENV for Adminport
@@ -476,7 +486,7 @@ if [[ "$usbdevices" != "" && "$usbdevices" != "none" ]]; then
else else
echo "Looks like the device \"""$i""\" does not exist." echo "Looks like the device \"""$i""\" does not exist."
echo "Did you mount it correctly by using the \"--device\" option?" 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 stop_on_error
fi fi
done done
@@ -495,24 +505,17 @@ 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 "Userscript for first start detected and this is the first start of a new container."
echo "Running userscript_firststart.sh... " echo "Running userscript_firststart.sh... "
chmod 755 /opt/userscripts/userscript_firststart.sh chmod 755 /opt/userscripts/userscript_firststart.sh
if ! bash /opt/userscripts/userscript_firststart.sh; then bash /opt/userscripts/userscript_firststart.sh
echo "Failed." echo "Done."
else
echo "Done."
fi
fi fi
if [[ -f /opt/userscripts/userscript_everystart.sh ]]; then if [[ -f /opt/userscripts/userscript_everystart.sh ]]; then
echo "Userscript for every start detected. Running userscript_everystart.sh... " echo "Userscript for every start detected. Running userscript_everystart.sh... "
chmod 755 /opt/userscripts/userscript_everystart.sh chmod 755 /opt/userscripts/userscript_everystart.sh
if ! bash /opt/userscripts/userscript_everystart.sh; then bash /opt/userscripts/userscript_everystart.sh
echo "Failed." echo "Done."
else
echo "Done."
fi
fi fi
echo " "
fi fi
echo " "
# Removing first run an fresh install markers when exists # 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 if [[ -f /opt/.docker_config/.first_run ]]; then rm -f /opt/.docker_config/.first_run; fi
@@ -522,7 +525,7 @@ if [[ -f /opt/iobroker/.fresh_install ]]; then rm -f /opt/iobroker/.fresh_instal
# STEP 5 - Starting ioBroker # STEP 5 - Starting ioBroker
##### #####
echo "$(printf -- '-%.0s' {1..80})" 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 "$(printf -- '-%.0s' {1..80})"
echo " " echo " "
echo "Starting ioBroker... " echo "Starting ioBroker... "

View File

@@ -165,12 +165,12 @@ stop_iob() {
if [[ "$killbyname" != yes ]]; then if [[ "$killbyname" != yes ]]; then
# pgrep exits with status 1 when there are no matches # 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 if (($(date +%s) > timeout)); then
echo -e "\nTimeout reached. Killing remaining processes..." echo -e "\nTimeout reached. Killing remaining processes..."
pgrep --list-full -u iobroker -f 'io\..' pgrep --list-full -u iobroker
pkill --signal SIGKILL -u iobroker -f 'io\..' pkill --signal SIGKILL -u iobroker -f 'io.'
echo "Done." echo "\nDone."
return return
fi fi
sleep 1 sleep 1
@@ -184,7 +184,6 @@ stop_iob() {
fi fi
echo -e "Done." echo -e "Done."
echo " "
} }
# restart container # restart container
@@ -219,127 +218,40 @@ restore_iobroker() {
echo "You are now going to perform a restore of your 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 "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." echo "Depending on the restart policy, your container will be stopped or restarted automatically after the restore."
# check autoconfirm
if [[ "$autoconfirm" != yes ]]; then if [[ "$autoconfirm" != yes ]]; then
local reply local reply
read -rp 'Do you want to continue [yes/no]? ' reply read -rp 'Do you want to continue [yes/no]? ' reply
if [[ "$reply" != y && "$reply" != Y && "$reply" != yes ]]; then if [[ "$reply" == y || "$reply" == Y || "$reply" == yes ]]; then
return 1 : # continue
else
return 1
fi fi
fi fi
echo " "
# check startup script running
if check_starting > /dev/null; then if check_starting > /dev/null; then
echo "Startup script is still running." echo "Startup script is still running."
echo "Please check container log and wait until ioBroker is sucessfully started." echo "Please check container log and wait until ioBroker is sucessfully started."
echo "Then try again."
return 1 return 1
fi fi
# check mainenance mode
if ! maintenance_enabled > /dev/null; then if ! maintenance_enabled > /dev/null; then
autoconfirm=yes autoconfirm=yes
enable_maintenance enable_maintenance
fi fi
# list backup files echo -n "Restoring ioBroker... "
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 "Selected backup file is \"$selected_backup\"."
else
# more than one backup file found, ask user to select
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]}")"
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]}")
echo ' '
echo "Selected backup file is \"$selected_backup\"."
echo ' '
fi
# 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 set +e
bash iobroker restore "$selected_backup" --force > /opt/iobroker/log/restore.log 2>&1 bash iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1
return_value=$? return=$?
set -e set -e
if [[ "$return" -ne 0 ]]; then
if [[ "$return_value" -ne 0 ]]; then echo "Failed."
echo "Failed." echo "For more details see \"/opt/iobroker/log/restore.log\"."
echo "For more details see \"/opt/iobroker/log/restore.log\"." echo "Please check backup file location and permissions and try again."
echo "Please check backup file location and permissions and try again." return 1
return 1
fi fi
echo "Done." echo "Done."
echo " " echo " "
@@ -353,8 +265,8 @@ restore_iobroker() {
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
sleep 10 sleep 10
echo "Container will be stopped or restarted in 10 seconds..." echo "Container will be stopped or restarted in 10 seconds..."
echo "stopping" > "$healthcheck"
sleep 10 sleep 10
echo "stopping" > "$healthcheck"
pkill -u iobroker pkill -u iobroker
} }
@@ -403,4 +315,4 @@ for arg in "$@"; do
esac esac
done done
"${run[@]}" "${run[@]}"

View File

@@ -1,32 +0,0 @@
#!/usr/bin/env bash
welcome () {
whiptail --title "ioBroker Docker Container Maintenance Script" --ok-button "OK" --msgbox " \
╔═══════════════════════════════════════════════════════════════════════╗\
\n ║ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ ██████╗ ║\
\n ║ ██║ ██╔═══██╗ ██╔══██╗ ██╔══██╗ ██╔═══██╗ ██║ ██╔╝ ██╔════╝ ██╔══██╗ ║\
\n ║ ██║ ██║ ██║ ██████╔╝ ██████╔╝ ██║ ██║ █████╔╝ █████╗ ██████╔╝ ║\
\n ║ ██║ ██║ ██║ ██╔══██╗ ██╔══██╗ ██║ ██║ ██╔═██╗ ██╔══╝ ██╔══██╗ ║\
\n ║ ██║ ╚██████╔╝ ██████╔╝ ██║ ██║ ╚██████╔╝ ██║ ██╗ ███████╗ ██║ ██║ ║\
\n ║ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝ ║\
\n ╚═══════════════════════════════════════════════════════════════════════╝\
\n This script will help you to maintain your ioBroker Docker container!\
\n" 19 79
}
if welcome; then
TO_RUN=$(whiptail --title "ioBroker Docker Container Maintenance Script" --menu "What do you want to do?" 25 78 5 \
"maintenance" "Turn Maintenance Mode on or off" \
"upgrade" "Upgrade js-controller" \
"restore" "Restore ioBroker from backup" 3>&1 1>&2 2>&3)
else
exit 0
fi
if [[ $TO_RUN = "maintenance" ]]; then
echo "You selected maintenance"
elif [[ $TO_RUN = "upgrade" ]]; then
echo "You selected upgrade"
elif [[ $TO_RUN = "restore" ]]; then
echo "You selected restore"
fi

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/bin/bash
if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ] if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ]
then then

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/bin/bash
# reading env # reading env
debug=$DEBUG debug=$DEBUG

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/bin/bash
# bash strict mode # bash strict mode
set -euo pipefail set -euo pipefail
@@ -58,7 +58,7 @@ if [[ "$1" == "-install" ]]; then
fi fi
done done
elif [[ "$1" == "-update" ]]; then elif [[ "$1" == "-update" ]]; then
echo -n "PACKAGES_UPDATE is set. Updating Linux packages on first run... " echo -n "Updating Linux packages on first run... "
apt-get -q update >> /opt/scripts/setup_packages.log 2>&1 apt-get -q update >> /opt/scripts/setup_packages.log 2>&1
return1=$? return1=$?
apt-get -q -y upgrade >> /opt/scripts/setup_packages.log 2>&1 apt-get -q -y upgrade >> /opt/scripts/setup_packages.log 2>&1

View File

@@ -124,7 +124,6 @@ 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 * `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 * `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` (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!!!) * `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 * `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 * `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

View File

@@ -126,7 +126,6 @@ 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 * `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 * `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` (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!!!) * `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 * `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 * `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