Una esigenza un po’ da nerd che nasce dalla necessità di minimizzare, in numero, le interruzioni dei servizi che stiamo esportando. Poniamoci nelle condizioni di dover aggiornare un servizio e successivamente effettuare un reboot perchè abbiamo anche patchato il kernel. In queste intricate condizioni non avremmo modo di interrompere il servizio meno di 2 volte, sia che decidessimo di effettuare l’aggiornamento prima oppure dopo il reboot.
Però, se stiamo usando un sistema basato su systemd abbiamo la possibilità di sfruttare le sue potenti peculiarità:
La strategia è semplice quanto geniale: consiste nell’unire sinergicamente le funzionalità:
Override
si tratta di una tecnica che consente la modifica della configurazione di default di un servizio
–runtime
Si tratta di un particolare attributo che rende temporaneo (fino al prossimo reboot) l’oggetto della modifica
ExecCondition
Si tratta di una funzionalità che pone sotto condizione l’esecuzione del servizio.
Unendo insieme queste funzionalità saremo in grado di applicare temporaneamente una modifica al servizio che gli impedirà di ripartire, anche a fronte di un aggiornamento apt.
Vediamo insieme un esempio pratico applicando la strategia descritta al servizio tor.service.
systemctl edit --runtime tor.service
In seguito a questo comando si aprirà un editor tramite il quale potremo applicare la modifica temporanea che ci serve, aggiungendo le seguenti righe che poi saranno sovrascritte alla configurazione di default:
[Service]
ExecCondition=/bin/false
Oppure, in alternativa, con un effetto forse ancora migliore:
systemctl mask --runtime tor.service
Riassumendo:
abbiamo temporaneamente aggiunto alla configurazione del nostro servizio una condizione che gli impedirà di essere eseguito fino al prossimo reboot, quindi siamo ora liberi di applicare l’aggiornamento che coinvolge il servizio senza temere che per questo venga riavviato: potremo contare dopo il reboot, quando cioè la configurazione temporanea che ne impedisce l’esecuzione sarà stata rimossa che il servizio sarà finalmente eseguito nella modalità aggiornata.