Skip to content

v2.2.0 — Ctrl-C che annulla, ripresa delle installazioni interrotte, e un rollback che mantiene la promessa

Choose a tag to compare

@github-actions github-actions released this 02 Aug 18:06
· 83 commits to main since this release

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/odoo sparisce davvero dopo un rollback. Prima restava, sempre.

Se aggiorni dalla 2.1.0, leggi questo

Due cambiamenti possono rompere uno script esistente:

  1. 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.
  2. Rilanciare l'installer su un'istanza già installata ora fallisce, con un messaggio che indica
    rollback o --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à un apt lascerebbe 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/odoo viene 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 .deb con 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 odoo esiste già, la home appena creata gli viene consegnata subito — prima
    l'installazione moriva tre step dopo con un mkdir: Permission denied che non diceva nulla.
  • Il control-script odoo viene 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-run non 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.