Systemd/es

systemd es un moderno reemplazo de sysvinit y RC para los sistemas Línux. Tiene soporte en Gentoo como una alternativa del sistema de inicio (init).

El núcleo de línux
systemd hace uso de muchas características modernas del núcleo de Línux. Ahora mismo, el límite inferior de la versión del núcleo (para usar systemd) se encuentra en el ebuild 02.06.39. En versiones recientes de, hay una manera eficaz de seleccionar las opciones del núcleo, tanto obligatorias como opcionales, para systemd:

Para configurar las opciones del núcleo manualmente (que es la única opción cuando no utilice ), se requieren o recomiendan las siguientes opciones de configuración del núcleo:

Para un sistema UEFI active también las siguientes opciones:

Si el sistema está utilizando el planificador BFQ, se recomienda, por los desarrolladores de BFQ, activar «BFQ hierarchical scheduling support» bajo «Enable the block layer -> IO Schedulers».

Para obtener una lista actualizada, consulte la sección «REQUIREMENTS» en el archivo README.

El directorio
El directorio es utilizado por systemd, y otras aplicaciones, como almacenamiento no persistente para los datos que se ejecutan en tiempo real, como archivos pid, sockets y archivos de estado.

El paquete systemd creará él mismo el directorio. Sin embargo, tenga en cuenta que este cambio provocará el montaje automático del mismo en OpenRC, y puede desencadenar su uso por los diferentes paquetes de software.

Los desarrolladores solo dan soporte al archivo siendo este un enlace simbólico de. Si no se crea este enlace simbólico también causará problemas con mount y df. En el pasado algunas utilidades escribieron información (como opciones de montaje) en y, por lo tanto, se dio por hecho que era un archivo normal. Hoy en día todo el software tiene en cuenta esto que para evitar dicho problema. Sin embargo, antes de cambiar el archivo para convertirse en un vínculo simbólico, revise para asegurarse de que el sistema no está afectado por ninguna regresión reportada.

Para crear el enlace simbólico, ejecute:

Asegurarse de que /usr está presente en el arranque
Para una configuración separada de, utilice un initramfs para que monte antes de iniciar systemd. Consulte la Initramfs Gentoo Guide para obtener instrucciones al respecto.

Utililizar LVM2 y initramfs
Cuando se utiliza sys-fs/lvm2 y el sistema se arranca usando un initramfs, dicho initramfs tendrá que ser creado con, ejecutando:

es, o bien, o bien algún otro objetivo de genkernel que implique la creación de un initramfs. Para obtener más información, mire la salida de genkernel --help:

Cuando se utiliza LVM, el demonio lvmetad debe iniciarse también. De lo contrario systemd será incapaz de montar volúmenes LVM. lvmetad se puede activar en :

Instalación
contiene udev. Una vez instalado, puede retirarse, dado que systemd será asistido por.

Active el parámetro global de USE  (en ). Al mismo tiempo, el parámetro USE  debe ser desactivado para evitar conflictos con el servicio systemd-logind. También es posible cambiar a un subperfil systemd para utilizar parámetros USE por defecto más coherentes, en cuyo caso no es necesario cambiar :

Finalmente, actualice el sistema con los nuevos parámetros:

Cuando se producen problemas de dependencias (como bloqueando ),  podría ser que estuviera registrado en el archivo word. Trate de resolver esto desmarcándolo:

Arrancar con systemd
Para poder arrancar systemd, hay que cambiar el init que el núcleo (o initramfs) utiliza como ejecutable.

Las siguientes subsecciones documentan cómo intercambiar el init en uno de los gestores de arranque o en el núcleo.

Grub Legacy (0.x)
El argumento  debe ser añadido a la línea de órdenes del núcleo. Un extracto de ejemplo de se vería así:

Si a pesar de esto el sistema arranca usando OpenRC, pruebe utilizando  en lugar de.

Grub 2
Cuando se utiliza grub2-mkconfig</tt>, añada la opción init a :

Cuando el archivo de configuración de GRUB 2 esté hecho a mano (solo expertos), añada el parámetro  a la orden   o.

Cuando utilice initrd obtenido con genkernel-next, use  en lugar de.

En la configuración del núcleo
La configuración de init también puede ser introducida en la configuración del núcleo. Consulte «Processor type and features -> Built-in kernel command line». Tenga en cuenta que esta técnica funciona tanto para grub como para grub2.

Definir la contraseña de root
En este punto no se olvide de establecer la contraseña root del sistema. Si algo sale mal, systemd pedirá la contraseña de root para entrar en modo de mantenimiento.

Configuración posterior a la instalación
systemd soporta algunos archivos de configuración del sistema para ajustar los detalles más básicos del sistema.

Nombre del equipo
Para establecer el nombre del equipo, cree/edite el archivo y simplemente ponga el nombre deseado para el equipo.

Cuando arranca con systemd, dispone de una herramienta llamada hostnamectl</tt> que permite editar y. Para cambiar el nombre del equipo, ejecute:

Remítase a man hostnamectl para obtener más información.

Idioma del sistema
Por lo general, los locales migrarán correctamente desde OpenRC al instalar systemd. Cuando sea necesario, el idioma se puede ajustar en, según las instrucciones dadas por el manual de Gentoo:

Una vez arrancado el sistema con systemd, la herramienta localectl</tt> se puede utilizar para establecer la configuración regional y el mapa de teclas de la consola o de X11. Para cambiar la configuración regional del sistema, ejecute la siguiente orden:

Para cambiar el mapa de teclado de la consola virtual:

Y, por último, para configurar la distribución del teclado en X11:

Si es necesario el modelo, variante y opciones pueden especificarse así:

Fecha y hora
La fecha y hora del sistema se pueden ajustar mediante la utilidad timedatectl</tt>. Esto también permitirá a los usuarios configurar la sincronización horaria del sistema sin necesidad de depender de o de otros proveedores que implementa el propio systemd.

Para aprender a utilizar timedatectl</tt> solo tiene que ejecutar:

Cargar módulos automáticamente
La carga automática de un módulo está configurada en un archivo diferente, o mejor dicho, en un directorio de archivos. Los archivos de configuración se almacenan en el directorio. Al arranque, se carga cada archivo que contiene una lista de módulos. El formato del archivo es una lista de módulos separados por saltos de línea, y dicho archivo puede tener cualquier nombre, siempre y cuando termine en. La carga del módulo se puede separar por programa, servicio o cualquier forma que se adapte a sus preferencias personales. Un ejemplo para los módulos de virtualbox.conf</tt> se enumeran a continuación:

systemd-networkd
systemd-networkd es útil para realizar una configuración sencilla de las interfaces de red cableada. Está desactivado por defecto.

Para configurar systemd-networkd, cree un archivo dentro del directorio. Vea systemd.network(5) como referencia. Una configuración de DHCP sencilla sería como sigue:

Advierta que systemd-networkd no actualiza de forma predeterminada. Para tener systemd administrando la configuración de DNS, sustituya con un enlace simbólico y ponga en marcha systemd-resolved.

NetworkManager
A menudo NetworkManager se utiliza para configurar los ajustes de red. Para ello, solo tiene que ejecutar la siguiente orden cuando se utiliza un escritorio corriendo con X11:

Si ese no es el caso y la red necesita ser configurada desde consola, dele a nmcli una oportunidad, o siga un proceso de configuración asistida por nmtui</tt>:

nmtui es una interfaz curses que guiará al usuario en el proceso de configuración mientras se ejecuta en modo consola.

Manejar los archivos de registo
systemd tiene su propia manera de manejar los archivos de registro sin necesidad de depender de ningún sistema de registro externo (como syslog-ng o rsyslog). Los mensajes ahora se pueden leer con journalctl</tt>. Aún así, systemd puede ser configurado para utilizar una herramienta externa de su preferencia para el manejo de los registros. Escriba man journald.conf y aprenda acerca de cómo configurar journald para que se ajuste a sus necesidades personales.

/tmp está ahora en tmpfs
A menos que algún otro sistema de archivos esté montado de forma explícita para en, systemd montará  como tmpfs. Eso significa que se vacía en cada arranque y su tamaño se limitará a 50% del tamaño de la memoria RAM del sistema. Para saber por qué este se comporta así y cómo modificarlo, eche un vistazo a Sistemas de archivos API.

Configurar la verbosidad de proceso de arranque
When migrating to systemd users usually notice differences regarding verbosity of boot process:
 * The boot option  not only influences the kernel output, but also that of systemd itself. Then, while setting up systemd for the machine, drop the option to see any errors could arise more easily. After that, add it back to get a quiet (and faster) boot.
 * Even passing the  boot option, systemd can still be configured to show its status by also passing.
 * When not using the  boot option, some messages might be overwriting consoles. That is caused by the kernel configuration (see man 5 proc and look for ). To tweak it pass the   boot parameter to the kernel (and update the value according to preference, for instance set a lower value like 1).

Servicios
En algún momento el sistema tendrá que ser reiniciado para que systemd se ponga marcha (en modo de sistema). Procure leer todo el presente documento para asegurarse de que systemd se configura tan completamente como sea posible antes de reiniciar (el equipo). Tenga en cuenta que, así como la utilidad journalctl</tt> funciona con systemd mientras este no está ejecutándose, por el contrario la utilidad systemctl</tt> no hará nada útil sin que systemd esté ejecutándose. Complete la configuración de los servicios (activación e iniciación de los servicios) después de entrar en el sistema que ejecuta systemd.

Servicios OpenRC
Aunque originalmente systemd intentó dar soporte a los antiguos scripts de init.d en ejecución, este apoyo no se adapta bien para un RC basado en dependencias como OpenRC y, por lo tanto, se desactiva por completo en Gentoo. OpenRC ofrece medidas adicionales para garantizar que los scripts de init.d no se ejecuten cuando no se utilice OpenRC para arrancar el sistema (de lo contrario los resultados serían impredecibles).

Listar servicios disponibles
Todas las unidades de servicios disponibles se pueden enumerar usando el argumento  con systemctl</tt>:

The following file suffixes are of interest:

Alternatively, systemctl</tt> 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'll be recognized after running systemctl daemon-reload</tt>:

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 first installing and then systemd-cron. Just run ./configure --enable-persistent and make. Ignore the systemd-crontab-generator stuff if only running the files in is of interest. Just copy the files from to. Then ensure to adjust the path to run-parts</tt> in the service files. The run-parts</tt> script is located in gentoo at. Then activate the new cron replacement with the following commands:

Troubleshooting

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

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:

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

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 kernel option.

External resources

 * FAQ
 * Tips and tricks