Apache1.3+mod_perlのインストール、セットアップ(CentOS)

2009年3 月22日  |  Written by matsumoto  |  under Apache, Perl Yahoo!ブックマークに登録    はてなブックマーク - Apache1.3+mod_perlのインストール、セットアップ(CentOS)

Apache 1.3とmod_perl 1.30をCentOS(Linux)にインストールし、
mod_perlハンドラでWebアプリケーションが動作する環境を作ります。

まずは"Hello, World!"を表示させるというステップまで進みます。

mod_perl(モドパール)について

昔からWebアプリケーションの言語として利用されているPerlですが、「Perl=CGI(遅い)」という認識が未だに多く、
mod_perl(モドパール)の存在はあまりメジャーではないかもしれません。

しかし、安定性や速度の面でも非常に評価が高いモジュールで、大規模サイトでの運用でも利用されています。
例えばはてなMixilivedoorではmod_perlで構築されたWebサイトのシステムが運用されています。

mod_perlは普通のCGIペースでのPerlプログラムとは、根本的な動作概念が異なります。

まず、初回のロードでソースコードを読み込んでコンパイルし、コンパイル状態のプログラムをメモリ上に保存します。

次回からはそのメモリ上に存在するプログラムを参照するので、
毎回ファイルからプログラムを解析して実行するインタプリタ方式のCGIに比べて高速に動作します。

サーバーの環境や、プログラムの動作にもよりますが、普通のCGIでの動作に比べて数倍~数十倍の速度で動作します。

CGI(PurePerl) Apache::PerlRun mod_perl・Apache::Registory
速度
動作 リクエスト毎にソースコードを解析して直接perlに実行させる。 リクエスト毎にソースコードを解析→コンパイルして、mod_perlに実行させる。 初回ロード時にコンパイルして、次回からはコンパイルしたバイナリを読む

Perl自体、元々20年近くもの歴史があり、モジュールも豊富です。CPAN(Perlモジュールをダウンロードできるサイト)からダウンロードし、様々なモジュールを利用する事ができます。
言語としても枯れており、安定して動作します。

mod_perlハンドラはCPANにアップされている様々なモジュールを利用し、高速なWebアプリケーションを作ることができます。

素のPerlコード(CGIで動くプログラム)をmod_perlベースで動かすためのモジュールApache::Registryや、(mod_perlとは別ですが)FastCGIperliteも存在しますが、今回はmod_perlハンドラでの動作のみを対象とします。

 

mod_perlのバージョンによる差異について

mod_perlはバージョンが1のものと、バージョンが2のものが存在します。

それぞれのバージョンでモジュールの名称が異なり、mod_perlハンドラ自体の互換性は事実上ありません。
今回はバージョン1(mod_perl 1.30)を対象としますが、追ってバージョン2系も追記する予定です。

話題性という面ではmod_php(PHP)や、mod_ruby(Ruby)に押されがちなmod_perlですが、使い勝手が非常に良いため、弊社ではメインの言語として利用しています。

Apache(Webサーバ)のインストール

Apache 1.3をソースコードからインストールします。

Linuxのrpm/yumでもApache(httpd)をインストールできますが、バージョンが2系になってしまうため、今回の対象であるApache 1.3はインストールできません。

Apacheの本家のサイトhttpd.apache.org)からApacheのソースコードをダウンロードします。

今回はmod_perl 1.30を利用する事が前提ですので、Apache 1.3を選択します。

Apacheのインストール

  1. ページの左カラムの "Download!" という部分に"from a mirror"というリンクがあります。このリンクをクリックします。
    クリックするとダウンロード用のページに遷移します。
  • ダウンロードページでは、地域に合わせて近しいと予想されたサーバがデフォルトで選択されています。
  • HTTP経由でのダウンロードとFTP経由でのダウンロードがありますが、ダウンロードできるものであれば、内容は同じですのでどれを選択されてもかまいません。
  1. ページ中部に "Apache 1.3.41 is also available" という部分があります。
    ここの下に "Unix Source: apache_1.3.41.tar.gzというリンクがあります。
    これを右クリックして "リンクのURLをコピー" (IEの場合は"ショートカットのコピー")を選択し、ダウンロード用のURLをコピーします。

    ※Apache 1.3.41のバージョンの部分(41など)は今後マイナーチェンジされる都度変更になりますので、ご注意ください。
  2. コピーしたURLを Putty、teratermなどのターミナルに貼り付けダウンロードします。
    ソースからインストールする際には"/usr/local/src"にソースコードを置くようにルール付けしていますので、ダウンロードする際には、そのディレクトリでダウンロードします。

    > cd /usr/local/src
    > wget http://ftp.riken.jp/net/apache/httpd/apache_1.3.41.tar.gz
  3. ダウンロードしたファイルを解凍します。
    > tar xvzf apache_1.3.41.tar.gz
  4. make(コンパイル)してインストールします。
    初期設定を決める"configure"を実行します。
    今回は、インストールする先はデフォルトの"/usr/local/apache"、Apache内部で利用するモジュールはとりあえずおおよそのものは一括でインストールします。

    > cd apache_1.3.41
    > ./configure --enable-shared=max --enable-module=all

    root(管理者)権限でインストールします

    # make install

    メッセージがずらずらと表示され続け・・・最後に以下が表示されればインストール完了です。

