Differences between revisions 1 and 2
Revision 1 as of 2019-03-28 12:25:24
Size: 17163
Comment: first Italian partly translated version. In sync with English v.277
Revision 2 as of 2019-03-29 13:47:48
Size: 18816
Comment: first complete IT translation - English master v. 278
Deletions are marked like this. Additions are marked like this.
Line 26: Line 26:
I '''target''' sono gruppi di unità. I target richiamano unità per mettere insieme il are groups of units. Targets call units to put the system together. For instance, graphical.target calls all units that are necessary to start a workstation with graphical user interface. Targets can build on top of another or depend on other targets. At boot time, systemd activates the target default.target which is an alias for another target such as graphical.target.

Systemd creates and manages the '''sockets''' used for communication between system components. For instance, it first creates the socket /dev/log and then starts the syslog daemon. This approach has two advantages: Firstly, processes communicating with syslog via /dev/log can be started in parallel. Secondly, crashed services can be restarted without processes that communicate via sockets with them losing their connection. The kernel will buffer the communication while the process restarts.

Please see the [[https://www.freedesktop.org/wiki/Software/systemd|upstream systemd page]] for more information.


== Basic usage ==
systemctl is the main tool used to introspect and control the state of the "systemd" system and service manager. You can use systemctl for instance to enable/disable services permanently or only for the current session. Refer to the [[DebianMan:1/systemctl|systemctl(1)]] manpage for more details.


=== Getting information on system status ===
Show system status:
I '''target''' sono gruppi di unità. I target richiamano unità per mettere insieme il sistema. graphical.target, per esempio, chiama tutte le unità necessarie per avviare una postazione di laoro con un'interfaccia utente grafica. I target possono costruire uno sopra l'altro oppure dipendere da altri target. All'avvio systemd attiva il target default.target che è un alias per un altro target, come graphical.target.

systemd crea e gestisce i '''socket''' usati per la comunicazione tra i componenti del sistema. Per esempio prima crea il socket /dev/log e poi avvia il demone syslog. Questo approccio ha due vantaggi: in primo luogo i processi che comunicano con syslog attraverso /dev/log possono essere avviati in parallelo. Poi i servizi che vanno crash possono essere riavviati senza che i processi che comunicano con essi attraverso socket perdano la loro connessione. Il kernel tiene un buffer della comunicazione mentre il processo si riavvia.

Per maggiori informazioni vedere la [[https://www.freedesktop.org/wiki/Software/systemd|pagina originale di systemd]].

== Uso di base ==
systemctl è lo strumento principale utilizzato per l'introspezione e il controllo dello stato del gestore di sistema e servizi "systemd". Si può, ad esempio, usare systemctl per abilitare o disabilitare servizi in modo permanente o solo per la sessione corrente. Per maggiori dettagli fare riferimento alla pagina di manuale [[DebianMan:1/systemctl|systemctl(1)]].


=== Ottenere informazioni sullo stato del sistema ===
Visualizzare lo stato del sistema:
Line 43: Line 42:
List failed units: Elencare le unità che hanno fallito:
Line 48: Line 47:
List installed unit files: Elencare i file di unità installati:
Line 53: Line 52:
=== Managing services ===
List all running services:
=== Gestire servizi ===
Elencare tuti i servizi in esecuzione:
Line 59: Line 58:
Activates the service "example1" immediately:
{{{
# systemctl start example1
}}}

Deactivates the service "example1" immediately:
{{{
# systemctl stop example1
}}}

Restarts the service "example1" immediately:
{{{
# systemctl restart example1
}}}

Shows status of the service "example1":
{{{
# systemctl status example1
}}}

Enables "example1" to be started on bootup:
{{{
# systemctl enable example1
}}}

Disables "example1" to not start during bootup:
{{{
# systemctl disable example1
}}}

=== Creating or altering services ===
Units are defined by individual configuration files, called '''unit files'''. The type of the unit is recognized by the file name suffix, .mount in case of a mount point. Unit files provided by Debian are located in the /lib/systemd/system directory. If an identically named local unit file exists in the directory /etc/systemd/system, it will take precedence and systemd will ignore the file in the /lib/systemd/system directory. Some units are created by systemd without a unit file existing in the file system.

System administrators should put new or heavily-customized unit files in '''/etc/systemd/system'''.

For small tweaks to a unit file, system administrators should use the "drop-in directory" feature (documented in [[DebianMan:5/systemd.unit|systemd.unit(5)]]).
 * Start by determining the ''canonical'' systemd service name (e.g. ssh.service, not an alias like sshd.service). We'll use "name.service" for this example.
 * Create the directory /etc/systemd/system/name.service.d
 * Create files inside this directory ending with a ".conf" suffix. For example, /etc/systemd/system/name.service.d/local.conf
 * Each file should contain the section headers and section options to be overridden, using the same format as unit files.

For more information about writing your own services, see [[systemd/Services]].

== Installing and Testing ==

systemd was included in Debian wheezy as a technology preview. Please make sure that you are using Debian jessie or newer to get a recent version of systemd.


=== Installation ===

To install systemd run:
Attivare il servizio "esempio1" immediatamente:
{{{
# systemctl start esempio1
}}}

Deattivare il servizio "esempio1" immediatamente:
{{{
# systemctl stop esempio1
}}}

Riavviare il servizio "esempio1" immediatamente:
{{{
# systemctl restart esempio1
}}}

Visualizzare lo stato del servizio "esempio1":
{{{
# systemctl status esempio1
}}}

Abilitare l'avvio di "esempio1" all'avvio di sistema:
{{{
# systemctl enable esempio1
}}}

Disabilitare l'avvio di "esempio1" all'avvio di sistema:
{{{
# systemctl disable esempio1
}}}

=== Creare o alterare servizi ===
Le unità sono definite da singoli file di configurazione chiamati '''file di unità'''. Il tipo di unità è riconosciuto dal suffisso del nome del file, .mount nel caso di un punto di mount. I file di unità forniti da Debian sono posizionati nella directory /lib/systemd/system directory. Se esiste un file di unità locale con un nome identico nella directory /etc/systemd/system, questo avrà la precedenza e systemd ignorerà il file nella directory /lib/systemd/system. Alcune unità vengono create da systemd senza che esista un file di unità nel file system.

Gli amministratori di sistema dovrebbero mettere i file di unità nuovi o quelli altamente personalizzati in '''/etc/systemd/system'''.

Per piccoli aggiustamenti ad un file di unità gli amministratori di sistema dovrebbero usare la funzionalità "drop-in directory" (documentata in [[DebianMan:5/systemd.unit|systemd.unit(5)]]).
 * Come prima cosa determinare il nome di servizio ''canonico'' di systemd (es. ssh.service, non un alias come sshd.service). In questo esempio verrà usato "nome.service".
 * Creare la directory /etc/systemd/system/nome.service.d
 * Creare in questa directory file con nome che termina con il suffisso ".conf". Per esempio, /etc/systemd/system/nome.service.d/local.conf
 * Ogni file dovrebbe contenere le intestazioni di sezione e le opzioni di sezione da sovrascrivere, usando lo stesso formato dei file di unità.

Per maggiori informazioni su come scrivere servizi propri, vedere [[systemd/Services]].

== Installazione e test ==

systemd è stato incluso in Debian wheezy come anteprima tecnologica. Assicurarsi di stare usando Debian jessie o una successiva per ottenere una versione recente di systemd.

=== Installazione ===

Per installare systemd eseguire:
Line 115: Line 113:
This will install the systemd packages but will not configure systemd as your init system.


=== Configuring for testing ===

To test systemd before switching to it by default, you can add the following boot parameter to the kernel:
Questo installa i pacchetti di systemd ma non configura systemd come sistema init.


=== Configurazione a fini di test ===

Per testare systemd prima di passare ad usarlo in modo predefinito si può aggiungere il seguente parametro d'avvio al kernel:
Line 126: Line 124:
This can be done in the grub menu for a single boot - press "e" in the grub menu and add this to the '''kernel''' line. For example, depending on the options required for ''your'' particular system, it might look something like: Ciò può essere fatto nel menu di grub per un solo avvio: premere "e" nel menu di grub e aggiungere quanto detto nella riga del '''kernel'''. Per esempio, a seconda delle opzioni richieste dal ''proprio'' particolare sistema, potrebbe essere una cosa simile a:
Line 132: Line 130:
If PID '''1''' is '''systemd''' then your system is running with systemd.


=== Configuring as default ===

In order to use systemd you should also install DebianPackage:systemd-sysv which provides the symlinks links for /sbin/init. It is recommended to run this when already running under systemd, as described in the previous section.
Se il PID '''1''' è '''systemd''' allora il sistema è in esecuzione con systemd.


=== Configurazione come sistema predefinito ===

Per utilizzare systemd si deve installare anche DebianPackage:systemd-sysv che fornisce i collegamenti simbolici per /sbin/init. È raccomandato di eseguirlo quando il sistema è già in esecuzione con systemd, come descritto nella sezione precedente.
Line 142: Line 140:
In order to boot your system with the newly installed systemd, simply reboot. Per avviare il sistema con il systemd appena installato basta riavviare.
Line 148: Line 146:
If you run a self-compiled kernel, make sure you have 2.6.39 or newer and enable the following options: Se si esegue un kernel compilato personalmente assicurarsi di avere 2.6.39 o successivo e abilitare le seguenti opzioni:
Line 154: Line 152:
 * CONFIG_IPV6=[y|m], optional, but highly recommended
 * CONFIG_FANOTIFY=y, optional, required for systemd readahead. available in Linux kernel >= 2.6.37.
}}}

For an up-to-date list, see section "REQUIREMENTS" in the upstream [[https://cgit.freedesktop.org/systemd/systemd/tree/README#n36|README]] file.


== Debugging ==

=== Failed units ===
In some cases units enter a '''failed state'''. The ''status''command can be used to find out some details:
{{{
$ systemctl status <UNITNAME>
}}}

Failed units can be manually cleared out:
 * CONFIG_IPV6=[y|m], opzionale, ma altamente raccomandato
 * CONFIG_FANOTIFY=y, opzionale, necessario per il readahead di systemd, disponibile nel kernel Linux >= 2.6.37.
}}}

