aboutsummaryrefslogtreecommitdiff
path: root/working/velox-reinstall/velox-reinstall-runbook.org
blob: 02671e2e60a6937164cb6cdbd51ad39208643dbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#+TITLE: Velox Reinstall Runbook — DR Test of archangel + archsetup
#+AUTHOR: Craig Jennings
#+DATE: 2026-08-13

Context: velox's mainboard swapped Intel → AMD (Ryzen AI 9 HX 370, Radeon
890M, 96GB RAM). Old SSD intact but the new board's NVRAM has no boot entry,
and velox is ZFS root + ZFSBootMenu, so a stock Arch USB can't even read the
pool. Decision: full reinstall via archangel + archsetup, run deliberately as
a disaster-recovery test of the ISO and scripts before the Sunday flight.
Recent backup in hand; ratio available as the working machine.

Fallback ordering if the test finds a real gap:
- Before partitioning starts: the old system is intact — the ZBM repair
  route (efibootmgr entry pointing at the ZBM loader on the ESP, then
  amd-ucode swap in a chroot) is still available.
- After partitioning: the floor is a manual Arch install; the backup makes
  that survivable.

* Phase 0 — Preflight on ratio (agent-driven, done before you leave the desk)

- [ ] Rebuild the ISO with archsetup baked in: the 2026-08-02 ISO predates
  the microcode vendor-detection fix (archsetup, 2026-08-08) and was built
  without ARCHSETUP_DIR at all.
  #+begin_src sh
  cd ~/code/archangel && sudo ARCHSETUP_DIR=~/code/archsetup ./build.sh
  #+end_src
- [ ] build.sh fixes before the final rebuild (archangel repo):
  - rsync exclude for =.ai= (keeps =archsetup/.ai/private-design/= — the
    credential audit — off the portable USB stick).
  - copy =installer/velox-*.conf= to =airootfs/root/= so the machine profile
    is on the ISO at =/root/velox-zfs.conf=.
- [ ] Verify the ISO carries: =/code/archsetup= (with =install_cpu_microcode=),
  =/root/velox-zfs.conf=, no =.ai/private-design=. Loop-mount or unsquashfs
  spot-check.
- [X] USB ready (done 2026-08-13 15:25): the new ISO was copied to the Ventoy
  drive, sha256-verified against the source, and the 2026-04-09 + 2026-06-16
  archangel ISOs removed. Boot the stick and pick
  =archangel-2026-08-13-vmlinuz-6.18.43-lts-x86_64.iso= from the Ventoy menu.

* Phase 1 — UEFI setup on velox (BIOS screen, before any boot)

- [ ] Disable Secure Boot. Mandatory — the ZFS kernel modules are unsigned;
  the new board ships with it enforced by factory default.
- [ ] Set the system clock. The board swap reset the RTC to 2025-01-01;
  a wrong clock breaks TLS and pacman signature checks in the live env.
  Rough accuracy is fine — NTP tightens it once networked.
- [ ] While you're in setup: check boot-order UI shows the USB.

* Phase 2 — Salvage pass (live ISO, BEFORE running the installer) — REQUIRED

NOT optional insurance. Verified 2026-08-13: velox's newest truenas backup is
DAILY.0 = 2026-07-06 — five weeks stale. The backup timer on velox broke
around Jul 6 (truenas itself only went dark Jul 24, and it's back now; ratio
and mybitch backed up today). Everything since Jul 6 exists only on the old
SSD — including =wolf.conf.gpg= (created Jul 29), which is therefore in NO
backup at all. This pass also keeps the repair fallback alive until
partitioning starts.

- [ ] Network up (=nmtui= or ethernet), then confirm clock: =timedatectl=.
- [ ] Import the old pool read-only and unlock:
  #+begin_src sh
  zpool import -N -o readonly=on -R /mnt zroot
  zfs load-key zroot          # passphrase prompt
  zfs mount zroot/ROOT/default
  zfs mount -a 2>/dev/null    # home datasets etc.; ignore failures
  #+end_src
- [ ] Push a full fresh backup to truenas over the LAN — mirror the layout
  the backup job uses (etc + home), into a clearly-named one-off dir:
  #+begin_src sh
  rsync -aHAX --info=progress2 /mnt/etc /mnt/home \
      truenas:/mnt/vault/backups/velox/pre-reinstall-2026-08-13/
  #+end_src
  (=/usr= is in the regular backups but is all reinstallable — skip unless
  paranoid. The 96GB-RAM board will not be the bottleneck; the LAN is.)
- [ ] Spot-check the copy landed: =wolf.conf.gpg=, =.ssh=, =.gnupg=, newest
  files in =~/documents= and =~/downloads=.
