テスト環境
私はubuntu/bionic64
浮浪者ボックステスト環境として。
前提条件
VMを作成した後、ansible 2.9.23
次の手順に従ってインストールしました公式文書の指示。
モジュール を使用したいので、ansible.posix
コレクション ( )もインストールしました。ansible-galaxy collection install 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
vagrant@ubuntu-bionic:~$
私の意図
コアパターンを に変更したいです/var/tmp/core.%h.%e.%t
。
私がしたこと
次のansible
コマンドを実行しました:
ansible -bKvvv -m "sysctl" -a "name=kernel.core_pattern state=present value='/var/tmp/core.%h.%e.%t' reload=yes" localhost
そして、出力は次の通り成功しました:
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"
}
}
}
現在の構成も確認しました:
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
次に、VM を再起動しました。再起動後、現在有効なものが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 はもう使用されていないようですので、私には当てはまらないようですupstart
。
他の.conf
ファイルは後で読み込まれるかもしれない/etc/sysctl.conf
ので、どこかで設定が上書きされていると思いましたが、sysctl(8)
マニュアルページ.conf
読み取るファイルの順序をリストし、/etc/sysctl.conf
他のすべてを上書きする最後のファイルになるようです。
sysctl.conf(5)
マニュアルページと同じ順序のリストを提供しますsysctl(8)
。
何も見つかりませんでしたsysctl.d(5)
、どちらでもありません。実際、そのセクション「構成ディレクトリと優先順位」は私の理解を裏付けています。
/etc/ 内のファイルは、/run/ および /lib/ 内の同じ名前のファイルを上書きします。/run/ 内のファイルは、/lib/ 内の同じ名前のファイルを上書きします。
kernel.core_pattern
手動で実行すると、期待どおりに設定されることがわかりましたsudo sysctl --system
。これは、デフォルトではこれらのシステム設定が読み込まれないことを意味している可能性があります。
答え1
kernel.core_pattern
さらに調査したところ、パッケージapport
システムの起動時に。
「/usr/share/apport/apport」という文字列を見たときに確認すべきでした。が実際に を上書きするものapport
かどうかわからなかったので、ソースコードを確認することにしました。apport
kernel.core_pattern
を実行するとapt-cache policy apport
、使用していたバージョンが であることがわかりました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:~$
そしてapport
'sLaunchPadページダウンロードリンクを見つけました:apport_2.20.9-0ubuntu7.tar.gz。
ソースコードを検索すると、ファイルのdebian/apport.init
内容が次のとおりであることがわかりました。
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
}
dpkg -L apport
そこで、 VM 上で実行して、次のファイルがあるかどうかを確認しました。
vagrant@ubuntu-bionic:~$ dpkg -L apport | grep init
/etc/init.d
/etc/init.d/apport
完全に一致するファイル名のファイルはありませんでしたが、調べてみたところ/etc/init.d/apport
、探していたのは次のファイルでした。
do_start()
{
...
...
echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable
}
/etc/sysctl.conf
がサービスによって読み取られることはわかっていたのでsystemd-sysctl
、次に確認したいのは、 がsystemd-sysctl
以前に開始されたかどうかでしたapport
。
apport
関連するサービスがあるかどうか検索したところ、次のサービスが見つかりました。
vagrant@ubuntu-bionic:~$ systemctl list-units | grep apport
apport.service loaded active exited LSB: automatic crash report generation
次に、それらの相互依存関係をチェックし、apport.service
次の後に開始されることを発見しましたsystemd-sysctl.service
:
vagrant@ubuntu-bionic:~$ systemctl list-dependencies apport.service
apport.service
● ├─system.slice
● └─sysinit.target
...
● ├─systemd-sysctl.service
...
...
vagrant@ubuntu-bionic:~$
つまり、の設定はでsystemd-sysctl.service
正しく読み取られますが、その設定はすぐに によって上書きされます。kernel.core_pattern
/etc/sysctl.conf
apport.service
これを検証するために、次の 2 行を追加しました/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
}
次に、VM を再起動しました。VM が再び起動すると、ファイルの/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
vagrant@ubuntu-bionic:~$
つまり、確かに私の設定は正しく読み取られましたが、その後 によって上書きされましたapport
。