静かなホームサーバー 

(その7: サーバー機をCeleron-MとFedoraCore-6に更新)

2007-2-11

4歳半のホームサーバー

eden/epiaのCPU/Motherboardも2007年春には4歳半。こんなに現役で長持ちさせたPCは初めて。さすがに古くなった。USB-2.0が使えない。CPUの温度計測もできない。VMwareが使えない。世の中のCPUは、CoreDuoやAthlon64などに移っている。Edenは涼しくてよいが、遅いし、ノートPC用のPentium-Mがデスクトップでも使えるようになって、省電力CPU事情も変わった。ソフトウェア環境はといえば、2005年秋にFedoraCore-4に上げてから1年半。FedoraCoreも6が出ました。Gnomeなどもだんだん良くなっている。Postfixを入れて、imap対応にし、セキュリティも良くしたい。ディスクの容量は逼迫するほどではないが、どうしてもだんだん狭くなる。

何のかんの言っても、結局、新しいPCサーバを作りたいという自作の虫が騒いだだけのことかも。前回は、3,4年したら入れ替えか、などと書いているが、1年半ですね。Pentium-Mがなくなりそうなので、焦っているというのもある。

新しいサーバー機

24時間、365日連続使用するのだから、低電力・低発熱が最優先だが、処理性能向上も果たしたい。現在のEPIAは、mini-ITXで、省スペースでもある。新居では、サーバ機を置くスペースは玄関脇の土間で、スペースファクタと静音性はそれほど気にしなくて良い。

CPUは、いろいろ検討したが、CPUの消費電力を見れば、Pentium-Mが有利なことは明らか。1.2GHz以下なら5Wですむ。Edenが500MHzで5Wであり、その500MHzというのもPentiumとの比較では300MHz以下の価値しかないので、単位電力当たりの性能では、Pentium-MはEdenよりずっと良い性能である。さらに、Pentium-Mは、クロック周波数を動的に下げて消費電力を落とすことができる。Athlon64などにも同様の機能があるが、20−40W と問題外。Cyrixの新しい機種は、クロックが上がっているが、消費電力が10Wを下回ることはないのでやはり問題外。CoreDuoは、Pentium-Mを継承するアーキテクチャで、クロック当たりの性能は高いし、これから主流になるアーキテクチャなのだろうが、ファンレスにできるほどではない。というわけでPentium-Mに決定。

クロックは、1.2GHzで十分だが、秋葉原のお店に行くと、1.7GHzが最低で、もっと遅いバージョン(=低電力)がないので躊躇する。後日、つくばのパソコン工房に行くと、さすがに流行に遅れているらしく、Celeron-Mの1.4GHzが8000円くらいで出ていた。Celeronならキャッシュが小さい分、さらに低電力だろう。Pentium-Mは、2003年頃に出たが、ノートPC専用で、自作はできなかった。2005年頃にやっとマザーボードが出て評判になった。このごろはCoreDuoに興味が移ったらしく、やはり十分な種類のマザーボードが出ているわけではない。準サーバー向きのMSIの915GM Speedster に決める。16,000円くらいだった。実は、EPIAと同じmini-ITXにもPentium-M版マザーボードがあり、迷ったが、1万円くらい高いのでやめ。小さいくせにmini-ITX用のケースも高い。

このほかに、DDR2-SDRAM (PC3700, CL=4) 512MB、500GB-HDD、DVDの書き込みもできるドライブなどを買う。5年前にくらべると何もかも5倍くらいの性能で半分以下の値段になっている。HDDは、SATAにする。EPIAには付かなかった。Speedsterのマザーには、SATA-HDDが4機、parallel-ATAが2機取り付けられる。DVDドライブなどはなぜかパラレルのままなので、ATAポートはなかなか廃止できない。SATAの方がケーブルが細くて取り回しが簡単。FDドライブなど不要だが、いっしょにcompact flash, SD, memory stickなど各種メモリカードスロットのついたコンボドライブ2,980円を買う。

新しいサーバーパーツ
(何もこんなところで
お店広げなくても。。。)
マザーボード、MSI Speedster
とうしてstarでないのだろう
CPUとメモリを装着してある。
メモリは、DDRとDDR2の両方に
対応しているが、両方のソケットを
買わされるのは無駄。
USBは8ポートもあるし、1394も
付いている。ネットワークは、
1Gが2本付いている。VGAは、
チップセットに内蔵の物で十分
なので、16000円なら満足。
CPUは、8000円でファン付き
ヒートシンクが付いているが、
結局ファンは使わない。
なにやら、都市の景観のようにも
新旧サーバー
マイクロATXでは、mini-ITXの小ささ
にはとうていかなわない。重さも
倍くらいある。しかし、ディスクが
もう一台付けられるのと、PCIカードが
入るのは余裕。mini-ITXのマシンは
何に使おうか?

