diff --git a/wiki/index.md b/wiki/index.md index a7f8618..8e2ebdb 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -30,7 +30,10 @@ Run `/wiki-lint` to check for stale entries and broken backlinks. | Article | Summary | Last Compiled | |---|---|---| -| *(run `/wiki-compile system:neptune`, `system:jupiter`, `system:pluto`, `system:saturn`)* | | | +| [GuruRMM VM (gururmm-build)](systems/gururmm-build.md) | 172.16.3.30 — Ubuntu 22.04 VM on Jupiter; GuruRMM API :3001, ClaudeTools API :8001, Coord API, MariaDB, PostgreSQL, build pipeline | 2026-05-24 | +| [Jupiter](systems/jupiter.md) | 172.16.3.20 — Unraid primary NAS; virsh host for all VMs; Docker: NPM, Gitea, Seafile; iDRAC at 172.16.1.73 | 2026-05-24 | +| [Pluto (Claude-Builder)](systems/pluto.md) | 172.16.3.36 — Windows Server 2019 virsh VM on Jupiter; exclusive Windows MSI + cargo build server for GuruRMM | 2026-05-24 | +| [Uranus](systems/uranus.md) | 172.16.3.21 — Unraid secondary (Dell R730xd); OwnCloud archive storage only; formerly Saturn's IP (reused Apr 2026); RAM too low for VMs | 2026-05-24 | ## Patterns @@ -54,10 +57,6 @@ Run `/wiki-lint` to check for stale entries and broken backlinks. | Scope | Priority | Notes | |---|---|---| | `overview` | High | Compile after systems are seeded; reads other wiki articles, not raw logs | -| `system:gururmm-build` | High | 172.16.3.30 — Linux VM on Jupiter; GuruRMM API 3001, ClaudeTools API 8001, Coord API, MariaDB 3306, PostgreSQL 5432, build pipeline (webhook-handler.py); Gitea also accessible here via SSH port forward from .30:3000 | -| `system:jupiter` | High | 172.16.3.20 — Unraid NAS; virsh hosts: GuruRMM VM (.30), Unifi, OwnCloud, Claude-Builder/Pluto (.36); Docker: NPM, Seafile, Gitea (port 3000); iptables PREROUTING: :443 → NPM container; iDRAC at 172.16.1.73 | -| `system:pluto` | Medium | 172.16.3.36 — Windows Server 2019 virsh VM on Jupiter (Claude-Builder); Windows MSI + cargo builds for GuruRMM | -| `system:uranus` | Medium | 172.16.3.21 — OwnCloud additional storage only; Dell R730xd; formerly Saturn's IP (reused Apr 2026); NOT a proxy or general host | | `system:neptune` | Low | neptune.acghosting.com, 172.16.3.11 internal / 67.206.163.124 external — Exchange Server 2016; ACG infrastructure physically colocated at Dataforth D2 facility; active mail server for multiple ACG-hosted clients; internal access requires routing through D2TESTNAS because Dataforth UDM runs a subnet that duplicates/overlaps ACG office LAN (172.16.x.x) — TODO: resubnet Dataforth UDM to eliminate overlap | | `client:birthbiologic` | Medium | GuruRMM enrolled (site BRIGHT-PEAK-5980) | | `client:key-paul` | Low | GuruRMM enrolled (KEY-MEDIA) | diff --git a/wiki/systems/gururmm-build.md b/wiki/systems/gururmm-build.md new file mode 100644 index 0000000..0fccfe7 --- /dev/null +++ b/wiki/systems/gururmm-build.md @@ -0,0 +1,148 @@ +--- +type: system +name: gururmm-build +display_name: GuruRMM VM (gururmm-build) +last_compiled: 2026-05-24 +compiled_by: DESKTOP-0O8A1RL/claude-main +sources: + - credentials.md + - .claude/memory/infra_office_network.md + - .claude/machines/pluto.md + - wiki/projects/gururmm.md +backlinks: + - projects/gururmm + - systems/jupiter + - systems/pluto +--- + +# GuruRMM VM (gururmm-build) + +## Identity +- **Hostname:** gururmm / gururmm-build +- **IP:** 172.16.3.30 +- **Role:** Production server — GuruRMM API, ClaudeTools API, Coord API, MariaDB, PostgreSQL, build pipeline +- **Location:** Linux VM on Jupiter (172.16.3.20), virsh domain "GuruRMM" +- **OS:** Ubuntu 22.04 LTS +- **History:** Originally ran as a Docker container on Jupiter; migrated to its own VM at 172.16.3.30 + +## Specs + +Linux VM — resource allocation managed via virsh on Jupiter (172.16.3.20). Exact vCPU/vRAM allocation not documented. + +## Services + +| Service | Port | Notes | +|---|---|---| +| GuruRMM API | 3001 | Rust/Axum; systemd `gururmm-server`; binary `/usr/local/bin/gururmm-server` | +| ClaudeTools API | 8001 | FastAPI/Python; includes Coord API at `/api/coord` | +| Nginx | 80/443 | Reverse proxy + static file serving | +| MariaDB | 3306 | Database `claudetools`; version 10.6.22 | +| PostgreSQL | 5432 | Database `gururmm`; version 14 | +| Build webhook | 9000 | `webhook-handler.py`; systemd `gururmm-webhook`; receives Gitea push events | +| Gitea (forwarded) | 3000 | SSH port forward from here → Gitea Docker container on Jupiter (.20:3000) | + +## Access +- **SSH:** `ssh guru@172.16.3.30` (ed25519 keys: guru@wsl, guru@gururmm-build) +- **Sudo password:** vault `infrastructure/gururmm-server.sops.yaml` (same as SSH) +- **1Password:** `op://Infrastructure/GuruRMM Server/password` +- **Vault path:** `infrastructure/gururmm-server.sops.yaml` + +## Key Paths + +### GuruRMM +| Path | Purpose | +|---|---| +| `/usr/local/bin/gururmm-server` | Server binary | +| `/usr/local/bin/gururmm-agent` | Local agent binary | +| `/home/guru/gururmm/` | Gitea repo clone | +| `/var/www/gururmm/dashboard/` | Built React dashboard (served by nginx) | +| `/var/www/gururmm/downloads/` | Agent artifact distribution directory | +| `/var/www/gururmm/downloads/windows/amd64/` | Windows x64 MSI + EXE | +| `/var/www/gururmm/downloads/windows/x86/` | Windows x86 EXE | +| `/opt/gururmm/` | Build pipeline scripts and state | +| `/opt/gururmm/webhook-handler.py` | Gitea webhook receiver (port 9000) | +| `/opt/gururmm/build-shared.sh` | Version bump + git sync (runs once per trigger) | +| `/opt/gururmm/build-linux.sh` | Linux cargo build | +| `/opt/gururmm/build-windows.sh` | SSH to Pluto + artifact copy | +| `/opt/gururmm/build-mac.sh` | Stub (no Mac build machine) | +| `/opt/gururmm/build-server.sh` | Server binary rebuild (separate, manual trigger) | +| `/opt/gururmm/.env` | DB URL + secrets (GuruRMM build context) | +| `/opt/gururmm/pluto_known_hosts` | Pinned SSH keys for Pluto (172.16.3.36) | +| `/opt/gururmm/last-built-commit-linux` | SHA tracking for Linux build gate | +| `/opt/gururmm/last-built-commit-windows` | SHA tracking for Windows build gate | +| `/opt/gururmm/last-built-commit-mac` | SHA tracking for Mac build gate (stub) | +| `/var/log/gururmm-build-linux.log` | Linux build log | +| `/var/log/gururmm-build-windows.log` | Windows build log (includes [PLUTO] prefixed SSH output) | + +**[WARNING] Do NOT use `/opt/gururmm/updates/` for freshness checks** — legacy path from before the pipeline split (~Feb 2026). Active distribution is `/var/www/gururmm/downloads/`. + +### ClaudeTools +| Path | Purpose | +|---|---| +| `/home/guru/claudetools/` | ClaudeTools repo clone (if present) | +| ClaudeTools API port 8001 | Docs at http://172.16.3.30:8001/api/docs | + +## Databases + +### MariaDB (claudetools) +- **DB:** claudetools +- **User:** `op://Infrastructure/GuruRMM Server/Databases.MariaDB User` +- **Password:** `op://Infrastructure/GuruRMM Server/Databases.MariaDB Password` +- **Vault:** `bash D:/vault/scripts/vault.sh get-field projects/claudetools/database.sops.yaml credentials.password` + +### PostgreSQL (gururmm) +- **DB:** gururmm +- **User:** `op://Infrastructure/GuruRMM Server/Databases.PostgreSQL User` +- **Password:** `op://Infrastructure/GuruRMM Server/Databases.PostgreSQL Password` +- **Connection string:** `postgres://gururmm:43617ebf7eb242e814ca9988cc4df5ad@localhost:5432/gururmm` +- **DB URL also in:** `/opt/gururmm/.env` and `/home/guru/.cargo/env` + +## systemd Services + +| Unit | Binary | Purpose | +|---|---|---| +| `gururmm-server` | `/usr/local/bin/gururmm-server` | GuruRMM Rust/Axum API | +| `gururmm-agent` | `/usr/local/bin/gururmm-agent` | Local GuruRMM agent (enrolled as ACG internal) | +| `gururmm-webhook` | `/opt/gururmm/webhook-handler.py` | Build pipeline webhook receiver | + +## Build Pipeline Role + +This machine is the **build orchestrator** for GuruRMM. It receives Gitea webhooks, runs the Linux build directly, and SSHes to Pluto for Windows builds. + +``` +Gitea push to main → webhook-handler.py (port 9000) + → build-shared.sh (version bump, one-shot) + → build-linux.sh (cargo build on this machine) + → build-windows.sh (SSH → Pluto at 172.16.3.36) + → build-mac.sh (stub) + → artifacts → /var/www/gururmm/downloads/ + → systemctl restart gururmm-agent +``` + +Server and dashboard are NOT rebuilt by the agent pipeline — separate manual steps: +```bash +sudo /opt/gururmm/build-server.sh # Rebuild server binary +cd /home/guru/gururmm/dashboard && sudo -u guru npm run build +sudo rsync -av --delete /home/guru/gururmm/dashboard/dist/ /var/www/gururmm/dashboard/ +``` + +SSH to Pluto from this machine: +```bash +ssh -o StrictHostKeyChecking=yes \ + -o UserKnownHostsFile=/opt/gururmm/pluto_known_hosts \ + Administrator@172.16.3.36 +``` + +## Known Issues & Quirks + +- **DATABASE_URL required at build time** — sqlx compile-time macros need it. Located in `/home/guru/.cargo/env`. Builds fail silently if not sourced. +- **Pre-commit hook lacks execute bit** (noted 2026-05-23) — likely still unfixed. +- **`sudo -u guru git` required in systemd build context** — git rejects the repo as dubious ownership when running as root against guru-owned `/home/guru/gururmm`. Use `git config --system --add safe.directory /home/guru/gururmm` or always prefix with `sudo -u guru`. +- **NPM proxy stale entry** — credentials.md and Jupiter NPM still proxy `rmm-api.azcomputerguru.com → 172.16.3.20:3001`. Should be `172.16.3.30:3001`. Fix in NPM admin at http://172.16.3.20:7818. +- **Gitea at :3000** — accessible via SSH port forward from this machine; authoritative Gitea container is on Jupiter (.20). Internal direct URL: http://172.16.3.20:3000. + +## Backlinks + +- [[projects/gururmm]] — GuruRMM API, build pipeline, ClaudeTools API all run here +- [[systems/jupiter]] — this machine is a virsh VM hosted on Jupiter +- [[systems/pluto]] — Windows builds SSH from here to Pluto diff --git a/wiki/systems/jupiter.md b/wiki/systems/jupiter.md new file mode 100644 index 0000000..89218fe --- /dev/null +++ b/wiki/systems/jupiter.md @@ -0,0 +1,97 @@ +--- +type: system +name: jupiter +display_name: Jupiter +last_compiled: 2026-05-24 +compiled_by: DESKTOP-0O8A1RL/claude-main +sources: + - credentials.md + - .claude/memory/infra_office_network.md +backlinks: + - systems/gururmm-build + - systems/pluto + - systems/uranus +--- + +# Jupiter + +## Identity +- **Hostname:** Jupiter +- **IP:** 172.16.3.20 +- **Role:** Primary Unraid NAS — virsh VM host + Docker container host for ACG infrastructure +- **Location:** ACG office +- **OS:** Unraid (version not documented; presumed current) +- **Hardware:** Dell (iDRAC present — likely PowerEdge; exact model not documented) + +## Specs + +Not documented. iDRAC available at 172.16.1.73 (DHCP) for OOB management. + +## Services + +### Docker Containers + +| Container | Port(s) | Notes | +|---|---|---| +| `npm` | 1880 (HTTP), 18443 (HTTPS), 7818 (admin) | Nginx Proxy Manager — handles all external reverse proxying | +| `gitea` | 3000 (HTTP), 2222 (SSH) | Internal Gitea git server; http://172.16.3.20:3000 | +| `seafile` + mysql + elasticsearch + memcached | 8082 | Seafile Pro file sync stack | + +**NPM → 443 routing:** iptables PREROUTING rule on Jupiter: `dpt:443 → 172.17.0.2:443` (NPM Docker bridge IP). Persisted in `/boot/config/go` so it survives reboots. + +### Virtual Machines (virsh) + +| VM | IP | State | Role | +|---|---|---|---| +| GuruRMM | 172.16.3.30 | running | Linux VM — GuruRMM API, ClaudeTools API, MariaDB, PostgreSQL, build pipeline | +| Claude-Builder (Pluto) | 172.16.3.36 | running | Windows Server 2019 — MSI + cargo builds | +| OwnCloud | 172.16.3.22 | running | OwnCloud file sync VM (cloud.acghosting.com) | +| Unifi | (IP not documented) | running | UniFi Network controller | +| Windows 7 | — | shut off | — | +| Windows Server 2016 | — | shut off | — | +| Windows Server 2016_Template | — | shut off | — | + +## Access +- **SSH:** `ssh root@172.16.3.20` port 22 +- **Password:** `op://Infrastructure/Jupiter (Unraid Primary)/password` +- **Unraid Web UI:** http://172.16.3.20 (same password) +- **NPM Admin:** http://172.16.3.20:7818 +- **iDRAC:** https://172.16.1.73 (DHCP — IP may change) + - User: `op://Infrastructure/Jupiter (Unraid Primary)/iDRAC.iDRAC User` + - Password: `op://Infrastructure/Jupiter (Unraid Primary)/iDRAC.iDRAC Password` + - IPMI Key: `op://Infrastructure/Jupiter (Unraid Primary)/iDRAC.IPMI Key` +- **Vault path:** `op://Infrastructure/Jupiter (Unraid Primary)/` +- **SSH keys authorized:** claude-code@localadmin (ed25519), root@GuruSync (ed25519), guru@wsl (ed25519), guru@gururmm-build (ed25519) + +## NPM Proxy Hosts (as of credentials.md — may be stale) + +| External Host | Internal Target | Notes | +|---|---|---| +| emby.azcomputerguru.com | 172.16.2.99:8096 | Emby media server | +| git.azcomputerguru.com | 172.16.3.20:3000 | Gitea (Cloudflare-fronted — blocks direct curl; use http://172.16.3.20:3000 internally) | +| rmm-api.azcomputerguru.com | 172.16.3.20:3001 | **STALE** — actual GuruRMM API is on 172.16.3.30:3001; update this in NPM admin | +| unifi.azcomputerguru.com | 172.16.3.28:8443 | UniFi controller | +| sync.azcomputerguru.com | 172.16.3.20:8082 | Seafile Pro | +| plexrequest.azcomputerguru.com | 172.16.3.31:5055 | Plex request manager | + +**[ACTION REQUIRED]** Update `rmm-api.azcomputerguru.com` proxy target from `172.16.3.20:3001` → `172.16.3.30:3001` in NPM admin (http://172.16.3.20:7818). + +## Gitea + +- **Internal URL:** http://172.16.3.20:3000 (use this for API calls and curl — git.azcomputerguru.com is Cloudflare-fronted and blocks direct curl) +- **SSH clone:** `ssh://azcomputerguru@172.16.3.20:2222/azcomputerguru/repo.git` +- **External URL:** https://git.azcomputerguru.com (browser only) +- **API Token:** `op://Infrastructure/Gitea/API.API Token` + +## Known Issues & Quirks + +- **iptables PREROUTING for port 443** persists via `/boot/config/go` — if NPM routing breaks after a reboot, check this file first. +- **iDRAC IP is DHCP** (172.16.1.73) — may drift. Verify before relying on it for OOB access. +- **guruRMM API proxy stale** — see NPM table above. Fix before it causes a routing incident. +- **Post-power-failure recovery order matters** — see `.claude/POWER_FAILURE_RUNBOOK.md` for the full recovery sequence (Tailscale routes, libvirt/VMs, Seafile, NPM/DNS in order). + +## Backlinks + +- [[systems/gururmm-build]] — GuruRMM VM hosted here (virsh domain "GuruRMM") +- [[systems/pluto]] — Claude-Builder VM hosted here (virsh domain "Claude-Builder") +- [[systems/uranus]] — secondary storage Unraid node (separate machine, not hosted here) diff --git a/wiki/systems/pluto.md b/wiki/systems/pluto.md new file mode 100644 index 0000000..aecf3f3 --- /dev/null +++ b/wiki/systems/pluto.md @@ -0,0 +1,106 @@ +--- +type: system +name: pluto +display_name: Pluto (Claude-Builder) +last_compiled: 2026-05-24 +compiled_by: DESKTOP-0O8A1RL/claude-main +sources: + - .claude/machines/pluto.md + - credentials.md + - wiki/projects/gururmm.md +backlinks: + - projects/gururmm + - systems/jupiter + - systems/gururmm-build +--- + +# Pluto (Claude-Builder) + +## Identity +- **Hostname:** Pluto / Claude-Builder +- **IP:** 172.16.3.36 +- **Role:** Windows MSI and cargo build server for GuruRMM — the only machine in the fleet that produces Windows agent binaries and WiX MSI installers +- **Location:** virsh VM on Jupiter (172.16.3.20), domain name "Claude-Builder" +- **OS:** Windows Server 2019 Standard +- **SSH user:** Administrator + +## Specs + +Windows Server 2019 VM. Exact vCPU/vRAM allocation managed via virsh on Jupiter — not documented separately. + +## Services + +Pluto is not a general-purpose server. It has no web services, no Claude Code, no vault, no coord API. It exists solely to run builds when `build-windows.sh` SSHes in. + +## Access +- **SSH from gururmm-build (172.16.3.30):** + ```bash + ssh -o StrictHostKeyChecking=yes \ + -o UserKnownHostsFile=/opt/gururmm/pluto_known_hosts \ + Administrator@172.16.3.36 + ``` +- **Known-hosts file:** `/opt/gururmm/pluto_known_hosts` — three pinned keys (RSA, ECDSA, ED25519) for 172.16.3.36. **Never use `StrictHostKeyChecking=no`** — a MITM would inject malicious binaries into MSI artifacts. +- **To update pinned keys** (e.g. after OS reinstall): `ssh-keyscan 172.16.3.36 > /opt/gururmm/pluto_known_hosts` +- **SSH from DESKTOP-0O8A1RL:** Uses a different network path than from gururmm-build — one failing does not imply the other fails. + +## Build Tools + +| Tool | Path | +|---|---| +| cargo (Rust stable 1.95.0) | `C:\Users\Administrator\.cargo\bin\cargo.exe` | +| cargo (Rust 1.77, legacy) | Pinned for legacy Windows 7/Vista targets; used with `--ignore-rust-version` | +| rustup | `C:\Users\Administrator\.cargo\bin\rustup.exe` | +| WiX 4 | `C:\Users\Administrator\.dotnet\tools\wix.exe` | +| sccache | `C:\sccache\` — compiler cache; near-instant rebuilds when source unchanged | +| Git | Standard PATH | +| Gitea clone | `C:\gururmm\` — pulled from `https://azcomputerguru@git.azcomputerguru.com/azcomputerguru/gururmm.git` | + +## What Pluto Builds (in order, per trigger) + +``` +1. git pull (build-windows.sh does this via SSH before cargo) +2. cargo build --release --target x86_64-pc-windows-msvc → stable x64 +3. cargo build --features debug-agent --target x86_64-pc-windows-msvc → debug x64 +4. cargo build --release --target i686-pc-windows-msvc → stable x86 +5. cargo build --release --target x86_64-pc-windows-msvc (legacy profile, --ignore-rust-version) → legacy x64 +6. cargo build --release --target i686-pc-windows-msvc (legacy profile, --ignore-rust-version) → legacy x86 +7. wix build → GuruRMM--x64.msi +``` + +All five cargo runs are sequential. MSI is built after all binaries complete. + +## Output Artifacts (on Pluto) + +| Artifact | Path | +|---|---| +| Agent EXE (x64) | `C:\gururmm\target\x86_64-pc-windows-msvc\release\gururmm-agent.exe` | +| Agent EXE (x86) | `C:\gururmm\target\i686-pc-windows-msvc\release\gururmm-agent.exe` | +| Tray EXE | `C:\gururmm\target\x86_64-pc-windows-msvc\release\gururmm-tray.exe` | +| MSI | `C:\gururmm\target\wix\GuruRMM--x64.msi` | + +`build-windows.sh` SCPs these to gururmm-build's `/var/www/gururmm/downloads/` after build completes. + +## Build Trigger Rules + +A Pluto build is initiated only when: +1. A push to `main` hits the Gitea webhook (172.16.3.30:9000) +2. `build-shared.sh` succeeds (version bump + git sync) +3. The diff between new SHA and `last-built-commit-windows` includes changes under `agent/` (excluding `agent/Cargo.lock`) + +If only `server/`, `dashboard/`, or docs changed — Pluto is not contacted. + +Windows build lock: `/var/run/gururmm-build-windows.lock` on gururmm-build prevents concurrent builds. + +## Known Issues & Quirks + +- **sccache makes short builds look like failures** — a 1-second Windows build is normal when `agent/` source hasn't changed since the last successful build. Do not interpret speed as failure. +- **Do not SSH to Pluto manually to trigger builds** — all builds go through the Gitea webhook pipeline. Manual SSH is for diagnostics only. +- **If Pluto appears unreachable from DESKTOP** — verify from gururmm-build (172.16.3.30) first. Different network paths; DESKTOP is not on the same LAN segment. +- **WiX MSI cannot be built on Linux** — WiX requires `msi.dll`. This is the sole reason Pluto exists. +- **`path.find('\\')` in `#[cfg(windows)]` files** — a literal backslash in a char literal compiles silently on Linux but fails with "unterminated char literal" on Pluto's MSVC build. Use `'\\\\'` instead. + +## Backlinks + +- [[projects/gururmm]] — Pluto is the exclusive Windows MSI build machine for GuruRMM +- [[systems/jupiter]] — Pluto is a virsh VM hosted on Jupiter +- [[systems/gururmm-build]] — build-windows.sh on gururmm-build SSHes here to trigger builds diff --git a/wiki/systems/uranus.md b/wiki/systems/uranus.md new file mode 100644 index 0000000..5cd6775 --- /dev/null +++ b/wiki/systems/uranus.md @@ -0,0 +1,62 @@ +--- +type: system +name: uranus +display_name: Uranus +last_compiled: 2026-05-24 +compiled_by: DESKTOP-0O8A1RL/claude-main +sources: + - credentials.md + - .claude/memory/infra_office_network.md +backlinks: + - systems/jupiter +--- + +# Uranus + +## Identity +- **Hostname:** Uranus +- **IP:** 172.16.3.21 +- **Role:** Secondary Unraid storage node — OwnCloud archive storage only +- **Location:** ACG office +- **OS:** Unraid 7.2.4 (kernel 6.12.54) +- **History:** Formerly the 'Pavon' server at 172.16.1.33 (client-side hardware). Renamed and re-IP'd April 2026 when moved into ACG infrastructure. The IP 172.16.3.21 was previously Saturn's; Saturn was decommissioned April 2026 (Seafile migrated to Jupiter 2025-12-27) and this IP was reused. + +## Specs + +- **Hardware:** Dell PowerEdge R730xd +- **CPU:** Intel Xeon E5-2630 v3 @ 2.40GHz, 32 threads +- **RAM:** 7.7 GiB — **LOW; upgrade planned before any additional VM deployment** +- **Array:** 6+ x 12 TB + 16 TB drives (~75 TB raw) + +## Services + +| Service | Notes | +|---|---| +| Unraid array | Primary role — bulk storage | +| SMB share `Storage` | Pavon Archive; mounted as `/Archive` in OwnCloud for user `pavon` | + +**Uranus is storage only.** It is NOT a proxy, NOT a Docker host, NOT a VM host (RAM too low). NPM on Jupiter (.20) handles all reverse proxying — do not confuse Uranus with the proxy layer. + +## Access +- **SSH:** root@172.16.3.21 port 22 — no key configured as of last documentation +- **Password:** `bash D:/vault/scripts/vault.sh get-field infrastructure/uranus-unraid.sops.yaml credentials.password` +- **Unraid Web UI:** http://172.16.3.21 (same password) +- **Vault path:** `infrastructure/uranus-unraid.sops.yaml` + +## OwnCloud Integration + +SMB share `Storage` on Uranus is mounted as external storage in OwnCloud (cloud.acghosting.com / 172.16.3.22): +- OwnCloud external storage mount ID: 6 +- Mount path in OwnCloud: `/Archive` +- OwnCloud user: `pavon` + +## Known Issues & Quirks + +- **RAM is too low (7.7 GiB) for VM hosting** — future Windows build VM deployment (secondary Pluto) requires a RAM upgrade first. +- **No SSH key configured** — password-only access as of last documentation. Add key before relying on it for automation. +- **Saturn confusion** — any reference to "Saturn" in GuruRMM agent lists or logs that shows IP 172.16.3.21 is actually Uranus (IP was reused). Saturn is fully decommissioned. +- **GuruRMM agent labeled "Saturn"** — one enrolled GuruRMM agent carries the "Saturn" label; its actual identity (stale entry vs. Uranus) is unverified. + +## Backlinks + +- [[systems/jupiter]] — Uranus is a separate physical machine, not a VM on Jupiter; listed here for network context