GNU/Linux >> Tutoriales Linux >  >> Debian

Debian:¿no está seguro de qué inicia este archivo de unidad Systemd?

Así que estuve mirando la configuración de openvpn en mi servidor basado en Debian 9 y encontré algo que no puedo explicar en los archivos de la unidad systemd para el demonio openvpn. El demonio en sí se está iniciando y funcionando sin problemas, pero no puedo entender por qué... Déjame explicarte 🙂

Así que tengo instalado openvpn y tengo una configuración adecuada en /etc/openvpn/server.conf expediente. Nada malo hasta ahora.

Sin embargo, aparentemente se están ejecutando dos unidades systemd para openvpn, a saber, openvpn.service y [correo electrónico protegido] . Este último parece ser el que realmente acepta las conexiones vpn entrantes y tal, el primero no parece hacer mucho en absoluto. Aparentemente solo funciona para iniciar este último, supongo...

Comprobando /etc/systemd/system/multi-user.target.wants/ El directorio para los archivos relacionados con openvpn muestra solo el archivo openvpn.service, cuya fuente es un enlace simbólico a un archivo con un nombre similar en /lib/systemd/system. El contenido de este archivo es:

# This service is actually a systemd target,
# but we are using a service since targets cannot be reloaded.

[Unit]
Description=OpenVPN service
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecReload=/bin/true
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target

Está bien. Entonces esto solo ejecuta /bin/true. Entonces, ¿qué inicia exactamente el [email protected] ¿demonio? Sé que el archivo de la unidad para esto es /lib/systemd/[email protected] pero no puedo encontrar ninguna pista en mi sistema sobre qué ejecuta exactamente este archivo de unidad. (Esperaba encontrar un enlace simbólico para esto en /etc/systemd/system en algún lugar, pero no lo hay). El contenido de este archivo es:

[Unit]
Description=OpenVPN connection to %i
PartOf=openvpn.service
ReloadPropagatedFrom=openvpn.service
Before=systemd-user-sessions.service
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
PrivateTmp=true
KillMode=mixed
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid
PIDFile=/run/openvpn/%i.pid
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
ProtectSystem=yes
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw

[Install]
WantedBy=multi-user.target

Entonces, este archivo de unidad tiene mucha más sustancia que el archivo openvpn.service. ¿Pero qué lo pone en marcha? He notado el PartOf=openvpn.service part en el archivo anterior, pero buscar el significado de esto en las páginas del manual no me ha hecho mucho más sabio.

Seguiré buscando porque solo quiero saber qué es lo que hace que esto funcione.

Si alguien tiene alguna pista sobre cómo se ejecuta este archivo de unidad específico o qué lo inicia, hágamelo saber 🙂

Respuesta aceptada:

Necesitas saber dos cosas:

  • Hay varios más indocumentados directorios donde systemd guarda los archivos de la unidad.
  • Debian y Ubuntu proporcionan un generador en /lib/systemd/system-generators/openvpn-generator que pone enlaces simbólicos de "deseos" en uno de esos directorios no documentados, uno para cada *.conf archivo en /etc/openvpn .

Los enlaces simbólicos causan openvpn.service comportarse como un objetivo y "querer" todas sus diversas instancias de plantilla; como explica el comentario al comienzo de la unidad de servicio.

Tenga en cuenta que Debian y Ubuntu no están alineados con lo que la gente de OpenVPN mismos suministro para systemd, que es lo que se usa en Arch, CentOS, Fedora y similares. Debian y Ubuntu reemplazan por completo lo que se proporciona en OpenVPN para todo esto, con sus propias cosas para systemd. Por lo tanto, al leer doco, tenga cuidado con el sistema operativo que doco supone que tiene.

Relacionado:Linux:¿cómo cambiar entre la sesión tty y xorg?

La gente de OpenVPN solía proporcione un [email protected] unidad de plantilla pero sin generador ni openvpn.service objetivo como servicio. Uno tenía que habilitar y deshabilitar explícitamente [email protected]name uno mismo con los mecanismos systemd ordinarios para hacerlo, y fueron "queridos" directamente por multi-user.target , en lugar de un objetivo como servicio intermediario.

La gente de OpenVPN actualmente proporcionar distintos [email protected] y [email protected] plantillas, siga sin proporcionar un generador o un openvpn.service target-as-a-service, y espera que habilite y deshabilite explícitamente [email protected]name y [email protected]name usted mismo con los mecanismos systemd ordinarios para hacerlo. El *.conf los archivos se han movido de /etc/openvpn y en /etc/openvpn/client y /etc/openvpn/server , también.

Lecturas adicionales

  • Jonathan de Boyne Pollard (2016). "Faltan rutas de búsqueda del sistema desde systemd.unit página del manual“. Errata de systemd doco . Respuestas frecuentes.
  • https://unix.stackexchange.com/a/233581/5132
  • https://unix.stackexchange.com/a/206490/5132
  • “configuración del servicio systemd“. OpenVPN . Archiwiki.
  • “configuración del servicio systemd“. OpenVPN . Wiki de parábola.
  • Christian Hesse (2016-12-30). La actualización de OpenVPN 2.4.0 requiere interacción administrativa . Noticias del arco.
  • https://askubuntu.com/a/640026/43344

Debian
  1. ¿Habilitación condicional de archivos Systemd a través del paquete Debian?

  2. Debian:¿la forma correcta de usar Onfailure en Systemd?

  3. ¿Poner el archivo de la unidad Systemd?

  4. Debian – Systemd:el servicio carece de la configuración Execstart=y Execstop=. ¿Rechazar?

  5. Cómo redirigir la salida del servicio systemd a un archivo

Cómo instalar Go en Debian 9

Cómo instalar Go en Debian 10 Linux

Cómo ejecutar un script al arrancar en Debian 11

Cómo ejecutar Shell Script como servicio Systemd en Linux

Archivo de unidad Systemd - WantedBy y After

El archivo de servicio existe pero systemd no lo encuentra