После дальнейшего расследования я обнаружил ядро.core_pattern
был перезаписан упаковка аппорт
при загрузке системы.
Я должен был подумать о проверке аппорт
когда я увидел строку "/usr/share/apport/apport". я не был уверен аппорт
был на самом деле тот, который перезаписывает ядро.core_pattern
, поэтому я решил взглянуть на его исходный код.
Запустив аппорт политики apt-cache
, я обнаружил, что версия, которую я использовал, была 2.20.9-0убунту7.24
:
vagrant@ubuntu-bionic:~$ политика apt-cache применяется
аппорт:
Установлено: 2.20.9-0ubuntu7.24
Кандидат: 2.20.9-0ubuntu7.24
Таблица версий:
*** 2.20.9-0ubuntu7.24 500
500 http://archive.ubuntu.com/ubuntu bionic-updates/main Пакеты amd64
500 пакетов http://security.ubuntu.com/ubuntu bionic-security/main amd64
100 /var/lib/dpkg/status
2.20.9-0ubuntu7 500
500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Пакеты
бродяга@ubuntu-bionic:~$
Затем на аппорт
х Страница панели запуска, я нашел его ссылку для скачивания: appport_2.20.9-0ubuntu7.tar.gz.
Поискав в исходном коде, я нашел файл debian/apport.init
имеет следующее содержание:
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern
эхо 2 > /proc/sys/fs/suid_dumpable
}
Так что я побежал dpkg -L аппорт
на моей виртуальной машине, чтобы увидеть, был ли этот файл:
vagrant@ubuntu-bionic:~$ dpkg -L appport | grep инициализация
/etc/инит.д
/etc/init.d/аппорт
Не было ни одного файла с точно совпадающим именем, но я решил взглянуть на /etc/init.d/аппорт
и обнаружил, что это был файл, который я искал:
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
эхо 2 > /proc/sys/fs/suid_dumpable
}
я знал это /etc/sysctl.conf
читается службой systemd-sysctl
, так что следующее, что я хотел определить, было ли systemd-sysctl
было начато раньше аппорт
.
Я искал, есть ли аппорт
-связанный сервис и нашел один:
vagrant@ubuntu-bionic:~$ systemctl единицы списка | grep аппорт
apport.service загружен, активен, завершен LSB: автоматическое создание отчета о сбое
Затем я проверил их взаимозависимость и обнаружил аппорт.сервис
начинается после systemd-sysctl.service
:
vagrant@ubuntu-bionic:~$ systemctl list-dependencies appport.service
аппорт.сервис
â ââsystem.slice
â ââsysinit.target
...
â ââsystemd-sysctl.service
...
...
бродяга@ubuntu-bionic:~$
Это означает systemd-sysctl.service
правильно читает мои настройки ядро.core_pattern
в /etc/sysctl.conf
но настройка сразу перезаписывается аппорт.сервис
.
Чтобы убедиться в этом, я добавил две строки в /etc/init.d/аппорт
:
do_start()
{
...
...
# ПРИМЕЧАНИЕ(ywen): Запишите текущее значение в файл.
sysctl kernel.core_pattern > /home/vagrant/sysctl.kernel.core_pattern.txt
echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
эхо 2 > /proc/sys/fs/suid_dumpable
# ПРИМЕЧАНИЕ(ywen): Добавить текущее значение в файл.
sysctl kernel.core_pattern >> /home/vagrant/sysctl.kernel.core_pattern.txt
}
Затем я перезагрузил виртуальную машину. Когда виртуальная машина снова заработала, я нашел файл /home/vagrant/sysctl.kernel.core_pattern.txt
имел следующее содержание:
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
бродяга@ubuntu-bionic:~$
Так что, действительно, моя настройка была правильно прочитана, но затем перезаписана аппорт
.