FreeBSDアーカイブ

GW 中にやったこと

GW 中にやったことをちょっとまとめてみる...
インフラまわりは, ほとんど深夜やっていたので, 寝るのは午前中って感じでした...
でも, かなりすっきり.

確定申告

毎年のことなのですが, うちの会社の「確定深刻」は GW 勝負なのです(汗)

今年は, e-Tax を使ってみましたが, イマイチ便利になってない...
税務署へ持って行く手間はなくなりましたが, 事業税などの申告は別にやらなきゃいけないし, 電子証明書の申請をしに法務局へ行かなきゃいけない.
数字の計算くらい, 明細書から自動計算してくれれば楽なのに(苦笑)

FreeBSD 4.x-RELEASE から 6.3-RELEASE へのアップグレード

FreeBSD 4.11-RELEASE が, まだ4台稼動していたので, すべて 6.3-RELEASE にアップグレード.
Celeron 700MHz という骨董品ですが, これでまた, 暫くは心おきなく使えますw

手順は, 下記とほとんど同じ
FreeBSD4 から FreeBSD6 へのアップグレード

jail でまとめる

上記の FreeBSD4.11-RELEASE で稼動していたうちの3台を, jail(8) を使って1台に統合しました.
減らしたやつは, 予備機として頑張ってもらいます.

sysutils/ezjail を使って構築も楽ちん.

ipfilter から pf へ乗り替え

ipfilter は, 今後メンテされなくなるようなので, 6.3-RELEASE へアップグレードしたついでに, pf へ乗り替え.
構文もすっきりして, メンテもしやすくなりました.
特に, ルータとして使っているやつは, 細かい設定ができてステキ.
set block-policy drop とか良い感じです.

下記を参考にしました
FreeBSDでPacketFilter(pf)を使う

過去の遺産の整理...

4.11-RELEASE が現在までも稼動していたのもそうですが, 過去に書いたバックアップスクリプトとかを, メンテしやすいようにいろいろ更新. サーバーで USBキーボードを使えるようにしたりだとか...
あ, DHCP サーバーも jail(8) で動くようにして, WIDE-DHCP を net/isc-dhcpd-server にしました.

Firemacs のアイコン

firemacs.jpg

山本さん, 大変永らくお待たせ致しました...(汗)
また, 拙作のアイコンをご採用頂き, ありがとうございました!

心残り...

EC-CUBE をほとんど触れなかったのがざんねん...
もうちょっと精進します...

MovableType を FastCGI で動作させる

最近, スパムコメントやスパムトラックバックで, サーバーの負荷が酷な状態になっていたため, 負荷低減のために MovableType を FastCGI で動作するようにしてみました.

参考 http://wiki.movabletype.org/Hosting_MT_under_FastCGI_(Japanese)

  1. まず, 必要なライブラリをインストール. FreeBSD なので ports から...
    # portinstall www/p5-FastCGI
    # portinstall www/mod_fastcgi
           
    portupgrade を使わない場合は, /usr/ports/www/p5-FastCGI, /usr/ports/www/mod_fastcgi で make install で OK
  2. httpd.conf に以下を追加
    LoadModule fastcgi_module     libexec/apache2/mod_fastcgi.so
    
    <IfModule fastcgi_module>
        FastCgiIpcDir /var/tmp/fcgi_ipc/
        AddHandler fastcgi-script fcgi
        FastCGIConfig -autoUpdate -idle-timeout 120 -killInterval 3600 -maxClassProcesses 6 -maxProcesses 15
    </IfModule>
    
  3. mod_fastcgi を有効にするため, apache を再起動
    # apachectl restart
    
  4. MovableType の mt*.cgi を mt*.fcgi にリネーム. とりあえず mt*.cgi も動くようにコピーしました.
    $ cp mt.cgi mt.fcgi
    $ cp mt-tb.cgi mt-tb.cgi
    $ cp mt-comments.cgi mt-comments.fcgi
    $ cp mt-search.cgi mt-search.fcgi
    $ cp mt-view.cgi mt-view.fcgi
    
  5. mt-config.cgi の編集. とりあえず必要な箇所のみ *.fcgi にしました.
     AdminScript mt.fcgi
     CommentScript mt-comments.fcgi
     TrackbackScript mt-tb.fcgi
     SearchScript mt-search.fcgi
    # XMLRPCScript mt-xmlrpc.pl
     ViewScript mt-view.fcgi
    # AtomScript mt-atom.pl
    # UpgradeScript mt-upgrade.pl
    

