Systemd/it

systemd è un sostituto moderno per init SysV-style e per rc (run command) per sistemi Linux. In Gentoo è supportato come sistema di init alternativo.

Kernel
systemd fa uso di molte caratteristiche moderne di Linux. Alla data attuale il limite inferiore per la versione del kernel è la ebuild 2.6.39. Nelle versioni recenti di c'è un sistema semplice per selezionare le opzioni obbligatorie e opzionali per systemd (vedi Kernel/Configurazione per ulteriori dettagli):

Per configurare manualmente le opzioni del kernel (che è l'unica soluzione laddove non si utilizzi ), sono richieste o consigliate le seguenti opzioni di configurazione del kernel:

In un sistema UEFI si abilitino anche le seguenti:

Se il sistema sta utilizzando lo scheduler BFQ, gli autori di BFQ consigliano di abilitare "BFQ hierarchical scheduling support" sotto "Enable the block layer -> IO Schedulers".

Per una lista aggiornata, vedi la sezione "REQUISITI" nel file del progetto originale README

La directory
La directory è utilizzata sia da systemd sia da altre applicazioni come spazio di archiviazione temporaneo per dati durante l'esecuzione, come  file, socket e file di stato.

Il pacchetto systemd creerà da solo la directory. Tuttavia osserva che questa modifica comporterà automaticamente il mount della directory anche in OpenRC, e può provocare l'utilizzo della directory anche da parte di altri pacchetti software.

Il progetto supporta solo il file come link simbolico a. Non creare questo link causerà problemi descritti nei bugreport  e. In passato alcune utilitiy scrivevano informazioni (come le opzioni di mount) in e quindi si presupponeva che fosse un file normale. Oggi si presuppone che i programmi evitino questo problema. Tuttavia, prima di modificare il file per convertirlo in un link simbolico, controlla il bugreport per essere certo che il sistema non sia affetto da alcuna delle regressioni descritte.

Per creare il link simbolico, esegui:

Assicurati che /usr sia presente al boot
In una configurazione con separata, utilizza un initramfs per montare  prima di avviare systemd. Al momento questo significa utilizzare o  fintanto che il supporto per  non sia disponibile in. Trova il tempo per effettuare la migrazione:

Quando si utilizza dracut, si deve abilitare il modulo usrmount se non viene automaticamente abilitato per poter montare automaticamente.

Se si utilizza genkernel-next, prima di ricompilare il kernel, accertarsi di settare la variabile UDEV nel file di configurazione di a. In questo modo verrà inserito nell'initramfs:

Si veda La guida a Initramfs per ulteriori alternative.

Utilizzare LVM2 e initramfs
Se si utilizza sys-fs/lvm2 e il sistema viene avviato utilizzando una immagine initramfs, l'immagine initramfs deve essere creata utilizzando eseguendo il comando:

è  o uno degli altri targe di genkernel che implica la creazione di un'immagine initramfs. Per ulteriori informazioni, si veda l'output del comando :

Se è utilizzato LVM, deve essere avviato anche il demone, altrimenti systemd non sarà in grado di montare i volumi LVM. può essere abilitato tramite :

Installazione
Il pacchetto contiene udev. Una volta installato, potrà essere rimosso in quanto systemd fornisce.

Abilitare la USE flag  a livello globale (in ). La USE flag  dovrebbe essere disabilitata per evitare conflitti con il servizio. In alternativa è possibile passare ad un subprofilo con systemd per utilizzare USE flags predefinite più sicure, nel qual caso non è necessario modificare :

Da ultimo, si proceda all'aggiornamento del sistema con le nuove flag:

Se dovessero sorgere problemi di dipendenze (ad esempio che blocca ), la causa potrebbe essere la presenza nel file world di. Si può tentare di risolvere il problema, deselezionandolo:

Avviare il sistema con systemd
Per poter avviare systemd, si deve modificare l' utilizzato dall'eseguibile del kernel (o dall'immagine initramfs).

Le seguenti sottosezioni documentano come modificare l' in uno dei boot managers o nel kernel.

Grub Legacy (0.x)
L'argomento  deve essere aggiunto alla linea di comando del kernel. Un esempio estratto da è il seguente:

Se il sistema deve essere utilizzato con OpenRC, si utilizzi  invece di.

Grub 2
Se si utilizza, si aggiunga l'opzione init nella GRUB_CMDLINE_LINUX :

Se il file di configurazione di GRUB 2 è modificato a mano (solo per esperti), si aggiunga il parametro  al comando   o.

Se si utilizza una intrd generata con genkernel-next's initrd, si utilizzi  invece di.

Configurazione direttamente nel kernel
La configurazione di init può anche essere inserita direttamente nella configurazione del kernel. Si veda. Questa tecnica funziona sia per, sia per.

Impostare la password di root
A questo punto non ci si deve dimenticare di impostare la password di root. Nel caso in cui qualcosa andasse storto, systemd richiederà la password di root per passare in modalità manutenzione.

Configurazione post installazione
systemd supporta alcuni file di configurazione del sistema per impostare i dettagli del sistema di base.

Hostname
Per impostare il nome host, si crea/modifica  e semplicemente diventa disponibile il nome host impostato.

Quando il sistema viene avviato con systemd, è possibile utilizzare uno strumento chiamato per modificare  e. Per modificare il nome host, si esegua:

Si veda per ulteriori opzioni

Localizzazione
Solitamente, le localizzazioni dovrebbero venire correttamente migrate da OpenRc al momento di installazione di systemd. Quando necessario, la localizzazione dovrebbe essere impostata mediante come indicato nelle istruzioni del manuale Gentoo

Dopo che il sistema è stato avviato con systemd, verrà utilizzato per imposta la localizzazione e le mappe per la tastiera della console e di X11. Per modificare la localizzazione del sistema, eseguire il seguente comando:

Per modificare la keymap della console virtuale:

E da ultimo, per impostare la configurazione di X11:

Ove necessario, possono essere specificate sia la variante sia le opzioni:

Ora e data
Ora e data possono essere impostate utilizzando. Ciò consente agli utenti di impostare la sincronizzazione senza doversi appoggiare a o ad altri programmi diversi dall'implementazione diretta di systemd.

Per imparare ad utilizzare si esegua il comando:

Caricamento automatico dei moduli
Il caricamento automatico dei moduli viene configurato tramite un file, o una directory di files. I file di configurazione sono localizzati in. All'avvio viene caricato ogni file contenete una lista di moduli. Il formato dei file è una lista di moduli separati da un carattere di newline e può avere qualunque nome purché termini con. l modulo che deve essere caricato può essere separato da un programma, sevizio o un qualunque modo risponda alle proprie preferenze personali. Nel seguente listato, un esempio per

systemd-networkd
systemd-networkd è utile per semplici configurazioni di reti cablate. Per impostazione predefinita è disabilitato.

Per configurare systemd-networkd, si crei un file in. Si veda systemd.network(5) per informazioni. Una semplice configurazione DHCP è fornita nel seguente esempio:

Si noti che systemd-networkd non aggiorna per impostazione predefinita. Per consentire a systemd di gestire le impostazioni DNS, si sostituisca con un link simbolico e si avvi systemd-resolved.

NetworkManager
Frequentemente viene utilizzato NetworkManager per configurare le impostazioni di rete. A tal fine, si esegua semplicemente il seguente comando se si utilizza un ambiente desktop con supporto a X11:

Se non è questo il calo e le reti devono essere configurate tramite una console, si legga il documento nmcli, oppure si avvii un processo di configurazione guidato tramite :

nmtui è un'interfacca curses che guiderà l'utente nel processo di configurazione tramite linea di comando.

Gestione dei file di log
systemd ha un suo modo per la gestione dei file di log e non necessita di appoggiardi ad alcun sistema esterno di log (tipo o ).I messaggi possono essere letti tramite. systemd può anche essere configurato per utilizzare uno strumento esterno per la gestione dei log. Si veda per imparare a configurare journald secondo le proprie esigenze personali.

Alcune opzioni comuni per :

Per maggiori informazioni e le ulteriori opzioni, si veda.

/tmp adesso è posizionata in tmpfs
A meno che non sia esplicitamente indicato in un altro filesystem da montare in , systemd monterà  come tmpfs. Ciò significa che la directory verrà svuotata ad ogni avvio e le sue dimensioni saranno limitate al 50% della memoria RAM di sistema. Per capire perché questo è il comportamento voluto e come modificarlo, si veda API File Systems.

Configurare la verbosità del processo di avvio
Quando si passa a systemd, gli utenti notano differenze nella verbosità del processo di avvio:


 * L'opzione di avvio  non solo influenza l'output del kernel, ma anche quella dello stesso systemd. Per questa ragione, quando si sta installando sistemd, è necessario eliminare tale opzione per leggere in maniera più facile eventuali errori rilevati nella fase di avvio. Dopo sarà possibile ritornare ad un avvio più silenzioso (e veloce).
 * Anche se è impostat l'opzione di avvio, systemd può comunque essere configurato per mostrare i suoi messaggi di stato, mediante l'opzione di avvio.
 * Quando non si utilizza l'opzione di avvio, alcuni messaggi possono sovrascrivere le console. Ciò è provocato dalla configurazione del kernel (si veda  e si cerchi ). Per modificare questo comportamento trasmetta il parametro di avvio   al kernel (e si aggiorni il valore a secondo delle proprie preferenze, ad esempio fissandolo ad un valore inferiore, ad esempio: 1).

Servizi
Ad un certo punto il sistema dovrà essere riavviato per poter avere systemd in esecuzione (in modalità sistema). CI si assicuri di aver letto tutto questo documento erp essere sicuri che systemd sia configurato nella maniera il più completa possibile prima di riavviare. Si noti che funziona anche con systemd non avviato. Si completi la configurazione dei servizi (abilitando e avviando i servizi) dopo essersi loggati sul sistema con systemd avviato.

I servizi di OpenRC
Benché l'intenzione originaria di systemd fosse quella di supportare tutti i vecchi script init.d, tale supporto non si adatta bene ad un sistema di avvio dei servizi basato su delle dipendenze come OpenRC, e, per tale motivo, in Gentoo questo supporto è completamente disabilitato. OpenRC fornisce controlli ulteriori per assicurare che gli script init.d non vengano eseguiti quanto non è stato utilizzato OpenRC per avviare il sistema (altrimenti i risultati non sarebbero predicibili).

Listing available services
All available service units can be listed using the  argument of :

The following file suffixes are of interest:

Alternatively the tool can be used to list all services (including implicit ones):

And finally check for services that failed to start:

Enabling, disabling, starting, and stopping services
The usual way of enabling a service is using the following command:

Services can be disabled likewise:

These commands enable services using their default name in default target (both specified in "Install" section of the service file). However, sometimes services either don't provide that information or users prefer to have another name/target.

Note that these commands only enable or disable the system to be started on a next boot; to start the service right now, use:

Services can be stopped likewise:

Installing custom unit files
Custom unit files can be placed in, where they will be recognized after running :

is reserved for service files installed by the package manager.

Customizing unit files
When only minor changes to a unit are needed, there's no need to create a full copy of the original unit file in. Overriding settings in a package management provided unit can be achieved by drop-in files in a directory named after the original unit (e.g. ) in.

A reload of systemd is needed to inform it of the changes:

Then the service needs to be restarted to apply the changes:

Verify that the changed property was applied to the service:

Enabling a service under a custom name
When the name provided by "Alias" in the unit's "[Install]" section does not meet the expectations and providing a permanent new value for this through a customization is not desired, a symlink can be created manually in. The name of the directory can either specify a target or another service which will depend on the new one.

For example, to install as  in the :

To disable the service, just remove the symlink:

Native services
Some of Gentoo packages already install systemd unit files. For these services, it is enough to enable them. A quick summary of packages installing unit files can be seen on systemd eclass users list.

The following table lists systemd services matching OpenRC ones:

Timer services
Since version 197 systemd supports timers, making cron unnecessary on a systemd system. Since version 212 persistent services are supported, replacing even anacron. Persistent timers are run at the next opportunity if the system was powered down when the timer was scheduled.

The following is an example on how to make a simple timer that runs in the context of a user. It will even run if the user is not logged in. Every timed service needs a timer and a service file that is activated by the timer as follows:

Firstly, tell systemd to rescan the service files:

It is possible to trigger the backup manually by running the following command:

Start and stop the timer manually as follows:

Finally, to activate the timer at every system start, run:

To check the last results of running the service:

Emailing failures
If a timed service runs and fails an e-mail can be send out to inform the user or administrator. This is possible with the "OnFailure" stanza which specifies what should happen if a service fails. A failure is detected by a non-zero return code of the invoked script.

For that change the script as follows:

This requires to have the service installed, which can be found in kylemanna's systemd-utils repository.

Replacing cron
The above timer and service files can also be added to to make them available system-wide. The install section should then say  to enable the service at system start.

However, cron also runs the scripts in and other locations. Several packages place scripts there that they expect to be run daily. This behavior can be emulated with systemd by installing. Then activate the new cron replacement with the following commands:

Troubleshooting

 * Upstream debugging guide
 * Upstream debugging guide
 * Upstream debugging guide

/dev/kmsg buffer overrun, some messages lost

 * Problem: When booting the system displays an infinite loop of . The login screen to console never appears since the system never gets to that point in the boot process.


 * Solution: Most of the time this issue is caused when the CONFIG_POWER_SUPPLY_DEBUG option is enabled in the kernel. The current workaround is to disable this option in the kernel, then recompile, install, and boot the new kernel. The solution can also be found in this thread on the Gentoo forums. According to one user one the forum, this issue was also seen when using I2C EEPROM on an embedded system . The solution in this case was to disable the CONFIG_I2C_DEBUG_CORE kernel option.

Graphical sessions opened in random places
By default systemd only launches a process when it's going to be used. This causes some display managers (like GDM) to use the remaining TTYs for opening graphical sessions on demand, which can result in having consoles and graphical sessions placed randomly depending on the order they were used.

To stick with a more "classical" behavior (i.e, consoles placed from to  and graphical sessions using the remaining TTYs) force it to always launch  on those:

lvm
When switching from OpenRC to systemd and lvm is needed to properly mount the system volumes, activate the lvm service:

While it might not be needed for activation of the root volume (if lvm is integrated into the initramfs) it might not work for other lvm volumes, unless the service is activated.

systemd-bootchart
As systemd-bootchart attempts to start, reconfigure it to invoke systemd instead:

The result of the bootchart is a report in SVG format located in.

syslog-ng conflicts with systemd
systemd creates as datagram socket  so syslog-ng needs to be told to read from a unix-dgram instead of a unix-stream as otherwise syslog-ng would be using a "wrong" stream:

syslog-ng source for systemd
There is no need to add  to the  config file. It will cause to fail (at least on version syslog-ng-3.7.2). Update the  line mentioned in the syslog-ng article as follows:

sys-fs/cryptsetup configuration
systemd does not seem to respect (see ) so it needs to be configured through the  file:

Based on the system's file, a new service file might need to be created. To do this, enable the  USE flag for. It will install. Executing it will create a service file in, which can now be copied to , adjusted manually and added to the desired runlevel.

Check for units that failed to start
Check for units that failed to start with:

Enable Debug Mode
To get more informations set the following in :

Or enable the debug-shell, that opens a terminal at tty9. This helps to debug services during the boot process.

e4rat usage
Please remember to edit setting 'init' to, otherwise it will keep booting OpenRC.

GRSecurity hardening
With grsecurity enabled, systemd-networkd might log the following error:

The error raises due to systemd-networkd working under a non-root user with grsecurity refusing access to the complete structure for such users. To disable this option, disable the CONFIG_GRKERNSEC_SYSFS_RESTRICT kernel option.

logind may also have subtle permission issues with CONFIG_GRKERNSEC_PROC active, see.

shutdown -rF does not force fsck
The service is responsible of running  when needed. It doesn't honor 's  option, but instead honors the following kernel boot parameters.

External resources

 * FAQ
 * Tips and tricks