Commit Graph

8 Commits

Author SHA1 Message Date
josh c3a1cf99f9 Switch to pxe-service for proxy DHCP boot and restore host filtering
build-and-push / test (push) Successful in 37s
build-and-push / build-and-push (push) Successful in 1m14s
dhcp-boot alone does not send PXE vendor extensions (option 43) that
PXE clients need in proxy DHCP mode. Switch to pxe-service directives
for initial PXE boot, keep dhcp-boot only for iPXE chainloading.
Create .0 symlinks for pxe-service filename convention. Restore
dhcp-ignore=tag:!known filtering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 23:04:29 -04:00
josh df78f881bb Remove dhcp-ignore filter to debug proxy DHCP non-response
build-and-push / test (push) Successful in 36s
build-and-push / build-and-push (push) Successful in 1m14s
dnsmasq sees PXE requests but never responds. Remove the known-host
filter to determine if tag matching is the issue or if the problem
is elsewhere in the proxy DHCP flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 22:35:29 -04:00
josh dfcf91c949 Fix dhcp-hostsfile to explicitly set known tag for PXE clients
build-and-push / test (push) Successful in 37s
build-and-push / build-and-push (push) Successful in 1m34s
Bare MACs in dhcp-hostsfile were not auto-setting the known tag in
proxy DHCP mode, causing dhcp-ignore=tag:!known to drop all requests.
Explicitly write set:known per host entry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 22:08:48 -04:00
josh ba5440a481 Fix dnsmasq not responding to PXE clients and seed iPXE binaries
build-and-push / test (push) Successful in 42s
build-and-push / build-and-push (push) Successful in 1m17s
Remove tag:known filter from dhcp-range — in proxy DHCP mode the tag
filter prevents responses. dhcp-ignore=tag:!known still filters
unknown hosts. Also copy ipxe.efi and undionly.kpxe from the system
ipxe package into the TFTP root at startup so clients can actually
download the bootloader.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 22:01:01 -04:00
josh 05bb242f50 Fix dnsmasq crash by creating tftp-root dir and using subnet config
build-and-push / test (push) Successful in 38s
build-and-push / build-and-push (push) Successful in 1m22s
dnsmasq exited with status 3 because the tftp-root directory didn't
exist at startup. Also replaced hardcoded 192.168.1.0 in dhcp-range
with the configured subnet value.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 21:47:07 -04:00
josh 4774600040 Add boot image management with ISO extraction and serving
build-and-push / test (push) Successful in 34s
build-and-push / build-and-push (push) Successful in 1m7s
Upload Proxmox ISOs via API or dashboard UI, extract kernel+initrd
using pure-Go iso9660 library, store on disk, and serve over HTTP
for PXE booting. Dynamic kernel/initrd filenames per image replace
the previous hardcoded paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-09 21:26:31 -04:00
josh b23ef64ee1 Use ephemeral SSH keys per rebuild instead of static config keys
build-and-push / test (push) Successful in 9m57s
build-and-push / build-and-push (push) Has been cancelled
Generate a fresh ed25519 key pair at rebuild time, inject the public key
into the Proxmox answer file, use the private key for cluster join over
SSH, then remove the key from both the remote host and the database.
This eliminates the need to manage static SSH keys in config/secrets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-03 21:09:22 -04:00
josh bda568b25c Initial implementation: host lifecycle + PXE + admin dashboard
Go service for Proxmox homelab cluster provisioning. Handles PXE boot,
Proxmox autoinstall (answer file generation), cluster join via SSH,
and Infrastructure API registration.

- Host state machine (registered → pxe_ready → installing → ready)
- dnsmasq supervisor with MAC-based allowlist
- iPXE script and Proxmox answer file generation
- First-boot phone-home → cluster join → infra registration
- Operation locking with expiry (409 on conflict)
- SSE event hub for real-time dashboard updates
- Admin dashboard (host grid, detail, registration form)
- Config-driven server types with hot-reload
- Docker deployment (multi-stage fat image)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-03 20:55:14 -04:00