feat(nas): the drives are in, erebor exists, the stack runs and the scrape is on - #522
Merged
Merged
Conversation
…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>
Refs #413 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This was referenced Sep 19, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Exos pair for
smauglanded on 2026-09-18 andbuild-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
ZVTBS4NLandZVTBSDL3, and so doessmartctl -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 inhardware.md; the Compute table's Storage column now reads the mirror.node_filesystem_avail_bytesseries includingerebor,erebor/mediaanderebor/apps, 0node_network_*series. The target intargets/node.yamlis uncommented on that evidence.renderD128isroot 107insidemedia-jellyfinandidthere 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
make up STACK=media. That renders secrets this stack does not have, on a box with neithermakenorsops. Rewritten to what runs: give Apps the pool, fetch the two files frommaininto/mnt/erebor/apps/stack,docker compose up -d./configis a named volume, and TrueNAS keeps those onerebor/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
media, userbilbowith 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 convergeby hand from the main checkout, since the timer is report-only, thenup{job="node",instance="smaug"}should read 1 within five minutes.Refs #413 #138 #484 #256
🤖 Generated with Claude Code