#!/bin/sh # To run from Internet: # sh -c "$(curl -s https://apps.control2net.com/apt/install-ds-patch-latest)" # Define variables used below DIRECTORYBACKUP="/home/pi/goiot-backups" FILENAME=$DIRECTORYBACKUP"/dingo-stack-before-patch-"`date +%y%m%d_%H%M%S`.tar DIRECTORYDOWNLOAD="/home/pi/download" PATCHFILE="patch-latest.zip" DINGO_LOG_LINK="/home/pi/dingo.log" echo "Stopping DINGO-Stack..." dingo-stop echo "\e[32mDINGO-Stack stopped successfully\e[0m" echo # To have the database for sure closed, run this SQL sudo sqlite3 /opt/GoIoT/DinGo/database/DinGo.db 'SELECT * FROM db_revision;' if [ $(ls /opt/GoIoT/DinGo/database/DinGo.db-* 2>/dev/null | wc -l) -gt 0 ]; then echo "\033[0;31mDATABASE IS OPEN!!" echo "Can not take databse backup because" echo "temporary database file(s) exist." echo "Can not continue with install!!\033[0m" echo "TIP: Try dingo-start and then dingo-stop to get database closed" echo " Then re-run this script" exit fi echo "Backup to folder $DIRECTORYBACKUP""..." if [ ! -d "$DIRECTORYBACKUP" ]; then mkdir $DIRECTORYBACKUP chmod 0755 $DIRECTORYBACKUP fi sudo tar -cf $FILENAME \ -C /opt/GoIoT/DinGo/database DinGo.db \ -C /opt/GoIoT/DinGo/database licenses.lic \ -C /opt/GoIoT/DinGo/lib libBACnetProtocolStack.so \ -C /opt/GoIoT/DinGo/bin dingo-stack \ -C /opt/GoIoT/DinGo/bin get-uid \ -C /opt/GoIoT/DinGo dbRevisions.sql echo " Appending trend log files..." cd /opt/GoIoT/DinGo/database sudo tar -rf $FILENAME ts_*.tl echo " Appending libraries..." cd /opt/GoIoT/DinGo/lib sudo tar -rf $FILENAME libRN_*.so echo " Appending htm files..." cd /var/www/DingoWSClient sudo tar -rf $FILENAME *.htm echo " Compessing .tar to .gz file..." gzip $FILENAME echo " Compessing finished" if [ $? -eq 0 ]; then echo "\e[32mBackup successfull to $FILENAME"".gz\e[0m" else echo "\033[0;31mBackup failed, patch upgrade will exit!!\033[0m" exit fi echo if [ ! -d "$DIRECTORYDOWNLOAD" ]; then mkdir $DIRECTORYDOWNLOAD chmod 0755 $DIRECTORYDOWNLOAD fi echo "Downloading patch from server..." cd $DIRECTORYDOWNLOAD wget https://apps.control2net.com/apt/dingo-stack/patch-latest/rpi-32bit.zip -O $PATCHFILE unzip -o -q $PATCHFILE -d $DIRECTORYDOWNLOAD rm $PATCHFILE echo echo "Clean disk start..." sudo apt-get clean echo "\e[32mClean disk finished\e[0m" echo if [ -f "$DINGO_LOG_LINK" ]; then echo "Symlink to dingo.log already exist"; echo else ln -s /opt/GoIoT/DinGo/dingo.log /home/pi/dingo.log fi echo "Copying patch files...." sudo mv *.htm /var/www/DingoWSClient/ sudo mv lib*.so /opt/GoIoT/DinGo/lib/ sudo mv dingo-stack /opt/GoIoT/DinGo/bin/ sudo mv get-uid /opt/GoIoT/DinGo/bin/ sudo mv dbRevisions.sql /opt/GoIoT/DinGo/ sudo chmod +x /opt/GoIoT/DinGo/bin/dingo-stack sudo chmod +x /opt/GoIoT/DinGo/bin/get-uid echo "\e[32mAll files moved. Patch performed successfully" echo echo "32mDINGO-Stack will now be started in safe mode in this termainal-session while updadating database" echo "You may experience a lot of INSERT, UPDATE, etc. SQL commands modifying the database" echo "When done upgrading press +to stop it" echo "If no SQL error messages, start DINGO-Stack with command dingo-start\e[0m" while true; do read -p "Do you want to proceed? (y/n) " yn case $yn in [yY] ) echo "ok, we will proceed"; break;; [nN] ) echo "exiting..."; exit;; * ) echo "invalid response";; esac done sudo -E /opt/GoIoT/DinGo/bin/dingo-stack -s echo "\e[32mIf no error messages, start DINGO-Stack with command dingo-start\e[0m" echo "\e[32mFINISHED!\e[0m"