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

    続きを読む

    サーバー復旧。。

    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 のアイコン作ってたら、サーバーのディスクがお亡くなりになられた(苦笑)

    続きを読む

    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"
        
    7. 各デーモンを起動
      # /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 で動いているかとか確認しましょう。

    8. あと、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',
    ],