docs(bridge): Phase A→B bridge checklist completed
All sections done: SSH keys, BuildVMGuest password, Gitea PAT, OpenSSH Server, template powered-off verification, CI backup. Fixed errata: .vmsn always present (not error indicator), backup switched from Git tar to 7z LZMA2, removed scheduled-task section (no CI-* tasks exist on this host). Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -51,7 +51,7 @@ presuppongono già pronti.
|
|||||||
|
|
||||||
### 2.1 Inventario chiavi SSH
|
### 2.1 Inventario chiavi SSH
|
||||||
|
|
||||||
- [ ] Verificare presenza chiavi:
|
- [x] Verificare presenza chiavi:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
Get-ChildItem F:\CI\keys\ci_linux*
|
Get-ChildItem F:\CI\keys\ci_linux*
|
||||||
@@ -68,8 +68,8 @@ La password salvata in Windows Credential Manager **non è
|
|||||||
esportabile**. Devi conoscerla per re-inserirla con `secret-tool` su
|
esportabile**. Devi conoscerla per re-inserirla con `secret-tool` su
|
||||||
Linux (Passo 3 di Fase B).
|
Linux (Passo 3 di Fase B).
|
||||||
|
|
||||||
- [ ] Verificare di averla nel password manager personale.
|
- [x] Verificare di averla nel password manager personale.
|
||||||
- [ ] Se non la ricordi: bootare il template `WinBuild2025` (e `WinBuild2022`),
|
- [X] Se non la ricordi: bootare il template `WinBuild2025` (e `WinBuild2022`),
|
||||||
resettare la password dell'utente CI (`net user <user> <newpass>`),
|
resettare la password dell'utente CI (`net user <user> <newpass>`),
|
||||||
ricatturare snapshot `BaseClean` da stato powered-off (vedi
|
ricatturare snapshot `BaseClean` da stato powered-off (vedi
|
||||||
`AGENTS.md` errore #9), aggiornare il Credential Manager Windows con
|
`AGENTS.md` errore #9), aggiornare il Credential Manager Windows con
|
||||||
@@ -77,10 +77,10 @@ Linux (Passo 3 di Fase B).
|
|||||||
|
|
||||||
### 2.3 Generazione Gitea PAT per il nuovo runner
|
### 2.3 Generazione Gitea PAT per il nuovo runner
|
||||||
|
|
||||||
- [ ] Aprire Gitea → User Settings → Applications → Generate New Token.
|
- [x] Aprire Gitea → User Settings → Applications → Generate New Token.
|
||||||
- [ ] Nome: `ci-runner-linux`. Scope: `read:repository` + `write:package`
|
- [x] Nome: `ci-runner-linux`. Scope: `read:repository` + `write:package`
|
||||||
(o gli stessi del runner Windows attuale).
|
(o gli stessi del runner Windows attuale).
|
||||||
- [ ] Annotare il token in modo sicuro (verrà inserito al Passo 3 di
|
- [x] Annotare il token in modo sicuro (verrà inserito al Passo 3 di
|
||||||
Fase B con `secret-tool store ... target GiteaPAT`).
|
Fase B con `secret-tool store ... target GiteaPAT`).
|
||||||
|
|
||||||
### 2.4 OpenSSH Server su Windows (per rsync pull dal Linux)
|
### 2.4 OpenSSH Server su Windows (per rsync pull dal Linux)
|
||||||
@@ -89,7 +89,7 @@ Necessario solo se al Passo 2 di Fase B (transfer template) preferisci
|
|||||||
fare `rsync pull` dal Linux. Alternativa: `rsync push` da Windows con
|
fare `rsync pull` dal Linux. Alternativa: `rsync push` da Windows con
|
||||||
WSL/Cygwin/MSYS2.
|
WSL/Cygwin/MSYS2.
|
||||||
|
|
||||||
- [ ] Installare OpenSSH Server:
|
- [x] Installare OpenSSH Server:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
|
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
|
||||||
@@ -99,16 +99,17 @@ WSL/Cygwin/MSYS2.
|
|||||||
-Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
|
-Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] Validare connessione da un altro host: `ssh user@<windows-ip> "whoami"`.
|
- [x] Validare connessione da un altro host: `ssh user@<windows-ip> "whoami"`.
|
||||||
- [ ] (Opzionale) Configurare `authorized_keys` per il futuro user
|
- [x] (Opzionale) Configurare `authorized_keys` per il futuro user
|
||||||
`ci-runner` del Linux box.
|
`ci-runner` del Linux box.
|
||||||
|
|
||||||
### 2.5 Template fully powered-off (gate per B2)
|
### 2.5 Template fully powered-off (gate per B2)
|
||||||
|
|
||||||
> AGENTS.md errore #9: snapshot catturato con VM accesa produce
|
> AGENTS.md errore #9: snapshot catturato con VM accesa produce
|
||||||
> `*.vmem` / `*.vmsn` che rompono il clone su host diverso.
|
> `*.vmem` che rompono il clone su host diverso. `*.vmsn` è sempre
|
||||||
|
> presente (metadata snapshot) anche con VM spenta — non è un problema.
|
||||||
|
|
||||||
- [ ] Verificare che nessun template sia running:
|
- [x] Verificare che nessun template sia running:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
& 'C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe' list
|
& 'C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe' list
|
||||||
@@ -116,15 +117,16 @@ WSL/Cygwin/MSYS2.
|
|||||||
|
|
||||||
Atteso: nessun path sotto `F:\CI\Templates\` nell'output.
|
Atteso: nessun path sotto `F:\CI\Templates\` nell'output.
|
||||||
|
|
||||||
- [ ] Verificare assenza file di runtime:
|
- [x] Verificare assenza file di runtime:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
Get-ChildItem F:\CI\Templates -Recurse -Include *.vmem,*.vmsn,*.lck
|
Get-ChildItem F:\CI\Templates -Recurse -Include *.vmem,*.lck
|
||||||
```
|
```
|
||||||
|
|
||||||
Atteso: nessun risultato. Se ci sono `.vmem`/`.vmsn`, lo snapshot
|
Atteso: nessun risultato. Se ci sono `.vmem`, lo snapshot non è
|
||||||
non è clean → ricatturare `BaseClean` / `BaseClean-Linux` da stato
|
clean (VM era accesa) → ricatturare `BaseClean` / `BaseClean-Linux`
|
||||||
fully powered-off.
|
da stato fully powered-off. `.lck` indica VM ancora in esecuzione →
|
||||||
|
spegnerla prima.
|
||||||
|
|
||||||
### 2.6 Backup precauzionale di `F:\CI\`
|
### 2.6 Backup precauzionale di `F:\CI\`
|
||||||
|
|
||||||
@@ -135,44 +137,18 @@ buona pratica.
|
|||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$stamp = Get-Date -Format 'yyyyMMdd'
|
$stamp = Get-Date -Format 'yyyyMMdd'
|
||||||
$archive = "E:\Backup\CI-pre-migration-$stamp.tar"
|
$archive = "F:\BACKUP\CI-pre-migration-$stamp.7z"
|
||||||
& 'C:\Program Files\Git\usr\bin\tar.exe' -cf $archive 'F:\CI\'
|
& 'C:\Program Files\7-Zip\7z.exe' a -mx=3 -xr!ISO -xr!RunnerWork $archive 'F:\CI\'
|
||||||
Get-FileHash $archive -Algorithm SHA256 | Tee-Object "$archive.sha256"
|
Get-FileHash $archive -Algorithm SHA256 | Tee-Object "$archive.sha256"
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] Verifica integrità (lista contenuto, primi 20 record):
|
- [x] Verifica integrità (lista contenuto, primi 20 record):
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
& 'C:\Program Files\Git\usr\bin\tar.exe' -tf $archive | Select-Object -First 20
|
& 'C:\Program Files\7-Zip\7z.exe' l $archive | Select-Object -First 20
|
||||||
```
|
```
|
||||||
|
|
||||||
- [ ] Annotare path archivio + checksum SHA256.
|
- [x] Annotare path archivio + checksum SHA256.
|
||||||
|
|
||||||
### 2.7 Annotare cadenze scheduled task (se custom)
|
|
||||||
|
|
||||||
- [ ] Esportare l'inventario corrente:
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
Get-ScheduledTask -TaskName 'CI-*' |
|
|
||||||
Select-Object TaskName,
|
|
||||||
@{n='Trigger';e={ $_.Triggers | ForEach-Object { $_.PSObject.Properties | Where-Object Name -in 'StartBoundary','RepetitionInterval','DaysOfWeek' | ForEach-Object { "$($_.Name)=$($_.Value)" } } -join '; ' }},
|
|
||||||
@{n='Action'; e={ "$($_.Actions.Execute) $($_.Actions.Arguments)" }} |
|
|
||||||
Format-List | Tee-Object -FilePath "scheduled-tasks-inventory-$(Get-Date -Format 'yyyyMMdd').txt"
|
|
||||||
```
|
|
||||||
|
|
||||||
- [ ] Confrontare con i `.timer` in `deploy/systemd/`:
|
|
||||||
|
|
||||||
| Task Windows | systemd timer | Cadenza prevista |
|
|
||||||
| ----------------------------- | ------------------------------------- | ---------------------- |
|
|
||||||
| `CI-CleanupOrphanedBuildVMs` | `ci-cleanup-orphans.timer` | ogni 6h + boot |
|
|
||||||
| `CI-Invoke-RetentionPolicy` | `ci-retention-policy.timer` | giornaliero 03:00 |
|
|
||||||
| `CI-Watch-DiskSpace` | `ci-watch-disk-space.timer` | ogni 15min |
|
|
||||||
| `CI-Watch-RunnerHealth` | `ci-watch-runner-health.timer` | ogni 15min |
|
|
||||||
| (nuovo) | `ci-backup-template.timer` | settimanale Dom 02:00 |
|
|
||||||
|
|
||||||
- [ ] Se le cadenze Windows sono diverse, aggiornare gli `OnCalendar` /
|
|
||||||
`OnUnitActiveSec` in `deploy/systemd/*.timer` **prima** del Passo
|
|
||||||
5 di Fase B. Committare la modifica.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -180,15 +156,15 @@ buona pratica.
|
|||||||
|
|
||||||
Questi non sono comandi, ma checkpoint prima di iniziare B1 e B6.
|
Questi non sono comandi, ma checkpoint prima di iniziare B1 e B6.
|
||||||
|
|
||||||
- [ ] **Hardware Linux disponibile**: il box target è acquisito,
|
- [x] **Hardware Linux disponibile**: il box target è acquisito,
|
||||||
racked, raggiungibile in rete dall'host Windows e da Gitea.
|
racked, raggiungibile in rete dall'host Windows e da Gitea.
|
||||||
- [ ] **DNS / IP statico** assegnato al nuovo host Linux (per
|
- [x] **DNS / IP statico** assegnato al nuovo host Linux (per
|
||||||
registrazione runner + raggiungibilità da admin).
|
registrazione runner + raggiungibilità da admin).
|
||||||
- [ ] **Finestra di manutenzione per cutover B6 concordata**: 30–60 min
|
- [x] **Finestra di manutenzione per cutover B6 concordata**: 30–60 min
|
||||||
di stop Gitea Actions, in un orario a basso traffico.
|
di stop Gitea Actions, in un orario a basso traffico.
|
||||||
- [ ] **Comunicazione utenti del repo**: avviso che durante la
|
- [x] **Comunicazione utenti del repo**: avviso che durante la
|
||||||
finestra B6 i workflow saranno temporaneamente fermi.
|
finestra B6 i workflow saranno temporaneamente fermi.
|
||||||
- [ ] **Piano di rollback compreso**: rileggere la sezione "Rollback"
|
- [x] **Piano di rollback compreso**: rileggere la sezione "Rollback"
|
||||||
del Passo 6 di [PhaseB-user-checklist.md](PhaseB-user-checklist.md).
|
del Passo 6 di [PhaseB-user-checklist.md](PhaseB-user-checklist.md).
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -196,16 +172,15 @@ Questi non sono comandi, ma checkpoint prima di iniziare B1 e B6.
|
|||||||
## Tracciamento globale
|
## Tracciamento globale
|
||||||
|
|
||||||
| Sezione | Descrizione | Stato |
|
| Sezione | Descrizione | Stato |
|
||||||
| ------- | ---------------------------------------------- | ----- |
|
| ------- | ----------------------------------------------- | ----- |
|
||||||
| 1 | Baseline benchmark salvato in `docs/RUNBOOK.md` | [x] |
|
| 1 | Baseline benchmark salvato in `docs/RUNBOOK.md` | [x] |
|
||||||
| 2.1 | Chiavi SSH presenti | [ ] |
|
| 2.1 | Chiavi SSH presenti | [x] |
|
||||||
| 2.2 | Password `BuildVMGuest` recuperata | [ ] |
|
| 2.2 | Password `BuildVMGuest` recuperata | [x] |
|
||||||
| 2.3 | Gitea PAT generato per `ci-runner-linux` | [ ] |
|
| 2.3 | Gitea PAT generato per `ci-runner-linux` | [x] |
|
||||||
| 2.4 | OpenSSH Server attivo (o alt. rsync) | [ ] |
|
| 2.4 | OpenSSH Server attivo (o alt. rsync) | [x] |
|
||||||
| 2.5 | Template fully powered-off, no `.vmem` | [ ] |
|
| 2.5 | Template fully powered-off, no `.vmem` | [x] |
|
||||||
| 2.6 | Backup `F:\CI\` con SHA256 | [ ] |
|
| 2.6 | Backup `F:\CI\` con SHA256 | [x] |
|
||||||
| 2.7 | Cadenze scheduled task confrontate con timer | [ ] |
|
| 3 | Hardware + DNS + finestra + comunicazione OK | [x] |
|
||||||
| 3 | Hardware + DNS + finestra + comunicazione OK | [ ] |
|
|
||||||
|
|
||||||
Quando tutte le righe sono `[x]`, puoi iniziare il Passo 1 di
|
Quando tutte le righe sono `[x]`, puoi iniziare il Passo 1 di
|
||||||
[PhaseB-user-checklist.md](PhaseB-user-checklist.md).
|
[PhaseB-user-checklist.md](PhaseB-user-checklist.md).
|
||||||
|
|||||||
Reference in New Issue
Block a user