Рейтинг:0

`kernel.core_pattern` не действует на моей виртуальной машине Ubuntu 18.04 после перезагрузки

флаг ao

Тестовая среда

я использую убунту/бионик64 Бродячая коробка как моя тестовая среда.

Предварительные условия

После создания виртуальной машины я только установил доступный 2.9.23 следуя инструкция в официальном документе.

Я также установил ansible.posix коллекция (Установка коллекции ansible-galaxy ansible.posix), потому что я хочу использовать модуль ansible.posix.sysctl.

Убедитесь, что текущий базовый шаблон не был тем, что я хотел:

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

Также, /etc/sysctl.conf не было основного шаблона:

vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
бродяга@ubuntu-bionic:~$

Мое намерение

Я хочу изменить основной шаблон на /var/tmp/core.%h.%e.%t.

Что я сделал

Я выполнил следующее доступный команда:

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

и это удалось с выводом:

локальный | ИЗМЕНЕНО => {
    «изменено»: правда, 
    "вызов": {
        "module_args": {
            "игнорировать ошибки": ложь, 
            "имя": "kernel.core_pattern", 
            "перезагрузить": правда, 
            "состояние": "настоящее", 
            "sysctl_file": "/etc/sysctl.conf", 
            "sysctl_set": ложь, 
            "value": "/var/tmp/core.%h.%e.%t"
        }
    }
}

Я также проверил текущую конфигурацию:

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

Я также подтвердил, что core_pattern был записан в /etc/sysctl.conf:

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

Затем я перезагрузил свою виртуальную машину. После перезагрузки текущий действующий core_pattern откатился назад:

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

Мои мысли и то, что я пробовал

Этот вопрос не кажется мне применимым, потому что, во-первых, это было задано около 10 лет назад, а во-вторых, Ubuntu Server 18.04, похоже, не использует выскочка больше.

я думал какой-то другой .conf файлы могут быть прочитаны позже, чем /etc/sysctl.conf значит где-то сбились настройки. Но sysctl(8) справочная страница перечисляет порядок .conf файлы для чтения, и это выглядит так /etc/sysctl.conf должен быть последним, который переопределяет все остальное.

sysctl.conf(5) справочная страница предоставляет список того же порядка, что и sysctl(8).

я ничего не нашел в sysctl.d(5), либо. Фактически, его раздел «КАТАЛОГИ КОНФИГУРАЦИИ И ПРИОРИТЕТ» подтверждает мое понимание:

Файлы в /etc/ имеют приоритет над файлами с теми же именами в /run/ и /lib/. Файлы в /run/ переопределяют файлы с тем же именем в /lib/.

я нашел ядро.core_pattern будет установлено, как и ожидалось, как только я побежал sudo sysctl --система вручную. Это может означать, что по умолчанию эти системные настройки не читаются.

Рейтинг:0
флаг ao

После дальнейшего расследования я обнаружил ядро.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:~$

Так что, действительно, моя настройка была правильно прочитана, но затем перезаписана аппорт.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.