Add entrypoint.sh

This commit is contained in:
2025-10-30 20:16:30 +00:00
parent bbe6f1b30f
commit e4dc9cf16e

155
entrypoint.sh Normal file
View File

@@ -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