A 9U open-frame rack, a firewall built from a refurbished mini PC, a decommissioned enterprise server, and two laptops that were headed for a landfill.
| U | Device | Role |
|---|---|---|
| U1–U2 | APC Smart-UPS1 | Power |
| U3 | HPE ProLiant DL360 Gen92 | Proxmox hypervisor (Saruman, BMC shiva) |
| U4 | 1U vented shelf, carrying the 8-port unmanaged TP-Link switch3 | Feeds prometheus and oracle; on UPS power since 2026-09-08 |
| U5 | HP ProDesk 600 G4 Mini4 | pfSense firewall (morpheus) |
| U6 | MT-VIKI 8-port KVM5 | Console access |
| U7 | 10-outlet PDU6 | Power distribution |
| U8 | Jadol 24-port patch panel7 | Cabling |
| U9 | MokerLink 26-port managed switch8 | Core switching (neo) |
Off-rack: two Ubuntu Server laptops on a shelf (prometheus, oracle), fed
by the TP-Link in U4, and eero Pro 6E units distributed through the house.
Both laptops ride a mains cut out on their own cells, so each cell is a
dependency of the mains-cut path and is watched as one: Alloy's node collector
exports node_power_supply_* from both, and host.rules.yaml alerts when the
shelf is off mains, when a cell falls below 80 % of its design capacity, and
when a laptop reports no cell at all
(#454). prometheus's cell was
replaced on 2026-09-18 and reads 101 % of its design capacity at one cycle;
oracle's is the original, reads 72 %, and is unbought. How long either laptop
actually runs on its cell has never been measured.
The patch panel and the PDU were listed the other way round here until 2026-08-29. U8 is the panel and U7 is the PDU, confirmed against the rack. Nothing in this repository depended on the order, but the wiki's rack page had it right and this table did not, so the correction is recorded rather than quietly swapped.
| Host | Hardware | CPU | RAM | Storage | OS |
|---|---|---|---|---|---|
morpheus |
HP ProDesk 600 G4 Mini | i5-8500T | 32 GB | 1 TB NVMe SSD | FreeBSD 16.0 (pfSense) |
Saruman |
HPE ProLiant DL360 Gen9 | 2× Xeon E5-2680 v3 (48 threads) | 128 GB | 2× 1 TB SAS HDD, RAID 1; 2× 960 GB SATA SSD, unassigned | Proxmox VE 9 |
prometheus |
Apple MacBook Pro (2012, Retina 13") | i5/i7 | 8 GB | 256 GB SSD | Ubuntu Server 24.04 LTS |
oracle |
Dell Inspiron 15-3565 | AMD A6-9200 (2 cores) | 4 GB | 500 GB HDD | Ubuntu Server 24.04 LTS |
smaug |
Lenovo ThinkServer TS150 | Xeon E3-1225 v6 (4 cores) | 8 GB ECC | 240 GB SATA SSD (boot) | TrueNAS 25.10 |
The observability stack runs on a thirteen-year-old MacBook. It handles four SNMP devices at a 60-second interval, four Alloy agents, and 30 days of metric retention without complaint — which is a useful thing to know before spending money on a monitoring host. Its RAM is soldered at 8 GB and it has no built-in Ethernet, so it reaches the network over a USB NIC.
morpheus has two wired interfaces, and the second is not part of the model:
the onboard Intel I219-LM (em0, the WAN) and an Intel I226-V 2.5 GbE card on
an M.2 B+M-key adapter9 in the G4's second M.2 slot (igc0, the
switch-management LAN and every VLAN). The card is what a restore onto other
hardware depends on —
restore-the-firewall.md §3 — and it was
recorded as a USB NIC in four documents until 2026-09-09, when the box was
read directly: pciconf shows it on a PCIe root port, and the only USB device
is the Wi-Fi module's Bluetooth half. The table records the release line
only, as check_docs.py requires, and unlike the
Linux hosts nothing collects the running release from pfSense — so it is
written here with its date: pfSense CE 2.9.0-RELEASE, build
20260817-1836, from /etc/version on 2026-09-09. Restoring the config
needs a release at least that new
(restore-the-firewall.md §3).
oracle was previously recorded here as an i5-1235U with 32 GB and a 2 TB SSD.
It is not: it is a dual-core AMD A6-9200 with 4 GB and a 5400 rpm disk. The
older entry described a machine that does not exist, which is worth stating
plainly because it was load-bearing in planning.
The OS column names the release line and not the point release. Both laptops
were recorded here as 24.04.3 while both were running 24.04.4, and
check_docs.py could not see it — it compares this table against
network.md, and the two copies were stale together. A point
release changes when a host takes an update, which is not an edit to this
repository, so it is the wrong kind of fact to write down at all: the running
version is already collected on every Linux host as
node_os_info{pretty_name="Ubuntu 24.04.4 LTS"}. The check now rejects a third
version component in either table.
| Host | BMC | Address | Notes |
|---|---|---|---|
Saruman |
shiva — HPE iLO 4, firmware 2.82 |
10.0.30.10 |
iLO Advanced licensed. Dedicated network port. DHCP with a reservation. Hardened 2026-09-09 per ADR-0033: IPMI-over-LAN, SSH and iLO Federation off; HTTPS, the remote console and SNMP stay on; the account's credential is shared with nothing else; the security log was read for a baseline |
The BMC and the host it manages carry different names and different addresses:
shiva is the iLO, Saruman is the hypervisor at 10.0.30.110. Earlier
revisions of this repository treated shiva as the hypervisor itself.
- 1U rackmount tray for the ProDesk Mini10
- Sliding rails for the ProLiant11
- 1U universal rack mount for the APC12
- APCRBC115 replacement battery cartridge for the APC, fitted 2026-08-28,
proven by a passing self-test the same day and under a biweekly schedule on
the card (#93). The card's
upsBasicBatteryLastReplaceDatestill reads08/15/2026and wants resetting to the fit date — it is the only record of the pack's age - 1U vented rack shelf, 4-post with square-hole mounting — in U4 since
2026-09-08, carrying the unmanaged switch that feeds
prometheusandoracle(#110) - HP ProDesk 600 G4 Micro13 — i5-8500T, 32 GB, 512 GB SSD, the same
model as
morpheus— ordered 2026-09-08, in hand since 2026-09-14 and opened on 2026-09-15. This istrinity, and it is one box with two jobs, not two boxes: the sensitive tier's host, and the firewall's spare hardware in a disaster (ADR-0034). The documents call it "the tier's host" in one place and "the spare" in another, which is how it came to be read as two machines (ADR-0038); a second ProDesk is deferred, not ordered. This entry read "in hand since 2026-09-15" until 2026-09-17. The carrier's notice puts the drop-off at 15:05 local on the 14th; the commit that recorded it was written that evening and dated by UTC, which had already turned over. The opening date is a separate reading and stands. It enters the Compute table when #404 builds it, after the firewall restore has been rehearsed on it. It ships with the onboard NIC only; the I226 card the restore depends on was a separate purchase, made 2026-09-11 and the entry below — which has not landed. So what the rehearsal waits on is no longer this box: it is that card and the installer stick. The 512 GB SSD is M.2, and the second M.2 slot is free — read off the machine on 2026-09-15, and the answer the entry below was waiting for. There is no drive carrier and nothing contends: the I226 card has a slot to land in when it arrives, and the contingency the documents carried since 2026-09-11 does not fire. It arrived carrying Windows 11 Pro, sold refurbished with a licence. The rehearsal's first act is to wipe it, so that licence is spent rather than banked: it is OEM, it dies with the install it shipped on, and it does not move the buy table's two Windows 11 Pro keys (roadmap.md). Those are for the lab domain's two endpoints (ADR-0029, #414) — a different machine and a different decision. The warranty runs to 2027-09-08 — one year from purchase, through SquareTrade, applied automatically because it was sold as eBay Refurbished. It is worth recording because ADR-0034 accepts that the tier is down until a replacement arrives: inside that year a deadtrinityhas a claim behind it, and after it the ADR's cost is the whole cost. The seller-return window closes 2026-10-08, thirty days from purchase. That is a deadline on the list below rather than a fact about the machine. Still the listing's claims rather than the machine's, and still to be read: the i5-8500T, the 32 GB and the 512 GB above, the serial and the product number off the case, and that it really does have the onboard NIC alone — read them before that date. Installing pfSense over the Windows partition is what ends the return and is the one step of the rehearsal that cannot be taken back, so the machine has to be proved while sending it back is still an option. That is sooner than the card arrives, and it does not wait on it. - Intel I226-V 2.5 GbE card on an M.2 B+M-key adapter — bought 2026-09-11,
in transit. The second port on the ProDesk Micro above, matching the card
in
morpheusso a pfSense restore onto the spare brings the LAN up asigc0and asks nothing (restore-the-firewall.md, #404). It is the one entry on that runbook's prerequisite list that was still unbought, and it is deliberately not a USB NIC: a USB adapter comes up asure0, which is the one thing a restore must not be asked about. It goes in the G4 Micro's second M.2 slot, and that slot is free: the box was opened on 2026-09-15 and its 512 GB SSD is M.2, so there is no 2.5" drive carrier to contend with. This entry carried the opposite contingency from 2026-09-11 until then — that a carrier and this card would want the same space, and that one of them would have to go. It was a real risk and it did not happen; recorded as answered rather than deleted, because the reason the card was bought before the box was opened is the part worth remembering. Part number and the port's MAC go here when it lands, as does confirmation that the free slot takes a B+M-key 2280 card —morpheusis the same model and does exactly this, which is why the same model was bought. - 2 TB USB portable hard drive — on hand, previously a games console's
storage. Becomes the photo library's disk on
trinity(#404): Immich's originals on it, its database on the internal SSD, after a wipe and anext4format. One consumer spinning disk with no mirror, so the off-estate copy ADR-0023 requires is what protects it — the same as would have been true of a bought drive, which this replaces. - Lenovo ThinkServer TS150 — Xeon E3-1225 v6 (4 cores, 3.3 GHz, Intel HD P630
with Quick Sync), 8 GB ECC, four 3.5" bays, no drives, no OS — bought
2026-09-09, in hand since 2026-09-15. The NAS
smaugof ADR-0016, tracked under #413. A tower, not a rack unit, and a 73 W part where the ADRs pictured an N100. It entered the Compute table on 2026-09-16, which is the trigger this entry set for itself — placed, addressed at10.0.40.30, and innetwork.md. The Storage column reads the boot disk alone on purpose: the ZFS mirror does not exist until the two Exos drives land, and a Storage column describing a pool nobody has created would be the kind of claim this table exists to not make. The boot disk the TrueNAS install wants (ADR-0040) and the bracket that carries it in the optical bay are the entries below and landed with it; the two drives for the mirror, bought 2026-09-11, have not. Nothing for this machine is outstanding on the roadmap's list any more; what is left is those two drives landing, and a build. Read off the machine on 2026-09-15, where everything above it came off a listing:ThinkServer TS150, machine type-model70UB000AUX, serialMJ05N4NK. Xeon E3-1225 v6 at 3.30 GHz, four cores, andActive Video: IGD— so the P630 this box was chosen for is live, which is the hardware half of ADR-0040's reopen condition and not the whole of it; whether Quick Sync reaches a container is still untested. 8192 MB at 2133 MHz, which is one SamsungM391A1G43EB1-CPBQ— 8 GB 2Rx8 PC4-2133P, ECC unbuffered, date code 1728 — in one of four slots. More memory is therefore an add and not a replace, and the part to match is ECC unbuffered: a registered DIMM will not run on this board. Onboard NIC4c:cc:6a:xx:xx:xx, recorded as an OUI like every other address here. BIOSS06KT81Ldated 2024-02-05, boot block1.81, flashed 2026-09-16 while the box was still empty. It shipped onS06KT03Rdated 2017-05-22 with boot block1.03— a firmware predating the Spectre and Meltdown microcode by a year — and the flash was done before the pool existed precisely so that a reset ofConfigure SATA asor ofCSMwould cost a re-check rather than an unbootable host with data on it. Both were re-checked and both survived, as did the machine type-model, the serial, the UUID, the MAC and the clock. The embedded controller did not move: it readS06CT01Abefore and readsS06CT01Aafter, and whether the package updates that component at all is unestablished — recorded as an observation rather than as a failure, because nothing misbehaves and the BIOS half plainly took. Intel AMT was enabled and on its factory-default credential when this box arrived, and is now off. Intel MEv11.6.12.1204, MEBxv11.0.0.0012: the MEBx acceptedadminon 2026-09-16, which is Intel's default and means nobody had ever set one — the same class of thing the CRS326 entry below warns about, that a used device arrives carrying whatever its last owner left on it.Manageability Feature SelectionreadEnabled,Password Policythe stockAnytime, and the ME network name and domain were both blank, which is the evidence it had never been provisioned onto a network rather than a proof of it. Closed the same day, in the order the firmware requires: a new ME password (MEBx forces one at first login, and it lives in the operator's password manager), thenUnconfigure Network Access→Full Unprovisionwhile the feature was still enabled, thenManageability Feature Selection→Disabled. Verified by the<CTRL-P>prompt no longer being offered at boot. Disabled rather than hardened, which is the opposite of what ADR-0033 decided forshiva, and the difference is the host's job rather than a change of posture:Sarumanis headless in a rack and a remote console is load-bearing there, so its iLO was kept and locked down.smaugis a tower with a monitor beside it, on the segment with the televisions and the consoles. Out-of-band management buys it nothing and would cost a management plane that answers when the operating system is off. Six SATA ports, all enabled, and two settings that were already right rather than needing changing:Configure SATA as [AHCI], which is the raw-disk access ZFS wants and the thing #418 is the cautionary tale for, andCSM [Disabled], so it boots UEFI as TrueNAS wants. Two 3.5" trays, both empty — exactly the mirror and no spare. The 5.25" bay was not empty: a PLDSDVD-RW DU8AESHanswered on SATA5. A photograph of the open case had been read here as an empty cage and was wrong; the BIOS summary is what caught it. The optical drive came out on 2026-09-16 and the boot disk took its place, its port and both its cables. The bay is a cage carrying its own fan on the board'sAUX1_FANheader, and that fan is not optional: it is the airflow over the drive bays, and two 7200 rpm Exos under a scrub will want it. Reconnected after the swap and readingAux Fan: Operating. - 2× Seagate Exos X20 18 TB (
ST18000NM003D), 3.5" SATA — bought 2026-09-11, in transit.smaug's ZFS mirror (ADR-0016, #413). A mirror of two is one drive's capacity, so this is 18 TB usable, not 36. The listing's zero power-on hours is a claim, not a fact — read it back withsmartctl -aon arrival and record what the drives actually report here, before the mirror is built on them. Serials go here when they land. They enter the Compute table with the NAS, which is not built. - Intel DC S3520 240 GB, 2.5" SATA 6 Gb/s enterprise SSD with power-loss
protection — bought 2026-09-11, in hand since 2026-09-15.
smaug's boot disk, carrying TrueNAS and the media stack it launches (ADR-0040, superseding ADR-0016's Ubuntu Server), deliberately not the mirror — an arrangement TrueNAS wants anyway, since it keeps its boot device out of the pool entirely. A data-centre part where the roadmap asked only for "a 240–256 GB 2.5" SATA SSD": the endurance is beside the point for a boot disk, but the power-loss protection is the same property the SM863a pair was bought for, and a boot disk that survives a power cut is worth more here than one that is merely fast. The TS150's optical bay is 5.25" and this is a 2.5" drive, so it cannot be fitted bare: a bracket for the bay and double-sided tape to mount it were bought 2026-09-11, alongside the drive, and both landed with it on 2026-09-15. The bracket is a 5.25"-to-2.5" adapter and does fit both the drive and the bay — an assumption until it was fitted. It and the tape are still unnamed here, which is a naming this document owes rather than one it is waiting on. Fitted 2026-09-16 and detected: the BIOS summary readsSATA Drive 5 Hard Disk INTEL SSDSC2BB240G7, and theG7suffix is the S3520 generation — so the part is what the listing said, on the port the optical drive vacated, with both its cables inherited rather than found. SerialPHDV706401TM240AGN, firmwareN2010101, on SATA 3.1 at 6.0 Gb/s.smartctlread 2026-09-16, and it is a used drive with a history worth recording: SMART self-assessmentPASSED,Media_Wearout_Indicator088 — Intel's own counter, which starts at 100 and falls, so roughly a tenth of the write endurance is spent and the rest is ample for a disk that will carry an operating system and no data. 13,182 power-on hours, about eighteen months running. Around 72 TiB written by its previous host. Zero pending sectors, zero reported-uncorrectable, zero CRC errors, zero end-to-end errors, and 24 °C in the bay with the fan on. 509 unsafe shutdowns out of 538 power cycles, which is the number that says what this drive did before: it was almost never shut down cleanly. It is also the argument above, tested. This part was chosen because a boot disk that survives a power cut is worth more here than one that is merely fast, andPower_Loss_Cap_Teststill passes after 509 of them — the capacitor works and somebody else did the proving. Four reallocated sectors, and that is a number to watch rather than to reject — normalised 099 against a threshold of 000, with nothing pending and nothing uncorrectable behind it. It has a consequence that is better written down now than discovered later:SmartDriveBadSectorsfires onhomelab_smart_reallocated_sectors > 0, deliberately, because a remapped sector never un-remaps and the first one is the finding. So this drive will trip that alert on the day SMART collection reachessmaug, exactly asoracle's 32 static sectors do, and the answer is the one #351 already built: silence the static fact and letSmartDriveBadSectorsGrowingcarry the trend, because a silence matches labels and no label carries the count.SmartDriveWearHighwill not fire — it wants 80 % of rated life used and this is near a tenth. No self-tests had ever been logged in 13,182 hours, so a baseline was taken on 2026-09-16 before the machine carried anything: extended offline, completed without error, at lifetime hour 13,183. The drive took far longer than its own two-minute estimate because it advertises Suspend Offline collection upon new command and TrueNAS was live underneath it — worth knowing before reading a slow self-test as a sick disk. TrueNAS's scheduled tests take it from here. - 2× Samsung SM863a 960 GB (
MZ-7KM960N), 2.5" SATA 6 Gb/s enterprise SSDs with power-loss protection14 — purchased 2026-09-09, delivered 2026-09-11, fitted 2026-09-18 in bays 3 and 4 of the ProLiant, and not yet in any logical drive. Bought against the number every sizing decision onSarumanstarts from: a 7.2K mirror serving about ninety random write IOPS (ADR-0029). SerialS3F3NX0K601487in Bay 3 andS3F3NX0K806107in Bay 4, firmwareGXM5304Q, both negotiated at 6 Gb/s — as the iLO reports them over SNMP, not as read off the labels. The fit runbook asked for the labels first, because reading a serial back through the controller means reading it through the tool the fit is trying to verify; that was not done, and the runbook's step 4 says how it still can be while the drives are unassigned. The iLO gives the model only asSAMSUNG— it names a third-party SATA drive by vendor where it gives the HPE disks their part number — so the part is proved by the size (915715MB), the firmware and the serial prefix rather than by the model string. Both read solid-state, SMARTokandnotConfiguredfrom the first scrape they appeared in, at 20:11 UTC, and nothing alerted. The Compute table's Storage column moved on the day, as this entry said it would. What has not moved is everything after the bays: no logical drive, no thin pool,alexanderstill on the HDD mirror, and no measurement — so #418 stays open and the ADRs whose arithmetic it names stand as written until step 8 offit-the-saruman-ssds.mdproduces a number. This entry is where the serials live, which is the question #148 asked. - 2× HP 2.5" SFF drive tray,
651687-00115 — bought 2026-09-11, arrived and fitted 2026-09-18, one under each SM863a in bays 3 and 4. The carriers the pair above needs to sit inSaruman's SFF bays (#418). A Gen9 bay holds a drive only in a tray, so two drives want two trays, and two is what was bought — worth writing down, because one tray short is one SSD fitted and one on a shelf. The arrival checks this entry asked for are answered by the bays rather than by the packaging: both trays took a drive, and the iLO reads the same carrier firmware on all four bays (cpqDaPhyDrvSmartCarrierAppFWRev11, bootloader6), so they are the Gen8/Gen9 SmartDrive carrier and not the Gen10 part or the 3.5" LFF one. This purchase went unrecorded for six days, which is the omission this entry exists to close. It was made in the same sitting as the I226 card, the Exos pair, and the boot disk's bracket and tape, every one of which has had an entry here since the day it was bought. The roadmap's rule is that a purchase is written down when the money is spent, so a gap like this is the rule failing rather than a thing the rule allows. Found on 2026-09-17 while reading the ProDesk's arrival paperwork for #92, which is not a way of finding purchases that can be relied on.651687-001is the listing's part number, not read off the tray. - MikroTik CRS326-24G-2S+RM16 — 24 × 1 GbE, 2 × SFP+, 1U, dual-boot
RouterOS / SwOS — bought used 2026-09-13; in transit, delivery estimated
2026-09-23, moved out from the 09-16 to 09-21 window quoted at purchase. The
replacement for
neothat ADR-0018 asked for in its last consequence and #444 decided. It is bought for one property, a TLS management interface: RouterOS serves its UI overwww-ssland imports a certificate, so the switch admin credential stops crossing the wire in clear through the device it protects. #84's GETBULK residual rides along; SNMPv3 is not the argument, because ADR-0036 found the switch in the rack already answers v3 on the wire. How it is configured was decided before the window rather than during it — ADR-0041 runs it on RouterOS, keeps the nameneoand the address10.7.7.2, serveswww-sslfrom a leaf off the estate's CA with plainwwwoff, and gives it an SNMPv3 authPriv user; the procedure isswap-the-switch.md. It enters the Rack table at U9 andnetwork.mdwhen it is racked —neocarries every VLAN, so the swap is a house-wide outage and shares a rack visit rather than getting its own — and until thenneois the switch in every document and every target. Checked on arrival, not assumed: which OS it boots and the version on it (/system resource), the serial and the management MAC, that the rack ears and the power supply are in the box, and a netinstall or factory reset before it touches the network — a used RouterOS device arrives with whatever its last owner left on it, users included. Those go here when it lands. - USB stick holding the pfSense installer — in transit; it belongs in the rack
beside the KVM once it arrives, and is not there yet.
restore-the-firewall.mdlists it as something you will need, so a restore attempted before it lands is a restore that stops to go looking for one - HP Smart Storage Battery 96W (
727258-B21, spare part815983-001) in the ProLiant, fitted 2026-09-02 to replace the pack that had failed. The Smart Array re-enabled its write cache on the first scrape after the fit; the cache ratio it reports is still open (#76) - A1437 battery cell for
prometheus17 — the pack that fits theA1425, the late-2012 Retina 13" in the Compute table — bought new 2026-09-13, delivered 2026-09-18 and fitted the same day. A consumable and not an upgrade: it is the one exception the roadmap's Never line names, bought because the estate's mains-cut path rests on this cell and the failure mode of a thirteen-year-old lithium cell on a shelf is swelling (#454). The listing calls it genuine and its brand field says unbranded, so it is recorded as a compatible cell, not an Apple part. That wording was written to be settled once the part could be looked at, and the fit settled it sideways.manufacturerandmodel_namecame back unchanged —SMP,bq20z451— because an aftermarket A1437 reuses the same gas gauge; but both design figures moved,charge_full_design6.6 → 6.8 Ah andvoltage_min_design11.21 → 11.4 V, which is a pack reporting its own numbers and is the only proof of a different part available on a machine that exports no serial. It stays recorded as a compatible cell. The new pack readscharge_full6.889 Ah of 6.8 Ah design (101 %) atcyclecount1. The cell it replaced read 94 % of design capacity after 108 cycles, on 2026-09-12 and again on 2026-09-17 — aboveHostBatteryHealthLow's 80 %, so it was bought on age and not on the alert — and went for recycling on 2026-09-18. Nothing in the Compute table changes; a cell is not a spec. Checked at the fit:charge_fullabovecharge_full_design,cyclecount1,charge_amperemoving, and both design figures changed — all read from this host's own Prometheus on 2026-09-18. Not checked, and the reason #454 is still open: the mains pull on the fully charged pack, which is the property the cell was bought for and a runtime the estate has never had. The pack was still charging when the fit was recorded. (replace-the-laptop-cell.mdcarries the baseline, the stack-down window — 14:53 to about 18:12 on the day, over its own two-hour bound — and the disposal.)oracle's cell reads 72 % and is second in line, unbought. - ViewSonic N1700W LCD, used as a rack console via the KVM
- RJ45 Cat6 in-line couplers18
- Cat6 patch cables19