あとは, mt.fcgi にアクセスして, FastCGI で動作することを確認し, サイトをすべて再構築してやれば OK です.

これで負荷が減ってくれれば良いのですが...

Gnome 2.22.0

FreeBSD Ports の x11/gnome2 が 2.22.0 になったので早速アップグレードしてみました.

参考 - FreeBSD Daily Topics 2008年3月25日

しかし, いくつか問題が...

gstreamer-plugins-good がアップグレードできない

/usr/ports/UPDATING に書かれているように, gstreamer-plugins-good を portupgrade(1) しようとしたら, 依存関係でコケました(汗)
この ports をアップグレードするには, multimedias/gstreamer と, multimedias/gstreamer-plugins を先にアップグレードする必要があるようです.
下記のようにすることで解消.

# portupgrade multimedias/gstreamer
# portupgrade multimedias/gstreamer-plugins
# portupgrade -f multimedias/gstreamer-plugins-good

textproc/rarian を再三要求される

Gnome 2.20.1 のアップグレードの際, portupgrade -o で textproc/rarian を textproc/scrollkeeper に置きかえたのに, 依存関係がおかしいのか, 再三 textproc/rarian を入れようとしてビルドに失敗する.
良くないと思いつつも, /usr/ports/textproc/rarian/Makefile を編集し, コンフリクトしないようにした...

--- Makefile.orig       Fri Mar 28 02:25:54 2008
+++ Makefile    Fri Mar 28 02:26:35 2008
@@ -26,7 +26,7 @@

 DOCBOOK_VERSION=4.2

-CONFLICTS=     scrollkeeper-[0-9]*
+#CONFLICTS=    scrollkeeper-[0-9]*

 USE_BZIP2=     yes
 USE_GMAKE=     yes

これだけやったら, あとは /usr/ports/UPDATING の手順通りでアップグレードは無事完了.

しかし, また問題が...

  • インストールが終わって, X を立ち上げなおすと, 日本語入力ができなくなってしまった...
    • Gnome 関連の dot ファイルを削除して解決
  • 何故か Compiz Fusion が core 吐いてお亡くなりになる...
    • xorg-server も同時に更新されたので, そのせいかなと思いつつ, 調べる時間ない...(苦笑)
  • gnome-vfs で Windowsサーバーに繋げない...
    • nautilus で Ctrl + L で smb://IPアドレス/ディレクトリ と指定して あげたら, あっさり繋がった(汗)
    • gvfs 経由で Windows サーバーに接続するようになったためで, ~/.gvfs 以下にマウントされるので便利
  • /etc/rc.conf に gnome_enable="YES" が必要になったらしい.
    • avahi や, dbus を動作させるため.
    • これやったら, GDM も有効になってしまった(苦笑)

GDM は使わないポリシーなので, /etc/rc.conf に enable_gdm="NO" としています.

また, DRM を有効にすると, ドロップシャドウがつくので, ちょっとかっこいいです.

あとは, compiz-fusion が動くように頑張らないと...

Samba の転送速度が遅い

Samba を使って Windows とファイルを共有している時, 環境によっては転送が非常に遅くなることがあるようです.
小さなサイズのファイルが大量にある場合は特に顕著のようで, 「仕事にならん!」と不満の声が聞こえてきたので, smb.conf (5) に以下の設定をしてみました.

socket options = IPTOS_LOWDELAY TCP_NODELAY


FreeBSD 6.3-RELEASE, Samba 3.0.28 の環境ですが, この設定で解消しました.

see.
http://www.samba.gr.jp/project/translation/2.2.5/manpages/smb.conf.5.html#SOCKETOPTIONS

僕は, FreeBSD をクライアントにして開発しているので, あまり関係無いんですけどねw

FreeBSD4 から FreeBSD6 へのアップグレード

FreeBSD4.11-RELEASEのサポートが2007年1月31日で切れるため、現在稼動している 4.11 のサーバー群をすべて 6.2 にアップグレードすることに。
ていうか、6.2-RELEASE すげえ遅れてるし。。

