メッセージ

2011年12月01日の記事

2011/12/01(木)/dev/sdaが無い!

2011/12/01 11:37 PC(Linux)
起動時にデバイスノード/dev/sda, /dev/sda1, /dev/sda2が作成されない問題。

環境を整理すると、
kernel: 2.6.34.1(自分でコンパイル)
udev: 164-3
HDD: SATA HDD(内蔵)

/sys/block/sda/, /sys/block/sda/sda1/, /sys/block/sda/sda2/はできており、fstabsでのマウントも成功している。

これなら起動時にデバイスノードが自動的に作成されることを期待するのだが、なぜか作成されない。デバイスノードがないとfdiskとかできないので大変にまずい。

どうも1月にsqueezeに入れ替えたときから発生していたような気配だ。fstabsはUUIDで書いていたので、今まで問題が起こらなかった(もしくは気づかなかった)。

さて、squeezeからデバイス割り当ての仕組みがudevに変わっている。この移行に関しては注意書きが手順書に書かれるくらいなので大きな変更なのだが、一応これは気をつけてカーネルを作り直したつもり。起動はするし、警告も出てる気配がないのでこれはudevとsysfsの連携が単にうまくいっていない。

で、調べてみると、
[Sorcerer-admins] udev does not create sda, sdb and md0
完全に追えてないのだが、以下自分の解釈。udevの元々の仕組みはデバイスのモジュール組み込みを想定しているためモノリシックカーネルの対応が不十分な場合があるとのこと。あちこち回ってみると、udevのバージョン変更で直った例が多いようなのだが、debianは相変わらずtesting=unstableだし、依存関係がもうすンごかったので断念。うーん、推奨環境(カーネルもdebianのものを使用)じゃないのでバグ報告がためらわれる。しょうがないので、まずはコマンドラインで、
# cat  /sys/block/sda/dev /sys/block/sda/sda1/dev /sys/block/sda/sda2/dev
8:0
8:1
8:2
としてメジャー・マイナー番号を調べ
# mknod /dev/sda b 8 0
# mknod /dev/sda1 b 8 1
# mknod /dev/sda2 b 8 2
とした。

で、これを起動スクリプトに追加。
$ cat /etc/init.d/mk_sda_node
#!/bin/sh

if ! [ -e /dev/sda ]; then
        mknod /dev/sda b 8 0
        mknod /dev/sda1 b 8 1
        mknod /dev/sda2 b 8 2
fi

exit 0
雑にこんなんでいいや。すでにデバイスノードが存在してればmknodは特に問題は起こさないようだし。ずれることもないだろう(udevを頭から否定)。
update-rc.d mk_sda_node start 15 1 2 3 4 5 .
debian流で登録。single user modeでもあった方がいいでしょ。
update-rc.d: warning: /etc/init.d/mk_sda_node missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
 Adding system startup for /etc/init.d/mk_sda_node ...
   /etc/rc1.d/S15mk_sda_node -> ../init.d/mk_sda_node
   /etc/rc2.d/S15mk_sda_node -> ../init.d/mk_sda_node
   /etc/rc3.d/S15mk_sda_node -> ../init.d/mk_sda_node
   /etc/rc4.d/S15mk_sda_node -> ../init.d/mk_sda_node
   /etc/rc5.d/S15mk_sda_node -> ../init.d/mk_sda_node
LSBがらみは今度調べよう。

再起動してデバイスノードがあることを確認。うーん、次期wheezyまでこれでしのぐか…

2011/12/01(木)メールがローカルに配信されない

2011/12/01 14:01 PC(Linux)
しばらくほったらかしにしてたメールを久々に触ってみようと思ったら、何かとんでもないことになっていた。
# qmail-qstat
messages in queue: 54682
messages in queue but not yet preprocessed: 54680
最初はすわ不正中継爆弾? とか思ったのだが、
# cat /var/log/mail.log
1218742:Dec  1 10:19:04 debian qmail: 1322702344.535144 warning: unable to create local/8/1656100
...
おおう、これはローカルへの配信ができずに延々ループしてるっぽい。そしてmail.logのサイズがどんどんふくらんでいる。そこで、/var/spool/qmail/local/をのぞいてみたら、

空っぽ!

え、分割ディレクトリはどこへ行ったの?

分割ディレクトリを自動的に作る機能はなさそう…… しかし、分割ディレクトリがないのが原因っぽい。

ということで、分割ディレクトリを標準の23作成する。
# mkdir 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
して、chmod,chown,chgrpしたところ…… 動き出した。
ログをチェックして、warningが消えたことを確認

えー、なんだこれ。手で消した記憶はないので、update時に何かが消してしまったのかqmailの仕様が変わったのか。

うーん原因までは追えなかった。

一応解決。

2011/12/01(木)awstatsの更新がおかしい

2011/12/01 22:13 PC(Linux)
メールをよみがえらせてみたら、こんなメッセージが山ほど来ていた。
Create/Update database for config "/etc/awstats/awstats.conf" by AWStats version 6.95 (build 1.943)
From data in log file "/var/log/apache/access.log"...
Error: Couldn't open server log file "/var/log/apache/access.log" : Permission denied
Setup ('/etc/awstats/awstats.conf' file, web server or permissions) may be wrong.
Check config file, permissions and AWStats documentation (in 'docs' directory).
うへえ、awstatsの更新が死んでる。……あれでもおかしい、awstats自体はちゃんと最新のデータを取ってきてる。しかしメールは続々来る。なんだこれはと調べてみたら、/etc/cron.dと/etc/cron.hourlyにそれぞれawstatsのスクリプトがあった…… orz。

片方が成功、片方が失敗して正常な更新とエラーメール(受け取れてなかった)を延々続けていたのか。なんだそれ!

awstatsは確か当初ソースから入れたので残っていたのかもしれない。パッケージに切り替えたときに旧cron設定を消し忘れたのだろう。

ということで、
$ dpkg -L awstats
で調べつつ、
cron.hourlyの古いスクリプトを消し、パッケージから入っていると思われるcron.d側を残した。

この状態でまだエラーメールが来るので、/etc/cron.d/awstats中のユーザ指定をaccess.logのユーザに書き換え。

更新成功し、エラーメールもなくなった。
OK キャンセル 確認 その他