FedoraCore-6

現行のサーバーは動かしたまま、並行して新しいサーバーをセットアップすればよいので急ぐ必要はない。インストールCDを作って、立ち上げる。ディスクのパーティションは、こんな感じ。(linux2)は、Fedora-7, 8を入れるところ。(win)は、VMWareを使ってwindowsを入れるかもしれない場所。

sda1 /(root) 8GB
sda2 (win) 32GB
sda3 (linux2) 16GB
sda5 /usr/local 8GB
sda6 /var 4GB
sda7 swap 1GB
sda8 /home 400GB

CDドライブ、HDがだいぶ速くなっていて、2時間くらいでインストール終了。Xwindowsやマウスのトラブルもなかった。

性能を測ってみようと思って、HDbenchをするが、走らない。hdparm -t では、30-60MB/s の転送速度が出ている。super-piでは、104万桁が53秒ほどで、なかなか優秀。

設定、設定、設定

httpd (apache), telnetd, ftpd, samba, swat, webmin, gaucheなどのdaemonを、現行サーバーを参考にしながら設定していく。hosts.allowは、以前のものがそのまま使えるが、proftpdがvsftpdになっていたりする。Fedora6のgnomeのメニュー、システム、管理、サービスのところには、/etc/init.d、/etc/xinetd.d/ のあたりのサービス起動スクリプトを有効・無効にする機能がある。chkconfigを実行したり、xinetd.dの下を編集しなくてすむのだが、開いてみてしまう。webmin, swatも同様で、GUIで設定できるとわかっていても、一度で動くことはまれで、いろいろいじっているうちにめんどくさくなって、*.confを直接編集して/etc/init.d/service restart をやってしまう。

httpdでは、fcgiが使えないことを発見して愕然とする。久しぶりにfast cgiのサイトに行ってみたが、数年間放置されているようで、新しいLinuxに対応できていない。コンパイルするとエラーが出る。これを直すのはかなり苦労しそうなので、通常のCGIを呼び出すことにしておく。

一番重要なのが、Emailサーバの設定だ。これまで、sendmail+qpop でやってきたが、そろそろ乗り換えたい。これについては後ほど。

サーバーの健康管理、CPU周波数制御 cpuspeed、lm_sensors, smartctl

Pentium-Mが魅力的なのは、クロックを動的に可変できること。サーバーは、24時間稼働させるが、インタラクティブに使うことはまれなので、負荷は低い。クロックを落として消費電力を下げられればありがたい。

Fedora-6のデスクトップには、CPU速度表示パネルがある。それを起動してみるが、「対応していません」というようなエラーが出て、1.4GHzに固定されていることが示される。webを検索すると、Fedora-6のインストールでは、新しいi686CPUであっても、i586のカーネルが入ってしまうとのこと。586とは、初代Pentiumのことで、Pentium-Pro, Pentium-II以降がi686のはず。CPUクロックを可変にする機能は、i686以降向きのカーネルでしか使えない。よって、早くも、カーネルの入れ直しが必要。

Fedore6のカーネルリプレイスをみるとには、PAEカーネルを入れてまた削除するようなことが書いてある。そんなややこしいことしなくても、yum install kernel.i686で行くのではないか?i686用のカーネルにすると、今度は、ドライバがないという。/lib/modules/2.6.19-1.2895.fc6/kernel/arch/i386/kernel/cpu/cpufreq には、acpi-cpufreq.koと、p4-clockmod.ko の二つがある。/etc/cpuspeed.confには、DRIVER= となっていて、指定がない。acpiの方を指定するとエラーになる。p4の方を指定すると、OK.よくわからないが、これでCPU速度が表示されるようになった。アイドルしていると175MHz、ロードが上がると1.4GHzになる。その中間の周波数もあるのだが、めったに見ることはない。

ところで、このサーバー機の発熱状態はどんなものか?内部には、CPU, 電源、の他に一つ、小さいシロッコファンが付いている。電源を入れると全部がフル回転するが、BIOSからLinuxに制御が渡る頃には一段静かになる。ケースを開けてみるが、この時期(2月)、22度の室温の部屋では、CPUは全く熱くない。この分なら大丈夫だろうということで、CPUファン、ケースファンを停めた。