とりあえず、M/B と CPU を交換しなくてはならないやつもいるので、早急に作業することに。
DNS としても稼動しているやつもあり、 BIND8 → BIND9 への移行もしなくてはいけない。
ついでに、 ipf や ipfw で動いているのを、全部 pf にしてやりたい。

というわけで、 BIND の移行も含めて、日本で書いてある記事が見あたらなかったので、ざっくりですが書いておきます。
基本的に、 /usr/src/UPDATING に全部書かれているので、そっちを読んだ方が良いです。
英語は読めんという人は、やらない方が懸命。。この作業、非常にリスク高いですから。。

4.11-RELEASE から 5.5-RELEASE へアップグレード。
6.x へのアップグレードは、5.4 以降からのみのサポートとなるので、2段階のアップグレードとなります。。

1. RELENG_5_5 へ cvsup
2. /usr/src/UPDATING をよく読む(重要。頑張って英語読みましょう)
以下、 /usr/src/UPDATING の抜粋

	<make sure you have good level 0 dumps>
	<maybe fix /etc/fstab>					[1]
	make buildworld						[2]
	make buildkernel KERNCONF=YOUR_KERNEL_HERE		[3]
	cp sys/${MACHINE}/conf/GENERIC.hints /boot/device.hints [4]
	make installkernel KERNCONF=YOUR_KERNEL_HERE
	cd sys/boot ; make STRIP= install			[5]
								[6]
	<reboot in single user>					[7]
	/usr/src/etc/rc.d/preseedrandom				[8]
	mergemaster -p						[9]
	rm -rf /usr/include/g++
	rm -f /sbin/mountd
	make installworld					[11]
	mergemaster -i						[12]
	<reboot>

[11] と [12] の間に BIND のアップグレードを行います。
アップグレード方法については、下記を合わせて読むと良いでしょう。
BIND9 用の named.conf をあらかじめ用意しておくと作業がスムーズに進みます。
http://www.toshikazu.org/archives/000071.html
http://www.soi.wide.ad.jp/class/20030038/slides/34/index_bar.html
http://www.bsddiary.net/doc/bind9.html
[2] の時に気をつけるのは、 /etc/make.conf に COMPAT4x=YES の文があることを確認すること。
これがないと、make installworld の途中で再起不能に陥ります。
kernel config にもいろいろ変更が入っているので、 5.5 の GENERIC からしっかりマージしてやることが重要です。
[9] の時に、追加必須な user がいくつかあるので気をつけましょう。

めでたく 5.5-RELEASE にアップグレードできたら、6.x にアップグレード。
ここまできちゃえば、あとは楽ちんです。

1. RELENG_6 に cvsup (6.2 が未リリースのため)
2. /usr/src/UPDATING をよく読む(重要。頑張って英語読みましょう)
以下、 /usr/src/UPDATING の抜粋
<make sure you have good level 0 dumps>
	make buildworld					[9]
	make kernel KERNCONF=YOUR_KERNEL_HERE		[8]
							[1]
	<reboot in single user>				[3]
	mergemaster -p					[5]
	make installworld
	make delete-old
	mergemaster -i					[4]
	<reboot>

4.11 → 5.5 の時とは違い、かなり楽ちんです。
make buildkernel, make installkernel ではなく、 [8] の make kernel だけで kernel をビルドします。
こちらも、kernel config を GENERIC からしっかりマージしてやることが重要です。
options COMPAT_FREEBSD4 と、
options COMPAT_FREEBSD5 の追加必須。
あとは、さほど難しくないと思います。

久々に、FreeBSD ハンドブック を読んだんですが、Chapter 8. FreeBSD カーネルのコンフィグレーション とか非常に参考になることがわかりやすく書かれているので、読んでおくと良いと思います。

あとは、 6.2-RELEASE を待って、リリースされたら、 RELENG_6_2 にしてやれば完璧。
しかし、以前は kernel config に options SCHED_ULE がコメントアウトしてあったのだが、
options SCHED_4BSD のみになってるし。ULE すけじゅーらはどこいったー?

サーバー復旧。。

11/27のエントリーを書いた後、RAID1 のリビルドをしていたのだけど、不幸にも途中で停止(失笑)
ディスクがかなりぼろぼろのようで、リビルド不可能らしい。

