Commit Graph
57 Commits
Author SHA1 Message Date
Kaloyan DanchevandClaude Opus 5 0a115a4220 incident: /var/log full from plexstreams polling a dead address
plexstreams was configured for http://192.168.31.2:32400, on the macvlan
shim subnet created in go for a Pi-hole that AdGuard replaced. Plex runs with
host networking on 192.168.10.20:32400. Each failed poll logged three PHP
warnings; 99,926 polls filled a 48 MB phplog, 99.95% of it those warnings.

Logging had been dead box-wide for six days: the last entry was written when
the filesystem filled, not when the errors stopped, so syslog for 28 Oct to
3 Nov is incomplete.

Config repointed and backed up, logs truncated rather than deleted so writers
holding them open reclaim space immediately. syslog left intact.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-11-04 00:24:43 +02:00
Kaloyan DanchevandClaude Opus 5 4d5ce8e915 docs: put hc on PATH for non-desktop Herdr clients
hc connect speaks the protocol over stdin/stdout, so clients attach with
ssh <box> hc connect. That failed with "hc: command not found": the binary
installs to /root/.local/bin/herdr-core, which is neither on PATH in a
non-interactive shell nor named hc. The desktop app was unaffected since it
calls the absolute path it installed.

Symlinks both names into /usr/local/bin, restored by the go script, and
records the connection details a mobile client or app builder needs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-11-03 23:56:04 +02:00
Kaloyan DanchevandClaude Opus 5 1613f7f458 docs: Herdr on Tailscale SSH, with linger as the real socket fix
Rewrites the Herdr doc to match what was actually built. The machine now
targets root@100.100.208.69 over Tailscale SSH instead of the LAN address,
so it no longer depends on the mikrotik-tailscale subnet router.

The "core did not start within 5 s" failure was the hc core socket living
under XDG_RUNTIME_DIR = /run/user/0, which pam_elogind creates and destroys
per login session. loginctl enable-linger root keeps that directory alive, so
every client agrees on the default socket path. The earlier Mac-side env pin
fixed the CLI but broke the GUI's plain-ssh "Add a machine"; linger
supersedes it and the wrapper is kept but unused.

Also records the stale ~/.ssh/config entry that pointed unraid at the deleted
100.100.208.70 on port 422, which is what the GUI had been listing, and the
go-script block that restores both the binary and linger at boot.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-11-03 23:37:46 +02:00
Kaloyan DanchevandClaude Opus 5 27f5a7d5af docs: Tailscale SSH ACL set to accept
Tailnet SSH policy changed from the default action:"check" to accept. The
effective policy is now a single rule covering all tailnet nodes, with no
expiry and port forwarding allowed, so the per-device ~12h grants and the
browser re-auth prompt are gone.

Verified unattended with BatchMode=yes: a plain command, a -L forward
returning HTTP 302, and the Herdr fallback leg.

Records the trade-off: check acted as a second factor, so a compromised
tailnet device now reaches root on Unraid without a further step.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-11-03 23:03:47 +02:00
Kaloyan DanchevandClaude Opus 5 fc1608383f docs: Herdr boot persistence applied and verified
/boot/config/go now restores /root/.local/bin/herdr-core from
/boot/config/herdr/herdr-core at boot, with install -m 755 since /boot is
FAT32 and carries no execute bit.

Verified without rebooting: deleted the binary, ran the go line by hand, got
it back executable and reporting hc 0.1.17, with Herdr still connected.
sh -n /boot/config/go parses cleanly. The go script was backed up to
go.bak-20261103-203916 before editing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-11-03 22:41:18 +02:00
Kaloyan DanchevandClaude Opus 5 32a60f0c6e docs: Unraid as a Herdr machine, and why it needed a --via wrapper
herdr-core machine add kept failing with "core did not start within 5 s".
Cause: hc puts its core socket under XDG_RUNTIME_DIR, which on Unraid is
/run/user/0 — created and destroyed per login session by elogind. The socket
vanished with the session that started the core, so later clients found an
empty directory. The core itself kept running on an unlinked socket, and
core.log stayed empty because the failure is client side.

