diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..66dd18c --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,155 @@ +#!/bin/bash +set -e + +set -o allexport +if test -f "/data/jottad/jottad.env"; then + source /data/jottad/jottad.env +fi +set +o allexport + +if test -f "/run/secrets/jotta_token"; then + JOTTA_TOKEN=`cat /run/secrets/jotta_token` +fi + +# set timezone +rm /etc/localtime +ln -s /usr/share/zoneinfo/$LOCALTIME /etc/localtime + +# execute bash if given +if [ $# -eq 1 ] && [ "$@" = "bash" ]; then + exec "$@" +fi + +# chown jottad /var/lib/jottad -R +mkdir -p /data/jottad +ln -sfn /data/jottad /root/.jottad +#mkdir -p /root/.config/jotta-cli +mkdir -p /data/jotta-cli +mkdir -p /root/.config +ln -sfn /data/jotta-cli /root/.config/jotta-cli + +# start the service +/usr/bin/run_jottad & + +# wait for service to fully start +sleep 5 + +# Exit on error no longer needed. Also, it would prevent detecting jotta-cli status +set +e + +echo -n "Wait jottad to start for $STARTUP_TIMEOUT seconds. " +# inspired by https://github.com/Eficode/wait-for +while :; do + timeout 1 jotta-cli status >/dev/null 2>&1 + R=$? + + if [ $R -eq 0 ] ; then + echo "Jotta started." + break + fi + + if [ $R -ne 0 ]; then + echo "Could not start jotta. Checking why." + + if [[ "$(timeout 1 jotta-cli status 2>&1)" =~ "Found remote device that matches this machine" ]]; then + echo -n "..found matching device name.." + /usr/bin/expect -c " + set timeout 1 + spawn jotta-cli status + expect \"Do you want to re-use this device? (yes/no): \" {send \"yes\n\"} + expect eof + " + + elif [[ "$(timeout 1 jotta-cli status 2>&1)" =~ "Error: The session has been revoked." ]]; then + echo -n "Session expired. Logging out." + /usr/bin/expect -c " + set timeout 20 + spawn jotta-cli logout + expect \"Backup will stop. Continue?(y/n): \" {send \"y\n\"} + expect eof + " + + echo -n "Logging in again." + # Login user + /usr/bin/expect -c " + set timeout 20 + spawn jotta-cli login + expect \"accept license (yes/no): \" {send \"yes\n\"} + expect \"Personal login token: \" {send \"$JOTTA_TOKEN\n\"} + expect \"Do you want to re-use this device? (yes/no): \" {send \"yes\n\"} + expect eof + # TODO: Jotta may return "Found remote device that matches this machine", where a yes/no answer could be given automatically + " + + elif [[ "$(timeout 1 jotta-cli status 2>&1)" =~ "Not logged in" ]]; then + echo -n "First time login. Logging in." + + # Login user + /usr/bin/expect -c " + set timeout 20 + spawn jotta-cli login + expect \"accept license (yes/no): \" {send \"yes\n\"} + expect \"Personal login token: \" {send \"$JOTTA_TOKEN\n\"} + expect { + eof { + exit 1 + } + \"Devicename*: \" { + send \"$JOTTA_DEVICE\n\" + expect eof + } + \"Do you want to re-use this device? (yes/no):\" { + send \"yes\n\" + expect eof + } + } + " + R=$? + if [ $R -ne 0 ]; then + echo "Login failed" + exit 1 + fi + fi + fi + + if [ "$STARTUP_TIMEOUT" -le 0 ]; then + echo "waited for too long to start ($STARTUP_TIMEOUT seconds)" + echo "ERROR: Not able to determine why Jotta cannot start:" + jotta-cli status + exit 1 + break + fi + + STARTUP_TIMEOUT=$((STARTUP_TIMEOUT - 1)) + echo -n ".$STARTUP_TIMEOUT." + sleep 1 +done + + +echo "Adding backups" + +for dir in /backup/* ; do if [ -d "${dir}" ]; then set +e && jotta-cli add "${dir}" && set -e; fi; done + +# load ignore file +if [ -f /config/ignorefile ]; then + echo "loading ignore file" + jotta-cli ignores set /config/ignorefile +fi + +# set scan interval +echo "Setting scan interval" +jotta-cli config set scaninterval $JOTTA_SCANINTERVAL + +jotta-cli tail & + +R=0 +while [[ $R -eq 0 ]] +do + sleep 15 + jotta-cli status >/dev/null 2>&1 + R=$? +done + +echo "Exiting:" +jotta-cli status +exit 1 \ No newline at end of file