仕方がないので、とりあえず ad2 のみで稼動させることに。
/etc/fstab を書きかえねばならないのだけど、起動不能。
11/27 の時みたいに、インストーラから起動して、Fixed mode で書きかえして、何とか起動。
起動時に PIO4 に落ちるけど、仕方あるまい。。
とりあえず動いてるからよしとしよう。

こうなったら、ディスクを全交換するしかないので、250GB のやつを買ってきた。
160GB → 250GB のアップグレード。
このサーバーを構築したときなんて、20GB が主流で、こいつは 容量多くないとダメだから 60GB にして、大容量にホクホクしてたんだけどなあ。
時代は進んだものです。。

話を戻して、ディスクの交換方法を検討。
現状では、 PIO4 で動作させているので、激遅いからバックアップに時間がかかりすぎる。
あまり長時間止められないので、


  1. RAID1 で 250GB にミラーリングさせる。
  2. もう 1台に新規スライスを作成
  3. リストア


という方法でいくことに。
こうすれば、DMA の性能を活かしてリストアの時間を短縮できると思ったのですが。。。
現実は厳しかった。
元のディスクがかなり重症で、 hard error でまくり。リビルド不可能。。。

仕方がないので、 /stand/sysinstall から 250GB に新規スライス作成。
hard error でまくりながら、 dump to restore。
やり方は下記参照
http://www.jp.freebsd.org/QandA/HTML/1859.html

何とかディスク交換は完了しました。

しかし、まだ悪魔は待っていた。
AM3:00、periodic daily が走り、DBの日度バックアップが走る。
負荷が上昇してきたところで、動作中のプロセスがことごとく core を吐き、kernel panic を起こしてお亡くなりになった(失笑)

再起動しても起動せず。ファンすら回らない。
CPU か M/B が壊れたか。。
夏場に、CPU ファンが故障して交換したことがあった。その時は、CPU はちゃんと動いていたので、大丈夫だろうと思っていたのだが、それが今になって死んだのか。。。
だめもとで、CPU はそのまま。予備の M/B に交換(古いパーツのストック)したら、とりあえず動いた。
M/B がぶっ壊れたか。。
とりあえず動いたので、 CPU と M/B の交換計画を練ることに。。寝れん。

ずらずら書いてますが、数日間にわたって格闘しておりました。
具体的な日付を忘れたので、ずらずら書きます(失笑)

CPU と M/B の交換計画

  • Athlon XP は入手不可のため、入手可能な CPU にする
  • 現在の DDR400 のメモリが使用可能な M/B
  • AGP の VRAM が使用可能な M/B

Intel は CPU が高価なため、予算オーバー。DDR400 & AGP が使用可能な M/B は非常に限られ、その中から DFI LANPART nF3 Ultra-D に決定。

CPU は、予算内で.できるだけ高性能なものを選択、 Athlon64 x2 4200+ に決定。

しかし、問題がある。
現在、 FreeBSD 4.11-RELEASE のため、nForce3 のチップセットでちゃんと動くか不明。
どこかで動作しないような噂を聞いた気がするのだ。。
そこで、次のような順で交換することにした。

  1. kernel を 4.11 → 5.5-RELEASE にアップグレード
  2. M/B と CPU を交換
  3. kernel を 6-STABLE にアップグレード(6.2 が未リリースのため)

これで何とかうまくいった。 via FreeBSD4 から FreeBSD6 へのアップグレード
動作は非常に良好。
amd64 への移行は、クリーンインストールでないと、リスクがかなり高いため i386 でいくことに。
それでも、dual core は超快適。ちゃんと SMP で動作してくれています。
既存のメモリを使いまわした関係で Dual Channel ではないのだけど、今までに比べたら十分高速に動作してくれるし。
ports の java/jdk14 の構築が 1時間ちょっとで終了した模様。celeron 700 とかだと半日以上かかっていたのに。。
なんという速さ。。

修羅場 - FreeBSDとRAID1とmountと

悪いことというのは重なるもので。。

ぎちぎちスケジュールの中、想定外に作業に手間どり。。

「仕様と違う」
「期待通りの動作をしない」

よくあることだけど、他のメンバーに作業を振れない。
仕様を説明して、修正ポイントを説明してってやってると、余計に手間どる。
しゃあないから僕がやる。。。