Per un elenco aggiornato vedere la sezione "REQUIREMENTS" nel file [[https://cgit.freedesktop.org/systemd/systemd/tree/README#n36|README]] degli autori originali a monte.


== Debug ==

=== Unità fallite ===
In alcuni casi le unità entrano in uno stato detto '''di fallimento'''. Il comando ''status'' può essere utilizzato per scoprire alcuni dettagli:
{{{
$ systemctl status <NOMEUNITA>
}}}

Le unità fallite possono essere manualmente ripulite:
Line 175: Line 173:
=== systemd hangs on startup or shutdown ===
Sometimes it is necessary to investigate why DebianPkg:systemd hangs on startup or on reboot/shutdown.

Solution #0: Remove "quiet" from Kernel command line (so called "cmdline" or "grub line")

Solution #1: Increase verbosity via cmdline: Add "systemd.log_target=kmsg systemd.log_level=debug"

Of course you can have a "temporary" persistent solution:
=== systemd si bloccal all'avvio o allo spegnimento ===
A volte è necessario investigare sul perché DebianPkg:systemd si blocca all'avvio o durante un riavvio o uno spegnimento.

Soluzione n.0: rimuovere "quiet" dalla riga di comando del kernel (a volte chiamata "cmdline" o "grub line")

Soluzione n.1: aumentare la prolissità utilizzando la riga di comando (cmdline): aggiungere "systemd.log_target=kmsg systemd.log_level=debug"

Naturalmente si può avere una soluzione "temporanea" persistente:
Line 185: Line 183:
GRUB_CMDLINE_LINUX="systemd.log_target=kmsg systemd.log_level=debug" <--- Add here (by uncommenting you can easily switch to debug) GRUB_CMDLINE_LINUX="systemd.log_target=kmsg systemd.log_level=debug" <--- aggiungere qui (decommentando si può facilmente passare al debug)
Line 190: Line 188:
Solution #2: Increase verbosity via /etc/systemd/system.conf
{{{
LogLevel=debug <--- Uncomment this line and use "debug" (default: commented and "info")
LogTarget=syslog-or-kmsg <--- Uncomment this line (default: commented)
}}}

Solution #3: Boot an emergency shell: Add {{{systemd.unit=rescue.target}}} or just {{{1}}} (the number one) to the kernel command line.

Solution #4: Enable the debug shell: Run {{{systemctl enable debug-shell.service}}}. (You can do this in a chroot environment after booting a rescue system.) This starts a root shell on TTY 9.

HINT: "man systemd" and "man systemd-system.conf"

HINT: Extensive debugging information about systemd is on [[https://freedesktop.org/wiki/Software/systemd/Debugging/|this FreeDesktop page]].

HINT: How to check Kernel command line parameters/options?
Soluzione n.2: aumentare la prolissità usando /etc/systemd/system.conf
{{{
LogLevel=debug <--- decommentare questa riga e usare "debug" (predefinito: commentato e con "info")
LogTarget=syslog-or-kmsg <--- decommentare questa riga (predefinito: commentato)
}}}

Soluzione n.3: avviare una shell di emergenza: aggiungere {{{systemd.unit=rescue.target}}} o semplicemente {{{1}}} (il numero uno) alla riga di comando del kernel.

Soluzione n.4: abilitare la shell di debug: eseguire {{{systemctl enable debug-shell.service}}}. (Lo si può fare in un ambiente chroot dopo aver avviato un sistema di ripristino.) Questo avvia una shell root su TTY 9.

SUGGERIMENTO: "man systemd" e "man systemd-system.conf"

SUGGERIMENTO: informazioni esaustive di debug su systemd sono disponibili in [[https://freedesktop.org/wiki/Software/systemd/Debugging/|questa pagina di FreeDesktop]].

SUGGERIMENTO: HCome controllare i parametri/opzioni della riga di comando del kernel?
Line 209: Line 207:
NOTE on !LogLevel (see [[DebianMan:1/systemd|systemd(1)]] and [[DebianMan:5/systemd-system.conf|systemd-system.conf(5)]]):

"Set log level. As argument this accepts a numerical log level or the well-known syslog(3) symbolic names
(lowercase): emerg, alert, crit, err, warning, notice, info, debug."

HINT: Keep a copy of /sbin/init from DebianPkg:sysvinit package in case of rescue (so you can use init=/sbin/init.sysvinit in cmdline)!
{{{
# cp -av /sbin/init /sbin/init.sysvinit <--- Before installing systemd-sysv package
}}}

See also [[https://fedoraproject.org/wiki/How_to_debug_Systemd_problems]]


=== Kernel debug without systemd debug in Jessie ===

Using the old "debug" kernel parameter in Jessie will turn on systemd debug logging as well as kernel debug logging. To get the old behaviour, do not use "debug", instead use the kernel parameter "loglevel=7".

== Bugs and Bug-Tracking-Systems ==

 * [[https://github.com/systemd/systemd/issues|Upstream issue tracker]]
 * [[https://bugs.debian.org/src:systemd|Debian bug tracker]]
 * [[https://bugs.debian.org/cgi-bin/pkgreport.cgi?usertag=pkg-systemd-maintainers@lists.alioth.debian.org|Usertagged bugs in Debian BTS]]
 * For known bugs please see topic "Known Issues and Workarounds"


== Known Issues and Workarounds ==

=== Shared bind mounts ===

The default behavior of bind mounts changes under systemd. The Linux kernel makes bind mounts of anything below / PRIVATE. Systemd changes this to SHARED.

Thus, when you do this:
NOTA: per !LogLevel (vedere [[DebianMan:1/systemd|systemd(1)]] e [[DebianMan:5/systemd-system.conf|systemd-system.conf(5)]]):

"Impostare il livello di log. Come argomentio accetta un livello di log numerico o anche i noti nomi simbolici di syslog(3)
(in minuscolo): emerg, alert, crit, err, warning, notice, info, debug."

SUGGERIMENTO: tenere una copia di /sbin/init dal pacchetto DebianPkg:sysvinit in caso di ripristino (così si può usare init=/sbin/init.sysvinit nella riga di comando del kernel)!
{{{
# cp -av /sbin/init /sbin/init.sysvinit <--- Prima di installare il pacchetto systemd-sysv
}}}

Vedere anche [[https://fedoraproject.org/wiki/How_to_debug_Systemd_problems]]


=== Debug del kernel senza debug di systemd in Jessie ===

Usare il vecchio parametro "debug" del kernel in Jessie attiva il log di debug di systemd oltre al log di debug del kernel. Per ottenere il vecchio comportamento, non usare "debug", ma usare invece il parametro "loglevel=7" del kernel.

== Bug and sistemi di tracciamento dei bug ==

 * [[https://github.com/systemd/systemd/issues|Tracciamento dei problemi degli autori a monte]]
 * [[https://bugs.debian.org/src:systemd|Sistema di tracciamento dei bug di Debian (BTS)]]
 * [[https://bugs.debian.org/cgi-bin/pkgreport.cgi?usertag=pkg-systemd-maintainers@lists.alioth.debian.org|Bug etichettati nel BTS Debian]]
 * Per i bug noti vedere l'argomento "Problemi conosciuti e soluzioni"


== Problemi conosciuti e soluzioni ==

=== Montaggi bind condivisi ===

Il comportamento predefinito dei montaggi bind cambia in systemd. Il kernel Linux rende i montaggi bind di tutto ciò che è sotto / PRIVATI. Systemd cambia tutto ciò in CONDIVISO.

Perciò quando si esegue:
Line 248: Line 246:
then /dev will be unmounted in your base/parent system '''as well'''!

What you can do now instead, to is to:
allora /dev viene smontata '''anche''' nel sistema base/genitore!

Ciò che si può fare ora invece è:
Line 257: Line 255:
this will propagate mount changes (also mount options) in the base/parent system into the $CHROOT but not from the $CHROOT back to the parent.

The rationale for the change of the default behavior can be found in bug [[https://bugs.debian.org/739593|739593]], in particularily in [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739593#54|Lenart's comment]] therein.

=== SSH session doesn't cleanly terminate on reboot/shutdown ===

If you happen to reboot/shutdown remote machine over ```ssh``` you may find out that your session isn't terminated properly, leaving you with the non-reacting terminal until long timeout is over. There is a bug [[https://bugs.debian.org/751636|751636]] about it. At the moment the work around this problem is to install:
ciò propaga i cambiamenti di montaggio (anche le opzioni di montaggio) nel sistema base/genitore nella $CHROOT ma non dalla $CHROOT indietro al genitore.

La ragione della modifica al comportamento predefinito può essere trovata nel bug [[https://bugs.debian.org/739593|739593]], in particolar modo nel [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739593#54|commento di Lenart]] che contiene.

=== La sessione SSH non termina in modo pulito al riavvio o allo spegnimento ===

Se si riavvia o si spegne la macchina via ```ssh``` può succedere che la propria sessione non termini correttamente lasciando con un terminale non reattivo fino a che non è passato un lungo tempo di timeout. C'era il bug [[DebianBug:751636|751636]] a questo proposito. Il problema era aggirabile installando:
Line 268: Line 266:
which will terminate ```ssh``` session before the network is dropped. Please note, that that would require ```PAM``` to be enabled in {{{sshd}}}.

=== Missing startup messages on console(tty1) after the boot ===

With {{{systemd}}} console(tty1) is handled differently and if you used to check it to see how did your boot go now you'll see only couple of non-informative lines.

To be able to get full transcript of the system boot on your console you need to perform two steps.

1. Add to the kernel options ```systemd.show_status=1```, for example via '''/etc/default/grub''':
che terminerà la sessione ```ssh``` prima della disattivazione della rete. Notare che ciò richiede l'abilitazione di ```PAM``` in {{{sshd}}}.

=== Messaggi di avvio mancanti in console(tty1) dopo l'avvio ===

Con {{{systemd}}} console(tty1) è gestita diversamente e se si era abituati a controllarla per vedere come era andato l'avvio ora si vedranno un paio di righe poco informative.

Per ottenere l'intera trascrizione dell'avvio di sistema sulla console è necessario effettuare due passaggi:

1. Aggiungere alle opzioni del kernel ```systemd.show_status=1```, per esempio attraverso '''/etc/default/grub''':
Line 280: Line 278:
and run ```update-grub2```.

2. Create file {{{/etc/systemd/system/getty@tty1.service.d/noclear.conf}}} with the content:
ed eseguire ```update-grub2```.

2. Creare il file {{{/etc/systemd/system/getty@tty1.service.d/noclear.conf}}} con il seguente contenuto:
Line 287: Line 285:
to disable clearing of the terminal on ```getty``` invocation.

=== Virtual and serial console changes ===

Those used to change `inittab` to enable/disable virtual or serial consoles will notice that that file is gone from clean installs. This is all managed through systemd directly now. For example, you can enable a serial console on `COM1` with:
per disabilitare la pulizia del terminale all'invocazione di ```getty```.

=== Cambio di console virtuali e seriali ===

Chi era abituato a modificare `inittab` per abilitare o disabilitare console virtuali o seriali avrà notato che tale file non esiste più sulle installazioni pulite. Tutto ciò viene gestito ora direttamente attraverso systemd. Per esempio, si può abilitare una console seriale su `COM1` con:
Line 298: Line 296:
However, it is generally preferable to add `console=ttyS0` on the kernel commandline, since this also enables kernel output on reboots. This is though by adding the following to `/etc/default/grub`: Tuttavia è generalmente preferibile aggiungere `console=ttyS0` alla riga di comando del kernel dato che ciò abilita anche l'output del kernel ai riavvii. Ciò viene fatto aggiungendo quando segue a `/etc/default/grub`:
Line 304: Line 302:
... and running `update-grub`. This will take effect only on the next reboot, however.

=== orphaned processes ===

Because it manages user sessions (taking over the role of X or other components), systemd may slightly change how processes survive a logoff. By default, when X shuts down all processes should exit and systemd will clean up the session, but there are some corner cases where certain processes don't cleanup after themselves properly.

You can configure how systemd manages leftover processes with the `KillUserProcesses=` parameter in [[DebianMan:logind.conf]]. By setting this to `yes`, processes will be forcibly killed when the session terminates. Note that this will break tools like DebianMan:screen or DebianMan:tmux, unless they are configured to run under a distinct `user@.service` unit and if `enable-linger` is set to `yes` in DebianMan:loginctl. A simple way to do this on the fly is to run the program in a "transient scope", using DebianMan:systemd-run:
... ed eseguendo `update-grub`. Ciò avrà però effetto solamente al prossimo riavvio.

=== Processi orfani ===

Dato che gestisce le sessioni utente (prendendo il ruolo di X o altri componenti) systemd può cambiare leggermente il modo in cui i processi sopravvivono ad un logoff. In modo predefinito, quando X viene chiuso, tutti i processi dovrebbero terminare e systemd ripulisce la sessione, ma ci sono alcuni casi particolari in cui certi processi non fanno correttamente pulizia.

Si può configurare il modo in cui systemd gestisce i processi residui con il parametro `KillUserProcesses=` in [[DebianMan:logind.conf]]. Impostandolo a `yes`, i processi verranno uccisi in modo forzato quando termina la sessione. Notare che ciò rende difettosi strumenti come DebianMan:screen o DebianMan:tmux, a meno che non siano configurati per essere eseguiti sotto una separata unità `user@.service` e se `enable-linger` è impostato a `yes` in DebianMan:loginctl. Un semplice modo per farlo al volo è di eseguire il programma in un "ambito transitorio" usando DebianMan:systemd-run:
Line 316: Line 314:
Now, normally sessions should cleanup after themselves, and such issues should be fixed without having to revert to the `KillUserProcesses=yes` sledgehammer. A good way to list the affected processes is to group them by "control group", with the DebianMan:systemd-cgls command: Ora le sessioni normali dovrebbero fare pulizia e i problemi relativi dovrebbero essere risolti senza dover ricorrere al metodo violento `KillUserProcesses=yes`. Un buon modo per elencare i processi che sono interessati da ciò è di raggrupparli per "control group", con il comando DebianMan:systemd-cgls:
Line 322: Line 320:
Some known misbehaving applications: Alcune applicazioni per le quali è noto che si comportano male:
Line 328: Line 326:
== Where to get help? ==

Systemd is a young project with a strong emphasis on solving problems in a distribution agnostic manner.
== Dove ottenere aiuto? ==

Systemd è un progetto giovane con una forte attenzione alla risoluzione dei problemi in modo indipendente dalla distribuzione.
Line 334: Line 332:
Debian specific channels include I canali specifici di Debian includono:
Line 338: Line 336:
Several other distributions are using systemd
 * [[https://fedoraproject.org/wiki/Systemd|Fedora systemd wiki]]
 * [[https://wiki.gentoo.org/wiki/Systemd|Gentoo systemd wiki]]
 * [[https://en.opensuse.org/SDB:Systemd|openSUSE systemd setup instructions]]
 * [[UbuntuWiki:systemd|Ubuntu systemd wiki]]
 * [[https://wiki.archlinux.org/index.php/Systemd|Arch systemd wiki]]


== Installing without systemd ==

Jessie installs systemd by default on new installs. Should one desire to install without systemd, i.e use sysvinit-core instead (old sysV5 init), it is possible to use preseed to replace systemd with sysvinit at the end of the install (This probably won't work if selecting one of the desktop environments that require systemd specific features however). If using a preseed file already, just make sure to set the preseed value
Svariate altre distribuzioni usano systemd:
 * [[https://fedoraproject.org/wiki/Systemd|systemd nel Wiki di Fedora]]
 * [[https://wiki.gentoo.org/wiki/Systemd|systemd nel Wiki di Gentoo]]
 * [[https://en.opensuse.org/SDB:Systemd|istruzioni per l'impostazione di systemd in openSUSE]]
 * [[UbuntuWiki:systemd|systemd nel Wiki di Ubuntu]]
 * [[https://wiki.archlinux.org/index.php/Systemd|systemd nel Wiki di Arch]]


== Installazione senza systemd ==

Jessie installa systemd in modo predefinito nelle nuove installazioni. Se si desiderasse fare l'installazione senza systemd, cioè usare invece sysvinit-core (vecchio init sysV5) è possibile usare preseed per sostituire systemd con sysvinit alla fine dell'installazione (ciò tuttavia probabilmente non funzionerà se si seleziona uno degli ambienti desktop che richiedono funzionalità specifiche di systemd). Se si usa già un file preseed assicurarsi solamente di impostare il valore di preseed
Line 352: Line 350:
If not using a preseed file, this can be added to the boot arguments instead by hitting TAB at the boot menu on the desired entry and appending the above preseed line at the end of the boot command.

There may still be a few bits of systemd installed, but at least init itself is not systemd and cleaning up any remaining pieces should not be too hard.


== Debian Resources ==

 * [[systemd]] - This page
  * [[systemd/ReleaseGoals|Release Goals]] -
  * [[systemd/Integration|Integration]] -
  * [[systemd/Packaging|Packaging]] -
  * [[systemd/EnableDiscussion|Discussion]] -
  * [[systemd/HowToHelp|Helping]] -
 * [[DebianPkg:sid/systemd|Debian package]]


== Other Resources ==

 * [[https://www.freedesktop.org/wiki/Software/systemd|Upstream Homepage]]
 * [[http://0pointer.net/public/systemd-nluug-2014.pdf|slides]] and [[http://ftp.nluug.nl/video/nluug/2014-11-20_nj14/zaal-2/5_Lennart_Poettering_-_Systemd.webm|video]] about simple security features that can be enabled in service files

Se non si usa un file di preseed ciò può essere aggiunto invece agli argomenti di avvio premendo il tasto di tabulazione (TAB) al menu di avvio sulla voce desiderata e aggiungendo la riga di preseed soprastante alla fine del comando di avvio.

Ci potrebbero essere comunque alcuni frammenti di systemd installati, ma almeno l'init stesso non sarà systemd e la pulizia di ogni frammento rimasto non dovrebbe essere troppo difficile.


== Risorse Debian ==

 * [[it/systemd]] - Questa pagina
  * [[systemd/ReleaseGoals|Obiettivi di rilascio]] -
  * [[systemd/Integration|Integrazione]] -
  * [[systemd/Packaging|Pacchettizzazione]] -
  * [[systemd/EnableDiscussion|Discussioni]] -
  * [[systemd/HowToHelp|Aiutare]] -
 * [[DebianPkg:sid/systemd|Pacchetto Debian]]


== Altre risorse ==

 * [[https://www.freedesktop.org/wiki/Software/systemd|Pagina web originale]]
 * [[http://0pointer.net/public/systemd-nluug-2014.pdf|diapositive]] e [[http://ftp.nluug.nl/video/nluug/2014-11-20_nj14/zaal-2/5_Lennart_Poettering_-_Systemd.webm|video]] su semplici funzionalità di sicurezza che possono essere abilitate nel file di servizio

Translation(s): English - Español - Français - Italiano - 한국어 - Russian - Brasileiro - 简体中文


systemd - gestore di sistema e servizi

Introduzione

systemd è un gestore di sistema e servizi per Linux. È il sistema init predefinito per Debian a partire da Debian Jessie. systemd è compatibile con script init per SysV e LSB. Può funzionare come rimpiazzo perfetto per sysvinit. Systemd

  • fornisce funzionalità spinte di parallelizzazione
  • usa attivazione di D-Bus e socket per avviare i servizi
  • offre avvio di demoni a richiesta
  • implementa una logica di controllo dei servizi transazionale basata su dipendenze
  • tiene traccia dei processi usando i cgroup Linux
  • gestisce creazione di istantanee e ripristino
  • mantiene punti di montaggio e montaggio automatico

systemd viene eseguito come demone con PID 1.

Le attività di systemd sono organizzate in unità. Le unità più comuni sono servizi (.service), punti di montaggio (.mount), device (.device), socket (.socket) o temporizzatori (.timer). Per esempio l'avvio del demone Secure SHell viene fatto dall'unità ssh.service.

systemd mette ogni servizio in un gruppo di controllo (cgroup) dedicato che prende il nome dal servizio. I kernel moderni gestiscono l'isolazione dei processi e l'allocazione delle risorse sulla base dei cgroup.

I target sono gruppi di unità. I target richiamano unità per mettere insieme il sistema. graphical.target, per esempio, chiama tutte le unità necessarie per avviare una postazione di laoro con un'interfaccia utente grafica. I target possono costruire uno sopra l'altro oppure dipendere da altri target. All'avvio systemd attiva il target default.target che è un alias per un altro target, come graphical.target.

systemd crea e gestisce i socket usati per la comunicazione tra i componenti del sistema. Per esempio prima crea il socket /dev/log e poi avvia il demone syslog. Questo approccio ha due vantaggi: in primo luogo i processi che comunicano con syslog attraverso /dev/log possono essere avviati in parallelo. Poi i servizi che vanno crash possono essere riavviati senza che i processi che comunicano con essi attraverso socket perdano la loro connessione. Il kernel tiene un buffer della comunicazione mentre il processo si riavvia.

Per maggiori informazioni vedere la pagina originale di systemd.

Uso di base

systemctl è lo strumento principale utilizzato per l'introspezione e il controllo dello stato del gestore di sistema e servizi "systemd". Si può, ad esempio, usare systemctl per abilitare o disabilitare servizi in modo permanente o solo per la sessione corrente. Per maggiori dettagli fare riferimento alla pagina di manuale systemctl(1).

Ottenere informazioni sullo stato del sistema

Visualizzare lo stato del sistema:

$ systemctl status

Elencare le unità che hanno fallito:

$ systemctl --failed

Elencare i file di unità installati:

$ systemctl list-unit-files

Gestire servizi

Elencare tuti i servizi in esecuzione:

$ systemctl

Attivare il servizio "esempio1" immediatamente:

# systemctl start esempio1

Deattivare il servizio "esempio1" immediatamente:

# systemctl stop esempio1

Riavviare il servizio "esempio1" immediatamente:

# systemctl restart esempio1

Visualizzare lo stato del servizio "esempio1":

# systemctl status esempio1

Abilitare l'avvio di "esempio1" all'avvio di sistema:

# systemctl enable esempio1

Disabilitare l'avvio di "esempio1" all'avvio di sistema:

# systemctl disable esempio1

Creare o alterare servizi

Le unità sono definite da singoli file di configurazione chiamati file di unità. Il tipo di unità è riconosciuto dal suffisso del nome del file, .mount nel caso di un punto di mount. I file di unità forniti da Debian sono posizionati nella directory /lib/systemd/system directory. Se esiste un file di unità locale con un nome identico nella directory /etc/systemd/system, questo avrà la precedenza e systemd ignorerà il file nella directory /lib/systemd/system. Alcune unità vengono create da systemd senza che esista un file di unità nel file system.

Gli amministratori di sistema dovrebbero mettere i file di unità nuovi o quelli altamente personalizzati in /etc/systemd/system.

Per piccoli aggiustamenti ad un file di unità gli amministratori di sistema dovrebbero usare la funzionalità "drop-in directory" (documentata in systemd.unit(5)).

  • Come prima cosa determinare il nome di servizio canonico di systemd (es. ssh.service, non un alias come sshd.service). In questo esempio verrà usato "nome.service".

  • Creare la directory /etc/systemd/system/nome.service.d
  • Creare in questa directory file con nome che termina con il suffisso ".conf". Per esempio, /etc/systemd/system/nome.service.d/local.conf
  • Ogni file dovrebbe contenere le intestazioni di sezione e le opzioni di sezione da sovrascrivere, usando lo stesso formato dei file di unità.

Per maggiori informazioni su come scrivere servizi propri, vedere systemd/Services.

Installazione e test

systemd è stato incluso in Debian wheezy come anteprima tecnologica. Assicurarsi di stare usando Debian jessie o una successiva per ottenere una versione recente di systemd.

Installazione

Per installare systemd eseguire:

# apt-get update
# apt-get install systemd

Questo installa i pacchetti di systemd ma non configura systemd come sistema init.

Configurazione a fini di test

Per testare systemd prima di passare ad usarlo in modo predefinito si può aggiungere il seguente parametro d'avvio al kernel:

init=/lib/systemd/systemd

Ciò può essere fatto nel menu di grub per un solo avvio: premere "e" nel menu di grub e aggiungere quanto detto nella riga del kernel. Per esempio, a seconda delle opzioni richieste dal proprio particolare sistema, potrebbe essere una cosa simile a:

linux   /vmlinuz-3.13-1-amd64 root=/dev/mapper/root-root init=/lib/systemd/systemd ro quiet

Se il PID 1 è systemd allora il sistema è in esecuzione con systemd.

Configurazione come sistema predefinito

Per utilizzare systemd si deve installare anche systemd-sysv che fornisce i collegamenti simbolici per /sbin/init. È raccomandato di eseguirlo quando il sistema è già in esecuzione con systemd, come descritto nella sezione precedente.

# apt-get install systemd-sysv

Per avviare il sistema con il systemd appena installato basta riavviare.

# reboot

Se si esegue un kernel compilato personalmente assicurarsi di avere 2.6.39 o successivo e abilitare le seguenti opzioni:

 * CONFIG_DEVTMPFS=y
 * CONFIG_CGROUPS=y
 * CONFIG_AUTOFS4_FS=[y|m]
 * CONFIG_IPV6=[y|m], opzionale, ma altamente raccomandato
 * CONFIG_FANOTIFY=y, opzionale, necessario per il readahead di systemd, disponibile nel kernel Linux >= 2.6.37.

Per un elenco aggiornato vedere la sezione "REQUIREMENTS" nel file README degli autori originali a monte.

Debug

Unità fallite

In alcuni casi le unità entrano in uno stato detto di fallimento. Il comando status può essere utilizzato per scoprire alcuni dettagli:

$ systemctl status <NOMEUNITA>

Le unità fallite possono essere manualmente ripulite:

# systemctl reset-failed

systemd si bloccal all'avvio o allo spegnimento

A volte è necessario investigare sul perché systemd si blocca all'avvio o durante un riavvio o uno spegnimento.

Soluzione n.0: rimuovere "quiet" dalla riga di comando del kernel (a volte chiamata "cmdline" o "grub line")

Soluzione n.1: aumentare la prolissità utilizzando la riga di comando (cmdline): aggiungere "systemd.log_target=kmsg systemd.log_level=debug"

Naturalmente si può avere una soluzione "temporanea" persistente:

[ /etc/default/grub ]
GRUB_CMDLINE_LINUX="systemd.log_target=kmsg systemd.log_level=debug" <--- aggiungere qui (decommentando si può facilmente passare al debug)

# update-grub

Soluzione n.2: aumentare la prolissità usando /etc/systemd/system.conf

LogLevel=debug           <--- decommentare questa riga e usare  "debug" (predefinito: commentato e con "info")
LogTarget=syslog-or-kmsg <--- decommentare questa riga (predefinito: commentato)

Soluzione n.3: avviare una shell di emergenza: aggiungere systemd.unit=rescue.target o semplicemente 1 (il numero uno) alla riga di comando del kernel.

Soluzione n.4: abilitare la shell di debug: eseguire systemctl enable debug-shell.service. (Lo si può fare in un ambiente chroot dopo aver avviato un sistema di ripristino.) Questo avvia una shell root su TTY 9.

SUGGERIMENTO: "man systemd" e "man systemd-system.conf"

SUGGERIMENTO: informazioni esaustive di debug su systemd sono disponibili in questa pagina di FreeDesktop.

SUGGERIMENTO: HCome controllare i parametri/opzioni della riga di comando del kernel?

# cat /proc/cmdline

NOTA: per LogLevel (vedere systemd(1) e systemd-system.conf(5)):

"Impostare il livello di log. Come argomentio accetta un livello di log numerico o anche i noti nomi simbolici di syslog(3) (in minuscolo): emerg, alert, crit, err, warning, notice, info, debug."

SUGGERIMENTO: tenere una copia di /sbin/init dal pacchetto sysvinit in caso di ripristino (così si può usare init=/sbin/init.sysvinit nella riga di comando del kernel)!

# cp -av /sbin/init /sbin/init.sysvinit <--- Prima di installare il pacchetto systemd-sysv

Vedere anche https://fedoraproject.org/wiki/How_to_debug_Systemd_problems

Debug del kernel senza debug di systemd in Jessie

Usare il vecchio parametro "debug" del kernel in Jessie attiva il log di debug di systemd oltre al log di debug del kernel. Per ottenere il vecchio comportamento, non usare "debug", ma usare invece il parametro "loglevel=7" del kernel.

Bug and sistemi di tracciamento dei bug

Problemi conosciuti e soluzioni

Montaggi bind condivisi

Il comportamento predefinito dei montaggi bind cambia in systemd. Il kernel Linux rende i montaggi bind di tutto ciò che è sotto / PRIVATI. Systemd cambia tutto ciò in CONDIVISO.

Perciò quando si esegue:

    mount --bind / $CHROOT
    mount --bind /dev/ $CHROOT/dev
    umount $CHROOT/dev

allora /dev viene smontata anche nel sistema base/genitore!

Ciò che si può fare ora invece è:

    mount --bind --make-rslave / $CHROOT
    mount --bind --make-rslave /dev/ $CHROOT/dev

ciò propaga i cambiamenti di montaggio (anche le opzioni di montaggio) nel sistema base/genitore nella $CHROOT ma non dalla $CHROOT indietro al genitore.

La ragione della modifica al comportamento predefinito può essere trovata nel bug 739593, in particolar modo nel commento di Lenart che contiene.

La sessione SSH non termina in modo pulito al riavvio o allo spegnimento

Se si riavvia o si spegne la macchina via ssh può succedere che la propria sessione non termini correttamente lasciando con un terminale non reattivo fino a che non è passato un lungo tempo di timeout. C'era il bug 751636 a questo proposito. Il problema era aggirabile installando:

    apt-get install libpam-systemd

che terminerà la sessione ssh prima della disattivazione della rete. Notare che ciò richiede l'abilitazione di PAM in sshd.

Messaggi di avvio mancanti in console(tty1) dopo l'avvio

Con systemd console(tty1) è gestita diversamente e se si era abituati a controllarla per vedere come era andato l'avvio ora si vedranno un paio di righe poco informative.

Per ottenere l'intera trascrizione dell'avvio di sistema sulla console è necessario effettuare due passaggi:

1. Aggiungere alle opzioni del kernel systemd.show_status=1, per esempio attraverso /etc/default/grub:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.show_status=1"

ed eseguire update-grub2.

2. Creare il file /etc/systemd/system/getty@tty1.service.d/noclear.conf con il seguente contenuto:

[Service]
TTYVTDisallocate=no

per disabilitare la pulizia del terminale all'invocazione di getty.

Cambio di console virtuali e seriali

Chi era abituato a modificare inittab per abilitare o disabilitare console virtuali o seriali avrà notato che tale file non esiste più sulle installazioni pulite. Tutto ciò viene gestito ora direttamente attraverso systemd. Per esempio, si può abilitare una console seriale su COM1 con:

systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

Tuttavia è generalmente preferibile aggiungere console=ttyS0 alla riga di comando del kernel dato che ciò abilita anche l'output del kernel ai riavvii. Ciò viene fatto aggiungendo quando segue a /etc/default/grub:

GRUB_CMDLINE_LINUX="console=ttyS0"

... ed eseguendo update-grub. Ciò avrà però effetto solamente al prossimo riavvio.

Processi orfani

Dato che gestisce le sessioni utente (prendendo il ruolo di X o altri componenti) systemd può cambiare leggermente il modo in cui i processi sopravvivono ad un logoff. In modo predefinito, quando X viene chiuso, tutti i processi dovrebbero terminare e systemd ripulisce la sessione, ma ci sono alcuni casi particolari in cui certi processi non fanno correttamente pulizia.

Si può configurare il modo in cui systemd gestisce i processi residui con il parametro KillUserProcesses= in logind.conf. Impostandolo a yes, i processi verranno uccisi in modo forzato quando termina la sessione. Notare che ciò rende difettosi strumenti come screen o tmux, a meno che non siano configurati per essere eseguiti sotto una separata unità user@.service e se enable-linger è impostato a yes in loginctl. Un semplice modo per farlo al volo è di eseguire il programma in un "ambito transitorio" usando systemd-run:

systemd-run --scope --user screen

Ora le sessioni normali dovrebbero fare pulizia e i problemi relativi dovrebbero essere risolti senza dover ricorrere al metodo violento KillUserProcesses=yes. Un buon modo per elencare i processi che sono interessati da ciò è di raggrupparli per "control group", con il comando systemd-cgls:

systemd-cgls

Alcune applicazioni per le quali è noto che si comportano male:

Dove ottenere aiuto?

Systemd è un progetto giovane con una forte attenzione alla risoluzione dei problemi in modo indipendente dalla distribuzione.

I canali specifici di Debian includono:

Svariate altre distribuzioni usano systemd:

Installazione senza systemd

Jessie installa systemd in modo predefinito nelle nuove installazioni. Se si desiderasse fare l'installazione senza systemd, cioè usare invece sysvinit-core (vecchio init sysV5) è possibile usare preseed per sostituire systemd con sysvinit alla fine dell'installazione (ciò tuttavia probabilmente non funzionerà se si seleziona uno degli ambienti desktop che richiedono funzionalità specifiche di systemd). Se si usa già un file preseed assicurarsi solamente di impostare il valore di preseed

preseed/late_command="in-target apt-get install -y sysvinit-core"

Se non si usa un file di preseed ciò può essere aggiunto invece agli argomenti di avvio premendo il tasto di tabulazione (TAB) al menu di avvio sulla voce desiderata e aggiungendo la riga di preseed soprastante alla fine del comando di avvio.

Ci potrebbero essere comunque alcuni frammenti di systemd installati, ma almeno l'init stesso non sarà systemd e la pulizia di ogni frammento rimasto non dovrebbe essere troppo difficile.

Risorse Debian

Altre risorse


CategoryPermalink