diff --git a/README.md b/README.md index 794aeb8..395ba37 100644 --- a/README.md +++ b/README.md @@ -49,11 +49,13 @@ Since v3 is possible to set some environment variables to configure a new contai ### Mounting Folder/ Volume -It is now possible to mount an empty folder to /opt/iobroker during first startup of the container. The Startupscript will check this folder and restore content if it is empty. +It is possible to mount an empty folder to /opt/iobroker during first startup of the container. The Startupscript will check this folder and restore content if it is empty. +In actual beta (v4.0.3beta) it is also possible mount a folder with an iobroker backup (created with backitup-adapter) named like this: "iobroker_2020_01_06-01_09_10_backupiobroker.tar.gz". +The startup script will then detect this backup and restore it during the start of the container. Plese see logs when starting the container for more details. It is absolutely recommended to use a mounted folder or persistent volume for /opt/iobroker folder! -This also works with mounting a folder containing an existing ioBroker-installation (e.g. when moving an existing installation to docker). +You can also mount a folder containing an existing ioBroker-installation (e.g. when moving an existing installation to docker). ### Permission Fixer @@ -61,9 +63,12 @@ After some issues with permissions related to the use of a dedicated user for io ## Changelog -### v4.0.2beta (2019-12-10) -* added env for activating redis -* enhancements in startupscript and dockerfile +### v4.0.3beta (2020-01-06) +* added support to restore backup on startup +* small fixes according to "docker best practices" +* v4.0.2beta (2019-12-10) + * added env for activating redis + * enhancements in startupscript and dockerfile * v4.0.1beta (2019-11-25) * added env for iobroker admin port * added env for usb-devices (setting permissions) diff --git a/aarch64/scripts/iobroker_startup.sh b/aarch64/scripts/iobroker_startup.sh index 93b690f..5653468 100644 --- a/aarch64/scripts/iobroker_startup.sh +++ b/aarch64/scripts/iobroker_startup.sh @@ -100,37 +100,36 @@ echo "----- Step 2 of 5: Detecting ioBroker installation -----" echo "$(printf -- '-%.0s' {1..60})" echo ' ' -if [ `ls -1a|wc -l` -lt 3 ] +if [ `find /opt/iobroker -type f | wc -l` -lt 1 ] then echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..." tar -xf /opt/initial_iobroker.tar -C / echo "Done." +elif [ -f /opt/iobroker/iobroker ] +then + echo "Existing installation of ioBroker detected in /opt/iobroker." +elif [ $(ls iobroker_20* 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/iobroker_20*.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ] +then + echo "ioBroker backup file detected in /opt/iobroker. Restoring ioBroker..." + mv /opt/iobroker/*.tar.gz /opt/ + tar -xf /opt/initial_iobroker.tar -C / + mkdir /opt/iobroker/backups + mv /opt/*.tar.gz /opt/iobroker/backups/ + iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1 + echo "Done." + echo ' ' + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!! IMPORTANT NOTE !!!!!" + echo "!!!!! The sartup script restored iobroker from a backup file. !!!!!" + echo "!!!!! Check /opt/iobroker/log/restore.log to see if restore was successful. !!!!!" + echo "!!!!! When ioBroker now starts it will reinstall all Adapters automatically. !!!!!" + echo "!!!!! This might be take a looooong time! Please be patient! !!!!!" + echo "!!!!! You can view installation process by taking a look at ioBroker log. !!!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" else - if [ -f /opt/iobroker/iobroker ] - then - echo "Existing installation of ioBroker detected in /opt/iobroker." - else - files=(/opt/iobroker/*) - if [ ${#files[@]} -lt 2 ]; then - if tar -ztvf /opt/iobroker/*.tar.gz "backup/backup.json" &> /dev/null; then - echo "ioBroker Backup detected in /opt/iobroker. Restoring ioBroker..." - mv /opt/iobroker/iobroker_20*.tar.gz /opt/ - tar -xf /opt/initial_iobroker.tar -C / - mkdir /opt/iobroker/backups - mv /opt/iobroker_20*.tar.gz /opt/iobroker/backups/ - iobroker restore 0 - echo "Done." - else - echo "There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker or a valid backup file!" - echo "Please check/ recreate mounted folder/ volume and restart ioBroker container." - exit 1 - fi - else - echo "There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker!" - echo "Please check/ recreate mounted folder/ volume and restart ioBroker container." - exit 1 - fi - fi + echo "There is data detected in /opt/iobroker but it looks like it is no instance of iobroker or a valid backup file!" + echo "Please check/ recreate mounted folder/ volume and restart ioBroker container." + exit 1 fi echo ' ' diff --git a/armv7hf/scripts/iobroker_startup.sh b/armv7hf/scripts/iobroker_startup.sh index 93b690f..5653468 100644 --- a/armv7hf/scripts/iobroker_startup.sh +++ b/armv7hf/scripts/iobroker_startup.sh @@ -100,37 +100,36 @@ echo "----- Step 2 of 5: Detecting ioBroker installation -----" echo "$(printf -- '-%.0s' {1..60})" echo ' ' -if [ `ls -1a|wc -l` -lt 3 ] +if [ `find /opt/iobroker -type f | wc -l` -lt 1 ] then echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..." tar -xf /opt/initial_iobroker.tar -C / echo "Done." +elif [ -f /opt/iobroker/iobroker ] +then + echo "Existing installation of ioBroker detected in /opt/iobroker." +elif [ $(ls iobroker_20* 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/iobroker_20*.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ] +then + echo "ioBroker backup file detected in /opt/iobroker. Restoring ioBroker..." + mv /opt/iobroker/*.tar.gz /opt/ + tar -xf /opt/initial_iobroker.tar -C / + mkdir /opt/iobroker/backups + mv /opt/*.tar.gz /opt/iobroker/backups/ + iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1 + echo "Done." + echo ' ' + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!! IMPORTANT NOTE !!!!!" + echo "!!!!! The sartup script restored iobroker from a backup file. !!!!!" + echo "!!!!! Check /opt/iobroker/log/restore.log to see if restore was successful. !!!!!" + echo "!!!!! When ioBroker now starts it will reinstall all Adapters automatically. !!!!!" + echo "!!!!! This might be take a looooong time! Please be patient! !!!!!" + echo "!!!!! You can view installation process by taking a look at ioBroker log. !!!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" else - if [ -f /opt/iobroker/iobroker ] - then - echo "Existing installation of ioBroker detected in /opt/iobroker." - else - files=(/opt/iobroker/*) - if [ ${#files[@]} -lt 2 ]; then - if tar -ztvf /opt/iobroker/*.tar.gz "backup/backup.json" &> /dev/null; then - echo "ioBroker Backup detected in /opt/iobroker. Restoring ioBroker..." - mv /opt/iobroker/iobroker_20*.tar.gz /opt/ - tar -xf /opt/initial_iobroker.tar -C / - mkdir /opt/iobroker/backups - mv /opt/iobroker_20*.tar.gz /opt/iobroker/backups/ - iobroker restore 0 - echo "Done." - else - echo "There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker or a valid backup file!" - echo "Please check/ recreate mounted folder/ volume and restart ioBroker container." - exit 1 - fi - else - echo "There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker!" - echo "Please check/ recreate mounted folder/ volume and restart ioBroker container." - exit 1 - fi - fi + echo "There is data detected in /opt/iobroker but it looks like it is no instance of iobroker or a valid backup file!" + echo "Please check/ recreate mounted folder/ volume and restart ioBroker container." + exit 1 fi echo ' '