そんなこんなで、あちらこちらに、しわ寄せがいって、スケジュール狂いまくり。
しかし、もう延ばせないし。。

現実逃避に、 Emacs のアイコン作ってたら、サーバーのディスクがお亡くなりになられた(苦笑)
RAID1 で2重化してあるので、死んだディスクを交換したらOK。。のはずだったのだけど、ディスクのマウントポイントを見ようと、 mount って入力した瞬間。

Segmentation fault (core dumped)

悪夢。。。。。。。。
mount が死んだ。

そのままサーバーは固まり、リセットする羽目に。
もちろん、サーバーは起動不能。
RAIDである ar0 をマウントしようとするところでこける。

ufs:/dev/ar0s1a って直接入力してもマウントしてくれない。
ufs:/dev/ad0s1a とか、 ufs:/dev/ad0s1a って直接ATAデバイスを叩いてもだめ。

打つ手なし。
シングルユーザーモードでも起動せず。

ミラーリングした RAID1 のディスクが2台とも死んだ。。
このサーバーは、顧客用ホスティングサーバーなので、大切なお客様の HP やら、メールのデータがたくさん。。。

悪夢。

しかし、バニックになっていても解決しないので、解決方法を探す。
別のサーバーにバックアップはあるけど、10時間ほど前のもの。
更新が激しいサイトもあるので、これを使うのは最終手段
1時間ごとにとってあるものは亡くなったディスクの中。

とりあえず、予備のサーバーを動かすことを考えるが、肝心のディスクが死んでるのでセットアップに時間がかかりすぎる。

そして、サーバー落ちてるぞーとの電話がかかりまくってきた(汗)

とりあえず謝る。申し訳ございません。

無理矢理冷静になって考えると、、、

mount って入力して、 mount が死んだのだから、他のデータは生きているだろうという推測を立てる。

起動ディスクで起動して、何とかして生きているデータを救出することを試みる。

すぐ手元にあるのは、 FreeBSD6.0-RELEASE のインストールディスク。
しかし、該当サーバーは FreeBSD 4.11-RELEASE。
データだけ出せれば良いので、このディスクでも大丈夫だろうと強引に作業を進めることに。

しかし、このサーバー、 CDドライブがない。
FD 専門やん(失笑)

今は FD なんて使わないので、10年くらい前のフロッピーをひっぱり出してきて起動ディスクを作る。
しかし、セクタエラー連発。撃沈。。だめやん。。

仕方がないので、他のマシンの CDドライブをはずし、サーバーに無理矢理つける。
そして、 FreeBSD6.0-RELEASE を起動!

見事起動!
Fixed mode で起動!
コンソールに Good Luck! のメッセージ(汗)

問題はここからだ。
ad0 は完全にお亡くなりになっていたので、 ad2 に賭ける!

とりあえず、 fsck をすべてのスライスで走らせる。
/usr 以外は、ちゃんと修復してくれたらしい。
しかし、 /usr である /dev/ad2s1h で hard error でまくり。

# fsck -y -b 32 /dev/ad2s1h

と、頑張ってみるが、 hard error 消えず。
起動ディスクの mount はちゃんと仕事してくれて、他のスライスはマウントできる模様。

ad2s1h はマウントできず。
しかも、 ad2 の mount は、起動時に Root Mount failed: 16 とおっしゃる。

6.1-RELEASE のインストーラの Fixed mode には atacontrol まで入ってるのね。
ar0 が残ったままでは気持ちが悪いので、 atacontrol delete ar0 して削除。

しかし、どうやって mount してやろうか。。
と、荒療治を思いついた。
他のマシンから mount を持ってくる(笑)

セクタエラーの出る FD でも、 mount くらいならコピーできるだろうと、別の 4.11-RELEASE の mount をコピー。
FD につっこんで、例のマシンへ mount をコピー。

そして、おそるおそる mount /dev/ad2s1h /mnt と入力・・・。
したけど、 fsck しないと mount できねーぞとおっしゃる。
ごもっとも。(失笑)

でもね。 hard error って言われて、 fsck おわらないの。
何度やっても修復してくれないの。

しかし、僕は躊躇することなく、強引に入力したのでした。

# mount -f /dev/ad2s1h /mnt