Fixed entirely on the Mac with a --via transport that pins
XDG_RUNTIME_DIR=/var/run/herdr-rt. Nothing on the server was changed. The
transport uses key auth on 192.168.10.20:422, not Tailscale SSH, since --via
needs something that asks nothing and the default tailnet ACL demands
periodic browser re-auth.

Also records the reboot caveat (/ is RAM, so the remote hc binary is lost)
with a go-script fix written up but not applied, and corrects the
192.168.31.0/24 note: that shim was created for a Pi-hole that AdGuard
replaced.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-11-03 22:29:40 +02:00
Kaloyan DanchevandClaude Opus 5 da981a7b40 docs: Unraid exit node approved
Approved in the Tailscale admin console, so xtrm-unraid now shows as
"offers exit node" and appears in tailscale exit-node list. The tailnet has
two exit nodes: mikrotik-tailscale (primary) and xtrm-unraid (fallback).

Neither has been exercised from the Mac. Noted that without
--exit-node-allow-lan-access an exit node cuts the client's own LAN access,
which would break an SSH session routed over Tailscale.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-11-03 21:51:49 +02:00
Kaloyan DanchevandClaude Opus 5 666b9baa5c docs: Unraid re-enrolled on Tailscale as 100.100.208.69
Unraid's Tailscale plugin node had been logged out since roughly May 2026.
Re-enrolled as xtrm-unraid (100.100.208.69); the stale 100.100.208.70 node
was deleted first, so the tailnet issued a new address.

Dropped the old 192.168.31.0/24 advertisement — that subnet is only the
macvlan shim and nothing reachable lives there. No LAN subnet routes are
advertised from Unraid; the MikroTik container stays primary. accept-routes
and accept-dns stay off, the former because Unraid sits on 192.168.10.0/24
and would otherwise loop.

Tailscale SSH enabled, since sshd binds only 192.168.10.20 and
192.168.31.250 and so never listens on the Tailscale IP. Port forwarding
over it verified.

