読者です 読者をやめる 読者になる 読者になる

treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

(2/2)exim4エラー「Warning: purging the environment.」解消編

昨日からの続きです。
 ⇒(1/2)exim4エラー「Warning: purging the environment.」
exim4で「Warning: purging the environment.Suggested action: use keep_environment.」というエラーの原因は、
つまるところ、別のところに問題があった、という結果をご報告します。

もうちょっと調べると…

他のconfigファイルを調べていくうちに「conf.d」ディレクトリ内に「~.dpkg-dist」となっている設定ファイルを一つ発見しました。

f:id:treedown:20161121111653p:plain

これか。
「02_exim4-config_options」の設定ファイルに「02_exim4-config_options.dpkg-dist」が生成されていました。

----------------------------------------------
/etc/exim4/conf.d/main$ ls -la
合計 36
drwxr-xr-x 2 root root 4096 4月 12 2016 .
drwxr-xr-x 9 root root 4096 10月 1 2013 ..
-rw-r--r-- 1 root root 3702 9月 23 2012 01_exim4-config_listmacrosdefs
-rw-r--r-- 1 root root 7516 7月 5 2014 02_exim4-config_options
-rw-r--r-- 1 root root 7712 3月 15 2016 02_exim4-config_options.dpkg-dist
-rw-r--r-- 1 root root 3187 9月 23 2012 03_exim4-config_tlsoptions
-rw-r--r-- 1 root root 237 9月 23 2012 90_exim4-config_log_selector
----------------------------------------------
これっぽいですね。早速二つのファイルを調べると、以下の相違点がありました。

f:id:treedown:20161121112028p:plain
f:id:treedown:20161121112040p:plain

f:id:treedown:20161121112053p:plain

内容を比較してみると、多分不要になった表記として
----------------------------------------------
.ifndef MAIN_FORCE_SENDER
local_from_check = false
local_sender_retain = true
untrusted_set_sender = *
.endif
----------------------------------------------
↑これを消しつつ、これ↓を加える必要がある、ように見えます。
----------------------------------------------
.ifdef MAIN_KEEP_ENVIRONMENT
keep_environment = MAIN_KEEP_ENVIRONMENT
.else
# set option to empty value to avoid warning.
keep_environment =
.endif
.ifdef MAIN_ADD_ENVIRONMENT
add_environment = MAIN_ADD_ENVIRONMENT
.endif
----------------------------------------------

修正から再起動

最初は手動で加筆・削除したのですが、configファイルの
----------------------------------------------
#timeout_frozen_after = MAIN_TIMEOUT_FROZEN_AFTER
timeout_frozen_after = 1m
----------------------------------------------
この部分が引っ掛かってしまいました。コレ、動作テストする必要があった際に自分で入れた設定なのですが、このままだと
----------------------------------------------
$ sudo /etc/init.d/exim4 restart
[....] Stopping MTA for restart:2016-11-21 10:16:43 Exim configuration error in line 161 of /var/lib/exim4/config.autogenerated.tmp:
"timeout_frozen_after" option set for the second time
Invalid new configfile /var/lib/exim4/config.autogenerated.tmp, not installing
/var/lib/exim4/config.autogenerated.tmp to /var/lib/exim4/config.autogenerated
----------------------------------------------
エラーになってしまいます。
試しにコメントアウトの記述を入れ替えると
----------------------------------------------
timeout_frozen_after = MAIN_TIMEOUT_FROZEN_AFTER
#timeout_frozen_after = 1m
----------------------------------------------
リスタート時にこういう具合に
----------------------------------------------
$ sudo /etc/init.d/exim4 restart
[ ok ] Stopping MTA for restart: exim4_listener.
[ ok ] Restarting MTA: exim4.
ALERT: exim paniclog /var/log/exim4/paniclog has non-zero size, mail system possibly broken
----------------------------------------------
アラート(警告?)が出るようになってしまいました。
ただし、この時点で
----------------------------------------------
$ /usr/sbin/exim4 -bP | grep environment
add_environment =
keep_environment =
----------------------------------------------
本記事の対象となっていたエラーは解消しています。

exim起動時エラーを解消

さて、新たなアラートを迎えまして、さっそくログを確認してみました。
----------------------------------------------
$ sudo cat /var/log/exim4/paniclog
2016-00-00 00:00:30 Exim configuration error in line 161 of /var/lib/exim4/config.autogenerated.tmp:
"timeout_frozen_after" option set for the second time
----------------------------------------------
「timeout_frozen_after」に起因していることが分かります。
「timeout_frozen_after =」自体をカスタマイズする必要はいまの現状ではなく、もはや不要な設定となっているので、「.dpkg-dist」側を適用させてしまおう、ということにしました。結局「.dpkg-dist」側じゃないとエラーになるから手動で修正するのも「.dpkg-dist」ファイルをそのまま適用するのも同じこと、といえます。
----------------------------------------------
$ sudo mv 02_exim4-config_options 02_exim4-config_options.old
$ sudo mv 02_exim4-config_options.dpkg-dist 02_exim4-config_options
----------------------------------------------
一応ファイルはバックアップして「.dpkg-dist」ファイルを本番ファイル名にリネームします。
念のため確認。
----------------------------------------------
$ /usr/sbin/exim4 -bP | grep environment
add_environment =
keep_environment =
$ sudo /etc/init.d/exim4 restart
[ ok ] Stopping MTA for restart: exim4_listener.
[ ok ] Restarting MTA: exim4.
ALERT: exim paniclog /var/log/exim4/paniclog has non-zero size, mail system possibly broken
----------------------------------------------

「/usr/sbin/exim4 -bP | grep environment」の実行結果は良好なのですが、リスタートの結果が変わらない、ということになりました。

これは、「/var/log/exim4/paniclog」に記載のある対処をしたのち、手動で「/var/log/exim4/paniclog」を削除しないと、ずーっとexim4再起動でALERTメッセージが表示されてしまう、というものです。つまり対処したら/var/log/exim4/paniclogは手動で削除、これが必要ということです。

----------------------------------------------
$ sudo rm /var/log/exim4/paniclog
$ sudo /etc/init.d/exim4 restart
[ ok ] Stopping MTA for restart: exim4_listener.
[ ok ] Restarting MTA: exim4.
$
----------------------------------------------

こうしてALERTも出力されなくなりました。無事対処が完了のようです。