- [ ] Check for uncommitted repo work and either push or note it:
  =~/.emacs.d= (known: the auto-dim-other-buffers.el unresolved merge),
  =~/.dotfiles=, anything under =~/code=.
- [ ] Export cleanly: =cd /; zfs unmount -a; zpool export zroot=.

* Phase 3 — Install (the actual DR test)

- [ ] Review the profile, then run the installer:
  #+begin_src sh
  less /root/velox-zfs.conf     # FILESYSTEM=zfs, HOSTNAME=velox, single nvme
  archangel --config-file /root/velox-zfs.conf
  #+end_src
  Note: the profile's ZFS_PASSPHRASE / ROOT_PASSWORD are the =welcome=
  placeholders — fine for install; both change post-install (=zfs change-key
  zroot= for the pool, =passwd= for root).
- [ ] Record every rough edge as a DR-test finding — that's the point of
  running it this way. Anything that needs a manual nudge gets a todo entry
  in archangel or archsetup afterward.
- [ ] Reboot into ZBM → boot the new environment.

* Phase 4 — archsetup (first boot of the installed system)

- [ ] Log in as root, network up, then verify the clock synced.
- [ ] Get archsetup — two paths, test the offline one since this is a DR
  drill (the online curl path is the everyday alternative):
  #+begin_src sh
  # offline: mount the install USB and copy the baked tree
  mount /dev/disk/by-label/ARCHANGEL* /mnt 2>/dev/null || mount /dev/sdX1 /mnt
  cp -r /mnt/code/archsetup /root/archsetup && cd /root/archsetup
  ./archsetup
  #+end_src
- [ ] Expected on the new board: =install_cpu_microcode= detects
  AuthenticAMD and installs amd-ucode (verified 2026-08-13, 7/7 tests).
  Podman socket, camera udev rule, tlp radio state, ZFS /tmp mask are all
  in the installer now — none need manual application afterward.
- [ ] archsetup clones + stows dotfiles. The velox host tier has no Intel
  assumptions (swept 2026-08-13); maint's capability probe runtime-detects
  amd-pstate.

* Phase 5 — Post-install restore + verification

- [ ] Restore from backup (credentials, ssh keys, gpg, user data). The
  secrets-bundle-in-ISO design is not built yet — manual restore is the
  known gap, not a test failure.
- [ ] WireGuard: decrypt + re-place =wolf.conf.gpg= at =~/.config/wireguard/=;
  re-import the NM profile (autoconnect off, as before).
- [ ] Change the placeholder passwords: =passwd=, =zfs change-key zroot=.
- [ ] PSR workaround — REQUIRED on this board. The Ryzen AI 300 has a known
  idle instability (Panel Self Refresh hangs/reboots the machine; hit during
  the live session 2026-08-13). Add =amdgpu.dcdebugmask=0x610= to the
  installed system's kernel command line — velox boots via ZBM, so set it on
  the pool: =zfs set org.zfsbootmenu:commandline="... amdgpu.dcdebugmask=0x610" zroot/ROOT/default=
  (keep the existing args; append). Revisit after a BIOS update ≥3.05 or a
  kernel that fixes PSR on Strix Point — track via the Framework issue
  tracker (SoftwareFirmwareIssueTracker #110).
- [ ] New-hardware spot-checks:
  - =journalctl -k | grep -i microcode= — amd-ucode applied.
  - =cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver= — expect
    amd-pstate(-epp).
  - wifi + bluetooth up (new board radios), touchpad behavior, camera.
  - =glxinfo -B= / =vulkaninfo --summary= — Radeon 890M on RADV.
- [ ] Fresh clones automatically carry the post-purge rewritten git history —
  closes the clone-reconcile rider from 2026-08-11 without action.
- [ ] Fix and verify the backup timer on the fresh install — it was silently
  broken since ~Jul 6. After the first manual run succeeds, confirm a new
  DAILY.0 appears under =truenas:/mnt/vault/backups/velox/=. Diagnose why it
  broke (timer unit dead? mount failure? credential?) if the old journal
  survives in the salvage copy.
- [ ] Update the machine-identity memory: velox is now AMD (amd-pstate),
  both daily drivers AMD. Fix the stale =intel_pstate= comment in
  =airplane-mode= line 6 while at it (cosmetic).
- [ ] File every DR-test finding in the owning project's todo.

* Timing

Today is Thursday; the flight is Sunday. Target: Phases 0–4 tonight or
Friday, leaving Saturday as pure buffer. If the install stalls past Friday
evening, cut losses to the manual-install floor.