すると、素直にマウントしてくれた(笑)
不幸中の幸い。奇跡。泣けてきた(涙)
しかし良い子は真似しないように。こういう時は、ro つけて、 read only でマウントするべきよ。。

ここまできたら、なんとか起動させるしかない。
セクタエラーを出していた領域は狭いので、起動さえしてしまえば、そのまま RAID1 をリビルドして、稼動させながらやった方がいいと判断。
お客様のサイトがたくさん入っているので、長時間停止させておくわけにはいかないのです。。

しかし、ふつうに mount させようと思うと、 fsck ちゃんとしろと怒られる。
でも、 mount 強制コピーのおかげで、起動時には mount できるようになったので、シングルユーザーモードで起動して、 /dev/ad2s1h を -f で強制マウント。

# shutdown -r now とやって、無理矢理 clean flag を立てることに成功!

リブートしたら、一旦 PIO モードに落ちるものの、なんとか正常に mount してくれました(汗)

現在、RAID1 をリビルド中。
PIO モードなので激遅いけど、とりあえず動いてくれてるし。
リビルドが終るまで持ってくれればよい。。

ということで、とりあえず一件落着。かな?
完全に復旧するまでは気が抜けないけど。。

最悪な状況でも、頑張ればなんとかなるもんだ。。
ほとんど1日つぶれたけど、頑張ればなんとかなるよな。

qmail + qmail-scanner + Clamav + SpamAssassin

今や、 MTA の主流は Postfix... と言っても過言ではないくらい、 Postfix が使われていると思われます。
うちのサーバーでも、新しいのはみんな Postfix にしてるし。

でも、高速、セキュアな MTA として、 Postfix と qmail が人気を二分していた頃がありました。
その頃に qmail で構築した MTA が今でも現役バリバリで稼動しており、 大量のユーザーを抱えているため、なかなか移行できない。。というケースに陥いった、うちのメールサーバー。
qmail でも、いろいろパッチを当ててやれば、まだまだ十分使えるのですが、Postfix に比べて機能不足は否めません。。。

いろいろ調べたあげく、いまさらながら、qmail-scanner + Clamav + SpamAssassin で、ほぼ満足いくようなメールサーバーが構築できたので、簡単にまとめておきます。

