Linux/abrt

abrt (2016-12-10、追記:2017-03-06)




概要(実は本題ではない)

abrtというのは、RedHat系に入っている自動バグ報告ツールです。
問題が検出されたときにその内容を保管して、自動的に報告するとか、送信するとかできるとか。

・・・ん? レポートの自動送信?
ちょっと待って!? 勝手なことしないで!

# abrt-auto-reporting
disabled

ほっ。自動報告機能は無効になっています。
必要ならば「abrt-auto-reporting enabled」 で有効化しましょう。
あと、「/etc/abrt/abrt.conf」の「AutoreportingEnabled」かな。

それはさておき、
ABRT のクラッシュ検出テスト にクラッシュ検出の例があるので、まず実行してみます。

# sleep 100 &
[1] 4042
# kill -s SEGV 4042
# abrt-cli list
id e06b35dbe1cd08da2257fc1d2f7e77a742396e18
reason:         sleep killed by SIGSEGV
time:           2016年11月24日 07時43分10秒
cmdline:        sleep 100
package:        coreutils-8.22-15.el7_2.1
uid:            0 (root)
count:          1
Directory:      /var/spool/abrt/ccpp-2016-11-24-07:43:10-4042

そして、root に報告メールが飛んできました。
その後も、プロセスがうっかり予期せぬ落ち方をする度に、報告をくれました。
このメール報告はサーバ管理の一環として嬉しいかも。異常検知の手段の1つとして。

詳細は、Directory指定でも見れます。

# abrt-cli info  -v  /var/spool/abrt/ccpp-2016-11-24-07:43:10-4042

後始末は rm で。

# abrt-cli rm /var/spool/abrt/ccpp-2016-11-24-07:43:10-4042

設定は、前述の通り、 /etc/abrt/ にある他にも、
もし、レポートを自動送信する場合は、
/etc/libreport/events.d/
で、EVENTに応じた送信方法を設定すれば良いようです。
手動で送信するならば以下

# abrt-cli report /var/spool/abrt/ccpp-2016-05-24-10:43:23-679

私はとりあえずメール貰えれば満足なので、その辺の調整は追々ですね。

.cache/abrt/lastnotification が更新される?

でも今回はバグのレポートが飛ぶと便利ですね、が本題ではありません。

そもそも abrt が気になった理由は、
TripWire で「/root/.cache/abrt/lastnotification」が
度々更新されているという報告を受けたからなんです。
でも、バグレポートなんて飛んで来なかったし、
なぜ、lastnotification が更新される?

・・・あれ?
「/etc/profile.d/abrt-console-notification.sh」見ると、
毎回、無条件に mktemp して、mv -f で上書きしてない?
shell に「# always update the lastnotification」とかコメント書いてあるし。
・・・まさか

# ls -l ~/.cache/abrt/lastnotification
-rw------- 1 root root 11 12月 10 07:12 /root/.cache/abrt/lastnotification
# date
2016年 12月 10日 土曜日 08:12:42 JST
# bash
# ls -l ~/.cache/abrt/lastnotification
-rw------- 1 root root 11 12月 10 08:12 /root/.cache/abrt/lastnotification

やっぱり~! これ、shell 起動するたびに上書いちゃうんじゃん!?
何か不味い事でも起きているのかと思えば・・・なんだ・・・

・・・まぁ、いいや。
abrt周りは、/var/spool/abrt とかもtripwire でチェックしとけばいいのかな?

abrt-watch-log -F BUG: WARNING: at WARNING !?

(abrt またお前か!?)

ps -ef を打ったら、変なプロセスが!?

# ps -ef | grep log
root 498 1  0  2016 ?   00:00:06 /usr/bin/abrt-watch-log -F
   BUG: WARNING: at WARNING: CPU: INFO: possible recursive
   locking detected ernel BUG at list_del corruption
   (中略)
   iret exception: /var/log/messages -- /usr/bin/abrt-dump-oops -xtD

BUGとかWARNINGとか物騒な文字列が羅列されています。
ゾッとしてWeb検索すると、どうやら「仕様」らしいですね。
引数が長いだけなんですって・・・

abrt-watch-log -F 文字列 ファイル プログラム

というコマンドが実行されているだけなんです。

私の環境の場合は、(CentOS 7)
systemd-cgls コマンド で、abrt-oops.service から起動されていることが分かったので、
/usr/lib/systemd/system/abrt-oops.service を見てみると、
あの長い引数を生成しているのは「abrt-dump-oops -m」でした。
(たぶん固定文字列。githubのabrt、kernel.c の s_koops_suspicious_strings[] より。)

# abrt-dump-oops -m

で、総勢32個の引数が出力されることが確認できました。

今さら気が付いた理由ですが・・・
単に「ps -ef」だと画面右端の超過文字は削除してくれていたけど、
「ps -ef | grep log 」とかで全部表示されて、気が付きました・・・

これ、プロセス監視とか、ツールによっては引数拾ってドキッとするかも。