Exit node advertised, pending approval in the admin console.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-11-03 21:42:14 +02:00
Kaloyan DanchevandClaude Opus 5.5 5690e93f60 BT proxy #1 renamed to main-bedroom-bt-proxy, static lease
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 17:29:16 +03:00
Kaloyan DanchevandClaude Opus 5.5 1f9ce581fc HA: corridor Bluetooth proxy added
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:20:55 +03:00
Kaloyan DanchevandClaude Opus 5.5 c9caaa6a17 Network: cAP XL ether2 on VLAN 30 for Olimex BT proxies
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 11:04:41 +03:00
Kaloyan DanchevandClaude Opus 5.5 83b1dc3b50 HA: desk monitor input switching via DDC/CI (temporary Mac transport)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:21:59 +03:00
Kaloyan DanchevandClaude Opus 5.5 65aaa63508 HA: Jarvis ball Now Playing view, screen timeout, battery gauge
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:37:53 +03:00
Kaloyan DanchevandClaude Opus 5.5 4be77bf5b7 HA: Jarvis voice satellite (XiaoZhi Ball → ESPHome), static lease 192.168.30.111, Jarvis Piper voice, switch_as_x lights
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 00:26:41 +03:00
Kaloyan DanchevandClaude Opus 5.5 f22044a2f0 Govee: govee2mqtt LAN-only, static leases, IGMP proxy removed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:09:30 +03:00
Kaloyan DanchevandClaude Opus 5.5 bf83b4f097 MikroTik IGMP proxy for Govee discovery; HA Govee rebuilt (local + cloud package)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:19:19 +03:00
Kaloyan DanchevandClaude Opus 4.6 b88a2fc113 Home Assistant: Zigbee migration (dining/living/curtain/remote) + LG TV root
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-11 15:42:44 +03:00
Kaloyan DanchevandClaude Opus 5.5 26a5867bc6 Home Assistant voice control: wyoming stack, Assist pipelines, Gemini fallback
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 22:50:14 +03:00
Kaloyan DanchevandClaude Opus 5.5 77e2fa45ec MikroTik: all devices on 7.24.5, disable unused local CAP client on hAP
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:05:48 +03:00
Kaloyan DanchevandClaude Opus 5.5 229077d586 DNS: add Cloudflare DoH + plain fallback upstreams to AdGuard
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:02:04 +03:00
Kaloyan DanchevandClaude Opus 5.5 c1f607b9ef DNS: fix VLAN10 failover hairpin NAT, MikroTik AdGuard 0.107.79
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:40:10 +03:00
Kaloyan DanchevandClaude Opus 5.5 6c6a251865 Traefik: SAMEORIGIN frame option for HA route; SmartThings soundbar
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:32:50 +03:00
Kaloyan DanchevandClaude Opus 5.5 9fa2e56090 Add Samsung soundbar and mDNS repeater (VLAN 10<->30); note casting firewall drift
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:57:18 +03:00
Kaloyan DanchevandClaude Opus 5.5 1821492753 MikroTik: RouterOS 7.24.5, Ookla speedtest container on hAP, speed baseline
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:25:31 +03:00
Kaloyan DanchevandClaude Opus 5.5 d8ce9e8aa7 Unraid: remove dockge and Home-Assistant-Container
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:54:27 +03:00
Kaloyan DanchevandClaude Opus 5.5 a48647a0fa Unraid: restore authentik and the stopped services, fix IP/port conflicts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:42:38 +03:00
Kaloyan DanchevandClaude Opus 5.5 e45d48c0e2 Unraid: container recovery after reboot, Nextcloud 35, image updates
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:27:06 +03:00
Kaloyan DanchevandClaude Fable 5 83bc6f4e1d HA: Floorplan v3 — per-room Gemini API renders composited on exact geometry
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-07 10:29:26 +03:00
Kaloyan DanchevandClaude Fable 5 968b197192 HA: Floorplan photorealistic background (Gemini interiors + PIL composite on exact geometry)
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-07 10:00:08 +03:00
Kaloyan DanchevandClaude Fable 5 5a7c9738e6 HA: Floorplan furnished with native SVG furniture (AI render path shelved)
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 19:06:58 +03:00
Kaloyan DanchevandClaude Fable 5 a5bb083790 HA: Roborock tracker v4 — dock-anchored weighted calibration
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 12:27:05 +03:00
Kaloyan DanchevandClaude Fable 5 2d34b15f32 HA: Roborock tracker calibration v3 (goto tour) + bedroom segment mapping
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 12:07:33 +03:00
Kaloyan DanchevandClaude Fable 5 0578b64f1a HA: Roborock live-position tracker on Floorplan (calibrated from cleaning history)
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 10:29:55 +03:00
Kaloyan DanchevandClaude Fable 5 2e1b8301ef HA: Easy Floorplan dashboard with generated apartment plan
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 19:29:10 +03:00
Kaloyan DanchevandClaude Fable 5 7dc280bdcf HAOS: System monitoring dashboard + smartmon local addon (SMART via full_access)
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 17:21:56 +03:00
Kaloyan DanchevandClaude Fable 5 59f71e95bd HA: Roborock single-card redesign with Browser Mod popup (presets + room cleaning)
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 14:14:56 +03:00
Kaloyan DanchevandClaude Opus 4.8 ce7095f0ac docs: add 2026-07-30 Prism multi-view Mushroom dashboard deployment
ci/woodpecker/push/woodpecker Pipeline was successful
5-view Mushroom dashboard deployed to HAOS via init_commands technique
(file-based YAML cannot be saved via lovelace/config/save WebSocket).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 11:54:27 +03:00
Kaloyan DanchevandClaude Opus 4.8 c814a56874 docs: HAOS 6 smart-home integrations + cross-VLAN/OAuth notes (2026-07-29)
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-29 19:54:07 +03:00
Kaloyan DanchevandClaude Opus 4.8 c22b5aefac docs: add bare-metal HAOS (ASRock Q1900) — install, UEFI-from-SATA fix, VLAN10, ha.xtrm-lab.org repoint
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-28 23:05:01 +03:00
jazzymc 21ff7f5c12 [IMMICH] Deploy Immich v3 photo server (Google Photos replacement)
ci/woodpecker/push/woodpecker Pipeline was successful
- Compose stack at appdata/immich, exposed via Traefik at photos.xtrm-lab.org
- Library on cache NVMe (raidz1), Postgres on cache
- Nightly backup (DB dump + originals rsync) to parity-protected array disk1
- Google Takeout import ready via immich-go v0.32.0
2026-07-08 15:15:14 +00:00
Kaloyan DanchevandClaude Opus 4.8 ea8e1e626c docs(hardware): identify XTRM-U mainboard (N5 Air) + flag 1Gbps network anomaly
ci/woodpecker/push/woodpecker Pipeline was successful
- Mainboard was 'details TBD': Minisforum N5 Air (Meigao F8NAB/N5A), Ryzen 7 255
  + 780M, 64GB DDR5-5600, USB4/TB, free OCuLink + PCIe x8 + M.2; OS -> Unraid 7.3.1
