v2.2.0 — Ctrl-C che annulla, ripresa delle installazioni interrotte, e un rollback che mantiene la promessa
Il tema di questa release è una promessa sola: o l'installazione riesce, o il sistema torna
esattamente com'era. Erano diversi i punti in cui non veniva mantenuta — e nessuno di essi si
manifestava come un errore. Tutti chiusi, e verificati su macchina reale.
In breve
- Ctrl-C non uccide più l'installer: l'installazione si annulla da sé e il sistema torna pulito,
senza dover lanciare nulla. - Un'installazione interrotta si riprende da dove si era fermata, senza perdere traccia di cosa
era già stato creato. /opt/odoosparisce davvero dopo un rollback. Prima restava, sempre.
Se aggiorni dalla 2.1.0, leggi questo
Due cambiamenti possono rompere uno script esistente:
- Il log si è spostato: ora è
/var/log/odoo-installer.log(era/opt/odoo/.installer.log).
In compenso esiste anche alla prima installazione, che è quando serve davvero. - Rilanciare l'installer su un'istanza già installata ora fallisce, con un messaggio che indica
rollbacko--force. Prima "riusciva" — ed era il difetto: sovrascriveva il manifesto di
disinstallazione e rendeva l'istanza non più rimovibile.
Cambiati anche i percorsi di lock (/run/odoo-installer.lock) e manifesto
(/var/lib/odoo-installer/state.json). Le istanze installate con la 2.1.0 restano
disinstallabili: il percorso storico continua a essere letto.
--enable-ssl si chiama ora --open-https-port, perché è ciò che fa — apre la 443 sul firewall,
non configura TLS. Il vecchio nome e la chiave .env NGINX_ENABLE_SSL continuano a funzionare.
Novità
- Gestione di Ctrl-C e SIGTERM. L'interruzione ha effetto fra uno step e il successivo: quello in
corso viene portato a termine, perché fermare a metà unaptlascerebbe qualcosa di peggio. Un
secondo Ctrl-C esce subito (codice 130) e lì il rollback resta a carico tuo. - Ripresa delle installazioni interrotte. Gli step già eseguiti non vengono rifatti, e resta
registrato che quegli artefatti sono nostri — è ciò che permette di rimuoverli anche mesi dopo.
Serve rilanciare con gli stessi parametri: con un database diverso l'installer si ferma e dice
quale campo non coincide. --force: reinstalla sopra un'istanza esistente. Il manifesto precedente viene archiviato,
mai cancellato.- Avviso sulle release non testate. Su Ubuntu > 24.04 o Debian > 12 l'installazione prosegue, ma
ti dice che quella release non è fra quelle su cui giriamo la CI.
Correzioni
Rollback e disinstallazione
/opt/odooviene finalmente rimossa: lock, log e manifesto non vivono più dentro il perimetro che
il rollback deve ripulire.- Il manifesto non viene mai sovrascritto in silenzio.
- Dopo un fallimento, rilanciare funziona: il manifesto dice cosa c'è ancora sul sistema, non cosa
è stato fatto. Prima gli step già annullati venivano saltati al rilancio, e l'installazione
proseguiva dando per esistenti l'utente, la directory e il database appena rimossi. - Il file di stato deve appartenere a root e descrivere il perimetro atteso, o il rollback si rifiuta
di agire. - La barra di progresso avanza anche sugli step che non si possono annullare.
Sicurezza
- Nessun file temporaneo con nome prevedibile scritto da root: i requirements di pip nascono dentro
il virtualenv, il tarball e il.debcon nome casuale e creazione fail-closed. - L'unit systemd ha un hardening reale (
ProtectSystem,ProtectHome,PrivateDevices,
RestrictAddressFamilies…) al posto di una direttiva deprecata dal 2016 e ignorata.
Nginx
- Il default site viene ripristinato com'era, non com'è di solito: un symlink torna al suo target
originale, e un file regolare non viene più cancellato ma messo da parte e rimesso a posto. - La porta 80 viene aperta anche su una macchina che ha già una regola
8080/tcp. - Si può installare su una macchina dove Nginx sta già servendo: la 80 occupata da Nginx non è più
trattata come un conflitto. - I log del vhost portano la versione nel nome: due istanze non si scrivono più addosso.
Installazioni su macchine non vergini
- Se l'utente
odooesiste già, la home appena creata gli viene consegnata subito — prima
l'installazione moriva tre step dopo con unmkdir: Permission deniedche non diceva nulla. - Il control-script
odooviene aggiornato: reinstallando una versione diversa non pilota più il
servizio vecchio. - Su una distribuzione più recente di quelle note, il pacchetto wkhtmltopdf di ripiego segue la
famiglia dell'OS: una Debian ignota non riceve più un pacchetto Ubuntu.
Interfaccia
- La risposta ai prompt non finisce più su una riga diversa dalla domanda.
--dry-runnon può più restare appeso a una richiesta di password sudo, e dice quando il piano
sarà incompleto perché eseguito senza privilegi.
Verifica
312 test automatici, e una CI di integrazione che installa e disinstalla davvero su sei scenari:
Ubuntu 22.04 e 24.04, Debian 11 e 12 in container, con Nginx (nelle due configurazioni possibili del
default site), su una macchina con l'utente odoo già presente, e con un SIGINT reale mandato a
metà installazione.
Rispetto alla versione originale ho applicato le due correzioni che ti avevo segnalato: il conteggio dei test (308 → 312) e la riga su A-R8-1 sotto
«Rollback e disinstallazione». Il resto è identico.