4.1 KiB
name, description
| name | description |
|---|---|
| seafile | Read-only inventory of ACG's Seafile Pro server (the SeaCloud / SeaDrive backup backend on Jupiter): who has an account, per-user storage used, libraries, and which GuruRMM endpoints actually run the SeaDrive/Seafile client. Built for GPS backup verification. Triggers: seafile, seacloud, seadrive, sync.azcomputerguru, who backs up to seafile, seafile usage. |
Seafile (SeaCloud / SeaDrive) Skill
Read-only client for ACG's live Seafile Pro server — the backend clients call
"SeaCloud" (the server) and "SeaDrive" (the desktop virtual-drive client). Runs in
Docker on Jupiter (172.16.3.20:8082, public https://sync.azcomputerguru.com).
Answers the GPS backup-audit question: which customers back up here and how
much data do they hold — and, with --rmm, which enrolled machines actually run
the client.
This skill is one of the backup-verification siblings alongside b2 (Backblaze),
owncloud, and datto-workplace. It never writes.
Running
SEAFILE=".claude/skills/seafile/scripts/seafile.py"
py "$SEAFILE" status # server reachable + version
py "$SEAFILE" usage # per-user storage + library count (audit view)
py "$SEAFILE" users [--inactive] # all accounts + used/quota + last login
py "$SEAFILE" libraries # all libraries (repos) + owner + size
py "$SEAFILE" devices [--user EMAIL] # desktop/sync devices the server has seen
py "$SEAFILE" audit # active accounts with data (the GPS slice)
py "$SEAFILE" audit --rmm # + cross-check GuruRMM endpoints for the client
py "$SEAFILE" audit --client Russo --rmm --json
Add --json to any command for machine-readable output. --url overrides the
server base (default is the internal Docker endpoint; use the public host when
off-LAN).
Credentials
Loaded at runtime from the SOPS vault (never hardcoded):
services/seafile-pro.sops.yaml -> credentials.username / credentials.password
(the Seafile admin account). Auth is POST /api2/auth-token/ (form) -> a
long-lived API token used as Authorization: Token <tok>. The token is a secret;
it is cached at .claude/skills/seafile/.cache/token.json (gitignored, mode 0600)
and re-fetched weekly or on a 401/403.
What the data means
- quota_usage (bytes) is the authoritative per-account storage used. A user
with
is_active: trueand non-zero usage is actively backing up here. - libraries (repos) are the sync roots;
size+file_count+last_modifiedshow freshness.usagerolls libraries up per owner. - Accounts are emails, so the customer is usually obvious from the domain
(e.g.
russo@rrs-law.com= Russo Law,greg@gstoltzlaw.com= Stoltz Law). - As of the build (2026-07-05) only a handful of accounts hold data (~5 TB total) — Seafile is used by a few clients, not the whole GPS base.
The "both" cross-check (--rmm)
Server-side tells you who has an account; --rmm adds the endpoint half. It logs
in to GuruRMM (infrastructure/gururmm-server.sops.yaml), and for each agent
(optionally filtered by --client) runs a read-only detection PowerShell that
reports installed products / running processes / config folders matching
Seafile / SeaDrive. An agent is reported only if the client is actually
present. Detection dispatches a command to live endpoints — scope with --client
rather than sweeping all 350+ agents unless you mean to.
Notes / gotchas
- Base defaults to
http://172.16.3.20:8082(direct, no Cloudflare); setSEAFILE_URL=https://sync.azcomputerguru.comwhen off the LAN/Tailscale. devicesdepends on the admin devices endpoint, which varies by Seafile version; it returns[](with a note) rather than failing if unsupported.- Shared plumbing (repo-root resolve, vault read, GuruRMM client + endpoint
detection) lives in
.claude/scripts/backup_common.py, used by all three server-backup skills. Detection patterns must be precise per backend — this skill usesSeafile/SeaDrive. - Seafile Pro also has a MySQL backend on Jupiter (vault
credentials.database.*) for deeper queries; not used here (the admin API covers the audit needs).