Canonical ha promesso una migliore velocità di avvio in Ubuntu 18.04.
Utilizzando le funzionalità di Systemd, i colli di bottiglia saranno identificati e affrontati per avviare Bionic il più rapidamente possibile.
Systemd viene generalmente utilizzato come sistema di init, ossia il processo chiamato dal kernel Linux per inizializzare l'user space durante lo startup, nonché il padre di tutti i processi nati dopo di lui.
Va a rimpiazzare l'init "classico", ossia quello discendente dallo Unix System V (SysVinit).
Nacque originariamente per Red Hat Linux e Debian. È un software libero distribuito sotto licenza GNU LGPL 2.1 o successive.
Uno degli obiettivi principali di systemd è unificare la configurazione base dei servizi delle principali distribuzioni.
Systemd ha generato numerose controversie tra le comunità del software libero. Le principali critiche riguardano la sua architettura, che violerebbe la filosofia Unix (do one thing and do it well) andando a creare una rete di dipendenze strette tra le sue componenti, ossia un insieme di file binari che hanno largamente superato le funzionalità di base di un init system.
Secondo queste critiche, un init system non dovrebbe infatti essere responsabile del power management, dei mount point, delle schedulazioni, della crittografia, di syslog, della rete, e molto altro - funzionalità implementate in systemd.
Per gli amministratori di sistema.
Gli amministratori di sistema possono visitare questa pagina per sapere come usare systemctl che sostituisce il vecchio flusso di lavoro in SysVinit. Da notare che i comandi service
e chkconfig
continueranno a funzionare come previsto anche in systemd.
Leggi anche: Linux vs Systemd, il demone si sveglia.
systemctl
: usato per esaminare e controllare lo stato di systemd e del service manager
systemd-cgls
: ricorsivamente mostra il contenuto della gerarchia del control group selezionato nell'albero
systemadm
: una interfaccia grafica per systemd e per il service manager. Fa parte del pacchetto systemd-gtk. Si tratta di una versione giovane ancora in lavorazione. Non usarla se non si è sviluppatori.
|
Architettura Systemd utilizzata dal sistema operativo mobile basato su Tizen Linux |
Boot Kernel Command Line.
All'avvìo systemd attiva (come predefinito), l'unità target default.target il cui compito è quello di attivare i servizi ed altre unità a seconda delle dipendenze richieste.
Per gestire l'unità da attivare, systemd analizza gli argomenti della propria linea di comando kernel attraverso l'opzione systemd.unit=
. Quest'ultima può essere usata per avvii temporanei differenti. I classici run-level sono rimpiazzati come di seguito:
systemd.unit=rescue.target
è uno speciale target per impostare un sistema base e la rescue shell (similli al run-level 1); systemd.unit=emergency.target
è molto simile al init=/bin/sh
ma con l'opzione d'avvìo per l'intero sistema; systemd.unit=multi-user.target
per impostare un sistema multi utente non grafico; systemd.unit=graphical.target
per impostare il login grafico.
Dettagli a riguardo si trovano alla pagina man systemd.special
.
Tutti i file System V init sono stati convertiti in servizi systemd o equivalenti ?
Quale strumento gestisce systemd ?
systemctl è lo strumento principale da usare. Combina le fuzionalità dei servizi e di chkconfig per abilitarli/disabilitarli permanentemente o solo per la connessione corrente.
Systemctl.
Far riferimento a man systemctl per maggiori dettagli. systemd-cgls lista i processi avviati con un formato ad albero. Può mostrare ricorsivamente il contenuto di ogni control group.
|
Systemd in Ubuntu con Unity |
Come avviare/fermare o abilitare/disabilitare i servizi ?
Attiva un servizio immediatamente:
systemctl start foo.service
Disattiva un servizio immediatamente:
systemctl stop foo.service
systemctl restart foo.service
Mostra lo stato di un servizio o se è avviato o meno:
systemctl status foo.service
Abilita un servizio per essere inizializzato all'avvìo:
systemctl enable foo.service
Disabilita un servizio per non essere inizializzato all'avvìo:
systemctl disable foo.service
Controlla se un servizio è già abilitato o meno:
systemctl is-enabled foo.service; echo $?
0 indica che è abilitato. 1 indica che è disabilitato. In Fedora 17, in aggiunta al codice di ritorno, "enabled" o "disabled" saranno stampati in output.
Far riferimento a man systemctl per maggiori dettagli.
Come si cambiano i run-level ?
systemd ha il concetto di target che è un rimpiazzo più flessibile rispetto ai runlevel in sysvinit.
Run-level3 è emulato dal multi-user.target. Run-level5 è emulato dal graphical.target. runlevel3.target è un link simbolico al multi-user.target e runlevel5.target è un link simbolico al graphical.target.
Si cambia al 'runlevel 3' con
systemctl isolate multi-user.target (oppure) systemctl isolate runlevel3.target
Si cambia al 'runlevel 5' con
systemctl isolate graphical.target (oppure) systemctl isolate runlevel5.target
Come si cambia il run-level predefinto?
I symlink possono essere ancora usati anche se ormai resi obsoleti, data l'introduzione di un comando integrato per impostare il target predefinito.
systemctl enable graphical.target --force
systemd può anche usare i symlink per puntare al runlevel predefinito. Bisogna cancellare il collegamento simbolico esistente prima di crearne uno nuovo
rm /etc/systemd/system/default.target
Cambio al runlevel 3 come predefinito
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
Cambio al runlevel 5 come predefinito
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
systemd non usa il file /etc/inittab.
Come si controlla il run-level corrente?
Il comando runlevel funziona ancora con systemd. E' possibile continuare ad usarlo comunque, emulandolo attraverso i 'targets' anche contemporaneamente.
systemctl list-units --type=target
|
Systemd in Ubuntu |
Come spegnere la macchina ?
Altre possibilità sono: halt -p
, init 0
, shutdown -P now
Da notare che halt
è usato per far funzionare lo stesso poweroff
nelle versioni precedenti di Fedora, ma systemd li distingue, così halt
senza parametri ora fa esattamente quello che dice - semplicemente ferma il sistema senza spegnere.
Il comando service funziona con systemd ?
Sì. E' stato modificato per richiamare systemctl automaticamente quando tratta i file systemd service. Così entrambi questi comandi fanno la stessa cosa
service NetworkManager stop
systemctl stop NetworkManager.service
Il comando chkconfig funziona con systemd?
Sì, per attivare/spegnere i servizi, c'é compatibilità per entrambi i metodi. chkconfig è stato modificato per richiamare systemctl quando si tratta di file systemd service. Inoltre systemctl richiama automaticamente chkconfig quando tratta i tradizionali file sysv init.
Così i seguenti comandi fanno la stessa cosa
chkconfig NetworkManager off
systemctl disable NetworkManager.service
chkconfig --list non lista i servizi systemd, ma solo quelli Sys V. Il suo output fornisce ulteriori informazioni.
system-config-services funziona con systemd?
La versione di system-config-services a partire da Fedora 15 può funzianare per i file systemd service. Se si hanno problemi, creare un bug report.
Come si cambia il numero di getty predefiniti avviati ?
Per aggiungere un altro getty:
Posizionare semplicemente un altro symlink per instanziare un getty nella directory getty.target.wants/ :
ln -sf /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty9.service
systemctl daemon-reload
systemctl start getty@tty9.service
Rimuovere il symlink nella directory getty.target.wants/ :
rm /etc/systemd/system/getty.target.wants/getty@tty5.service /etc/systemd/system/getty.target.wants/getty@tty6.service
systemctl daemon-reload
systemctl stop getty@tty5.service getty@tty6.service
systemd non usa il file /etc/inittab.
Come impostare un login automatico su un virtual console terminal?
# cp /lib/systemd/system/getty@.service \
/etc/systemd/system/autologin@.service
# ln -s /etc/systemd/system/autologin@.service \
/etc/systemd/system/getty.target.wants/getty@tty8.service
editare ExecStart, Restart e Alias values, come questo:
...
ExecStart=-/sbin/mingetty --autologin USERNAME %I
Restart=no
...
Alias=getty.target.wants/getty@tty8.service
riavviare finalmente il demone ed avviare il servizio:
systemctl daemon-reload
systemctl start getty@tty8.service
Da notare che se si esce dalla sessione tty8, è possibile usarlo fino al riavvio successivo o fino all'avvìo manuale da systemctl, a meno che non si impone Restart come ‘always’; è raccomandato comunque evitarlo per motivi di sicurezza.
Come personalizzare un file unit o aggiungerne uno?
I file unit in /etc/systemd/system hanno precedenza sugli unit in /lib/systemd/system. Copiarli dal secondo al primo e personalizzarli a piacimento.
Se una linea inizia con .include
seguita da un nome di file, lo stesso file verrà analizzato. Assicurarsi che abbia un'appropriata sezione headers prima di qualsiasi direttiva.
Si dovrebbe usare .include
invece di copiare l'intero unit file da /lib/systemd/system a /etc/systemd/system se possibile. Tutto ciò consentirà di aggiornare correttamente le direttive invariate durante i futuri aggiornamenti dei pacchetti.
Prestare attenzione quando si usa .include
insieme a direttive che possono essere definite più volte (come EnvironmentFile=
); poiché si possono solo aggiungerne delle nuove, senza rimuovere quelle già definite. Meglio copiare l'intero file da /lib/systemd/system a /etc/systemd/system in questo caso.
Se volessimo ad esempio usare un server lighttpd e volessimo abbassare il suo valore niceness. Si deve aggiungere Nice=-5
al file lighttpd.service. é possibile farlo o copiando l'intero file /lib/systemd/system/lighttpd.service in /etc/systemd/system/lighttpd.service o creando il seguente file in /etc/systemd/system/lighttpd.service:
.include /lib/systemd/system/lighttpd.service
[Service]
Nice=-5
Non dimenticarsi di riavviare il demone utilizzando systemctl daemon-reload
dopo la modifica del file.
Quando si modifica un file unit che ha un symlink che punta a questa unit come fa display-manager.service -> prefdm.service, lo stesso symlink dove essere copiato al posto dell'attuale unit come il display-manager.service dev'essere copiato nella directory /etc/systemd/system oppure una nuova unit creata con .includes che porta questo nome.
systemd ha una implementazione readahead incorporata non abilitata negli upgrades.
Dovrebbe migliorare la velocità di avvio, ma può variare a seconda dell'hardware. Per abilitarla:
systemctl enable systemd-readahead-collect.service
systemctl enable systemd-readahead-replay.service
Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog
Ottimo articolo.
RispondiEliminaGrazie dal tuo commento.
EliminaMa in italiano "aumentare la velocità di avvio" significa il contrario di quello che forse volevi dimostrare
RispondiEliminaSecondo Canonical le nuove funzionalità di Systemd dovrebbero essere una soluzione. E' a dir il vero per quanto riguarda il mio PC funziona alla grande.
Elimina