0x0i.systemd

logo de ansible

logo de redhat

Rol de Ansible: vertical_traffic_light: Systemd

Rol de Galaxy Última versión en GitHub Licencia: MIT

Tabla de Contenidos

Rol de Ansible que instala y configura Systemd unidades: componentes del sistema y servicios gestionados por el administrador de servicios systemd de Linux.

Plataformas Soportadas:
* Debian
* Redhat (CentOS/Fedora)
* Ubuntu

Requisitos

systemd se considera generalmente la herramienta de gestión de servicios estándar para distribuciones de Linux y debería estar incluida en la mayoría de las instalaciones del sistema operativo. Aunque normalmente no sea un problema, vale la pena mencionar que se requiere un núcleo de Linux >= 3.13 para systemd, y un núcleo de Linux >= 4.2 es necesario para el soporte de jerarquía de cgroup unificada.

Consulta el README de systemd para más detalles.

Variables del Rol

Las variables están disponibles y organizadas según las siguientes etapas de provisión de software y máquina:

  • instalar
  • configurar
  • lanzar

Instalar

[unit_config: <config-list-entry>:] path: (predeterminado: /etc/systemd/system)

  • carga de la ruta de configuración de la unidad systemd.

    Además de /etc/systemd/system (predeterminado), las configuraciones de unidad y los sobres de la carpeta ".d" asociada para servicios del sistema pueden colocarse en los directorios /usr/lib/systemd/system o /run/systemd/system.

    Los archivos en /etc tienen prioridad sobre los de /run, que a su vez tienen prioridad sobre los de /usr/lib. Los archivos de sobres en cualquiera de estos directorios tienen prioridad sobre los archivos de unidad donde sea que se encuentren. Varios archivos de sobres con diferentes nombres se aplican en orden lexicográfico, independientemente de en qué directorios se encuentren. Consulta la tabla a continuación y consulta systemd(1) para más detalles sobre la prioridad de carga de las rutas.

Rutas de carga cuando se ejecuta en modo de sistema (--system)

Ruta de Carga de la Unidad Descripción
/etc/systemd/system Configuración local
/run/systemd/system Unidades en tiempo de ejecución
/usr/local/lib/systemd/system Unidades instaladas para la administración local del sistema
/usr/lib/systemd/system Unidades de paquetes instalados

Rutas de carga cuando se ejecuta en modo de usuario (--user)

Ruta de Carga de la Unidad Descripción
$XDG_CONFIG_HOME/systemd/user o $HOME/.config/systemd/user Configuración de usuario ($XDG_CONFIG_HOME se utiliza si está configurado, de lo contrario ~/.config)
/etc/systemd/user Unidades de usuario creadas por el administrador
$XDG_RUNTIME_DIR/systemd/user Unidades en tiempo de ejecución (solo se usa cuando $XDG_RUNTIME_DIR está configurado)
/run/systemd/user Unidades en tiempo de ejecución
$dir/systemd/user para cada $dir en $XDG_DATA_DIRS Ubicaciones adicionales para unidades de usuario instaladas, una para cada entrada en $XDG_DATA_DIRS
/usr/local/lib/systemd/user Unidades de usuario instaladas para la administración local del sistema
/usr/lib/systemd/user Unidades de usuario instaladas por el administrador de paquetes de la distribución

Ejemplo

 unit_config:
   - name: apache
     path: /run/systemd/system
     Service:
       ExecStart: /usr/sbin/httpd
       ExecReload: /usr/sbin/httpd $OPTIONS -k graceful
     Install:
       WantedBy: multi-user.target

[unit_config: <config-list-entry>:] type: <string> (predeterminado: service)

  • tipo de unidad systemd a configurar. Actualmente hay 11 tipos diferentes de unidades, que van desde demonios y los procesos que consisten en ellos hasta desencadenadores de modificación de rutas. Consulta systemd(1) para la lista completa de unidades disponibles.

Ejemplo

 unit_config:
   - name: apache
     type: socket
     Socket:
       ListenStream: 0.0.0.0:8080
       Accept: yes
     Install:
       WantedBy: sockets.target

Configurar

La configuración de una unidad systemd se declara en un archivo de configuración estilo ini. Una unidad de configuración INI de systemd se compone de secciones: 2 comunes entre todos los tipos de unidad (Unit e Install) y 1 específica para cada tipo de unidad. Estas configuraciones de unidad pueden expresarse dentro de la variable hash unit_config del rol como listas de diccionarios que contienen pares clave-valor que representan el nombre, tipo, ruta de carga de la unidad y una combinación de las definiciones de sección mencionadas anteriormente.