+--------------------------------------------------------+
| You now have successfully built and installed the      |
| Apache 1.3 HTTP server. To verify that Apache actually |
| works correctly you now should first check the         |
| (initially created or preserved) configuration files   |
|                                                        |
|   /usr/local/apache/conf/httpd.conf |
|                                                        |
| and then you should be able to immediately fire up     |
| Apache the first time by running:                      |
|                                                        |
|   /usr/local/apache/bin/apachectl start
|                                                        |
| Thanks for using Apache.       The Apache Group        |
|                                http://www.apache.org/  |
+--------------------------------------------------------+
  • 2009.04.29追記
    CentOS 4.4 i386の最小構成の状態へのApache1.3.41のインストールでは、yumで以下のインストールが必要でした。

    yum install gcc*
    yum install db4*
    yum install gdbm*

    また、configureのコマンドも若干変更になります。

    CLFAG=/usr/include/gdbm ./configure --enable-shared=max --enable-module=all

mod_perlのインストール

Apacheで利用するための、mod_perlモジュールをダウンロードします。

Apacheのソースコードをダウンロードしたディレクトリと同じディレクトリ(/usr/local/src)で行います。

ダウンロード後に解凍します。

> cd /usr/local/src
> wget http://perl.apache.org/dist/mod_perl-1.0-current.tar.gz
> tar xvzf mod_perl-1.0-current.tar.gz

作成されたディレクトリ内でmod_perlをコンパイルし、ApacheモジュールのDSOライブラリとしてインストールします。

> perl Makefile.PL USE_APXS=1 WITH_APXS=/usr/local/apache/bin/apxs EVERYTHING=1

root(管理者権限)でインストールします

# make install clean

Apache上でmod_perlの動作を確認

インストールしたApacheの上でmod_perlが正常に動作するかチェックします。

Apacheの設定情報(httpd.conf)の確認・変更、mod_perlのステータスをチェックする設定を行います。

Apacheの設定情報(httpd.conf)の確認・変更

Apacheをインストールしたディレクトリ(/usr/local/apache)以下に「conf」というディレクトリが存在します。

この中に「httpd.conf」という、Apacheの動作を定義するファイルがありますので、こちらを変更・修正します。

 > vim /usr/local/apache/conf/httpd.conf 

まず、mod_perlのモジュールがロードされる設定になっているか確認します。
以下の2つの設定が有効になっていればOKです。

ほとんどの場合、mod_perlのインストール後に自動で設定が上書きされているかと思いますので、特に修正しなくても良いかと思います。

 LoadModule perl_module libexec/libperl.so

 AddModule mod_perl.c

httpd.confの一番最後に以下の記述を追加します。
mod_perlの動作状況を確認するApache::Statusを動作させる設定を行います。

<Location /perl-status>
   SetHandler perl-script
   PerlHandler Apache::Status
   ORDER deny,allow
   deny FROM all
   allow FROM <自分のIPアドレス>
</Location>

allow FROM は自分のIPアドレスを定義します。

3行目の「ORDER…」から、5行目の「allow FROM…」にかけては、閲覧制限の設定です。

この設定を行うことで、他者から不用意に閲覧されることを防ぎます。

自分のIPアドレスが分からない場合は診断くんなどで、表示されるIPアドレスを入力すれば良いかと思います。

上記設定を行い、httpd.confの保存後に Apacheを再起動します。

Apache上でmod_perlの動作を確認

Apacheを再起動させる前に、httpd.confが適切な文法で記述されているか、チェックします。

/usr/local/apache/bin/apachectl configtest
Syntax OK
"Syntax OK" が出ていれば設定情報の文法的な記述ミスはクリアできたのでOKです。

Apacheの再起動を行います。

 # /usr/local/apache/bin/apachectl stop
 # /usr/local/apache/bin/apachectl stop: httpd stopped
 # /usr/local/apache/bin/apachectl start
    /usr/local/apache/bin/apachectl restart: httpd started

「apachectl restart」について

※mod_perlはメモリ上にコンパイルしたデータを保存するため、apachectl restart での再起動では以前の情報を完全にクリアできません。

apachectl restart のコマンドでは rootで動いているApacheは再起動せず、子プロセスのみを再起動させます。
このためrootのプロセス上に残っているメモリはそのままの継続する状態になり、
mod_perlハンドラの変更箇所が反映されないという事になります。

きちんとメモリ上からクリアするために、上記のapacheの再起動では

apachectl stop → apachectl  start と2回コマンドを実行させています。

実際の運用では、毎回2回コマンドを実行させるのも面倒ですので、

以下のようなシェルを作成し

 # /usr/local/apache/bin/apachectl-restart

と打つことで、Stop->Startの2回実行させるようにしています。

#!/bin/sh
 /usr/local/apache/bin/apachectl stop
 /bin/sleep 5;
 /usr/local/apache/bin/apachectl start

現在コメントはありません | コメントの投稿はこちら

コメントを書き込む

コメント本文

※コメントのフォーム内で以下のタグがご利用いただけます
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

私はチーム・マイナス6%です