Files
PFVCluster/docs/docmap.md
T
mrcharles 815d07bbca feat(console): manage 7 switch consoles via ser2net+conman on pfv-tsys4
Solve the long-standing USB adapter enumeration shift problem: 9 Prolific
USB-to-DB9 adapters on pfv-tsys4 have no unique serial numbers and get
assigned /dev/ttyUSB0-8 based on enumeration order, which changes on every
reboot and breaks the old /root/conmap + manual screen workflow.

Solution: udev rules pin each adapter by its ID_PATH (physical USB port
topology), which is stable across reboots regardless of enumeration order.
Each adapter gets a named symlink in /dev/consoles/<name>. ser2net opens
these stable symlinks and exposes them on TCP ports (2001-2007) bound to
the Tailscale interface only. conman connects to those TCP ports for
session logging and multi-user console sharing.

Architecture (layered, no port sharing):
  USB adapter → udev symlink → ser2net (TCP) → conman (logging + mux)

Port assignments (all on Tailscale IP 100.70.77.93):
  2001 = pfv-core-sw01     2002 = pfv-tor3-mgmt    2003 = pfv-tor3-stor
  2004 = pfv-rrinfra-rtr   2005 = pfv-r2-tor-top   2006 = subodev-torsw
  2007 = pfv-r2-sw

Scripts (console/):
- mapping.txt: source of truth (TCP port | name | ID_PATH | baud | comment)
- generate-config.sh: generates udev rules, ser2net.yaml, conman.conf
  entries from mapping.txt. Idempotent (markers in conman.conf for clean
  regeneration). Uses | delimiter (ID_PATH values contain colons).
- setup.sh: full deploy — generate configs, create symlinks (udev trigger
  + manual fallback for already-discovered devices), create conmand
  systemd unit (Debian doesn't ship one), restart services
- discover.sh: read-only USB adapter and service state discovery
- validate-conman.sh: verify conman→ser2net→device data path and log capture

Issues fixed during development:
- /dev/console is a kernel char device (major 5, minor 1) — cannot create
  a directory there. Changed symlink namespace to /dev/consoles/.
- conman 0.3.x has no 'include' directive — CONSOLE entries written
  directly into /etc/conman.conf between idempotent markers.
- Debian conman package has no systemd unit — created
  /etc/systemd/system/conmand.service with After=ser2net ordering.
- conman.conf had no LOGDIR — logs weren't being written to
  /var/log/conman/. Fixed by adding server logdir directive.

Validation: 7 symlinks resolving, 7 TCP ports on Tailscale, conmand with
7 consoles registered, 7 log files actively capturing console output,
both services enabled for reboot survival.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-28 19:44:02 -05:00

5.6 KiB

Documentation Map

Index of all documentation in this repo. Agents must update this file whenever a doc is added, removed, or substantively changed.

Last updated: 2026-07-28

Kubernetes Architecture (k8s/)

Distro decision, target architecture, control-plane design, bootstrap and DR procedures for the pfv-k8s cluster (Talos + vcluster + Keycloak OIDC).

Document Description Last Reviewed
k8s/README.md Index + TL;DR of all k8s decisions 2026-07-28
k8s/DISTRO-DECISION.md Talos vs k3s analysis. Recommendation: Talos, driven by ITAR/classified requirement 2026-07-28
k8s/ARCHITECTURE.md Target architecture: control plane, network, identity, storage, tenant isolation, bootstrap, DR. Mermaid diagrams 2026-07-28

Proxmox Cluster (proxmox/)

Fleet operations, hardware, performance tuning, storage architecture.

Document Description Last Reviewed
proxmox/PROJECT.md Comprehensive fleet report: 7 hosts, VM inventory, storage, recommendations 2026-07-27
proxmox/TODO.md Pending physical hardware work (tsys2/4/5 Friday plan) 2026-07-27
proxmox/K8S.md Kubernetes storage/host analysis (predecessor to k8s/) 2026-07-27

Server Build (server-build/)

Server provisioning, security hardening, DNS/NTP configuration.

Document Description Last Reviewed
server-build/SECURITY.md Security architecture: SSH hardening, 2FA, SCAP-STIG, Wazuh, auditd 2026-07-25
server-build/tailscale.md Tailscale vs managed DNS analysis (RESOLVED — netinfra pair serves knel.net) 2026-07-28
server-build/DEPLOYMENT.md Server deployment procedures, package lists, config flow 2026-07-25
server-build/TSYS-2FA-GUIDE.md End-user guide for 2FA setup (SSH, Cockpit, Webmin) 2026-07-25
server-build/DEVELOPMENT-GUIDELINES.md Coding standards, commit conventions, script patterns 2026-07-25

Operational Guides (outside docs/)

Document Description Last Reviewed
../powerman/README.md Cyclades PM10i PDU management via powerman on pfv-tsys1 2026-07-28
../console/README.md Serial console management (ser2net + conman) for 7 network switches on pfv-tsys4 2026-07-28
../k8s/README.md k3s cluster setup scripts: wipe, bootstrap, taint, verify (3-node HA over Tailscale) 2026-07-28
../dns-cluster-setup/README.md Technitium DNS cluster setup: export, deploy, cluster, verify 2026-07-28
../tests/README.md Test suite documentation: unit, security, validation tests 2026-07-28
../netinfra/pfv-netinfra-setup.md pfv-netinfra-01/02 initial setup guide 2026-07-27
../netinfra/pfv-netboot-setup.md pfv-netboot reference node setup 2026-07-27

Archive (archive/)

Historical AI reviews, completed task lists, and pre-refactor examples. Read-only context — do not update; link to active docs instead.

Document Description
archive/CODE-REVIEW-FINDINGS.md Early code review findings (most issues now fixed)
archive/REFACTORING-EXAMPLES.md Pre-refactor code patterns (historical "before" examples)
archive/Claude-Review.md Claude's initial code review
archive/AIReview-QWEN.md Qwen AI review
archive/AiOverview-Gemini.md Gemini project overview
archive/AiOverview-OpenCode.md OpenCode project overview
archive/AiSecurityAudit-Gemini.md Gemini security audit
archive/charles-todo.md Charles's early task list (completed)
archive/claude-todo.md Claude's early task list (completed)

Top-Level Files

File Description
../AGENTS.md Agent operating instructions (repo layout, git policy, gardening protocol)
../STATUS.md Living project status (agent-maintained, human read-only)
../README.md Project overview and quick start
../LICENSE License

Agent Gardening Protocol

When making changes to this repo, agents MUST:

  1. Update ../STATUS.md if the work changes infrastructure state, completes/starts a task, or discovers a new issue.
  2. Update this file (docmap.md) if a doc is added, removed, or has a substantive content change. Update the "Last Reviewed" date.
  3. Verify cross-references — any new .md file must be linked from at least one existing doc or this map.
  4. Check for stale paths — after any directory rename or file move, grep -rn 'old/path' --include='*.md' and fix all references.
  5. Keep code and docs in sync — if you change a script's interface, behavior, or location, update every doc that references it in the same commit.