Cada definición de sección de configuración proporciona un diccionario que contiene un conjunto de pares clave-valor para las opciones de sección correspondientes (por ejemplo, la especificación ExecStart para una sección de servicio o web [Service] o la opción ListenStream para una sección [Socket] de la web).

[unit_config: <list-entry>:] Unit | <tipo-unidad ej. Service, Socket, Device o Mount> | Install: <dict> (predeterminado: {})

  • definiciones de secciones para una configuración de unidad

Cualquier configuración de clave/valor que sea compatible con la especificación de tipo de unidad Systemd correspondiente debería poder expresarse dentro de cada colección de unit_config y representarse correctamente dentro del archivo de configuración INI asociado.

Se proporciona a continuación un resumen y ejemplo de configuración de cada tipo de unidad como referencia.

[Service]

Gestiona demonios y los procesos que los componen.

Ejemplo

 unit_config:
   # path: /etc/systemd/system/example-service.service
   - name: example-service
     Unit:
       Description: Servicio dormilón
     Service:
       ExecStart: /usr/bin/sleep infinity
     Install:
       WantedBy: multi-user.target

[Socket]

Encapsula sockets IPC locales o de red en el sistema.

Ejemplo

 unit_config:
   - name: docker
     type: socket
     Unit:
       Description: Escucha/acepta solicitudes de conexión en /var/run/docker/sock (implícitamente *Requires=* asociado con docker.service)
     Socket:
       ListenStream: /var/run/docker.sock
       SocketMode: 0660
       SocketUser: root
       SocketGroup: docker
     Install:
       WantedBy: sockets.target

[Mount]

Controla puntos de montaje en el sistema.

Ejemplo

 unit_config:
   - name: tmp_new
     type: mount
     Unit:
       Description: Nuevo Directorio Temporal (/tmp_new)
       Conflicts: umount.target
       Before: local-fs.target umount.target
       After: swap.target
     Mount:
       What: tmpfs
       Where: /tmp_new
       Type: tmpfs
       Options: mode=1777,strictatime,nosuid,nodev

[Automount]

Proporciona capacidades de montaje automático para el montaje a demanda de sistemas de archivos, así como un arranque en paralelo.

Ejemplo

 unit_config:
   - name: proc-sys-fs-binfmt_misc
     type: automount
     Unit:
       Description: Punto de Montaje del Sistema de Archivos de Formatos Ejecutables Arbitrarios
       Documentation: https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html
       ConditionPathExists: /proc/sys/fs/binfmt_misc/
       ConditionPathIsReadWrite: /proc/sys/
     Automount:
       Where: /proc/sys/fs/binfmt_misc

[Device]

Expone dispositivos del núcleo e implementa activación basada en dispositivos.

Este tipo de unidad no tiene opciones específicas y, como tal, no existe una sección [Device] separada. Los elementos de configuración comunes se configuran en las secciones genéricas [Unit] e [Install]. systemd creará dinámicamente unidades de dispositivo para todos los dispositivos del núcleo que estén marcados con la etiqueta "systemd" de udev (por defecto, todos los dispositivos de bloque y de red, y algunos otros). Para etiquetar un dispositivo udev, usa TAG+="systemd en el archivo de reglas de udev. También ten en cuenta que las unidades de dispositivo se nombran según las rutas /sys y /dev que controlan.

Ejemplo

# /usr/lib/udev/rules.d/10-nvidia.rules

SUBSYSTEM=="pci", ATTRS{vendor}=="0x12d2", ATTRS{class}=="0x030000", TAG+="systemd", ENV{SYSTEMD_WANTS}="nvidia-fallback.service"

# Resultará en la generación automática de un archivo nvidia-fallback.device con las secciones [Unit] e [Install] correspondientes configuradas

[Target]

Proporciona capacidades de organización de unidades y establece puntos de sincronización bien conocidos durante el arranque.

Este tipo de unidad no tiene opciones específicas y, como tal, no existe una sección [Target] separada. Los elementos de configuración comunes se configuran en las secciones genéricas [Unit] e [Install].

Ejemplo

 unit_config:
   - name: graphical
     path: /usr/lib/systemd/system/graphical.target
     type: target
     Unit:
       Description: Interfaz Gráfica
       Documentation: man:systemd.special(7)
       Requires: multi-user.target
       Wants: display-manager.service
       Conflicts: rescue.service rescue.target
       After: multi-user.target rescue.service rescue.target display-manager.service
       AllowIsolate: yes

[Timer]

Desencadena la activación de otras unidades basadas en temporizadores.

Ejemplo

 unit_config:
   - name: dnf-makecache
     type: timer
     Timer:
       OnBootSec: 10min
       OnUnitInactiveSec: 1h
       Unit: dnf-makecache.service
     Install:
       WantedBy: multi-user.target

