Skip to content

feat(nas): the drives are in, erebor exists, the stack runs and the scrape is on - #522

Merged
Gerrrt merged 5 commits into
mainfrom
gerrrt/nas-drives-installation-cb57d0
Sep 19, 2026
Merged

Gerrrt merged 5 commits into
mainfrom
gerrrt/nas-drives-installation-cb57d0

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Sep 19, 2026

Copy link
Copy Markdown
Owner

The Exos pair for smaug landed on 2026-09-18 and build-the-nas.md §1–§6 were done that evening and the next morning. This PR records what was read rather than assumed, fixes the two places the runbook could not have been followed, and turns the scrape on.

What was read

  • Both drives are new, and the FARM log says so. SMART reads 0 power-on hours on ZVTBS4NL and ZVTBSDL3, and so does smartctl -l farm, whose hours counter a SMART reset does not touch. One drive arrived with a Windows quick format and a short self-test at hour 0 — a seller's bench check. Serials and counters are in hardware.md; the Compute table's Storage column now reads the mirror.
  • The exporter answers. From the monitoring host: 9100 open, 443 and 8096 refused, 36 node_filesystem_avail_bytes series including erebor, erebor/media and erebor/apps, 0 node_network_* series. The target in targets/node.yaml is uncommented on that evidence.
  • The render node reaches the container. renderD128 is root 107 inside media-jellyfin and id there carries 107. The transcode itself is still to run; that is the half of ADR-0040's reopen condition a shell cannot check.

What the runbook had wrong

  • §1 never mentioned pin 3. Enterprise SATA drives read power pin 3 as Power Disable; a supply with 3.3 V there holds the drive off, and the boot SSD working proves nothing. Written in, with the fix.
  • §6 said make up STACK=media. That renders secrets this stack does not have, on a box with neither make nor sops. Rewritten to what runs: give Apps the pool, fetch the two files from main into /mnt/erebor/apps/stack, docker compose up -d.
  • §4's "backed up" row describes a dataset nothing writes to. Jellyfin's /config is a named volume, and TrueNAS keeps those on erebor/ix-apps. Noted for erebor/apps is declared backed up in two files and backed up by nothing #484, not decided here.

Decisions written down

  • Pool encryption off, with the reason in §3.
  • Share media, user bilbo with SMB access only, everyone@ Read for Jellyfin's uid 65534.

Still open on #413

Television playback, the QSV transcode, zpool status, the two extended self-tests (about 28 hours from 2026-09-18), and the post-deploy re-reads of the tripwire and port 15. The next comment on the issue carries them.

After merge: make converge by hand from the main checkout, since the timer is report-only, then up{job="node",instance="smaug"} should read 1 within five minutes.

Refs #413 #138 #484 #256

🤖 Generated with Claude Code

Gerrrt and others added 5 commits September 18, 2026 22:15
…413)

The Exos pair landed on 2026-09-18 and the first question off the bench was
what the connectors are, because a helium drive held PCB-up does not look
like a SATA drive. They are SATA — 15-pin power, 7-pin data, and Seagate's
four-pin jumper block, which stays empty.

The paragraph that matters is the one the runbook never carried: enterprise
SATA drives read power pin 3 as Power Disable, and a desktop supply that
puts 3.3 V on it holds the drive off. It never spins and never shows in
lsblk, and the boot SSD working is no evidence either way, because the
S3520 predates the feature. Five wires with an orange one is the tell;
Kapton over pin 3 or a Molex-to-SATA adapter is the fix.

Refs #413

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…crape is on (#413)

The Exos pair landed on 2026-09-18. What was read rather than assumed:
both drives PASSED at 0 power-on hours by SMART and — the reading §2 did
not know to ask for — 0 hours and 0 spindle hours by the FARM log, which
a SMART reset does not touch. One arrived carrying a Windows quick format
and a short self-test at hour 0, which is a seller's bench and nothing
more. Serials and counters go into hardware.md, and the Compute table's
Storage column reads the mirror.

The pool is a mirror with encryption off by decision, written into §3
with the reason. The datasets are on the SMB and Apps presets; the share
is `media` and its user is `bilbo`, SMB-only. The one ACL entry that had
to be added was Jellyfin's, not bilbo's: everyone@ Read, because the
container reads the library as nobody and the preset grants only
builtin_users.

§6 as written could not run on this box. `make up` renders secrets this
stack does not have, on a host without make or sops, so the section now
says what was done: give Apps the pool, fetch the two files from main
into /mnt/erebor/apps/stack, and `docker compose up -d`. It also records
that Jellyfin's named volume lives on erebor/ix-apps and not on
erebor/apps, which #484 has to know before it decides the backup.

The scrape target in targets/node.yaml is uncommented, after the three
checks its header demands passed from the monitoring host: 9100 open,
443 and 8096 refused, 36 filesystem series including erebor and both
datasets, and no node_network_* series. Inside the container the render
node is present and the process carries GID 107; the transcode itself is
the half of ADR-0040's condition still to run.

Refs #413 #138 #484 #256

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…his box (#413)

Refs #413

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Refs #413

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant