Entorno de prueba
estoy usando elubuntu/bionic64
caja vagabundacomo mi entorno de prueba.
Condiciones previas
Después de crear la VM, solo la instalé ansible 2.9.23
siguiendo lo siguientelas instrucciones en el documento oficial.
También instalé la ansible.posix
colecció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.conf
no 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 ansible
comando:
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_pattern
estaba 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_pattern
se 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 upstart
ya no parece usarse.
Pensé que algunos otros .conf
archivos podrían leerse más tarde, /etc/sysctl.conf
por lo que la configuración se anuló en alguna parte. Perosysctl(8)
página de manualenumera el orden de los .conf
archivos que se leerán y parece que /etc/sysctl.conf
deberí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_pattern
que se configuraría como se esperaba una vez que lo ejecutara sudo sysctl --system
manualmente. 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_pattern
que fue sobrescrito por elpaqueteapport
al arrancar el sistema.
Debería haber pensado en comprobarlo apport
cuando vi la cadena "/usr/share/apport/apport". No estaba seguro de si apport
era 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.init
tiene 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 apport
mi 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/apport
y 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.conf
el servicio lo leía systemd-sysctl
, así que lo siguiente que quería determinar era si systemd-sysctl
se había iniciado antes apport
.
Busqué si había algún apport
servicio 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.service
que 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.service
que lee correctamente mi configuración de kernel.core_pattern
in /etc/sysctl.conf
pero 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.txt
tení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
.