第3回 Apacheの基本インストール

Apacheについて理解できたところで、今回から2回に分けてApacheのインストール方法を解説する。まずは標準モジュールとApacheのコンパイル/インストール方法をマスターしよう。

 前回までApacheの概略を紹介してきたが、今回はいよいよApacheをインストールしてみるとしよう。また、ここで紹介するインストール手順はApache以外のオープンソース・ソフトウェアにも応用できる。多くのオープンソース・ソフトウェアも、ここで紹介する方法とほとんど変わらないからである。

コンパイルとは?

 Apacheを最も簡単にインストールする方法は、OSに合わせてコンパイルされたバイナリファイルを見つけ、それをコピーする方法だ。Linux/Solaris/HP-UX/AIXなど、大半のプラットフォームはインターネットで公開されたファイルを見つけられるだろう。しかし、以前にも紹介したとおり、コンパイル済みのバイナリでは自分の好みに合わせたカスタマイズは期待できない。

 例えばSSLを使いたい場合や、PHPをDSOで使いたい場合には、それに応じたカスタム・インストールが必要となる。それには、自分でApacheのソースコードを入手し、コンパイル前にカスタマイズ設定をしなくてはならないのだ。「コンパイル」というと難しそうに感じるかもしれないが、Linuxの基本的な操作が理解できていて、多少の問題にもあきらめることなく立ち向かう気力さえあれば、必ずApacheをインストールできるはずだ。

なぜコンパイルが必要なのか

図1 コンパイルの概念

 「コンパイル」(compile)を日本語に訳すと、「まとめる」とか「編集する」「寄せ集める」といった意味になる。Apacheをはじめとするアプリケーションは、C言語と呼ばれるプログラム言語を用いて作成されているが、1つのプログラムはたいてい複数のファイル(ソースコードなど)から成っている。これに由来するのだろう。

 コンパイルを行うと、プログラムの無駄を取り除いて最適化するなどしたうえで、プログラムコードをコンピュータが理解できる機械語(バイナリコード)に変換する(ソースコードは人が理解できるテキストで作成される)。つまりコンパイルとは、この機械語への変換作業なのである。これを行わなければ、C言語のプログラムを実行することはできない(図1)。

 厄介なことに、ハードウェアやOSごとに機械語が違っていたりする。このためバイナリファイルを用意しただけではあらゆるケースに対応できないのである。そこで、自分の環境に合わせたコンパイルを行うか、だれかが同じ環境でコンパイルしてくれた結果を使うしかない。この作業は面倒かもしれないが、ソースコードを開けばプログラムを見ることもできるし、その気になれば改造することもできる。これらのソースコードは、プログラムの書き方や、Webサーバの動作原理を知るうえで非常に有益なものだ。まさにオープンソース万歳! である。

 ちなみに、コンパイルを行うためのアプリケーションを「コンパイラ」というが、このコンパイラにもいろいろな種類が存在する。CやJavaなど、言語別にコンパイラが存在するのは当然だが、同じC言語用のコンパイラにも複数の種類が存在する。コンパイラが違うと、プログラムの最適化手順が違っていたり、解釈できる命令に若干の差(方言のようなもの)があったりする。それゆえに、たいていのアプリケーションでは、「コンパイルするときには何々コンパイラを使ってほしい」などといった指定がある。このあたりの歴史や現状を調べてみるだけでも、十分面白い研究対象になるほどである。

インストールの準備作業

