feat(maria): ops/setup-drive.sh — configurare Drive dintr-un token, intr-un pas
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
This commit is contained in:
@@ -115,23 +115,19 @@ Pasi (o singura data):
|
||||
```
|
||||
Se deschide browserul; autentifica-te cu `mmarius28@gmail.com` si accepta.
|
||||
In consola apare un token JSON intre `--->` si `<---`. Copiaza-l intreg.
|
||||
2. **Pe container**, creeaza remote-ul cu tokenul copiat:
|
||||
2. **Pe container**, da tokenul scriptului de configurare:
|
||||
```
|
||||
rclone config create gdrive drive scope=drive.readonly token='<TOKEN_JSON>'
|
||||
ops/setup-drive.sh '<TOKEN_JSON>'
|
||||
```
|
||||
3. Testeaza ca vede dosarul:
|
||||
```
|
||||
rclone lsf gdrive: --drive-root-folder-id=1C4e75zgH1_7ZK-_oBP5ZZBvUPh3iEo1O
|
||||
```
|
||||
4. Pune tinta in `~/.maria-bridge/env`:
|
||||
```
|
||||
DRIVE_REMOTE=gdrive,root_folder_id=1C4e75zgH1_7ZK-_oBP5ZZBvUPh3iEo1O:
|
||||
```
|
||||
(sintaxa „connection string" a rclone — fixeaza dosarul fara sa depinda de
|
||||
structura de nume din My Drive.)
|
||||
5. Testeaza: butonul „sincronizeaza din Drive acum" din dashboard, sau
|
||||
`systemctl --user start maria-sync.service` apoi
|
||||
`journalctl --user -u maria-sync -n 50`.
|
||||
Face restul singur: creeaza remote-ul `gdrive`, verifica accesul la dosar,
|
||||
scrie `DRIVE_REMOTE` in `~/.maria-bridge/env` (cu backup) si ruleaza prima
|
||||
sincronizare cu reindexare. E idempotent — se poate rula din nou oricand.
|
||||
|
||||
Tinta scrisa in env e `gdrive,root_folder_id=<ID>:` — sintaxa „connection
|
||||
string" a rclone, care fixeaza dosarul dupa ID, fara sa depinda de structura
|
||||
de nume din My Drive.
|
||||
3. Verifica in dashboard: sectiunea Maria trebuie sa arate „Drive: …" in loc de
|
||||
„Sincronizare Drive dezactivata".
|
||||
|
||||
Tokenul se reimprospateaza singur (refresh token) cat timp aplicatia ramane
|
||||
autorizata in contul Google. Daca expira, dashboard-ul arata sincronizarea ca
|
||||
|
||||
60
proxmox/lxc171-claude-agent/maria-whatsapp-bridge/ops/setup-drive.sh
Executable file
60
proxmox/lxc171-claude-agent/maria-whatsapp-bridge/ops/setup-drive.sh
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/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."
|
||||
Reference in New Issue
Block a user