Salta al contenuto principale

Orvieto Linux User Group | Promozione software libero a Orvieto

Target di systemd: guida completa a multi-user.target, graphical.target e boot

Chi utilizza Linux da diversi anni probabilmente ricorderà i runlevel di SysVinit, che definivano i diversi stati di funzionamento del sistema: modalità multiutente, modalità di emergenza, ambiente grafico e così via.

Con l’introduzione di systemd questo concetto è stato sostituito dai Target, un meccanismo molto più flessibile che permette di organizzare il processo di avvio attraverso gruppi di Unit correlate.

Comprendere il funzionamento dei Target aiuta non solo a capire come si avvia una distribuzione Linux moderna, ma anche a personalizzare il comportamento del sistema in base alle proprie esigenze.


Cosa imparerai

Al termine di questa guida saprai:

  • cosa sono i Target di systemd;
  • quale ruolo svolgono durante il boot;
  • quali sono i Target principali;
  • come verificare e modificare il Target predefinito;
  • quale relazione esiste con i vecchi runlevel.

Cosa sono i Target?

Un Target è una particolare Unit di systemd, riconoscibile dall’estensione .target, che ha il compito di raggruppare altre Unit.

A differenza di un file .service, un Target non esegue direttamente un programma. Piuttosto, rappresenta uno stato del sistema.

Quando viene raggiunto un determinato Target, systemd avvia tutte le Unit necessarie per portare il sistema in quello stato operativo.

Ad esempio:

  • inizializzazione del sistema;
  • modalità multiutente;
  • ambiente grafico;
  • modalità di ripristino;
  • modalità di emergenza.

Possiamo immaginare un Target come un punto di arrivo: systemd lavora fino a raggiungerlo, attivando nel frattempo tutti i servizi richiesti.


Dai runlevel ai Target

Nei sistemi basati su SysVinit esistevano sette runlevel numerati da 0 a 6.

Con systemd il concetto è stato mantenuto, ma reso più descrittivo.

RunlevelTarget equivalente
0poweroff.target
1rescue.target
3multi-user.target
5graphical.target
6reboot.target

Questa corrispondenza facilita la migrazione per chi proviene da sistemi Linux meno recenti.


I Target più importanti

Nella pratica quotidiana sono pochi i Target che si incontrano più spesso.

multi-user.target

È il Target tipico di un server Linux.

Il sistema avvia i servizi di rete e consente l’accesso multiutente, ma non carica un ambiente grafico.


graphical.target

È il Target utilizzato dalla maggior parte dei computer desktop.

Include tutto ciò che viene avviato da multi-user.target e aggiunge il display manager e l’interfaccia grafica.


rescue.target

Avvia il sistema in modalità di recupero con un insieme minimo di servizi.

È utile per attività di manutenzione o per risolvere problemi di configurazione.


emergency.target

Rappresenta il livello minimo di avvio.

Non vengono caricati quasi tutti i servizi e viene fornita una shell di emergenza per interventi critici sul sistema.


Come verificare il Target predefinito

Per conoscere quale Target viene utilizzato automaticamente all’avvio del sistema è sufficiente eseguire:

 
systemctl get-default
 

L’output sarà simile a:

 
graphical.target
 

oppure:

 
multi-user.target
 

Come modificare il Target predefinito

Per impostare il sistema in modalità server:

 
sudo systemctl set-default multi-user.target
 

Per ripristinare l’ambiente grafico:

 
sudo systemctl set-default graphical.target
 

La modifica diventerà effettiva dal successivo riavvio.


Quando può essere utile cambiare Target?

Nella maggior parte dei casi il Target predefinito non viene modificato.

Tuttavia, può risultare utile in diversi scenari:

  • trasformare un PC desktop in un server senza interfaccia grafica;
  • ridurre il consumo di risorse;
  • velocizzare il boot;
  • effettuare operazioni di manutenzione;
  • risolvere problemi legati all’ambiente grafico.

Errori comuni

Tra gli errori più frequenti troviamo:

  • confondere un Target con un servizio;
  • modificare il Target predefinito senza conoscere le conseguenze;
  • aspettarsi che un Target esegua direttamente un’applicazione;
  • non verificare il Target attualmente impostato.

Conclusioni

I Target rappresentano uno degli elementi fondamentali dell’architettura di systemd.

Grazie a essi è possibile descrivere gli stati operativi del sistema in modo molto più flessibile rispetto ai vecchi runlevel, semplificando la gestione dell’avvio e delle dipendenze tra le Unit.

Nel prossimo articolo scopriremo i Timer di systemd, uno strumento che permette di automatizzare attività periodiche e che, in molti casi, può sostituire il tradizionale cron.

LICENZA E CONDIZIONI D’USO

Questo How-to è rilasciato sotto licenza Creative Commons Attribution-NonCommercial 3.0 Italy

CONTATTI DELL’AUTORE

Marco Ciammella marco@orvietolinux.it

Orvieto Linux User Group info@orvietolinux.it