clamdが起動しない・・・

clamdが起動しない

# service clamd start
clamd を起動中: /bin/bash: line 1: 14616 File size limit exceeded/usr/local/sbin/clamd [失敗]

でも

# /usr/local/sbin/clamd
# echo $?
0

では起動する。
この差はいったい・・・
このような場合の基本、ログを見てみる。
起動失敗パターン

# less /var/log/clamd.log
Sat Apr 11 01:07:07 2009 -> +++ Started at Sat Apr 11 01:07:07 2009
Sat Apr 11 01:07:07 2009 -> clamd daemon 0.95.1 (OS: linux-gnu, ARCH: i386, CPU: i686)
Sat Apr 11 01:07:07 2009 -> Log file size limited to 2097152 bytes.
Sat Apr 11 01:07:07 2009 -> Reading databases from /var/lib/clamav
Sat Apr 11 01:07:07 2009 -> Not loading PUA signatures.

こちらは成功パターン

# less /var/log/clamd.log
Sat Apr 11 01:08:17 2009 -> +++ Started at Sat Apr 11 01:08:17 2009
Sat Apr 11 01:08:17 2009 -> clamd daemon 0.95.1 (OS: linux-gnu, ARCH: i386, CPU: i686)
Sat Apr 11 01:08:17 2009 -> Log file size limited to 2097152 bytes.
Sat Apr 11 01:08:17 2009 -> Reading databases from /var/lib/clamav
Sat Apr 11 01:08:17 2009 -> Not loading PUA signatures.
Sat Apr 11 01:08:17 2009 -> Not loading PUA signatures.
Sat Apr 11 01:08:20 2009 -> Loaded 538775 signatures.
Sat Apr 11 01:08:20 2009 -> LOCAL: Unix socket file /tmp/clamd.socket
Sat Apr 11 01:08:20 2009 -> LOCAL: Setting connection queue length to 15
Sat Apr 11 01:08:20 2009 -> Limits: Global size limit set to 104857600 bytes.
Sat Apr 11 01:08:20 2009 -> Limits: File size limit set to 26214400 bytes.
Sat Apr 11 01:08:20 2009 -> Limits: Recursion level limit set to 16.
Sat Apr 11 01:08:20 2009 -> Limits: Files limit set to 10000.
Sat Apr 11 01:08:20 2009 -> Archive support enabled.
Sat Apr 11 01:08:20 2009 -> Algorithmic detection enabled.
:(以下省略)

失敗パターンはシグネチャを読み込めていない??
どこでこけてるのかわからないので、起動スクリプトをデバッグモードで実行してみる

# bash -vx /etc/init.d/clamd
:(省略)
clamd を起動中: + ulimit -f 20000
+ LANG=
+ daemon /usr/local/sbin/clamd
:(省略)
+ /bin/bash -c ‘ulimit -S -c 0 >/dev/null 2>&1 ; /usr/local/sbin/clamd’
/bin/bash: line 1: 14503 File size limit exceeded/usr/local/sbin/clamd
+ ‘[‘ 153 -eq 0 ‘]’
+ failure ‘clamd 起動’
:(省略)

このところどころで出てくるulimitって何ですか??
さっきの/usr/local/sbin/clamdを直接実行したときは起動できたのでulimitが非常にくさい!
で、さっきのログを見た結果、シグネチャが読み込めていない。
シグネチャのサイズがでかすぎる??

# ls -l /var/tmp/clamav-0cae8acb8c9855ce5c67f55328bfce6e:
合計 25380
-rw-rw-rw- 1 root root 17992 4月 11 01:26 COPYING
-rw-rw-rw- 1 root root 4725917 4月 11 01:26 main.db
-rw-rw-rw- 1 root root 716040 4月 11 01:26 main.hdb
-rw-rw-rw- 1 root root 318 4月 11 01:26 main.info
-rw-rw-rw- 1 root root 20480000 4月 11 01:26 main.mdb

20MB??この数字、起動スクリプトをデバッグしたときにどこかにあったよな・・・

# less /etc/init.d/clamd
:(省略)
start() {
echo -n $”Starting $prog: ”
# Don’t allow files larger than 20M to be created, to limit DoS
# Needs to be large enough to extract the signature files
ulimit -f 20000
LANG= daemon $progdir/$prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/clamd
return $RETVAL
}
:(省略)

20480000byte ギリギリアウト??
なので/etc/init.d/clamd 中の ulimit -f の値を24000にしてみる。

# vi /etc/init.d/clamd
:(省略)
start() {
echo -n $”Starting $prog: ”
# Don’t allow files larger than 20M to be created, to limit DoS
# Needs to be large enough to extract the signature files
ulimit -f 24000
LANG= daemon $progdir/$prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/clamd
return $RETVAL
}
:(省略)

起動

# service clamd start
clamd を起動中: [ OK ]

起動できた!
原因はシグネチャファイルのサイズが起動スクリプトで定義されているファイルサイズ制限より大きかったから。
以上