停めただけでは熱暴走するかもしれないので、温度を監視する必要がある。lm_sensorsをインストールし、sensors_detectで見つかったセンサーを/etc/modprobe.confと/etc/rc.d/rc.localに登録する。sensorsで見てみると、CPU温度は、43-45℃くらいである。マザーボードが41℃。これなら大丈夫。夏には、10℃上がるくらいだから、特に危険な温度ではない。

# sensors
w83627thf-isa-0290
Adapter: ISA adapter
VCore: +1.31 V (min = +0.70 V, max = +1.87 V)
+12V: +12.95 V (min = +0.97 V, max = +0.00 V) ALARM
+3.3V: +1.81 V (min = +0.02 V, max = +0.53 V) ALARM
+5V: +5.07 V (min = +5.33 V, max = +3.41 V) ALARM
-12V: +1.62 V (min = -14.91 V, max = -14.91 V) ALARM
V5SB: +5.13 V (min = +0.22 V, max = +0.43 V) ALARM
VBat: +3.26 V (min = +2.06 V, max = +0.00 V) ALARM
fan1: 0 RPM (min = 10546 RPM, div = 2) ALARM
CPU Fan: 0 RPM (min = -1 RPM, div = 2) ALARM
fan3: 0 RPM (min = 337500 RPM, div = 2) ALARM
M/B Temp: +41属C (high = +0属C, hyst = +0属C) sensor = diode ALARM
CPU Temp: +44.5属C (high = +120属C, hyst = +115属C) sensor = diode (beep)
temp3: +41.0属C (high = +80属C, hyst = +75属C) sensor = diode
vid: +0.700 V (VRM Version 1.3)
alarms:
beep_enable:
Sound alarm enabled

ついでに、ハードディスクもsmartで検査しておく。HDDの温度は44℃で、CPUとほとんど同じ。

smartctl -a -d ata /dev/sda
smartctl version 5.36 [i386-redhat-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Device Model: WDC WD5000KS-00MNB0
Serial Number: WD-WCANU1409800
Firmware Version: 07.02E07
User Capacity: 500,107,862,016 bytes
Device is: Not in smartctl database [for details use: -P showall]
ATA Version is: 7
ATA Standard is: Exact ATA specification draft version not indicated
Local Time is: Sun Feb 11 16:58:17 2007 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status: (0x84) Offline data collection activity
was suspended by an interrupting command from host.
Auto Offline Data Collection: Enabled.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: (14400) seconds.
Offline data collection
capabilities: (0x7b) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 2) minutes.
Extended self-test routine
recommended polling time: ( 179) minutes.
Conveyance self-test routine
recommended polling time: ( 6) minutes.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 200 200 051 Pre-fail Always - 0
3 Spin_Up_Time 0x0003 224 223 021 Pre-fail Always - 5766
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 29
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
7 Seek_Error_Rate 0x000f 200 200 051 Pre-fail Always - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 255
10 Spin_Retry_Count 0x0013 100 253 051 Pre-fail Always - 0
11 Calibration_Retry_Count 0x0012 100 253 051 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 27
194 Temperature_Celsius 0x0022 253 253 000 Old_age Always - 44
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
197 Current_Pending_Sector 0x0012 200 200 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0010 100 253 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x0009 100 253 051 Pre-fail Offline - 0

SMART Error Log Version: 1
No Errors Logged

室内温度センサー