導入は、ほとんど ports を使っているので、詳細は省略。。。要点のみです。
また、 portupgrade を使っているので、portinstall の場合とか読みかえてください。
  1. まず、suidperl が必要なので、Perl5.8 を ENABLE_SUIDPERL=yes オプションをつけてインストール。
      # portinstall -Cc -m ENABLE_SUIDPERL=yes lang/perl5.8
    
    -
  2. FreeBSD4.x系は、ports の Perl を使うように変更
     # use.perl port
    
  3. Clamav と SpamAssassin をインストール
     # portinstall -Cc security/clamav
     # portinstall -Cc mail/p5-Mail-SpamAssassin
    
  4. qmail を WITH_QMAILQUEUE_PATCH=yes オプション付きで再構築
     # portupgrade -Cc -m WITH_QMAILQUEUE_PATCH=yes mail/qmail 
    
  5. qmail-scanner をインストール。SpamAssassin と Clamav を使うように自動認識してくれるはず。してくれなかったら、起動してから再コンパイルしてみましょう。。
     #portinstall -Cc -m QMAILSCAN_NOTIFY=recips,admin mail/qmail-scanner
    
  6. 各種初期設定。。 /etc/rc.conf に追加
    clamav_clamd_enable="YES"
    clamav_freshclam_enable="YES"
    spamd_enable="YES"
    
    clamd を qscand で動作するように変更
    1. /usr/local/etc/clamd.conf
      User clama
      を
      User qscand
      に変更
      
    2. /var/run/clamav の所有者を qscand に変更
       # chown -R qscand:qscand /var/run/clamav
      
    3. 以下を /usr/local/etc/rc.d/qmail.sh と tcpserver の起動スクリプトに記載
      PRIFIX=/usr/local
      export QMAILQUEUE="${PREFIX}/bin/qmail-scanner-queue.pl"
      
    4. 各デーモンを起動
       # /usr/local/etc/rc.d/qmail.sh restart
       # /usr/local/etc/rc.d/clamav-clamd.sh start
       # /usr/local/etc/rc.d/clamav-freshclam.sh start
       # /usr/local/etc/rc.d/sa-spamd.sh start
      
      これでほぼ完了。。 /var/log/maillog を眺めて、エラーログがでてないかどうか確認しましょう。 qq temporary problem (#4.3.0) っていうのを返したり、 clamscan: corrupt or unknown ClamAV scanner error or memory/resource/perms problem - exit status 50 って出る場合は、だいたい permission 関係のトラブルでしょう。。 suidperl とか、 ちゃんと clamd が qscand で動いているかとか確認しましょう。
    5. あと、SpamAssassin は、 デフォルトで root の .spamassassin を見にいくので、-u username オプション付で起動して、ユーザーを指定したほうが良いでしょう。。
    とりあえず、ウイルスは Clamav が駆除してくれるし、 Spam は SpamAssassin が X-Spam-Status: ヘッダをつけてくれるので快適です。 SpamAssassin の設定は、http://spamassassin.jp/ 等を参考にすると良いです。

trac

2ヶ月ほど前から、プロジェクト管理を GForge から trac に乗り換えました。
Wiki ベースのプロジェクト管理ツールで、Subversion との連携は抜群。バグトラッカであるチケットシステムもシンプルでなじみやすいです。

乗り換えた最大の理由は、 trac が Python で書かれていること。
GForge は PHP4 で書かれており、GForge を使うためだけに サーバーに mod_php4 を入れていました。
apache2.0.x を使っているので、mod_php4 の使用は推奨されてないんですよね。。
また、最近は PHP で開発することもほとんど無くなり。。。必要性がかなり薄れておりました。
とりあえず、すっきり PHP とオサラバしたかったのです(笑)

最近は、 trac で開発を行っているプロジェクトもよく見られるようになってきました。国内では Meadow とか、 Namazu など。
WWDC 2006で存在明らかにされたMac OS Xの次バージョン「Leopard」に搭載予定のカレンダーサーバーである、 Darwin Calendar Server も trac で開発が行われるようです。

日本語の情報が、まだまだ少ないようなので、時間があったら少しずつでも、ノウハウまとめていきたいと思っておりますが。。。
できるのか?(汗)

portupgrade による Subversion のインストール/アップグレード

ちゃんとまとまった記事を書こうと思うと、思い切らないとなかなか書けないので、雑多なメモでもどんどん書くことにします。
余裕が出来たら、ちゃんとまとめてもいいし・・・。

subversion が 1.3.2 になっていたので portupgrade しようとおもったら、

You should build  www/apache20 with db4 support to use subversion with it.
Please rebuild  www/apache20 with option WITH_BERKELEYDB and try again.

Or you can disable db4 support. Only 'fs' repository backend will be available.
To disable db4 support, define WITHOUT_BDB.

と、怒られる。
今まではちゃんとインストールできてたのに。

pkgtools.conf は、こんな感じ。


'www/apache2' => [
'WITH_DAV_MODULES=y',
'WITH_SSL_MODULES=y',
'WITH_BERKELEYDB=db42',
],
'devel/subversion' => [
'WITH_PYTHON=y',
'WITH_APACHE2_APR=y',
'WITH_MOD_DAV_SVN=y',
'SVNGROUP=apache',
],

いままで出来ていたんだから、おかしいよなぁ。と思いつつ、いろいろ調べてみた。
まず、 www/apache20/Makefile を眺めてみる。

make show-options
make show-modules
make show-categories

というコマンドで、いろいろ見られるらしい。

$ make show-modules
を実行してみると、
WITH_DBM
          WITH_BERKELEYDB
となっているではないですか。 すかさず、 WITH_DBM=bdb を追加。 こういうの、ワーニングで出してくれよって感じなんだけど(苦笑)

でも、相変わらず同じエラーでたたかれる。
よーく見ると、 apache2.x の port が apache20 に変わっているではないです。

pkgtools.conf を www/apache20 に修正。
無事インストールできました。

修正後の pkgtools.conf (抜粋)


'www/apache20' => [
'WITH_DAV_MODULES=y',
'WITH_SSL_MODULES=y',
'WITH_DBM=bdb',
'WITH_BERKELEYDB=db42',
],
'devel/subversion' => [
'WITH_PYTHON=y',
'WITH_APACHE2_APR=y',
'WITH_MOD_DAV_SVN=y',
'SVNGROUP=apache',
],