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のユーザに書き換え。

更新成功し、エラーメールもなくなった。

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(木)/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/07/21(木)DNSを変えた(ZoneEdit-&gt;MyDNS)

2011/07/21 16:34 PC(Linux)
結論から書くと、Dynamic DNSサービスを変更し、ZoneEditの依存度を下げてMyDNSをメインにした。
$whois
がこうなった。
[Name Server]                   ns8.zoneedit.com
[Name Server]                   ns18.zoneedit.com

[Name Server]                   ns0.mydns.jp
[Name Server]                   ns1.mydns.jp
[Name Server]                   ns18.zoneedit.com
経緯としては、Try WiMaxした際にdt8.jpに接続できなかったことに端を発する。WiMaxの自動取得DNSがdt8.jpをタイムアウトしているようなのでざっと調べてみると、ZoneEditの挙動がおかしい。ns18は応答を返すがns8は応答を返さなかった。

ここで色々調べてみたのだが、どうもアクセス元として特定IPアドレスなりドメインなりをns8ははじいているようだ(そうとしか思えない)。下はWindowsのcmd.exe。
>nslookup dt8.jp ns8.zoneedit.com
DNS request timed out.
    timeout was 2 seconds.
*** Can't find server name for address 75.125.10.187: Timed out
Server:  UnKnown
Address:  75.125.10.187

DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
*** Request to UnKnown timed-out

>ping ns8.zoneedit.com

Pinging ns8.zoneedit.com [75.125.10.187] with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 75.125.10.187:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
と、こうなる。

自宅(so-net配下)ではnslookup, pingともに通っていたので気づかなかった。

もしかしたら今までこのサイト見られなかったりしたのかも。ごめんなさい。

nslookup(dig)テスト【DNSサーバ接続・応答確認】

上記のサイトでもはねられる。

ということで元々zoneeditは挙動が怪しかったこともあり、できれば乗り換えたいと考えた。個人運営ながらMyDNSがそこそこ長期かつ安定的に運営されている(感謝!)ようなので特に挙動が怪しいns8.zoneedit.comを廃し、MyDNSをメインに差し替えることにした。

しかし、調べてみると現在フルドメイン登録可能なフリーのDDNSがほとんど無くなっている。EveryDNSはDynDNSに吸収されるようだし、概して有料化かサービス停止の流れにあるようだ。無料DDNSは広告プログラムとくっつきづらいのもわかるので、仕方ないかもしれない。

MyDNSもいつまでサービスを提供していてくれるかわからない。将来的にどうするか。

ドメインをVALUE-DOMAINに移管すればVALUE-DOMAINのDDNSが使えるのだが、VALUE-DOMAIN自体が今不安定な状況のようなので今回は控えた。VALUE-DOMAINはいつの間にか安くなっていて、汎用jpに関して現在のレジストラ21-domainと値段がほぼ互角のようだ。経営が安定していることが確認できればVALUE-DOMAINへの移管も手ではある(VALUE-DOMAINのDDNSも不安定という噂があるが)。

自前でネームサーバを立て、フルドメインでない適当なDDNSでドメインを取得し(たとえばxxx.dyndns.org)、それをDNSとしてJPRSなりに登録するという手もある(技術的には可能なはずだが認識に誤りがあるだろうか?)。

話を戻す。とりあえず、1月程度問題がないかどうか確認し、問題ないようだったらZoneEditを全廃することとする。

【追記 2011/11/10】
2011/11/07付けでmydnsに一本化した。
[Name Server]                   ns0.mydns.jp
[Name Server]                   ns1.mydns.jp
さらばzoneedit。

2011/06/01(水)apache2がOut Of Memoryで落ちる

2011/06/01 18:07 PC(Linux)
Debianをsqueezeにした際にapacheが1.3系から2系に変わったのだが、以来どうもapacheがおかしい。
Out of Memory: Killed process #### (****)
半月~1月おきくらいで、上記メッセージがコンソールにあふれて操作不能・サーバ落ちとなる。****の部分はcgiの名前が出ているのだが、必ずしも同じものではない(adiaryが多いといえば多い)。