我が家はセンサーホームで、新築時に壁の中に10個の温度センサーが埋め込まれている。150円のセンサーだけどね。その値をpicoというプリンタポートに付けるAD変換器で読んで記録していたが、そのドライバpicopar.koが動かなくなっている。insmod時に、invalid kernel moduleというエラーが出ている。カーネルを入れ替える前までは動いていたから、i686のカーネルと互換がなくなっているのだろう。実際、ドライバのMakefileは、/usr/src/kernels/*.i586 の中を参照しているが、これはi586用である。kernel-devel.i686をインストールすればよいのだが、ちょっと苦労した。yum install (update) kernel-devel.i686では、そのモジュールはすでにインストールされている、と言われる。yumには、586用と686用の区別がつかないのだろうか。しょうがないので、現有のi586向きのdevelモジュールを消去した。/usr/src/kernels/の下は空っぽになっている。それからkernel-devel.i686をダウンロードして、picopar.koをmakeし直すと、今度はエラーもなくinsmodが成功した。

これで室内温度はまた測定できるようになったが、2007年2月3日から11日の一週間はデータが抜けたり、連続でなかったりする。

新しいメールシステム

一番めんどうなのが、Emailサーバーの設定だ。sendmail + qpopそれにsasl-auth, procmailの設定をやり直すのはぞっとする。webminでかなり簡単にはなったが、特にsendmail.cf には謎が多い。

今回、Emailシステムを、postfix + cyrusimapで再構築しようと言うのがハイライトである。sendmail--> postfixは、sendmail.cfを嫌ってのこと。巷ではpostfixに乗り換える人が多いようだ。cyrusは、popだけでなくimapをサポートしたいということ。popでの接続時間が長く、ときどき同じメールが2度3度と取り込まれてしまうことがあり、閉口している。複数のマシンで同じメールサーバから受信するので、spamメールをやはり複数のマシンで整理するのにも時間を取られる。サーバーで撃退してしまいたいという野望もある。

さて、postfixとの戦いとは、/etc/postfixの下にある、main.cfとmaster.cfの設定である。そのやり方は、たくさんの体験記が出ているが、やはりpostconf.5をちゃんと見ておくべきでしょう。いや、そもそも、postfixがどのように動作するか、あらすじを知っていないと失敗しそうです。sendmailは複雑だ、という風評がありますが、だからといってpostfixが簡単なわけではないですね。とても拡張性に富んだ構成になっています。saslauthdも同時に立ち上げておきます。実は、新しいサーバに引っ越して、saslpasswdをしてパスワードを設定しようとしたところ、saslpasswdがない!代わりにsaslpasswd2を使いますが、sendmailの認証の設定は変えなくてよいのでしょうか?popauthに至っては、存在しない!というわけで、sendmail+qpopを捨てて、postfix+cyrusに挑戦してみたのでした。

localhostだとつながるけれど、サーバーのhostname, ipaddressではつながらないので往生しました。Inet_interfaces = all にすることと、mynetworks=....00/24ではなく、0/24でないといけないのでした。ひどい。

cyrusは、/etc/cyrus.confが設定ですが、変更する必要はありません。spoolの場所なども、postfixの方で設定します。

さて、postfixのウリは、ユーザー登録をLinuxのpasswdとは独立にできることです。LinuxのユーザーにEmailを配信するのではなく、好きな名前のユーザを登録でき、それらはLinuxにはloginできません。ですから、Linuxのセキュリティを高く保つことができます。しかし、そうすると、個人向けの設定ファイルをホームディレクトリの.で始まるファイルに置いておくことができなくなります。実際は、Linuxユーザとの併用ができて、ホームディレクトリがあればそれを見に行くけどなければ何もしない、ということのようです。これで困ったのがprocmailです。postfix/main.cfの中で、mailbox_command=/usr/bin/procmail とすれば、procmailが走って、~/.procmailrcに基づいて転送やフィルタリングしてくれます。だから、procmailを使いたかったら、postfixのユーザと、Linuxのユーザを独立にすることはできません。

postfixとLinuxユーザを一緒にしたところで解決できないのは、転送しないで個人に配送するメールファイルの扱いです。cyrusでimapにする都合上、MHのような一つのファイルに詰め込むのは不可で、メッセージごとに別ファイルとするMaildir形式にします。このディレクトリが、/var/spool/imap/*/*xxx/user/... というような場所にあり、cyrusの持ち物で、procmailには触れません。procmailに処理させたメールは、もうcyrusに渡すことができないのです。すべてを転送させておしまいです。それではcyrusの役目はありません。

結局、webを検索すると、cyrus-imapdとprocmailは、両立できないと言うことがわかりました。そのため、cyrusには、sieveという、ローカルなメール転送システムがあります。sieveとは、ふるいのことですね。sieveのscriptを書いて、sieveshellを起動し、putで読み込ませます。sieveの文法は、procmailよりはずっと人間的で読みやすいですが、正規文法が使えないのが弱点でしょうか。以下は、簡単な破棄と転送の例です。


require "fileinto";
if header :contains "to" "@my-old-address" { discard; }
elsif header :contains "x-aist-spc" "spam" { discard; }
elsif size :over 50K { keep; }
elsif allof (not header :contains "from" "MAILER_DAEMON",
not header :contains "subject" "delivery",
not header :contains "from" "e-marketing")
{ redirect "my-keitai-address@keitai.ne.jp"; keep; }
else { keep; }

雑感、結論めいたこと

改善された点

良くならない点

結局、新サーバーに完全に引っ越して、古いサーバーを落とすには、21日、3週間かかりました。古いサーバーは、次に何に使おうか。mini-ITXのPentium-Mを買って、今の環境を移すか。。?え?


toshihiro@ matsui.dip.jp