-
Notifications
You must be signed in to change notification settings - Fork 0
1.1 Step | PrepareOptRoot
Primo Step reale dell'installer: crea
/opt/odoo(il valorectx.odoo_home) se manca, in modo reversibile. Vive insrc/steps/prepare_opt_root.rs. È la mutazione più semplice possibile — una directory — scelta apposta come modello di riferimento per gli step successivi (utente, apt, postgres…): tutti sono varianti più ricche dello stesso schemasnapshot → run → undo.Nasce dalla correzione C4: il
mkdirche nel Bash era nascosto dentrocheck_diskdiventa qui uno step conundo. Vedi 1. Checks e 0. Motore.
| Fase | Comportamento |
|---|---|
| snapshot |
ctx.odoo_home esiste → PreState::Preexisting; altrimenti resta Untracked (il run non l'ha ancora creata) |
| run |
Preexisting → no-op (non è nostra: né owner né permessi); Untracked → mkdir + 0755, poi PreState::CreatedByUs. In dry_run logga soltanto |
| undo | agisce solo se CreatedByUs: rimuove la dir solo se vuota (rmdir, mai rm -rf). Preexisting/Untracked → no-op |
I tre PreState sono tutti gestiti e testati. Il PreState post-run viene serializzato
(snapshot_value) e persistito, così il rollback sa se la directory è nostra. (Oggi lo stato persistito
non è ancora riletto: vedi la nota sull'invariante 4 in
0. Motore.)
A questo punto l'utente odoo non esiste ancora (viene creato in Fase 3). Perciò la directory è
creata owned root con permessi 0755; il chown odoo:odoo avverrà nello step di creazione utente
— che è l'ordine corretto. La dipendenza è documentata nel codice.
Si crea solo il livello mancante (create_dir, non create_dir_all). Il rollback deve ripristinare
esattamente ciò che abbiamo aggiunto: se creassimo anche /opt non lo ri-rimuoveremmo, lasciando un
residuo. Il parent (/opt) si assume esistente sul sistema.
- Idempotente: se la dir è già sparita → no-op.
- Rimuove solo se vuota. Se contiene artefatti di step successivi, quegli step hanno i propri
undoche girano prima (ordine inverso), quindi al momento dell'undo diPrepareOptRootla dir dovrebbe essere vuota. Se non lo è → warning e non si forza. Mairm -rf. - Una dir
Preexistingnon viene mai rimossa: non è nostra da distruggere.
parse config
└─▶ preflight checks (non mutanti)
└─▶ Installer::execute([ PrepareOptRoot, … ]) ← prima mutazione, reversibile
Per ora PrepareOptRoot è l'unico step reale nella sequenza di produzione; le fasi 3–10 appenderanno
gli altri dopo di esso, senza modificare il motore.
- Implementazione esemplare e volutamente minimale: se il pattern è pulito qui, gli step complessi lo copiano.
- Nessun
.unwrap()/.expect(): ogni fallimento è unResult. - Test del round-trip:
CreatedByUs(crea→rimuove),Preexisting(sopravvive all'undo), dir non vuota (undo non forza),dry_run(non crea,undono-op).
Start here
Key concepts
References
For developers
Technical detail — how it works inside
Steps:
- 1.1 PrepareOptRoot
- 1.2 CreateOdooUser
- 1.3 SetupLogDir
- 1.3b SetupCacheDir
- 1.4 AptPackages (delta)
- 1.5 InstallWkhtmltopdf
- 1.6 SetupPostgres
- 1.7 CreateDbRole
- 1.8 CreateDatabase
- 1.9 CloneOdooRepo
- 1.10 CreateVirtualenv
- 1.11 InstallPythonRequirements
- 1.12 GenerateConfig
- 1.12b SetupDataDir
- 1.13 InitializeOdooDatabase
- 1.14 SetupSystemd
- 1.15 Nginx (6 sub-steps)
- 1.16 WriteControlScript + PatchBashrc
Cross-cutting: