Apacheサーバを立ち上げよう♪


2002/01/25
M. YAMADA

はじめに

ドキュメントは 情報実験I のオマケ課題です. なにか楽しめて為になる作業をしてもらおうということで, ホームページ(HP)作りをしてもらうことにしました. ただしせっかくLinux のインストールを してもらったので, HPを公開するための土台であるサーバのインストールから 行ってもらいます. ドキュメント自体は急拠作成したため かなり不親切な点があると思いますが, 実際に自分で立ち上げたサーバで情報発信するまでの過程を 楽しんで頂ければ幸いです.

日の課題は "Apache" というWebサーバプログラムをインストールし, 自分で立ち上げたWebサーバに自分のWebページを公開することです. これより

  1. Apacheサーバについての簡単な説明.
  2. apt を使ったインストールとアンインストール.
  3. ソースコンパイルによる 最新版のApacheインストール.
  4. 自己紹介Webページの作成.
という流れで話を進めていきます.

Apache ってなに??

Apache は Web サーバプログラムであると先程触れましたが, もう少し具体的な話をします. Web サーバとは, みなさんがWebブラウザ(インターネットエクスプローラーやネットスケープ等) を使って "http://hogehoge.co.jp/ のコンテンツを見せてくれ"と言う要求を した時, hogehoge.co.jp と言う名前を持つコンピュータの中で このような要求を待って働いているプログラムのことをいいます. 世の中にはこのような("http"と云うプロトコルを話して情報を提供する) 働きのプログラムが多くあります. そのなかで Apache は約5割のシェアを占ており, 最も普及しているWebサーバプログラムといえます.

れまでに の様なロゴを 一度は見掛けたことがある(??)かと思います. なぜ Apacehe が 広く普及したのかを簡単に述べ, インストール作業に移ります. Apache の優れているを列挙すると,

  1. フリー(無料)である.
  2. サポート体制が充実.
  3. パフォーマンスが高い(高速,コンパクト,安定,安全).
  4. 導入が容易.
  5. 多くのプラットフォームで動く.
  6. 多機能
  7. 開発スピード
と云ったところです. 詳しくはApache 本家ドキュメント(日本語)を 見てもらうとして, インストール作業を始めましょう!!

aptを使ったインストール

Apt は Debian GNU/Linuxの パッケージ(:あるツールに関連した,ファイルの集まり)管理ツールです. Debian が提供しているパッケージ数は約4000にも及びます. あるパッケージは他のパッケージが無いとうまく動作しなかったり, あるいは逆に共存できないパッケージがあったりします. 膨大なパッケージの中から自分が必要としている ものを選び, 保守管理するのはなかなか大変なことです. たとえばあるソフトウェアを含むパッケージをインストールしようと思うと, どのパッケージにそのソフトウェアが含まれるのか, 関連するパッケージは何か, 邪魔になるパッケージは何かを調べ, 必要なパーケッジをダウンロードし, 正しい順番でインストールしなくてはなりません.

このように管理していたのでは大変ですから (といっても数年前まで実際このようにしていた...), Debian では他のディストリビューションと比較して独自の パッケージシステムを採用することで, 管理に掛かるコストを軽減させています. Debian で配布しているパッケージ(debパッケージと呼ぶ) にはそれ自身にいろいろな情報(依存関係など)が格納されています. Apt はこの情報を使って自動的にプログラムのインストールや アップデートをするためのツールなのです.

こむずかしい(??)はなしはともかく, 実際に Apache をインストールしてみましょう. まず自分のPCにどんなパッケージが入っているか調べてみます. ターミナルを立ち上げ以下のコマンドを入力して下さい.
$dpkg -l
なにやら文字がながれていきました. こういう場合は下のようにして眺めてみて下さい. "less" こまんどの使い方はマニュアル(man)を参照してくださいね.
$dpkg -l | less

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ 名前           バージョン     説明
+++-==============-==============-============================================
ii  a2ps           4.13-2         GNU a2ps 'Anything to PostScript' converter 
ii  a2ps-perl-ja   1.44-1         perl version of Miguel Santana's a2ps (suppo
ii  aalib-bin      1.2-25         sample programs using aalib
ii  aalib1         1.2-25         ascii art library
ii  aalib1-dev     1.2-25         ascii art library, development kit
ii  aboot          0.7-1          Linux bootloader for the SRM console
ii  adduser        3.11.1         Add users and groups to the system.
ii  ae             962-26         Anthony's Editor -- a tiny full-screen edito
ii  alien          6.54           Install Red Hat, Stampede, and Slackware Pac
1,2,列めの"ii"といった記号は, その列を上にたどっていくと Install, Installed と云う文字に関係していることがわかりますか?? 初めの"i"はその行のパッケージをインストールするよに命令があったもので, 次のの"i"はその行のパッケージをインストール済であることを示しています.

次に apache が含まれるパッケージを探してみましょう. 以下のコマンドは管理者(root)権限で実行してください. ちなみにUNIXの世界でプロンプト(入力待ちキャラクタ)が"#"(シャープ記号) は管理者権限であることを暗に意味しています.
#apt-get update

Hit ftp://ftp.ep.sci.hokudai.ac.jp stable/main Packages
Hit ftp://ftp.ep.sci.hokudai.ac.jp stable/main Release
Hit ftp://ftp.ep.sci.hokudai.ac.jp stable/contrib Packages
	:
	:
Ign ftp://ftp.ep.sci.hokudai.ac.jp potato-jp/contrib Release
Hit ftp://ftp.ep.sci.hokudai.ac.jp potato-jp/non-free Sources
Get:6 ftp://ftp.ep.sci.hokudai.ac.jp potato-jp/non-free Release
Ign ftp://ftp.ep.sci.hokudai.ac.jp potato-jp/non-free Release
Reading Package Lists...
Building Dependency Tree...
この操作はパッケージを持ってくる相手 (/etc/apt/sources.list で指定したネットワーク上のサーバ)の ディレクトリにどのようなパッケージが置かれているかの情報を得るために 行います. パッケージは日々更新されているのでこのような作業が必要なのです. では
$apt-cache search apache
と入力してください. 最後の文字列が個々のパッケージが持つ情報に含まれていると表示されます. したがって自分が探しているソフトウェアに関係する文字列適当に想像して 入力することで関係しそうなパッケージがわかるわけです. "apache"に関係するパッケージも結構沢山あることがわかりますが 今回はそのままの名前で"apache"というパッケージがありましたから これをインストールします. ちなみに
$apt-cache show パッケージ名
$apt-cache depends パッケージ名
で, パッケージの情報, 依存パッケージ情報をそれぞれ確認できます.

いよいよインストールです(ながかった...).
#apt-get install apache

# apt-get install apache 
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  apache-common 
The following NEW packages will be installed:
  apache apache-common 
0 packages upgraded, 2 newly installed, 0 to remove and 25 not upgraded.
Need to get 1218kB of archives. After unpacking 3523kB will be used.
Do you want to continue? [Y/n]  << Y と押す
Get:1 ftp://ftp.ep.sci.hokudai.ac.jp stable/main apache 1.3.9-14 [409kB]
Get:2 ftp://ftp.ep.sci.hokudai.ac.jp stable/main apache-common 1.3.9-14 [809kB]
Fetched 1218kB in 0s (2976kB/s) 
未選択パッケージ apache-common を選択しています。
 (データベースを読み込んでいます... 現在 45831 個のファイルとディレクトリがインストールされています。)
(.../apache-common_1.3.9-14_alpha.deb から) apache-common を展開しています...
未選択パッケージ apache を選択しています。
(.../apache_1.3.9-14_alpha.deb から) apache を展開しています...
apache-common (1.3.9-14) を設定しています ...

apache (1.3.9-14) を設定しています ...
Adding webmaster to /etc/aliases ...

Initializing apache config for immediate operation.
Installing new configuration file /etc/apache/httpd.conf ...
Installing new configuration file /etc/apache/access.conf ...
Installing new configuration file /etc/apache/srm.conf ...
Installing new configuration file /etc/apache/cron.conf ...
The ServerAdmin is set to webmaster@jspace.ep.sci.hokudai.ac.jp.
The DocumentRoot is set to /var/www.
Installing your new homepage in /var/www.
Finding DSO mods.........................................found.

# LoadModule vhost_alias_module /usr/lib/apache/1.3/mod_vhost_alias.so
# LoadModule env_module /usr/lib/apache/1.3/mod_env.so
LoadModule config_log_module /usr/lib/apache/1.3/mod_log_config.so
	:
	:
# LoadModule pgsql_auth_module /usr/lib/apache/1.3/mod_auth_pgsql.so
# LoadModule eaccess_module /usr/lib/apache/1.3/mod_eaccess.so
# LoadModule roaming_module /usr/lib/apache/1.3/mod_roaming.so

Pondering......................................... done.

/usr/sbin/apachectl start: httpd started

と言うわけでApach と Apache-comman というパッケージの 転送から, パッケージの展開, インストールまでを終了し"httpd"という名前の プログラムが起動できました.
#ps aux|grep apache
root     11482  0.0  1.8 28312 2384 ?        S    02:08   0:00 /usr/sbin/apache
www-data 11484  0.0  1.9 28376 2504 ?        S    02:08   0:00 /usr/sbin/apache
www-data 11485  0.0  1.9 28376 2504 ?        S    02:08   0:00 /usr/sbin/apache
www-data 11486  0.0  1.8 28328 2368 ?        S    02:08   0:00 /usr/sbin/apache
www-data 11487  0.0  1.8 28328 2368 ?        S    02:08   0:00 /usr/sbin/apache
www-data 11488  0.0  1.8 28328 2368 ?        S    02:08   0:00 /usr/sbin/apache
www-data 11493  0.0  1.9 28328 2408 ?        S    02:16   0:00 /usr/sbin/apache
ちょっと変わった方法で確認してみましょう.
$ telnet localhost 80		<== 入力
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /				<== "GET /" と入力してエンターキーを押す
なにやら </body> </html>といった文字が流れていきましたね? 1)Webサーバを呼びだしコネクションが確立したら 2)"GET /"といった 欲しいファイルが置かれている場所を指定する. このクライアントの要求に対して3)サーバは指定されたファイルが存在したので その内容を送り返してきた, のです この時のやり取りの決まりごと(ファイルを見たい時は"GET"という文字列を送る等) がhttp(Hyper Text Transfer Protocol)と呼ばれるプロトコル(通信手続きの約束事) です. ここで注意してほしいのはサーバが返してくれる情報は 先程目にした </body> </html>といった文字の列びであって, 今ブラウザで見ているような色のついた文字や罫線が引かれた画像を 送ってきているわけでは無いのです. この文字で表現された情報は普通 HTML (Hyper Text Markup Language)と呼ばれる 文法にしたがって記述されており, ブラウザが約束ごとにしたがってHTMLを解釈し, 表示した結果を 私達は普段みているわけだったのです.

今度はブラウザにhttp://192.168.0.***/と 自分のPCのIPアドレスを入力し, 普通に見てみましょう. Welcome to Your New Home in Cyberspaceとかいう画面がでてきましたね?

せっかくインストールしたのですが アンインストールの方法も知らなくてはなりません.
#apt-get remove apache
で, 指定したパッケージ(いまはApache)と それに依存したパッケージをアンインストールします. この場合設定ファイルはアンインストールされません. もし設定ファイル類もすべてアンインストールしたい場合は
# apt-get remove --purge apache

としてください(今日は --purge を行うこと).

それでは次のSource コンパイルによるインストールへ移りましょう!! (そのまえに少し休憩しましょうか... )


ソースコンパイルによるインストール

Source (プログラム)というのは, あるソフトウェアの作るために C言語などのプログラム言語で記述された"設計書"のようなファイル(の一群)です. さきほど行ったパッケージのインストールではこのソースプログラムを コンピュータの種類に応じてそのコンピュータが理解できる状態に 翻訳(コンパイル)した結果だきたファイル(バイナリファイル)の一群を もらってきていました. しかしバイナリパッケージで配布されていないプログラムを 使いたい場合は, Source プログラムを手にいれ, 自分のコンピュータ上で 使えるようにコンパイルしなくてはなりません. よくある場合は最新のソフトウェアをつかいたいという時ですが, 大学の研究室で作成され, 公開されているシミュレーションプログラムなどは まずパッケージ化されていることはなく, 自分でコンパイルしなくてはなりません.

今日はApache の最新版をダウンロードしてインストールしてもらいます. あまりに手取り足取りではつまらない(しドキュメントを作るのが大変なので...) 大雑把なインストール手順を示します. 他に参考になりそうなものとして, Apache本家インストールドキュメント, 北大地球惑星専攻WWWサーバ構築ドキュメント などがありますのでそちらも参考にどうぞ.

Apache に限らずソースをコンパイルしてインストールする場合 大体以下のような決まった流れがあります.

たぶん今回も同様な流れであることが予想されますが, 順にやっていってみましょう.

必要とするソフトウェアの配布元を調べる.

ソフトウェアの名前から推測して "www.apache.org" につないでみるとビンゴ. ソフトの名前がわかっている場合は WWWでの検索, 雑誌からの情報などを使えば まず見付かる. 具体的な名前をしらなくても, 必要としているソフトに関係する キーワードでうまく検索を掛ければ 必要としているプログラムが結構手にはいるものです. 有名なソフトは出来るだけ本家か1次のミラーサイトから持ってくること. 変なところからもってくると, 何か(トロイの木馬など)が仕込まれていたりと いった危険もある.

ソースファイルのダウンロード

とりあえずwww.apache.orgにアクセス. ながめてみると Apache 1.3.23 というのが最新の安定版らしい. また Linux2.2 で (最新が必ずしもよいとはいえませんが)これ(apache_1.3.23.tar.gz[2.18M]) をダウンロード. う〜ん結構時間がかかる (日本のミラーサーバから持ってきたほうが無難です). ホームディレクトリに持ってきたので, 作業用ディレクトリを作成し そちらに今持ってきたファイルを移動する.
    $ mkdir tmp
    $ mv apache_1.3.23.tar.gz tmp/.
    $ cd tmp
    ~/tmp$ ls -l
    -rw-r--r--    1 mym      mym       2177983 Jan 25 04:28 apache_1.3.23.tar.gz
  

圧縮されたソースファイル解凍.

.tar.gz という拡張子は UNIX 系のOSで良く使われるもので, ディレクトリを束ねて一つにした状態のファイル(tarファイル)に 圧縮(gzip)を掛けたもの. 以下のコマンドで展開(いろいろな解凍方法がある).
$tar zxvf apache_1.3.23.tar.gz
$zcat apache_1.3.23.tar.gz | tar xv
解凍されると新しく apache_1.3.23/ というデイレクトリが作られ, その中に Apache のプログラムなどが納められている.
    ~/tmp$ ls -l
    合計 2138
    drwxr-xr-x    8 mym      mym          1024 Jan 25 04:53 apache_1.3.23/
    -rw-r--r--    1 mym      mym       2177983 Jan 25 04:28 apache_1.3.23.tar.gz
  

解凍されて出来たディレクトリに移動.

apache_1.3.23/ へ移動する. 中に展開されたファイルを見てみる.
     ~tmp/$ cd apache_1.3.23/
     ~tmp/apache_1.3.23/$ ls
     ABOUT_APACHE  KEYS           README            WARNING-WIN.TXT  config.layout  icons/
     Announcement  LICENSE        README-WIN.TXT    cgi-bin/         configure*     logs/
     INSTALL       Makefile.tmpl  README.configure  conf/            htdocs/        sr
  
普通"README", やINSTALL"といった名前のファイルが あるので, 必ず目を通すこと. ここにある情報が一番わかりやすい場合が多い.

ドキュメントを眺める

READMEを眺めるとたいしたことは書かれていなかった. 次にINSTALLを見てみる. HD に 12MB の空き, c コンパイラ(gcc)も必要gcc. もし gcc コンパイラがインストールされていない場合, apt を使ってインストールすること. INSTALLファイルの 1. がクイックインストールと言ったところだが, 一応全体に目を通しておく. 特に 1. に書いてある順でうまくいかない場合などでは, 後半の丁寧な解説が重要になる.

ドキュメントに従いコンパイル等を行う

先ずインストールするディレクトリを準備しておく. あるディストリビューションを使用している場合(今の場合Debian), そのディストリビューションで配布しているパッケージ以外の ソフトウェアは /usr/local以下のディレクトリに置く. これによりパッケージ以外のものと区別する. 今回はINSTALLファイルと同じディレクトリを用いることにする.
# mkdir /usr/local/apache
configure プログラムを起動する. これは コンピュータに依存するディレクトリ構造や 準備されているコンパイラなどを調べ, 次に行うコンパイル作業の準備をする プログラム. 続いて実際にコンパイルを行わせる.
     ~tmp/apache_1.3.23$ ./configure  --prefix=/usr/local/apache/
     ~tmp/apache_1.3.23$ make
  
INSTALL ファイルにあるような拡張機能を使えるようにするためには configure プログラムを起動させる際に各種オプションを付ける必要がある.

システムにインストール.

管理者になって先程していしたディレクトリに コンパイルで生成されたプログラムを移動する.
     ~tmp/apache_1.3.23# 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/  |
+--------------------------------------------------------+
  
これにてインストールは完了.

実際にプログラムを使用する

INSTALL ファイルの6.に従い, プログラムの動作確認をしてみる.
  # /usr/local/apache/bin/apachectl start     
  /usr/local/apache/bin/apachectl start: httpd started
  
この状態で Netscape から http://localhost:8080/ にアクセスしてみる. あるいは ps コマンドで httpd というプロセスが動いていることを確認する.
$ ps aux|grep httpd
root     16385  0.0  1.4  9272 1832 ?        S    05:51   0:00 /usr/local/apache/bin/httpd
nobody   16386  0.0  1.4  9288 1816 ?        S    05:51   0:00 /usr/local/apache/bin/httpd
nobody   16387  0.0  1.4  9288 1816 ?        S    05:51   0:00 /usr/local/apache/bin/httpd
nobody   16388  0.0  1.4  9288 1816 ?        S    05:51   0:00 /usr/local/apache/bin/httpd
nobody   16389  0.0  1.4  9288 1816 ?        S    05:51   0:00 /usr/local/apache/bin/httpd
nobody   16390  0.0  1.4  9288 1816 ?        S    05:51   0:00 /usr/local/apache/bin/httpd
  
各プロセスが nobody という名のユーザの権限で動作している. これはあまり良くないので実は設定ファイルを修正する必要がある. 一度サーバプログラムを停止する.
  # /usr/local/apache/bin/apachectl stop
  /usr/local/apache/bin/apachectl stop: httpd stopped
  

各種設定を行う

いま行ったインストールでは 設定ファイルは/usr/local/apache/conf/httpd.conf である. 設定方法は先に挙げた地球惑星専攻WWWサーバの Webページ等が参考になるであろう. またソースファイルを展開したディレクトリにある htdocs/ディレクトリ以下にもマニュアルがある(日本語のものも). これらを参考にいろいろと遊んでみて欲しい.

※ネットスケープで Apache 本家のドキュメントや ローカルのドキュメントが英語で表示されてしまう場合, 『編集』→『設定』→Navigator 横の三角を押し, 言語で日本語を指定すると良い.

最低限修正すべき項目は,

項目 元の値 修正した値
Port 8080 80
User nobody www-data
Group "#-1" www-data
www-data は Debian パッケージのApache をインストールしたときに 作られたユーザです. このユーザが存在しない場合は自分で作成して下さい. このほかにもいろいろ設定をかえることでサーバの挙動がかわります.

Apache の起動

上記設定を変更したらもう一度 Apache を起動し Web ページ作成に取り掛かりましょう.
  # /usr/local/apache/bin/apachectl start     
  /usr/local/apache/bin/apachectl start: httpd started
  

Web ページを作成しよう!!

自分のホームディレクトリにpublic_html というディレクトリを 作成し, そのしたにindex.htmlと言う名前の HTMLファイルを作成してください. 内容は自己紹介など好きなものを作ってみてください. またたのグループのサーバにアクセスして 作成したWebページを見せてもらいましょう.

HTML の書き方は以下の資料を参考にしてみて下さい.


参考資料


Original 2002/01//25 やまだ まなぶ.
Copyright (c) 2002 INEX Project, all rights reserved.