docs: close Phase B Passo 9 — dual-boot procedure (RUNBOOK §15)

RUNBOOK §15: dual-boot operation — Linux⇄Windows switch procedure, per-OS
CI-stack table (roots/runner/vmrun), current GRUB behaviour (DEFAULT=0,
TIMEOUT=0 hidden → boots straight to Linux), post-boot verification commands
for both OSes, and an optional GRUB tweak (left unapplied — boot-to-Linux is
intentional so the box returns as the Linux CI host after any unattended
reboot).

Checklist: Passo 9 done; fixed the stale global tracking table (Passi 6–9
were still [ ] despite being complete). Phase B is now fully closed (1–9 [x]).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-07 19:38:32 +02:00
parent f965db71b3
commit 4366ba6b04
2 changed files with 97 additions and 9 deletions
+84
View File
@@ -764,3 +764,87 @@ both hosts).
> baselines whose IP-acquire is dominated by high-variance VMware-Tools polling
> (σ 2657 s); the 10-iteration static (§8/§11) and Linux (§10/§12) rows are the
> reliable host-effect signal.
---
## 15. Dual-boot operation (Linux ⇄ Windows host)
The CI machine is **dual-boot** on one piece of hardware: Linux Mint and
Windows 11 never run at the same time. Each OS carries a full CI stack
(orchestrator + runner + templates under its own root). Booting Linux brings
up the Linux runner; booting Windows brings up the Windows runner. Templates
and the `burnin-dummy` repo are kept at **template parity** across both roots.
| | Linux host | Windows host |
| --- | --- | --- |
| CI root | `/var/lib/ci/` | `F:\CI\` |
| Runner | `act-runner.service` (systemd) | `actions-runner` (Windows service / NSSM) |
| Transport to guests | WinRM (Win guest) / SSH (Linux guest) | same |
| vmrun | `/usr/bin/vmrun` | `C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe` |
### Current GRUB behaviour
`GRUB_DEFAULT=0`, `GRUB_TIMEOUT=0`, `GRUB_TIMEOUT_STYLE=hidden` — the machine
boots **straight into Linux Mint with no menu**. Boot entries present:
`Linux Mint 22.3 Cinnamon` (default) and
`Windows Boot Manager (on /dev/nvme0n1p1)`.
### Switch Linux → Windows
With the hidden/zero-timeout GRUB, hold **Esc** (or **Shift**) during early
boot to reveal the GRUB menu, then pick `Windows Boot Manager`. For a planned,
unattended switch, set a one-shot next-boot target instead:
```bash
# Requires GRUB_DEFAULT=saved (see "Optional GRUB tweak" below).
sudo grub-reboot "Windows Boot Manager (on /dev/nvme0n1p1)"
sudo reboot
```
Before rebooting out of Linux: confirm no job is mid-flight
(`sudo -u ci-runner ls /var/lib/ci/build-vms/` empty) and optionally pause the
Linux runner in the Gitea UI so queued jobs wait for the Windows runner.
### Switch Windows → Linux
Reboot; with `GRUB_DEFAULT=0` the machine returns to Linux automatically (no
key needed). If `grub-reboot` / `GRUB_DEFAULT=saved` is in use, Linux is the
saved default after a normal Linux shutdown.
### Post-boot verification (either OS)
Linux:
```bash
systemctl is-active act-runner # → active
systemctl --failed # → 0 loaded units
systemctl list-timers 'ci-*' # all ci-* timers scheduled
# then confirm the runner shows online in the Gitea UI (Admin → Runners)
```
Windows (PowerShell):
```powershell
Get-Service actions-runner # Status Running
& 'C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe' list # vmrun OK
# then confirm the runner shows online in the Gitea UI
```
### Optional GRUB tweak for everyday dual-boot
To get a short pick menu and remember the last choice (handy if Windows is used
often), edit `/etc/default/grub`:
```bash
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu
```
```bash
sudo update-grub
```
This is **optional** — the default boots-to-Linux behaviour is intentional so
the machine comes back as the Linux CI host after any unattended reboot
(power-loss, kernel update). Leave it as-is unless Windows becomes the daily
driver.