-
Notifications
You must be signed in to change notification settings - Fork 0
1.14 Step | SetupSystemd
Installa e attiva il servizio systemd di Odoo: rendering dell'unit dal template, installazione in
/etc/systemd/system/,daemon-reload,enable,start. Vive insrc/steps/setup_systemd.rs. Port dilib/systemd.sh+templates/odoo.service.tpl.Fase di consolidamento: riusa due pattern già validati — i tre PreState indipendenti di 1.6 SetupPostgres e il template embedded di 1.12 GenerateConfig.
struct SystemdSnapshot {
unit_file: PreState, // /etc/systemd/system/odoo<N>.service esiste già?
enabled: PreState, // il servizio era già enabled?
active: PreState, // il servizio era già attivo?
}| Fase | Comportamento |
|---|---|
| snapshot | per ogni asse: già vero prima di noi → Preexisting; altrimenti Untracked
|
| run | installa l'unit (idempotente), daemon-reload, enable (se non già), start/restart, verifica is-active
|
| undo | ripristina ogni asse CreatedByUs, in ordine stop → disable → rm → reload
|
Regola D4: un servizio già attivo/abilitato prima di noi viene lasciato com'era; un unit file preesistente non viene rimosso.
stop (se active == CreatedByUs)
└─ disable (se enabled == CreatedByUs)
└─ rm unit file (se unit_file == CreatedByUs)
└─ daemon-reload ← systemd dimentica l'unit rimossa
Fermare e disabilitare prima di rimuovere il file evita che systemd resti con riferimenti a un'unit
sparita. Il daemon-reload finale chiude il ciclo. Ogni passo è best-effort e idempotente.
L'unit è renderizzato dal template embedded sostituendo i {{VAR}} (versione, utente, install_dir,
repo/venv). Validazione: nessun placeholder {{...}} residuo.
L'hardening del template è preservato — non va impoverito:
| Direttiva | Valore |
|---|---|
User / Group
|
odoo (servizio non root) |
NoNewPrivileges |
true |
PrivateTmp |
true |
RuntimeDirectory / RuntimeDirectoryMode
|
odoo / 0750
|
Requires |
postgresql.service |
Restart |
on-failure |
StartLimitIntervalSec / StartLimitBurst
|
burst protection |
Installazione del file: temp privato → move → chmod 644 → chown root:root. Verifica finale
is-active con hint journalctl -u odoo<N> in caso di mancato avvio.
-
Nessuno stato condiviso: i tre PreState sono locali allo step. A differenza di
1.13 InitializeOdooDatabase, qui non serve alcun canale
step→step — nessun nuovo
Arc<Atomic…>nel Context. Tenere lo stato condiviso sotto controllo è ciò che mantiene il rollback tracciabile. -
render_unitevalidate_unitsono funzioni pure, testate a parte. - Test: tutto-assente (installa; undo nell'ordine
stop→disable→rm→reloadverificato), D4 su active (già attivo → restart in run, nessuno stop in undo), D4 su enabled (già enabled → nessun disable), start fallito → errore, rendering (nessun residuo, hardening presente).
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: