Pasii 2-4 din README (creare remote, verificare acces, scriere DRIVE_REMOTE, prima sincronizare) erau de facut de mana, cu ID-ul dosarului copiat corect de fiecare data. Scriptul ii face pe toti dintr-un token `rclone authorize`: valideaza ca tokenul e JSON, refuza devreme daca rclone sau env-ul lipsesc, face backup la env inainte de a-l rescrie, si e idempotent. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
61 lines
2.3 KiB
Bash
Executable File
61 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Configureaza sincronizarea depozitului Mariei cu Google Drive, dintr-un token
|
|
# obtinut cu `rclone authorize` pe o masina cu browser (containerul e headless).
|
|
#
|
|
# Pe Windows, in dosarul unde ai dezarhivat rclone.exe:
|
|
# rclone.exe authorize "drive" --drive-scope=drive.readonly
|
|
# Copiaza tokenul JSON dintre ---> si <--- si ruleaza aici:
|
|
# ops/setup-drive.sh '<TOKEN_JSON>'
|
|
#
|
|
# Idempotent: rulat din nou, rescrie remote-ul si linia DRIVE_REMOTE.
|
|
|
|
set -euo pipefail
|
|
|
|
REMOTE_NAME="gdrive"
|
|
FOLDER_ID="1C4e75zgH1_7ZK-_oBP5ZZBvUPh3iEo1O" # document_store, cont mmarius28@gmail.com
|
|
ENV_FILE="${MARIA_BRIDGE_DIR:-$HOME/.maria-bridge}/env"
|
|
DRIVE_REMOTE="${REMOTE_NAME},root_folder_id=${FOLDER_ID}:"
|
|
|
|
token="${1:-}"
|
|
if [ -z "$token" ]; then
|
|
echo "Uz: $0 '<TOKEN_JSON de la rclone authorize>'" >&2
|
|
exit 2
|
|
fi
|
|
if ! printf '%s' "$token" | python3 -c 'import json,sys; json.load(sys.stdin)' 2>/dev/null; then
|
|
echo "Tokenul nu e JSON valid. Copiaza tot, inclusiv acoladele." >&2
|
|
exit 2
|
|
fi
|
|
command -v rclone >/dev/null || { echo "rclone nu e instalat" >&2; exit 1; }
|
|
[ -f "$ENV_FILE" ] || { echo "nu gasesc $ENV_FILE" >&2; exit 1; }
|
|
|
|
echo "1/4 creez remote-ul rclone '$REMOTE_NAME'…"
|
|
rclone config delete "$REMOTE_NAME" 2>/dev/null || true
|
|
rclone config create "$REMOTE_NAME" drive scope=drive.readonly token="$token" --non-interactive >/dev/null
|
|
|
|
echo "2/4 verific accesul la dosar…"
|
|
if ! rclone lsf "$DRIVE_REMOTE" >/tmp/.maria-drive-check 2>/tmp/.maria-drive-err; then
|
|
echo "nu pot citi dosarul:" >&2; cat /tmp/.maria-drive-err >&2; exit 1
|
|
fi
|
|
echo " vad $(wc -l </tmp/.maria-drive-check) fisiere in document_store"
|
|
|
|
echo "3/4 scriu DRIVE_REMOTE in $ENV_FILE…"
|
|
cp -p "$ENV_FILE" "$ENV_FILE.bak.$(date +%F)"
|
|
if grep -q '^DRIVE_REMOTE=' "$ENV_FILE"; then
|
|
python3 - "$ENV_FILE" "$DRIVE_REMOTE" <<'PY'
|
|
import sys, pathlib
|
|
p, val = pathlib.Path(sys.argv[1]), sys.argv[2]
|
|
lines = [(f"DRIVE_REMOTE={val}" if l.startswith("DRIVE_REMOTE=") else l)
|
|
for l in p.read_text().splitlines()]
|
|
p.write_text("\n".join(lines) + "\n")
|
|
PY
|
|
else
|
|
printf 'DRIVE_REMOTE=%s\n' "$DRIVE_REMOTE" >> "$ENV_FILE"
|
|
fi
|
|
|
|
echo "4/4 sincronizez si reindexez…"
|
|
cd "$(dirname "$0")/../rag"
|
|
"${MARIA_BRIDGE_DIR:-$HOME/.maria-bridge}/venv/bin/python" sync.py --force
|
|
|
|
echo
|
|
echo "Gata. Timer-ul maria-sync trage la 10 minute de acum inainte."
|