Test Umgebung
Ich verwende dieubuntu/bionic64
Vagrant-Boxals meine Testumgebung.
Voraussetzungen
Nach dem Erstellen der VM habe ich nur ansible 2.9.23
Folgendes installiert:die Anweisungen im offiziellen Dokument.
Ich habe auch die ansible.posix
Sammlung ( ansible-galaxy collection install ansible.posix
) installiert, da ich das Modul verwenden möchte ansible.posix.sysctl
.
Überprüfen Sie, ob das aktuelle Kernmuster nicht meinen Wünschen entsprach:
vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
Außerdem /etc/sysctl.conf
fehlte das Kernmuster:
vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
vagrant@ubuntu-bionic:~$
Meine Absicht
Ich möchte das Kernmuster in ändern /var/tmp/core.%h.%e.%t
.
Was ich getan habe
Ich habe den folgenden ansible
Befehl ausgeführt:
ansible -bKvvv -m "sysctl" -a "name=kernel.core_pattern state=present value='/var/tmp/core.%h.%e.%t' reload=yes" localhost
und es war erfolgreich mit der Ausgabe:
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"
}
}
}
Ich habe auch die aktuelle Konfiguration überprüft:
vagrant@ubuntu-bionic:/etc$ sysctl kernel.core_pattern
kernel.core_pattern = /var/tmp/core.%h.%e.%t
Ich habe auch bestätigt, dass Folgendes core_pattern
geschrieben wurde /etc/sysctl.conf
:
vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
kernel.core_pattern=/var/tmp/core.%h.%e.%t
Dann habe ich meine VM neugestartet. Nach dem Neustart wurde der aktuell gültige Zustand core_pattern
wiederhergestellt:
vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
Meine Gedanken und was ich versucht habe
Diese Fragescheint für mich nicht anwendbar zu sein, da die Frage erstens schon vor ca. 10 Jahren gestellt wurde und zweitens Ubuntu Server 18.04 offenbar nicht upstart
mehr verwendet wird.
.conf
Ich dachte , dass später andere Dateien gelesen werden könnten /etc/sysctl.conf
, sodass die Einstellungen irgendwo überschrieben wurden. Abersysctl(8)
manpagelistet die Reihenfolge der .conf
zu lesenden Dateien auf und es sieht so aus, als /etc/sysctl.conf
ob die letzte Datei alles andere überschreiben sollte.
sysctl.conf(5)
manpagestellt die Liste in derselben Reihenfolge bereit wie sysctl(8)
.
Ich habe nichts gefunden insysctl.d(5)
, auch nicht. Tatsächlich bestätigt der Abschnitt „KONFIGURATIONSVERZEICHNISSE UND RANGORDNUNG“ mein Verständnis:
Dateien in /etc/ überschreiben Dateien mit demselben Namen in /run/ und /lib/. Dateien in /run/ überschreiben Dateien mit demselben Namen in /lib/.
Ich habe festgestellt, kernel.core_pattern
dass es wie erwartet eingestellt wird, wenn ich es sudo sysctl --system
manuell ausführe. Das kann bedeuten, dass diese Systemeinstellungen standardmäßig nicht gelesen werden.
Antwort1
Nach weiterer Untersuchung stellte ich fest, dass kernel.core_pattern
es überschrieben wurde durchPaketapport
beim Systemstart.
Ich hätte daran denken sollen, zu prüfen, apport
als ich die Zeichenfolge „/usr/share/apport/apport“ sah. Ich war mir nicht sicher, ob dies apport
tatsächlich diejenige war, die überschreibt kernel.core_pattern
, also beschloss ich, einen Blick auf den Quellcode zu werfen.
Durch Ausführen apt-cache policy apport
habe ich herausgefunden, dass die von mir verwendete Version folgende war 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:~$
Dann auf apport
'sLaunchPad-Seite, ich habe den Download-Link gefunden:apport_2.20.9-0ubuntu7.tar.gz.
Bei der Suche im Quellcode habe ich festgestellt, dass die Datei debian/apport.init
den folgenden Inhalt hat:
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
}
Also habe ich es dpkg -L apport
auf meiner VM ausgeführt, um zu sehen, ob diese Datei vorhanden ist:
vagrant@ubuntu-bionic:~$ dpkg -L apport | grep init
/etc/init.d
/etc/init.d/apport
Es gab keine Datei mit dem genau passenden Dateinamen, aber ich beschloss, einen Blick darauf zu werfen /etc/init.d/apport
und fand, dass dies die Datei war, nach der ich suchte:
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
}
Ich wusste, dass es /etc/sysctl.conf
vom Dienst gelesen wird systemd-sysctl
, daher wollte ich als Nächstes feststellen, ob es systemd-sysctl
schon einmal gestartet wurde apport
.
Ich habe gesucht, ob es einen entsprechenden Dienst gibt, apport
und einen gefunden:
vagrant@ubuntu-bionic:~$ systemctl list-units | grep apport
apport.service loaded active exited LSB: automatic crash report generation
Ich habe dann ihre gegenseitige Abhängigkeit überprüft und festgestellt, dass apport.service
sie nach folgendem gestartet wird systemd-sysctl.service
:
vagrant@ubuntu-bionic:~$ systemctl list-dependencies apport.service
apport.service
● ├─system.slice
● └─sysinit.target
...
● ├─systemd-sysctl.service
...
...
vagrant@ubuntu-bionic:~$
Das heißt systemd-sysctl.service
meine Einstellung von wird zwar korrekt eingelesen kernel.core_pattern
aber /etc/sysctl.conf
die Einstellung wird dann sofort durch überschrieben apport.service
.
Um dies zu überprüfen, habe ich zwei Zeilen hinzugefügt /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
}
Dann habe ich die VM neugestartet. Als die VM wieder hochgefahren war, stellte ich fest, dass die Datei /home/vagrant/sysctl.kernel.core_pattern.txt
den folgenden Inhalt hatte:
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:~$
Meine Einstellung wurde also tatsächlich korrekt gelesen, dann aber überschrieben durch apport
.