deployment-handoff/secret-agent/xtao-secret-agent
2026-07-16 23:33:08 -06:00

55 lines
1.9 KiB
Bash
Executable file

#!/bin/sh
set -eu
[ "$(id -u)" = "0" ] || { echo "FAIL must_run_as_root"; exit 1; }
config=/root/.xtao-secret-agent/config.env
[ -r "$config" ] || { echo "FAIL missing_config"; exit 2; }
. "$config"
master=/root/.xtao-secret-agent/master.key
shared=${XTAO_SECRET_AGENT_SHARED:-/volume1/xtao-data/secret-agent}
db=${XTAO_SECRET_AGENT_DB:-/root/.xtao-secret-agent/db/xtao-automation.kdbx}
image=${XTAO_SECRET_AGENT_PY_IMAGE:-python@sha256:cab2dbf575e971934a81e4622f5aba17aa7929719bd7e31033a3a83b97fd0464}
backup=${XTAO_SECRET_AGENT_BACKUP:-/volume2/xtao-backup/secret-agent/kdbx}
db_dir=$(dirname "$db")
db_name=$(basename "$db")
site="$shared/runtime/site"
wheels="$shared/runtime/wheels"
runner="$shared/bin/secret_agent_runner.py"
lock=/root/.xtao-secret-agent/locks/agent.lock
[ -s "$master" ] || { echo "FAIL missing_unlock_input"; exit 2; }
[ -s "$db" ] || { echo "FAIL missing_kdbx"; exit 2; }
[ -r "$runner" ] || { echo "FAIL missing_runner"; exit 2; }
mkdir -p "$site" "$backup" "$(dirname "$lock")"
chmod 700 "$shared" "$shared/runtime" "$shared/bin" "$backup" "$(dirname "$lock")"
ensure_runtime() {
if [ -f "$site/pykeepass/__init__.py" ]; then
return 0
fi
[ -d "$wheels" ] || { echo "FAIL missing_wheels"; exit 2; }
/usr/local/bin/docker run --rm --network none \
-v "$wheels:/wheels:ro" \
-v "$site:/site" \
"$image" \
python -m pip install --root-user-action ignore --no-index --find-links /wheels --target /site pykeepass >/dev/null
[ -f "$site/pykeepass/__init__.py" ] || { echo "FAIL runtime_install"; exit 2; }
}
ensure_runtime
cmd=${1:-probe}
shift || true
exec 9>"$lock"
flock -x 9
cat "$master" | /usr/local/bin/docker run --rm -i --network none \
-v "$db_dir:/kdbx" \
-v "$backup:/backup" \
-v "$site:/site:ro" \
-v "$runner:/runner/secret_agent_runner.py:ro" \
-e PYTHONPATH=/site \
"$image" \
python /runner/secret_agent_runner.py --db "/kdbx/$db_name" --backup-dir /backup "$cmd" "$@"