După investigații suplimentare, am găsit kernel.core_pattern
a fost suprascris de către pachet apport
la pornirea sistemului.
Ar fi trebuit să mă gândesc să verific apport
când am văzut șirul „/usr/share/apport/apport”. Nu eram sigur dacă apport
a fost de fapt cel care suprascrie kernel.core_pattern
, așa că am decis să arunc o privire la codul sursă.
Prin alergare politica apt-cache apport
, am descoperit că versiunea pe care o foloseam era 2.20.9-0ubuntu7.24
:
vagrant@ubuntu-bionic:~$ apt-cache policy apport
aport:
Instalat: 2.20.9-0ubuntu7.24
Candidat: 2.20.9-0ubuntu7.24
Tabel de versiuni:
*** 2.20.9-0ubuntu7.24 500
500 http://archive.ubuntu.com/ubuntu bionic-updates/main pachete amd64
500 http://security.ubuntu.com/ubuntu bionic-security/main pachete amd64
100 /var/lib/dpkg/status
2.20.9-0ubuntu7 500
500 http://archive.ubuntu.com/ubuntu bionic/main Pachete amd64
vagrant@ubuntu-bionic:~$
Apoi apport
lui Pagina LaunchPad, am găsit link-ul de descărcare: apport_2.20.9-0ubuntu7.tar.gz.
Căutând în codul sursă, am găsit fișierul debian/apport.init
are urmatorul continut:
face_start()
{
...
...
echo „|$AGENT %p %s %c %d %P” > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
}
Așa că am fugit dpkg -L apport
pe VM-ul meu pentru a vedea dacă există acest fișier:
vagrant@ubuntu-bionic:~$ dpkg -L apport | grep init
/etc/init.d
/etc/init.d/apport
Nu exista niciun fișier cu numele fișierului care se potrivește exact, dar am decis să arunc o privire /etc/init.d/apport
și am găsit că acesta este fișierul pe care îl căutam:
face_start()
{
...
...
echo „|$AGENT %p %s %c %d %P %E” > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
}
am știut că /etc/sysctl.conf
este citit de serviciu systemd-sysctl
, așa că următorul lucru pe care am vrut să-l stabilesc a fost dacă systemd-sysctl
a fost început înainte apport
.
Am căutat dacă există apport
-serviciu aferent și am găsit unul:
vagrant@ubuntu-bionic:~$ systemctl list-units | grep apport
apport.service încărcat activ ieșit LSB: generare automată a raportului de avarie
Am verificat apoi interdependența lor și am găsit apport.service
este început după systemd-sysctl.service
:
vagrant@ubuntu-bionic:~$ systemctl list-dependencies apport.service
apport.service
â ââsistem.slice
â ââsysinit.target
...
â ââsystemd-sysctl.service
...
...
vagrant@ubuntu-bionic:~$
Asta inseamna systemd-sysctl.service
citește corect setarea mea de kernel.core_pattern
în /etc/sysctl.conf
dar setarea este apoi imediat suprascrisă de apport.service
.
Pentru a verifica acest lucru, am adăugat două rânduri în /etc/init.d/apport
:
do_start()
{
...
...
# NOTĂ(ywen): Scrieți valoarea curentă într-un fișier.
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
# NOTĂ(ywen): Adăugați valoarea curentă la fișier.
sysctl kernel.core_pattern >> /home/vagrant/sysctl.kernel.core_pattern.txt
}
Apoi am repornit VM-ul. Când VM-ul a fost din nou pornit, am găsit fișierul /home/vagrant/sysctl.kernel.core_pattern.txt
avea urmatorul continut:
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:~$
Deci, într-adevăr, setarea mea a fost citită corect, dar apoi a fost suprascrisă de apport
.