今回からいよいよLAMPの一部であるApache HTTP Serverのビルドに入ります。まずは追加のソフトウェアを何も用意せずにやってみます(編集部)
前回までで、フリーソフトウェア、オープンソースソフトウェア(以下FOSS)のビルド方法について、基本的な解説を終えたことになります。専門用語はほとんど網羅したと思いますが、足りない部分は今後も補強しつつ進めていきます。
そして今回から、ようやくApache HTTP Serverにとりかかります。ここからは各ソフトウェア固有の事情が話題の中心になります。そしてそのソフトウェアのことをよく理解することが重要になってきます。ビルド時の設定の意味や、設定の影響について理解するということは、結局のところそのソフトウェアの詳細を知るということにほかならないからです。
というわけで、いきなりビルドに取りかかるのではなく、まずはApache HTTP Serverを知るところからはじめたいと思います。とっかかりとなるのは、例によってインストールドキュメントと、configureスクリプトのヘルプです。
なお、Apache HTTP Serverと呼ぶのは長いので、ここから先は特に区別する必要がない限りApacheと呼ぶことにします。Apache HTTP Serverはいうまでもなく最も成功したFOSSの1つであり、その結果、数々のFOSSを抱える一大プロジェクトの母体となりました。10年前はApacheといえばApache HTTP Serverでしかなかったわけですが、今やApacheの名を冠するソフトウェアがいくつもあります。単にApacheといったときにApacheプロジェクト全体を指すことも増えてきているのです。
最初にチェックするべきはインストールドキュメント、ということはこれまでの連載でも述べました。手順はほとんど同じですから、必要な外部ソフトウェアを真っ先に確認します。これが揃わないと、間違いなくビルドに失敗します。
ApacheのインストールドキュメントはWebサイトにあるものが充実しているのでそちらを参照しましょう(図1)。必要なものとしてディスクスペースなど当たり前のものが挙がっているほか、Perl 5がオプション、そしてapr、apr-utilというものが必要となっています。apr、apr-utilについてはApacheに同梱しているとも書いてあります。結論としてはあらためて入手しなければならない外部ソフトウェアはないということになります。
なお、この同梱されているソフトウェアというのが実はくせ者です。あらかじめインストールしなくていいということで、ビルドのハードルは下がるのですが、別の問題を引き起こすことがあります。OS側にも同じソフトウェアがあって、意図しないものにリンクしてしまう場合や、ApacheやPHPなどのように連携して使うもの同士で、それぞれ別のソフトウェアにリンクするという問題です。これはconfigureスクリプトを適切に設定することで回避できますが、まずは、こういう問題があることを頭に入れておいてください。
次にconfigureスクリプトのヘルプをチェックします。前回までサンプルとしてきたGNU Helloとは比べものにならない長さのヘルプが表示されます。なお、Apacheのサイトにはconfigureのヘルプより詳細なドキュメントがあります(図2)。こちらも合わせて参照してください。
まず、enable/disableの指定のほとんどは、Apacheのモジュールをビルドするかどうかの選択です。Apacheはコアの機能以外は、モジュールという形で機能追加するようになっています。スタティックとダイナミックの2通りの形式があり、これはライブラリとまったく同じように考えることができます。つまり、スタティックモジュールを選べば、モジュールが一体化した実行形式ファイルになります。
特殊な事情がない限りは、ダイナミックモジュールを使います。起動時の設定でどのモジュールを使うか自由に選択できますし、サードパーティ製のモジュールを後から追加することもできます。PHPもApacheのダイナミックモジュールとして組み込みます。
モジュールは80個弱ありますので、configureでこれをいちいち指定するのはとても無理でしょう。そこで一括で指定できる「--enable-modules」と「--enable-mods-shared」という引数があります。前者はスタティック、後者はダイナミックの場合に使います。これらの引数にはモジュール名か、allまたはmostというキーワードが指定できます。
ダイナミックであれば、後から使いたくなったモジュールは、必要に応じて選択すればよいだけですから、「--enable-mods-shared=all」と指定します。なお、allの場合でもいくつかのモジュールは明示的に有効にする必要があるので注意が必要です。
with/withoutによる指定では、前回まで解説したような外部ソフトウェアの指定だけでなく、ポート番号などのApacheのデフォルト設定があります。重要な設定としてMPM(Multi Processing Module)の選択があります。これはビルド時にだけ指定でき、実行時には変更できません。
MPMとはクライアントからの接続を処理する部分で、LinuxではpreforkとworkerのどちらかのMPMを使います。簡単に違いを説明すると、preforkは1つの接続を1つのプロセスに割り当て、workerではプロセス内部のスレッドに割り当てます。workerの方が処理性能に優れていますが、PHPを組み込むときは、preforkを使うことがPHPの方から推奨されています。
特別に用意しなければならないソフトウェアはないということなので、ここでビルドをしてみることにします。いくつか引数を指定しなければなりませんので、コマンドラインに直接入力するより、エディタなどに書いた上でコピー&ペーストすると良いでしょう。そのとき、見やすいように改行をエスケープして複数行に分割すると良いです。
ここまでの内容をまとめると、次のようにコマンドを実行することになります。
./configure \ --prefix=/opt/apache-httpd-2.2.19 \ --enable-mods-shared=all \ --with-mpm=prefork
問題解決のためには出力をファイルに保存したほうがよいので、次のようにteeコマンドでファイル(configure_log.txt)に保存しつつ表示するようにしましょう(bashの場合)。
./configure \ --prefix=/opt/apache-httpd-2.2.19 \ --enable-mods-shared=all \ --with-mpm=prefork \ 2>&1 | tee configure_log.txt
成功したでしょうか。実行すると、本連載で前提にしている、さくらインターネットのVPS上に作ったCentOS環境では、次の部分でエラーになりconfigureの実行が止まります。
(略) checking whether to enable mod_ext_filter... shared (all) checking whether to enable mod_include... shared (all) checking whether to enable mod_filter... shared (all) checking whether to enable mod_substitute... shared (all) checking whether to enable mod_charset_lite... no checking whether to enable mod_deflate... checking dependencies checking for zlib location... not found checking whether to enable mod_deflate... configure: error: mod_deflate has been requested but can not be built due to prerequisite failures
mod_deflateがビルドできないというエラーになっています。mod_で始まるのはApacheのモジュールです。その直前にzlibが見つからないというメッセージがあります。これが意味するのは、mod_deflateはzlibに依存している、つまりmod_deflateに欠かせないソフトウェアということです。Apacheのインストールドキュメントには、個々のモジュールが必要とするソフトウェアまでは書いていないのです。
今回は、無効にできる機能でエラーが発生しています。いきなり対策をとるより、まずはその機能を無効にしてみて、先に進めるか、ほかにエラーが無いか確認する方が解決の近道です。次のようにしていったんmod_deflateを無効にします。
./configure \ --prefix=/opt/apache-httpd-2.2.19 \ --enable-mods-shared=all \ --disable-deflate \ --with-mpm=prefork \ 2>&1 | tee configure_log.txt
これで最後までconfigureが通りました。さらにmakeを実行してもエラーも発生せずに終了します。この時点では、問題はzlibの不足だけということになります。
次回は、zlibの問題を解決します。
Copyright © ITmedia, Inc. All Rights Reserved.