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:
@@ -764,3 +764,87 @@ both hosts).
|
|||||||
> baselines whose IP-acquire is dominated by high-variance VMware-Tools polling
|
> baselines whose IP-acquire is dominated by high-variance VMware-Tools polling
|
||||||
> (σ 26–57 s); the 10-iteration static (§8/§11) and Linux (§10/§12) rows are the
|
> (σ 26–57 s); the 10-iteration static (§8/§11) and Linux (§10/§12) rows are the
|
||||||
> reliable host-effect signal.
|
> 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.
|
||||||
|
|||||||
@@ -561,11 +561,15 @@ avviata abitualmente in Linux senza incidenti critici.
|
|||||||
> Windows resta pienamente funzionale e si usa riavviando nel boot
|
> Windows resta pienamente funzionale e si usa riavviando nel boot
|
||||||
> entry corrispondente.
|
> entry corrispondente.
|
||||||
|
|
||||||
- [ ] Aggiornare `docs/RUNBOOK.md` con la procedura dual-boot:
|
- [x] Aggiornare `docs/RUNBOOK.md` con la procedura dual-boot: vedi
|
||||||
come passare da Linux a Windows e viceversa, e cosa verificare
|
**RUNBOOK §15** (switch Linux⇄Windows, verifica post-boot per
|
||||||
al boot (runner online, act-runner.service attivo).
|
entrambi gli OS, tweak GRUB opzionale).
|
||||||
- [ ] (Facoltativo) Verificare che GRUB abbia i timeout e i default
|
- [x] (Facoltativo) GRUB verificato: `GRUB_DEFAULT=0`, `GRUB_TIMEOUT=0`,
|
||||||
corretti per l'uso quotidiano:
|
`GRUB_TIMEOUT_STYLE=hidden` → boot diretto in Linux (intenzionale:
|
||||||
|
la macchina torna host Linux dopo ogni reboot unattended). Per
|
||||||
|
switch a Windows: tasto Esc al boot, oppure `grub-reboot` con
|
||||||
|
`GRUB_DEFAULT=saved`. Tweak documentato in RUNBOOK §15, **non
|
||||||
|
applicato** (default Linux voluto).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo nano /etc/default/grub # GRUB_DEFAULT, GRUB_TIMEOUT
|
sudo nano /etc/default/grub # GRUB_DEFAULT, GRUB_TIMEOUT
|
||||||
@@ -583,10 +587,10 @@ avviata abitualmente in Linux senza incidenti critici.
|
|||||||
| 3 | B3 | Chiavi SSH + keyring (PoC headless) | [x] |
|
| 3 | B3 | Chiavi SSH + keyring (PoC headless) | [x] |
|
||||||
| 4 | B4 | act_runner systemd service + `self-test.yml` PASS | [x] |
|
| 4 | B4 | act_runner systemd service + `self-test.yml` PASS | [x] |
|
||||||
| 5 | B5 | Timer systemd installati e attivi | [x] |
|
| 5 | B5 | Timer systemd installati e attivi | [x] |
|
||||||
| 6 | B6 | Cutover (riavvio in Linux, runner Linux attivo) | [ ] |
|
| 6 | B6 | Cutover (riavvio in Linux, runner Linux attivo) | [x] |
|
||||||
| 7 | B7 | Capacity burn-in 4 × 10 (Win + Linux, sequenziale) | [ ] |
|
| 7 | B7 | Capacity burn-in 4 × 10 (Win + Linux, sequenziale) | [x] |
|
||||||
| 8 | — | ≥1 settimana di stabilità (boot Linux abituale) | [ ] |
|
| 8 | — | ≥1 settimana di stabilità (boot Linux abituale) | [x] |
|
||||||
| 9 | — | Gestione dual-boot + RUNBOOK aggiornato | [ ] |
|
| 9 | — | Gestione dual-boot + RUNBOOK aggiornato (§15) | [x] |
|
||||||
|
|
||||||
> **Architettura**: la macchina è **dual-boot** (stesso hardware).
|
> **Architettura**: la macchina è **dual-boot** (stesso hardware).
|
||||||
> Avviata in Linux → runner Linux attivo. Avviata in Windows → runner
|
> Avviata in Linux → runner Linux attivo. Avviata in Windows → runner
|
||||||
|
|||||||
Reference in New Issue
Block a user