Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Rilasciato Upstart 1.0: init classico e upstart a confronto

Link copiato negli appunti

Nel suo blog, Scott James Remnant ha annunciato il rilascio di Upstart 1.0, uno tra i più famosi progetti tesi alla sostituzione del "vecchio" init con un concetto più moderno.

La versione 1.0 è direttamente derivata da Upstart 0.6 (utilizzato nell´ultima LTS di Ubuntu e in RHEL e compagne) e, correggendo un buon numero di bug, data l´importanza della numerazione, si presenta al mondo come progetto maturo.

Ma che cos´è esattamente init? E che cosa migliora Upstart?

In ogni classico sistema operativo basato su Linux, eseguiti i compiti di inizializzazione dell´hardware, di mounting, eccetera, il kernel lancia init, che si occupa, in user space, di lanciare tutti i servizi configurati per il runlevel in cui il sistema andrà a porsi. Un runlevel è un possibile stato del sistema. A seconda del runlevel il sistema compie determinate azioni.

Debian e Ubuntu, ad esempio, usano i seguenti runlevel:

  • 1 (modalità singolo utente, con / montata in sola lettura, per compiti di troubleshooting); ;
  • 2 a 5 (modalità multiutente: sono di fatto equivalenti);
  • 0 (arresta il sistema, = halt); ;
  • 6 (riavvia il sistema, = reboot).

Il procedimento di avvio viene controllato dal file /etc/inittab, il quale fa in modo che avvenga quanto segue.

Quando si entra in un runlevel tutti i file in /etc/rc.d/ vengono eseguiti. La prima lettera del nome determina il modo in cui lo script viene lanciato: quelli che iniziano con K (kill) vengono lanciati con l´argomento stop (lo script deve prevederlo). Quelli che iniziano per S (start) vengono lanciati con l´argomento start. I file vengono eseguiti in ordine alfabetico (i servizi gireranno quindi in background, "staccandosi" da init); per cui quelli stop vengono lanciati prima di quelli start e i numeri a due cifre che seguono K o S determinano l´ordine in cui vengono eseguiti.

I file in /etc/rc.d sono semplici collegamenti simbolici agli script in /etc/init.d/ (dove appunto saranno salvati i veri e propri script di lancio/arresto dei servizi).

Il comportamento visto è relativo al "SysV init" classico, ma, non da molto, le distribuzioni hanno iniziato ad introdurre variazioni sul tema.

La problematica più importante circa l´init classico risiede nella sua sequenzialità: gli script di avvio dei servizi vengono lanciati sequenzialmente e se uno di essi blocca i rimanenti, gli altri aspettano.

Se Debian 6 ha introdotto il concetto di dependency-based boot, Ubuntu utilizza appunto Upstart, il quale mira all´accelerazione del processo di boot utilizzando una logica diversa.

Upstart è orientato agli eventi e lavora utilizzando il concetto di job. I job file sono gli script di /etc/init, ma non c´è una sequenza specifica: ogni job specifica gli eventi ai quali fare da handler e, quando questi eventi occorrono, Upstart lancia tutti gli handler in parallelo.

Un evento basilare è chiaramente rappresentato da startup (lanciato dallo stesso Upstart all´avvio): tutti i job che devono essere lanciati allo startup conterranno il codice:

start on startup

Altro chiaro evento basilare è quello legato allo stop dei servizi.

Upstart è più flessibile dell´init classico (e del dependency-based boot init di Debian Squeeze, il quale essenzialmente si occupa solo di parallelizzare l´esecuzione degli script), in quanto lancia i servizi solo se effettivamente servono. Immaginiamo che un computer venga avviato senza scheda di rete: se init avvia comunque ogni servizio relativo alla rete, Upstart non lo fa fino a che non venga lanciato l´evento network up.

Per compatibilità col passato, Upstart è anche in grado di lanciare i canonici script di init.d/ non modificati.

Quando tutti gli script di avvio saranno aggiornati, Ubuntu non contemplerà più il concetto di runlevel.

Ti consigliamo anche