`kernel.core_pattern` no es efectivo en mi máquina virtual Ubuntu 18.04 después de reiniciar

`kernel.core_pattern` no es efectivo en mi máquina virtual Ubuntu 18.04 después de reiniciar

Entorno de prueba

estoy usando elubuntu/bionic64caja vagabundacomo mi entorno de prueba.

Condiciones previas

Después de crear la VM, solo la instalé ansible 2.9.23siguiendo lo siguientelas instrucciones en el documento oficial.

También instalé la ansible.posixcolección ( ansible-galaxy collection install ansible.posix) porque querré usar el módulo ansible.posix.sysctl.

Verifique que el patrón principal actual no era el que quería:

vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E

Además, /etc/sysctl.confno tenía el patrón central:

vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
vagrant@ubuntu-bionic:~$

Mi intención

Quiero cambiar el patrón principal a /var/tmp/core.%h.%e.%t.

Lo que hice

Ejecuté el siguiente ansiblecomando:

ansible -bKvvv -m "sysctl" -a "name=kernel.core_pattern state=present value='/var/tmp/core.%h.%e.%t' reload=yes" localhost

y tuvo éxito con la salida:

localhost | CHANGED => {
    "changed": true, 
    "invocation": {
        "module_args": {
            "ignoreerrors": false, 
            "name": "kernel.core_pattern", 
            "reload": true, 
            "state": "present", 
            "sysctl_file": "/etc/sysctl.conf", 
            "sysctl_set": false, 
            "value": "/var/tmp/core.%h.%e.%t"
        }
    }
}

También verifiqué la configuración actual:

vagrant@ubuntu-bionic:/etc$ sysctl kernel.core_pattern
kernel.core_pattern = /var/tmp/core.%h.%e.%t

También confirmé que core_patternestaba escrito en /etc/sysctl.conf:

vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf 
kernel.core_pattern=/var/tmp/core.%h.%e.%t

Luego reinicié mi VM. Después de reiniciar, lo actualmente vigente core_patternse revirtió:

vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E

Mis pensamientos y lo que he probado

Esta preguntaNo parece ser aplicable para mí porque, en primer lugar, se preguntó hace unos 10 años y, en segundo lugar, Ubuntu Server 18.04 upstartya no parece usarse.

Pensé que algunos otros .confarchivos podrían leerse más tarde, /etc/sysctl.confpor lo que la configuración se anuló en alguna parte. Perosysctl(8)página de manualenumera el orden de los .confarchivos que se leerán y parece que /etc/sysctl.confdebería ser el último que anule todo lo demás.

sysctl.conf(5)página de manualproporciona la lista del mismo orden que sysctl(8).

no encontré nada ensysctl.d(5), cualquiera. De hecho, su apartado "DIRECTORIOS DE CONFIGURACIÓN Y PRECEDENCIA" confirma mi entendimiento:

Los archivos en /etc/ anulan los archivos con el mismo nombre en /run/ y /lib/. Los archivos en /run/ anulan los archivos con el mismo nombre en /lib/.

Descubrí kernel.core_patternque se configuraría como se esperaba una vez que lo ejecutara sudo sysctl --systemmanualmente. Eso puede significar que de forma predeterminada estas configuraciones del sistema no se leen.

Respuesta1

Después de una mayor investigación, encontré kernel.core_patternque fue sobrescrito por elpaqueteapportal arrancar el sistema.

Debería haber pensado en comprobarlo apportcuando vi la cadena "/usr/share/apport/apport". No estaba seguro de si apportera realmente el que sobrescribe kernel.core_pattern, así que decidí echar un vistazo a su código fuente.

Al ejecutar apt-cache policy apport, encontré que la versión que estaba usando era 2.20.9-0ubuntu7.24:

vagrant@ubuntu-bionic:~$ apt-cache policy apport
apport:
  Installed: 2.20.9-0ubuntu7.24
  Candidate: 2.20.9-0ubuntu7.24
  Version table:
 *** 2.20.9-0ubuntu7.24 500
        500 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.20.9-0ubuntu7 500
        500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages
vagrant@ubuntu-bionic:~$

Luego en apport'sPágina de plataforma de lanzamiento, encontré su enlace de descarga:aport_2.20.9-0ubuntu7.tar.gz.

Buscando en el código fuente, encontré que el archivo debian/apport.inittiene el siguiente contenido:

do_start()
{
    ...
    ...
    echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern
    echo 2 > /proc/sys/fs/suid_dumpable
}

Entonces ejecuté dpkg -L apportmi VM para ver si había este archivo:

vagrant@ubuntu-bionic:~$ dpkg -L apport | grep init
/etc/init.d
/etc/init.d/apport

No había ningún archivo con el nombre de archivo que coincidiera exactamente, pero decidí echarle un vistazo /etc/init.d/apporty descubrí que este era el archivo que estaba buscando:

do_start()
{
        ...
        ...
        echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
        echo 2 > /proc/sys/fs/suid_dumpable
}

Sabía que /etc/sysctl.confel servicio lo leía systemd-sysctl, así que lo siguiente que quería determinar era si systemd-sysctlse había iniciado antes apport.

Busqué si había algún apportservicio relacionado y encontré uno:

vagrant@ubuntu-bionic:~$ systemctl list-units | grep apport
apport.service                                                                      loaded active exited    LSB: automatic crash report generation

Luego verifiqué su interdependencia y descubrí apport.serviceque se inicia después systemd-sysctl.service:

vagrant@ubuntu-bionic:~$ systemctl list-dependencies apport.service
apport.service
● ├─system.slice
● └─sysinit.target
...
●   ├─systemd-sysctl.service
...
...
vagrant@ubuntu-bionic:~$

Eso significa systemd-sysctl.serviceque lee correctamente mi configuración de kernel.core_patternin /etc/sysctl.confpero la configuración se sobrescribe inmediatamente con apport.service.

Para verificar esto, agregué dos líneas en /etc/init.d/apport:

do_start()
{
        ...
        ...
        # NOTE(ywen): Write the current value to a file.
        sysctl kernel.core_pattern > /home/vagrant/sysctl.kernel.core_pattern.txt

        echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
        echo 2 > /proc/sys/fs/suid_dumpable

        # NOTE(ywen): Append the current value to the file.
        sysctl kernel.core_pattern >> /home/vagrant/sysctl.kernel.core_pattern.txt
}

Luego reinicié la VM. Cuando la VM volvió a funcionar, encontré que el archivo /home/vagrant/sysctl.kernel.core_pattern.txttenía el siguiente contenido:

vagrant@ubuntu-bionic:~$ cat sysctl.kernel.core_pattern.txt 
kernel.core_pattern = /var/tmp/core.%h.%e.%t
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
vagrant@ubuntu-bionic:~$

Entonces, de hecho, mi configuración se leyó correctamente pero luego se sobrescribió con apport.

información relacionada