- Network: 10G/5G NICs but link only 1Gbps (eth1 degraded at 10Mb/s) — flagged

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 11:45:10 +03:00
Kaloyan DanchevandClaude Opus 4.8 3a28e42543 docs(services): add Ollama iGPU (Radeon 780M / ROCm) entry
ci/woodpecker/push/woodpecker Pipeline was successful
- Document ollama migrated to Dockge stack on ollama/ollama:rocm with
  gfx1103 enablement (HSA_OVERRIDE_GFX_VERSION=11.0.0, OLLAMA_IGPU_ENABLE=1)
- Verified Ornith 1.0 9B runs 100% on the 780M iGPU (~11 tok/s)
- CHANGELOG entry for 2026-06-29
- (also includes previously-uncommitted Development services section
  already present in the working tree)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 21:38:28 +03:00
jazzymcandClaude Opus 4.6 02d07a8e52 docs: add Plex RD mount propagation fix to changelog
Fixed Transport endpoint not connected error — Plex volume mount
needed :rslave propagation to see rclone FUSE mount from zurg.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-05 21:15:38 +00:00
jazzymc 9cad25d25b docs: HA Traefik fix, Nextcloud upgrade, Uptime Kuma monitor fixes — all 24 monitors green 2026-05-05 19:13:48 +00:00
jazzymc b05a5f1574 docs: Uptime Kuma cleanup - fix stale IPs and remove duplicates 2026-05-05 18:40:30 +00:00
jazzymcandClaude Opus 4.6 8e3cde9d7c docs: add Kasm Workspaces service and fix changelog
Document Kasm DinD architecture, Traefik integration, and the
proxy_port/frameDeny fixes that resolved session connection failures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-05 17:38:17 +00:00
jazzymcandClaude Opus 4.6 d0b4fae25e WiFi troubleshooting guide, fix empty security overrides, update config docs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 16:18:50 +02:00
Kaloyan DanchevandClaude Opus 4.6 6320c0f8d9 Docs: Claude Code tooling setup on Unraid — Cooperator, glab, skills, MCP prep
Installed Cooperator CLI, glab, uv+Python 3.12, 6 custom skills,
and built MCP servers (shortcut, mikrotik, unraid). MCP registration
via `claude mcp add` still pending as TODO.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:13:44 +02:00
jazzymc 8aef54992a Docker audit: migrate all containers to Dockge, clean up Traefik config
ci/woodpecker/push/woodpecker Pipeline was successful
2026-02-28 20:39:16 +02:00
Kaloyan DanchevandClaude Opus 4.6 7867b5c950 WiFi VLAN fixes, CAP bridge filtering, AdGuard IP conflicts, channel optimization
ci/woodpecker/push/woodpecker Pipeline was successful
- Enable bridge VLAN filtering on CAP for proper per-client VLAN assignment
- Fix AdGuard container IP conflicts (.2→.10, .3→.11) with static IPs
- Fix 2.4GHz co-channel interference (both APs were on ch 1, CAP now ch 6)
- Fix 5GHz overlap (HAP ch 36/5180, CAP moved to ch 52/5260)
- Update WiFi access-list: VLAN assignment now active with per-device VLAN IDs
- Add Xiaomi Air Purifier MC1 to VLAN 30 access-list

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 09:40:29 +02:00