色々調べてみたのだが、
#apache2 -V
でみてみると、Worker MPMが動いている。topでみると255MBくらい仮想メモリを食ってるapache2プロセスが2つある。むむむ。

debianがなぜWorkerをメインに切り替えたのかは不明だが、preforkの方が実績がある上、うちのサイトではマルチスレッドで恩恵を受けるアプリはほとんどない。今回の件からもWorkerの方が考えなければいけない(設定しなければいけない)事項が多そうであるので、preforkに切り替える。

ApacheのMPM、「prefork」と「worker」を切り替える方法 – FlatLabs

まあdebianの場合、これだけでいいようだ。
#aptitude insatll apache2-mpm-prefork
これでmpm-workerが競合として検出され、最初に提示された解決方法がmpm-worker削除のみだったのでそれを選択。

また、設定ファイルもメンテした。httpd.confにはMaxRequestsPerChildが入ってたのだが、apache2.confのディレクティブには0指定されており利いてなかった可能性が高い。メモリリークが積まれていた可能性がある。
#diff apache2.conf.orig apache2.conf
103c103
<     MaxRequestsPerChild   0
---
>     MaxRequestsPerChild 100
100回ごとにプロセス再起動することで、リークの蓄積を回避する。
#apache2ctl configtest
#apache2ctl restart
して、アクセスなど問題ないことを確認。

しばらく様子見。

2011/02/12(土)lenny-&gt;squeeze入れ替え

2011/02/12 21:22 PC(Linux)
debianがメジャーアップデートして、squeezeがstableにきた。とりあえずアップデートしよう。

squeezeはCONFIG_SYSFS_DEPRECATED=nでないといけないというので、一応kernel作り直した。

色々悩んだけど、お任せでいいや。
aptitude update
aptitude install aptitude
aptitude dist-upgrade
ApacheがApache2になったので設定を移してちょっとおかしいところだけいじって対応。

うーん、ほんとはこんなことじゃないけないんだけどちょっと今時間がないのでこれでいこう。

以下のパッケージが削除されたのでメモ。
1)      dvipdfmx
2)      iceape-gnome-support
3)      initrd-tools
4)      irb1.8
5)      libdatrie0
6)      libdevmapper1.02
7)      libgnomekbd2
8)      libgnomekbdui2
9)      libmetacity0
10)     libreadline-ruby1.8
11)     libslab0
12)     libvorbis0
13)     libxcb-xlib0
14)     libxcb-xlib0-dev
15)     mysql-client
16)     mysql-server
17)     proftpd
18)     python-numeric
19)     racoon
20)     rdoc1.8
21)     rpm
22)     texlive-base-bin
23)     xserver-xorg-video-cyrix
24)     xserver-xorg-video-imstt

2011/01/06(木)カーネル再構築メモ

2011/01/06 23:22 PC(Linux)
debianもsqueezeとなったこの時代、自分の鯖もwoodyからいい加減な管理で使ってる所為かカーネルの再構築手順がちょっとややこしくなってきた。再構築の度にkernel panicするので、これなら成功するという手順をメモっておきたい。
#make menuconfig
#make bzImage
#make modules
#make modules_install
#installkernel ##VER## arch/i386/boot/bzImage System.map
#mkinitrd -o /boot/initrd-##VER##.img ##VER##
#grub-update
sudoとかは適当に読み替えで。

でここからが肝心。これだけではうまくいかない。grub-updateは/boot/grub/menu.lstを更新するが/dev/sda1(SATAであるため)が正であるのに/dev/hda1と記述される。しかもご丁寧に既存の物まで書き換えて…… おそろしい。ということでmenu.lst内のデバイス指定を正しい物に修正する。grub-updateは何となく挙動が変なので、使わない方がいいのかも知れない。そのうち研究。

私の環境のinstallkernelはinitrdを作らないため、initrdは別途作る必要がある。initrd作成についてはこの直後にinitramfs-toolsを入れたので、今後はupdate-initramfsかmkinitramfsが使えると思う。それは次回。
OK キャンセル 確認 その他