Document teddycloud (pve_id 131) — closes the Week-3 drift finding
teddycloud was live on hubris (LXC 131, docker compose, TeddyCloud —
a Toniebox cloud reimplementation) but never made it into inventory.yaml.
Already referenced in passing by containers/132-rclone.md ("131 was
already taken by an undocumented teddycloud container") and
hosts/strong.md's migration changelog (a DHCP conflict fix), but no
inventory entry or doc page existed until oikos/drift.py's inventory-
vs-live check caught it.
Verified live via read-only SSH (pct config 131, pct exec 131 -- ...,
docker ps): hostname, static IP 192.168.8.150, 1 core/1GiB/16GiB rootfs,
Debian 12, runs via docker compose at /opt/teddycloud. No changes made
to the running container.
Also fixed: house's inventory notes claimed 192.168.8.212 is teddycloud's
current IP via DHCP — stale, teddycloud has a static IP now.
Flagged in the new container page: teddycloud has no Caddy forward-auth
gate, unlike sab.hubris.network on the same Caddyfile.
`python3 oikos/drift.py` no longer reports an inventory-vs-live finding
for pve_id 131. (A separate, pre-existing gap surfaced while verifying
this: rclone's own inventory.yaml block is missing pve_id/host/lan_ip —
out of scope here, flagging for a follow-up.)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
62
containers/131-teddycloud.md
Normal file
62
containers/131-teddycloud.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# 131 — `teddycloud`
|
||||
|
||||
Self-hosted [TeddyCloud](https://github.com/toniebox-reverse-engineering/teddycloud), a
|
||||
reimplementation of the Toniebox cloud backend — lets Tonie figurines play custom/ripped
|
||||
audio content against a local server instead of the official cloud.
|
||||
|
||||
Predates the client-enrollment convention entirely; nobody wrote it down. Found and
|
||||
documented on 2026-07-06 after Oikos's drift detector (`oikos/drift.py`) flagged
|
||||
`pve_id 131` as live on hubris (via `pct list`) with no `inventory.yaml` entry — see
|
||||
[OIKOS.md](../OIKOS.md)'s Week 3 build-status note. `containers/132-rclone.md` had already
|
||||
mentioned it in passing ("LXC 131 was already taken by an undocumented `teddycloud`
|
||||
container"), and `hosts/strong.md`'s 2026-07-05 migration changelog fixed a DHCP conflict
|
||||
for it — but it never got its own inventory entry or doc page until now.
|
||||
|
||||
## At a glance
|
||||
|
||||
- **Hostname:** `teddycloud`
|
||||
- **Host:** hubris (confirmed via `pct config 131` run directly on hubris — the original
|
||||
drift finding's `pct list` source)
|
||||
- **IP:** `192.168.8.150` (static; was briefly `192.168.8.243` via DHCP until the
|
||||
2026-07-05 strong-migration work assigned it a fixed address — see hosts/strong.md)
|
||||
- **Privilege:** unconfirmed (not checked — read-only investigation didn't need it)
|
||||
- **Resources:** 1 core / 1 GiB RAM / 512 MiB swap / 16 GiB rootfs (`local-lvm`), Debian 12
|
||||
(bookworm)
|
||||
- **Mounts:** `/mnt/library` (`mp0`)
|
||||
- **Public hostname:** `teddy.hubris.network` → `192.168.8.150:8443` (see
|
||||
[caddy (121)](121-caddy.md))
|
||||
- **Enrollment:** none — no `age_pubkey`, not a `homelab` CLI client. It's a plain
|
||||
docker-compose app container, not a fleet-managed host. No action needed unless it starts
|
||||
needing secrets.
|
||||
|
||||
## Service
|
||||
|
||||
Runs via `docker compose` at `/opt/teddycloud` — container `teddycloud-teddycloud-1`,
|
||||
image `ghcr.io/toniebox-reverse-engineering/teddycloud:latest`, publishing `80`, `443`,
|
||||
`8080`, and `8443`. Caddy routes `teddy.hubris.network` to the `:8443` port.
|
||||
|
||||
## Risk notes
|
||||
|
||||
**No Caddy forward-auth gate** — unlike `sab.hubris.network` on the same Caddyfile (which
|
||||
is explicitly annotated `(Authentik forward-auth)`), `teddy.hubris.network` has no auth
|
||||
annotation. It's reachable to anyone on the LAN/mesh who can resolve the hostname. Not
|
||||
addressed as part of this doc pass — flagging it here since it's now visible in one place
|
||||
for the first time.
|
||||
|
||||
## Related
|
||||
|
||||
- [Hubris host](../hosts/hubris.md)
|
||||
- [Caddy (121)](121-caddy.md) — terminates `teddy.hubris.network`
|
||||
- [rclone (132)](132-rclone.md) — landed on pve_id 132 specifically because 131 was already
|
||||
taken by this container
|
||||
- [Containers index](index.md)
|
||||
- [OIKOS.md](../OIKOS.md) — drift detector that caught this
|
||||
|
||||
## Changelog
|
||||
|
||||
### 2026-07-06 — documented for the first time (drift-caught)
|
||||
|
||||
Added to `inventory.yaml` and given this page. Verified live via read-only `pct config 131`
|
||||
+ `pct exec 131 -- ...` on hubris: hostname, IP, resources, and that it runs via
|
||||
`docker compose` (not a raw binary or systemd unit). No changes made to the running
|
||||
container — this is pure documentation catch-up.
|
||||
@@ -19,6 +19,7 @@ Most containers live on [`hubris`](../hosts/hubris.md). Some have been
|
||||
| 128 | [trmnl](128-trmnl.md) | hubris | 192.168.8.211 | unpriv | 1 | 768 MiB | 8 GiB | — | `trmnl.hubris.network` | running |
|
||||
| 129 | [house](129-house.md) | **strong** | 192.168.8.244 | unpriv | 2 | 3 GiB | 8 GiB | — | `house.hubris.network` | running |
|
||||
| 130 | [grimmory](130-grimmory.md) | **strong** | 192.168.8.247 | priv | 1 | 2 GiB | 16 GiB | `/mnt/media_local` (via mp0) | `books.hubris.network` | running |
|
||||
| 131 | [teddycloud](131-teddycloud.md) | hubris | 192.168.8.150 | — | 1 | 1 GiB | 16 GiB | `/mnt/library` | `teddy.hubris.network` (no auth gate) | running |
|
||||
|| 132 | [rclone](132-rclone.md) | hubris | 192.168.8.214 | priv | 1 | 1 GiB | 8 GiB | `/mnt/library` (**ro**) | — (LAN-only UI `:5572`) | running |
|
||||
|| 134 | [romm](134-romm.md) | **strong** | 192.168.8.249 | priv | 1 | 2 GiB | 16 GiB | `/mnt/media_local` (via mp0) | `roms.hubris.network` | running |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user