Ambiente de teste
estou usando oubuntu/bionic64
Caixa vagabundacomo meu ambiente de teste.
Pré-condições
Depois de criar a VM, só instalei ansible 2.9.23
seguindoas instruções no documento oficial.
Também instalei a ansible.posix
coleção( ansible-galaxy collection install ansible.posix
) porque vou querer usar o módulo ansible.posix.sysctl
.
Verifique se o padrão principal atual não era o que eu queria:
vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
Além disso, /etc/sysctl.conf
não tinha o padrão principal:
vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
vagrant@ubuntu-bionic:~$
Minha intenção
Quero mudar o padrão principal para /var/tmp/core.%h.%e.%t
.
O que eu fiz
Executei o seguinte ansible
comando:
ansible -bKvvv -m "sysctl" -a "name=kernel.core_pattern state=present value='/var/tmp/core.%h.%e.%t' reload=yes" localhost
e teve sucesso com a saída:
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"
}
}
}
Também verifiquei a configuração atual:
vagrant@ubuntu-bionic:/etc$ sysctl kernel.core_pattern
kernel.core_pattern = /var/tmp/core.%h.%e.%t
Também confirmei que core_pattern
foi escrito em /etc/sysctl.conf
:
vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
kernel.core_pattern=/var/tmp/core.%h.%e.%t
Então reiniciei minha VM. Após a reinicialização, o atualmente em vigor core_pattern
foi revertido:
vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
Meus pensamentos e o que tentei
Essa questãonão parece ser aplicável para mim porque, em primeiro lugar, foi solicitado há cerca de 10 anos e, em segundo lugar, o Ubuntu Server 18.04 parece não ser upstart
mais utilizado.
Achei que alguns outros .conf
arquivos poderiam ser lidos mais tarde, /etc/sysctl.conf
então as configurações foram substituídas em algum lugar. Massysctl(8)
página de manuallista a ordem dos .conf
arquivos a serem lidos e parece que /etc/sysctl.conf
deve ser o último que substitui todo o resto.
sysctl.conf(5)
página de manualfornece a lista da mesma ordem que sysctl(8)
.
não encontrei nada emsysctl.d(5)
, qualquer. Na verdade, sua seção "DIRETÓRIOS DE CONFIGURAÇÃO E PRECEDÊNCIA" confirma meu entendimento:
Arquivos em /etc/ substituem arquivos com o mesmo nome em /run/ e /lib/. Arquivos em /run/ substituem arquivos com o mesmo nome em /lib/.
Descobri kernel.core_pattern
que seria definido conforme o esperado depois de executado sudo sysctl --system
manualmente. Isso pode significar que, por padrão, essas configurações do sistema não são lidas.
Responder1
Após uma investigação mais aprofundada, descobri que kernel.core_pattern
foi substituído pelopacoteapport
na inicialização do sistema.
Eu deveria ter pensado em verificar apport
quando vi a string "/usr/share/apport/apport". Eu não tinha certeza se apport
era realmente aquele que sobrescreve kernel.core_pattern
, então decidi dar uma olhada em seu código-fonte.
Ao executar apt-cache policy apport
, descobri que a versão que estava 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:~$
Então apport
emPágina do LaunchPad, encontrei o link para download:apport_2.20.9-0ubuntu7.tar.gz.
Pesquisando no código fonte, encontrei o arquivo debian/apport.init
com o seguinte conteúdo:
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
}
Então corri dpkg -L apport
na minha VM para ver se havia esse arquivo:
vagrant@ubuntu-bionic:~$ dpkg -L apport | grep init
/etc/init.d
/etc/init.d/apport
Não havia nenhum arquivo com o nome exatamente correspondente, mas decidi dar uma olhada /etc/init.d/apport
e descobri que este era o arquivo que estava procurando:
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
}
Eu sabia que isso /etc/sysctl.conf
era lido pelo serviço systemd-sysctl
, então a próxima coisa que queria determinar era se ele systemd-sysctl
foi iniciado antes apport
.
Procurei se havia algum apport
serviço relacionado e encontrei um:
vagrant@ubuntu-bionic:~$ systemctl list-units | grep apport
apport.service loaded active exited LSB: automatic crash report generation
Em seguida, verifiquei sua interdependência e descobri apport.service
que foi iniciado depois systemd-sysctl.service
:
vagrant@ubuntu-bionic:~$ systemctl list-dependencies apport.service
apport.service
● ├─system.slice
● └─sysinit.target
...
● ├─systemd-sysctl.service
...
...
vagrant@ubuntu-bionic:~$
Isso significa que systemd-sysctl.service
lê corretamente minha configuração, kernel.core_pattern
in /etc/sysctl.conf
mas a configuração é imediatamente substituída por apport.service
.
Para verificar isso, adicionei duas linhas em /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
}
Então reiniciei a VM. Quando a VM foi ativada novamente, descobri que o arquivo /home/vagrant/sysctl.kernel.core_pattern.txt
tinha o seguinte conteúdo:
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:~$
Então, de fato, minha configuração foi lida corretamente, mas substituída por apport
.