[Swap]

Encapsula particiones o archivos de intercambio de memoria del sistema operativo.

Ejemplo

 # Asegurar la existencia del archivo de intercambio
 mkdir -p /var/vm
 fallocate -l 1024m /var/vm/swapfile
 chmod 600 /var/vm/swapfile
 mkswap /var/vm/swapfile

------------------------------------

 unit_config:
   - name: var-vm-swap
     type: swap
     Unit:
       Description: Activar intercambio para /var/vm/swapfile
     Swap:
       What: /var/vm/swapfile
     Install:
       WantedBy: multi-user.target

[Path]

Activa otros servicios cuando objetos del sistema de archivos cambian o son modificados.

Ejemplo

 unit_config:
   - name: Activación del análisis de cobertura de código del repositorio
     type: path
     Unit:
       Description: Activar análisis de cobertura de código en repositorios git modificados
     Path:
       PathChanged: /path/to/git/repo
       Unit: code-coverage-analysis

[Scope]

Gestiona un conjunto de procesos del sistema o remotos/extranjeros.

Las unidades Scope no se configuran mediante archivos de configuración de unidad, sino que se crean únicamente de forma programática mediante las interfaces bus de systemd. A diferencia de las unidades de servicio, las unidades de Scope gestionan procesos creados externamente y no generan procesos por sí mismas. El propósito principal de las unidades de Scope es agrupar procesos de trabajo de un servicio del sistema para organización y para gestión de recursos.

Ejemplo

# *Esta configuración es para un archivo de unidad transitorio, creado programáticamente a través de la API de systemd. No lo copies ni edites.*
 unit_config:
   - name: user-session
     type: scope

     Unit:
       Description: Sesión de usuario
       Wants: [email protected]
       Wants: [email protected]
       After: systemd-logind.service systemd-user-sessions.service [email protected] [email protected]
       RequiresMountsFor: /home/user
       Scope:
         Slice: user-1000.slice
      Scope:
         SendSIGHUP=yes
         TasksMax=infinity

[Slice]

Agrupa y gestiona procesos del sistema en un árbol jerárquico para fines de gestión de recursos.

El nombre de la porción codifica la ubicación en el árbol. El nombre consiste en una serie de nombres separados por guiones, que describen el camino a la porción desde la porción raíz. Por defecto, las unidades de servicio y Scope se colocan en system.slice, las máquinas virtuales y contenedores registrados mediante systemd-machined(1) se encuentran en machine.slice y las sesiones de usuario gestionadas por systemd-logind(1) en user.slice.

Consulta systemd.slice(5) para más detalles.

[Drop-in]

Proporciona capacidades de anulación para unidades.

Ejemplo

 unit_config:
   - name: override.conf
     type: conf
     path: "/lib/systemd/system/[email protected]"
     Service:
       ExecStart:
         - ""
         - "-/sbin/agetty -a muru --noclear %I $TERM"
       EnvironmentFile=/path/to/some/file

Lanzar

[unit_config: <config-list-entry>:] enabled: (predeterminado: no)

  • si el servicio debería iniciarse al arrancar

[unit_config: <config-list-entry>:] state: (predeterminado: stopped)

  • estado de activación de la unidad

Dependencias

Ninguna

Ejemplo de Playbook

Ejemplo predeterminado (sin configuraciones de unidad personalizadas especificadas):

- hosts: all
  roles:
  - role: 0x0I.systemd

Par de servicio/socket/montaje:

- hosts: webservers
  roles:
  - role: 0x0i.systemd
    vars:
      unit_config:
      - name: "mi-servicio"
        Unit:
          After: network-online.target
          Wants: network-online.target
          Requires: mi-servicio.socket
        Service:
          User: 'web'
          Group: 'web'
          ExecStart: '/usr/local/bin/mi_servicio $ARGS'
          ExecReload: '/bin/kill -s HUP $MAINPID'
        Install:
          WantedBy: 'multi-user.target'
      - name: "mi-servicio"
        type: "socket"
        Socket:
          ListenStream: '0.0.0.0:4321'
          Accept: 'true'
        Install:
          WantedBy: 'sockets.target'
      - name: "var-data-mi_servicio"
        type: "mount"
        path: "/run/systemd/system"
        Mount:
          What: '/dev/nvme0'
          Where: '/var/data/mi_servicio'
        Install:
          WantedBy: 'multi-user.target'

Licencia

MIT

Información del Autor

Este rol fue creado en 2019 por O1.IO.

Acerca del proyecto

Systemd, a system and service manager for Linux operating systems

Instalar
ansible-galaxy install 0x0i.systemd
Licencia
Unknown
Descargas
8.3M
Propietario