Apacheの入手

 Apacheのソースコードの最新版を入手するなら、迷わず本家本元のサーバ(http://www.apache.org/)に行ってみよう。ここからリンクされているhttp://httpd.apache.org/dist/で各バージョンのApacheを入手することができる。ソースコード自体に日本語版も何もないから、ここからダウンロードすれば最新のものが手に入る。

 ついでなので、筆者が利用したことのある、バイナリファイルを配布しているサイトも紹介しておく。コンパイルが面倒だったり、コンパイル時に必要なツールが足りない場合は、これらのサイトを利用するのもいいだろう。

ソースコードの解凍

 それはさておき、早速インストールを進めていくとしよう。Apacheのソースコードは、tarで1つにまとめた後、さらにgzipで圧縮したファイル(tar.gz)になっている。まずはこの逆の手順でファイルを解凍し、ソースコードを元の状態に復元する。

■コラム 必要なディスク容量
 Apacheそのもののインストールに必要なディスク容量はおおよそ3Mbytesと、意外に小さい。しかし、モジュールを追加したりすればそれ以上のディスク容量が必要になる。もちろん、Apacheを使って公開するコンテンツのために、別途ディスク容量が必要となる。

 このほか、インストール時にはソースコードの展開などのために12Mbytes程度のディスク容量が必要になる。

 このとき、入手したファイルをどこに置くか、どのユーザーで解凍するかは皆さんの自由である。しかし、あえてrootユーザーを避けて一般ユーザーで行うくらいの方が、おかしなところにファイルを作るなどの間違いを犯す心配がなくていいだろう。筆者も「ichishi」というユーザーを作成し、/home/ichishiの中にファイルを置いて解凍するようにしている。

 ファイルを解凍すると、バージョンに応じたディレクトリ(/home/ichishi/apache_1.3.14など)が作成され、圧縮されていたファイルが展開される。これらがApacheのソースコードであり、コンパイルに必要な各種のファイルである。ソースコードに興味のある方は、作成されたディレクトリの中に「src」というディレクトリがあるはずだから、その中を参照してみてほしい(拡張子がcのファイルがメインのプログラム類だ)。

 さて、肝心の解凍手順だが、以下のようなコマンドを使えば一度に解凍できる。以下では、2001年3月現在の最新バージョンであるApache 1.3.19を例に説明する。

$ tar -zxvf apache_1.3.19.tar.gz

 このコマンド(tar)でzオプションを使うと、gzipとtarを一度に解凍できる。しかし、商用UNIXに搭載されているtarコマンドの場合は、zオプションが使えないことが多い。その場合は、以下のようにgzipで解凍してから、そのファイルをtarで展開する。

$ gzip -d apache_1.3.19.tar.gz
$ tar -xvf apache_1.3.19.tar

必ず見るべき2つのファイル

 作業の前に、ファイルを解凍して作成されたディレクトリ(以下ソース・ディレクトリ)に移動し、「README」と「INSTALL」の2つを見ておきたい。これらは2つとも単なるテキストファイルだから、moreやlessで見ることができる。

$ cd apache_1.3.19
$ less README
(あるいは)
$ less INSTALL

 READMEには、そのバージョンを使ううえでの注意事項やApacheについての簡単な説明が書かれている。INSTALLには、インストールの方法やインストール時の注意事項などが書かれている。また、これらのドキュメントにはインストールに必要なツール(とそのバージョン)などが書かれている場合もある(補足1)。

 どちらも英語なので少々読みづらいと思うが、さらっとでも目を通したいところだ。Apacheに限らず、この手のファイルには、案外重要な情報が含まれている。上記の2つ以外にも関連するファイルがあるから、余裕があれば1つ1つ見ておいてほしい。

コンパイル前設定を行うconfigure

 ここまでできたら、インストール前の準備を行う。ここでの作業は「コンフィグ」と呼ばれ、Apacheのインストールオプションの設定を行うものだ。この作業をWindowsのアプリケーションに例えると、インストーラでカスタムインストールを選択し、自分が使いたいコンポーネントを選択する画面に相当する。

 ソースディレクトリで

$ ./configure --help

と入力してみてほしい。何やらドサッとメッセージが表示されると思う。この「configure」というのが設定を行うためのコマンドで、表示されたメッセージは、設定できる内容についての説明書きになっている。

 設定内容といっても、実はそれほど多くない(表1)。よほど特別な場合や特殊な環境でのインストールでなければ、決めるべきはインストールするモジュールだけとなる(補足2)。それも、一般的なモジュールはデフォルトでインストールされるから、それ以外で追加・削除するようなモジュールは限られるだろう。

 表1表2を参考に設定内容を決定したら、

$ ./configure (オプション)

を実行してコンパイル前の設定を実施する。ここで実行したconfigureの内容は、同じディレクトリに「config.status」というファイル名で保存されている(リスト1)。もしも、若干の変更を加えてもう一度実行したければ、このファイルの内容を修正して「./config.status」と実行すればいい。

#!/bin/sh
##
##  config.status -- APACI auto-generated configuration restore script
##
##  Use this shell script to re-run the APACI configure script for
##  restoring your configuration. Additional parameters can be supplied.
##

./configure \
"--enable-rule=SHARED_CORE" \
"--with-layout=Apache" \
"--enable-module=so" \
"--enable-module=status" \
"--enable-module=info" \
"--enable-module=rewrite" \
"--enable-module=usertrack" \
"$@"
リスト1 config.statusの内容

 ./configureを実行すると画面に進行状況が表示されるが、何かエラーがあると作業はそこで中断される。一見うまくいったように見えてもエラーになっていることがあるから、作業が終わったら画面をもう一度よく確認しておこう。特に問題がないようなら、次の作業に進むことができる。

コンパイルとインストール

 実は、先に紹介した./configureを行うと、ソースディレクトリの「Makefile」というファイルが書き換えられる。このファイルは、コンパイルの際にプログラムを動的に変更するためのパラメータや、アプリケーションをコンパイルする手順などを定義するものだ。このファイルもただのテキストファイルだから、興味があれば開いてみて内容を確認してみるといいだろう。そこにはconfigureで指定した見覚えのある内容も記述されているはずだ。

makeでコンパイル

 実際にプログラムをコンパイルするには、「make」というコマンドを使うが、このコマンドはMakefileを読み込んで動作する。本来ならば、makeに続いてMakefile中で定義されたパラメータを指定しなければならないのだが、Makefileにはデフォルトのパラメータが定義されている。Apacheの場合は「build」がそれにあたる。

 従って、プログラムをコンパイルするのであれば

$ make

もしくは

$ make build

と入力する。makeを実行すると、画面にたくさんのメッセージが流れていく。意味は分からなくても構わないが、エラーが起きていないかは確認しておこう。

 先ほどと同じく、エラーがあればそこで作業は中断される。困ったことに、正常に終了してもその旨を示すメッセージは表示されない。特に異常が見当たらなければ成功と考えて構わないだろう。これで、ひとまずプログラムをコンパイルし、バイナリファイルを作成できたということだ。

総仕上げのインストールコマンド

 しかし、バイナリファイルが作成できただけではインストールを終えたことにはならない。なぜならば、作成したバイナリファイルはまだソース・ディレクトリの中に仮置きされているだけだからである。Apacheのような、システムで利用するアプリケーションは作成したファイルをシステムで共通に利用するディレクトリに配置し、きちんと使える状態にしてやらねばならない。

 そうはいっても、作成したファイルがどこにあるのか、それをどこに配置すればよいのかは分からないだろう。そこで、それを自動的に行わせる「make install」を実行する。make installは、Makefileの中のinstallパラメータに定義された手順で処理を行う。

 ただし、この作業はrootユーザー(システム管理者)でなければ書き込めないディレクトリにファイルを配置しようとする。従って、make installはこれまでに作業をしてきた一般ユーザーではなく、管理者として実行しなければならない。「su」を実行して管理者になってから「make install」を実行しよう。

$ su -
Password:(パスワード入力)
# make install

 画面にはこれまでと同じく進行状況が表示されるが、よく見てみると「cp」コマンドであったり「mkdir」コマンドであることが分かる。また、作業が正常に終了すると、以下のようなメッセージを返してくれる。このメッセージが表示されたら、一応Apacheがインストールされた、と判断して構わない。

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/

Apacheの起動と動作確認

 インストール完了のメッセージが表示されたとしても、本当にちゃんと動作するのか、思ったとおりのオプションでインストールされているかは確認しなくてはならないだろう。そこで、まずはメッセージに従い、Apacheを起動してみることにしよう。メッセージでは、起動の前に設定ファイルを修正するように指示しているが、通常は修正しなくても起動を確認することはできる。

# /usr/local/apache/apachectl
start: httpd started

 Apacheの起動を確認したらWebブラウザでWebページが表示されることも確認しておきたい。そうはいっても、まだサーバ上にコンテンツはないじゃないか、と思われるかもしれないが心配はいらない。Apacheをインストールすると、マニュアルを参照したりテストするためのコンテンツも配置されるため、これを表示させることで動作の確認がとれるのである。

 Webブラウザを起動したら、http://に続いてApacheをインストールしたサーバのIPアドレスを入力する。これだけでWebページが表示されるはずだったのだが、筆者の記憶違いか最近はポート番号8080に接続しなければならないようだ。従って、http://192.168.1.2:8080/のように、IPアドレスとポート番号を指定してアクセスする。

 うまくサーバが起動していれば、下の画面のようなページがブラウザに現れるはずだ。ちなみに、そこに用意された「文書」というリンクをクリックすると、オンライン・マニュアルを見ることができる。

画面 Apacheのデフォルトページ。この画面が表示されればApacheは動作している

 さて、ここまでくればもうセットアップについては安心してもいいだろう。あとは、望みどおりのモジュールがインストールされているかどうか、最終的なチェックを行えばいい。インストールされているモジュールを確認するには、$Apache_Home/bin(“$Apache_Home”は、/usr/local/apacheなど、Apacheをインストールしたディレクトリのこと)にある、httpdコマンドを使う。

$ ./httpd -l

のようにオプションを付ければ、画面上にインストール済みのモジュールリストが表示されるはずだ。

 スクロールが速すぎて見えないというのであれば、「httpd -l | more」のようにすれば、1ページずつゆっくりと確認できる。この確認で問題がなければApacheのインストールは終了ということになる。

 今回は、Apacheのインストールについて、基本的な部分を紹介した。次回は、今回に引き続いてApacheの自動起動・自動停止を設定する方法、SSLやPHPと組み合わせてインストールする方法、Windows版のApacheについて、さらにはApache 2.0についても解説したいと思う。

 一日も早くApacheの設定についても解説したいところではあるのだが、もうしばらくご辛抱いただきたい。

Appendix

--quiet 画面上にメッセージを表示しない
--silent quietと同じ
--verbose 画面上に詳細なメッセージを表示
--shadow[=DIR] コンパイルに必要なファイルを指定したディレクトリ以下に作成
--help 画面上にヘルプを表示
--show-layout 画面上にApacheがインストールされるディレクトリを表示
--with-layout=[F:]ID 指定したファイルの内容のとおりにApacheのファイルを配置する
--target=TARGET 設定ファイルなどの名前を変更(httpd.conf→ichishi.confなど)
--prefix=PREFIX Apacheがインストールされるディレクトリを変更する
--exec-prefix=EPREFIX ファイルの種類別にディレクトリを指定する。変更後、どこにインストールされるかはshow-layoutで確認
--bindir=DIR
--sbindir=DIR
--libexecdir=DIR
--mandir=DIR
--sysconfdir=DIR
--datadir=DIR
--iconsdir=DIR
--htdocsdir=DIR
--cgidir=DIR
--includedir=DIR
--localstatedir=DIR
--runtimedir=DIR
--logfiledir=DIR
--proxycachedir=DIR
--add-module=FILE Apacheの標準以外のモジュールファイルを追加する
--activate-module=FILE
--permute-module=N1:N2 モジュールを組み込む順序を指定する
--enable-module=NAME 指定したApacheの標準付属モジュールを組み込む
--disable-module=NAME 指定したApacheの標準付属モジュールを組み込まない
--enable-shared=NAME 指定したApacheの標準付属モジュールをDSO(補足3)で組み込む
--disable-shared=NAME 指定したApacheの標準付属モジュールをDSOで組み込まない
表1 これらのオプションは、./configureに続いて指定する。これ以外にもオプションは存在するが、それらは使うことが考えにくいか、インストール後でも変更可能なものである。DSOについては補足3を参照

モジュール 機能 デフォルト
mod_access ホストに基づいたアクセス制御
Yes
mod_actions ファイル種別/メソッドに基づいたスクリプトの実行
Yes
mod_alias Aliases and redirects.
Yes
mod_asis .asis ファイルハンドラー
Yes
mod_auth テキストファイルを用いたユーザ認証
Yes
mod_auth_anon FTPスタイルの匿名(Anonymous)ユーザー認証
No
mod_auth_db バークレイDBファイルを用いたユーザー認証
No
mod_auth_dbm DBMファイルを用いたユーザー認証
No
mod_autoindex 自動ディレクトリリスト表示
Yes
mod_cern_meta HTTPハンドラメタファイルのサポート
No
mod_cgi CGIスクリプトの実行
Yes
mod_digest MD5ユーザー認証
No
mod_dir 基本的なディレクトリハンドリング
Yes
mod_env CGIスクリプトへの環境変数の継承
Yes
mod_example Apache APIの実証
No
mod_expires 割り当ての終了:リソースへのヘッダ
No
mod_headers リソースに任意のHTTPヘッダを加える
No
mod_imap イメージマップファイルのハンドラ
Yes
mod_include サーバで解析するドキュメント
Yes
mod_info サーバの設定情報
No
mod_log_agent ユーザーエージェントのログ蓄積
No
mod_log_config ユーザー定義ログ
Yes
mod_log_referer ドキュメントリファレンスのログ蓄積
No
mod_mime ファイル拡張子を使ったドキュメントタイプの決定
Yes
mod_mime-magic magic numbers を使ったドキュメントタイプの決定
No
mod_negotiation コンテンツのネゴシエーション
Yes
mod_proxy キャッシングプロキシ機能
No
mod_rewrite 通常表記を使った強力なURI-to-filenameマッピング
No
mod_setenvif クライアント情報を基にした環境変数の設定
Yes
mod_spelling URLでのminor typosの自動訂正
No
mod_status サーバステータスを表示
Yes
mod_unique-id あらゆるリクエストのためのユニークなリクエスト識別の生成
No
mod_userdir ユーザーのホーム・ディレクトリ
Yes
mod_usertrack cookieを用いたユーザー追跡(mod_cookies.cと置き換え)
No
表2 ここに挙げたモジュールはLinux用Apache 1.3.*のもの。Windows用や古いバージョンのApacheでは、ここに挙げていないモジュールが含まれていることがある。各モジュールの詳細などは、http://japache.infoscience.co.jp/japanese_1_3/manual/mod/index.htmlを参照

補足1 Apacheのインストールに必要なツール
 tarやgzipだけでなく、Apacheをインストールするためには以下のようなツールも必要となる。このほか、インストール要件を確認していただくため、そのための情報も掲載しておくので参考にしていただきたい。Linuxであれば、たいていの場合は問題ないと思うが、あえてツールをインストールしていないこともあるので注意していただきたい。

gcc
 Apacheをコンパイルするには「gcc」(GNU C Compiler)が必要になる。それ以外のCコンパイラではうまくいかない可能性が高い。また、バージョンが古すぎるのもよくない。Apacheのコンパイルに必要なのは、少なくともバージョン2.7.2以上とされているが、現時点での最新版は2.96である。gccがインストールされていれば、「gcc -v」と入力することでバージョンを確認できる。

make
 gccと同じく、makeもアプリケーションのコンパイルに欠かせない。「make -v」と入力すればバージョンに関する応答があるはずなので、応答がないようならインストールするようにしてほしい。

 現在の一般的なLinuxディストリビューションであれば、これらのツールはApacheのインストールに支障のないバージョンが収録されている。ただし、商用UNIXの場合は、makeもGNUのmakeを使わなければならない点に注意すること。ともかく、なんでもかんでもGNUから最新版を入手してしまえるなら、その方が近道かもしれない。

補足2 モジュールとは
 Apacheを利用するうえでモジュールは欠かせない。なぜなら、Apacheからすべてのモジュールを外したら、ごく単純な機能しか持たないWebサーバになってしまうからだ(CGIプログラムさえも実行できなくなってしまう!)。

図2 Apacheとモジュールのイメージ
 そのApacheにさまざまな機能を付け加え、高度なWebサーバに仕立て上げるのが、モジュールに課せられた役割である(図2)。ちょうど、宇宙ステーションのごとく、モジュールを追加することでApacheの機能はどんどん拡張されていくわけだ。こうした構造のおかげで、新しい技術や特殊なニーズが登場しても、モジュールさえ作成すれば容易にApacheの機能を拡張できるのである。

 本文中でも説明しているとおり、Apacheには初めから幾つかのモジュールが組み込まれている(表2)が、これら以外にも数多くのモジュールがインターネットなどで公開されている。その中には、暗号化されたHTTP(HTTPS)を利用するためのSSLモジュール(mod_ssl)や、PHPのようにプログラム言語を実行するエンジンも含まれる。こうしたポピュラーなモジュールから、マイナーなモジュールまで用意されているから、何か困ったことがあればモジュールで機能を拡張できないか調べてみるといいだろう。

補足3 DSOとapxs
 補足2で「モジュールを使えばApacheをどんどん拡張できる」と説明した。だとすれば、なぜ初めからすべてのモジュールを組み込んでおかないのだろうか? どうしてわざわざ組み込みを宣言しなくてはならないのだろうか? その答えは単純なもので、必要もないモジュールを組み込んでしまえば、バイナリが肥大化するし動作が遅くなるかもしれないからである。

 では、インストール時には何も組み込まなかったとして、後から必要になったらどうなるのだろうか。その場合、通常のモジュールとしてApacheに組み込むのならば、Apacheを再コンパイルしなければならない。しかし、それではサーバを停止しなくてはならないし、なにより面倒だと思われるだろう。

 そのような面倒と運用上の問題を回避するため、Apache 1.3から「DSO」(Dynamic Shared Object)と呼ばれる機能が組み込まれた。この機能を有効にしておくと、あらかじめApacheにモジュールを組み込まなくても、モジュールのファイルさえ用意すれば必要なときだけ組み込めるようになる。ただし、DSOを有効にするには、Apacheをインストールする際に「SOモジュール」(mod_so)を組み込んでおかなくてはならない。

 SOモジュールを組み込むには、configureを実行する際に「--enable-module=so」を指定すればいいのだが、場合によってはうまくいかないかもしれない。その場合は、さらに「--enable-rule=SHARED_CORE」も指定する。心配ならば、最初から2つとも指定しておけば、ほとんどの場合問題なくDSOを有効にできるはずだ。詳しく知りたい方はApacheのマニュアル(ソースディレクトリの中のhtdocs/manual/dso.html)などを参照してほしい。

 DSOを有効にすればモジュールの追加は容易になるが、モジュール側でもDSOへの対応が必要となるから注意しなくてはならない。

 その方法はモジュールごとに異なるから、各モジュールの解説を参考にしていただきたいのだが、たいていは「apxs」と呼ばれるApacheのツールを使って行われる。ただし、Apacheにあらかじめ添付されているモジュールは、configureを実行する際に「--enable-shared=NAME」(NAMEはモジュールの名前)と指定するだけでDSOに対応できる。

 いずれにしても、DSOは便利な機能だから有効に活用していただきたい。