この実習では「Apache」というWebサーバソフトウェアを用いて行うことにします.
強調されているのが新しく出てくるコマンドやプログラムです.
※ 実際にやっていて使い方が分からないコマンドはmanコマンドやinfoコマンドなどで調べる
今回はソースコードからApacheをコンパイルして使用することにします.
ApacheはWeb上から入手することができます.
今回は本家のサイト(http://www.apache.org/)からダウンロードして使用します.
このサイトからリンクされているhttp://httpd.apache.org/の"Download"のページからダウンロードできます.
この中から一番新しいApacheのソースアーカイブをブラウザなどを用いてダウンロードしてください.
ここでは"httpd-2.0.48.tar.gz"を使用することにします.
どのディレクトリにダウンロードしても良いのですが, ここでは"/usr/local/src"にダウンロードしたことにして, 話を進めます.
まず, ここからはrootユーザで作業することになります.十分に注意して作業してください.
ダウンロードしたファイルは"httpd-*.tar.gz"のように".tar.gz"という拡張子がついています
これはtar形式のファイルがgzip形式で圧縮されていることを示します.
この他にも".bz2"や".Z"という形式もあります.これはそれぞれ"bzip2","compress"という形式圧縮されていることを示します.
さて, まず,この".gz"をgunzipコマンドで解凍します.
もし".gz"ではなく".bz2"や".Z"だった場合にはそれぞれ, bunzip2コマンド, uncompressコマンドを使用します.
次にtarコマンドを使用してtarファイルを展開します.
$ su -
Password: (rootユーザのパスワードを入力)
# cd /usr/local/src
# ls
httpd-2.0.48.tar.gz
# gunzip httpd-2.0.48.tar.gz (ファイルの解凍)
# ls
httpd-2.0.48.tar
# tar xf httpd-2.0.48.tar (アーカイブの展開)
# ls
httpd-2.0.48 httpd-2.0.48.tar
Linuxの様な"GNU Tar"を使っている場合や, あとから"GNU Tar"をインストールした場合には
# tar zxf httpd-2.0.48.tar.gz
もしくは
# gtar zxf httpd-2.0.48.tar.gz
とすることでgzipの解凍と展開の両方をtarコマンドで行うことができます.
※ コマンド名が"tar"か"gtar"であるかはOSやtarコマンドのインストールの仕方によって違います.
"GNU Tar"であるかそうでないかは
$ tar --version
tar (GNU tar) 1.12
(...省略...)
$
と表示された場合はそのtarコマンドは"GNU Tar"です.
展開されたソースツリーの中に入ってみましょう.
ファイルをはがたくさんありますね.
まず, コンパイルの前にすることがあります.
それは"README"や"INSTALL"といったファイルに目を通すことです.
これらのファイルにはそれぞれ, 使うときに初めに読んで欲しいこと, インストールする方法が書かれています.
"INSTALL"をmoreコマンドで見てみてください.
"Quick Start"という部分があります.ここが手っ取り早くインストールしたいときに参考にする部分です.
英語ですが, そんなに難しいわけではないのですこし読んでみてください.
$ ./configure --prefix=PREFIX
$ make
$ make install
$ PREFIX/bin/apachectl start
Replace PREFIX with the filesystem path under which
Apache should be installed. A typical installation
might use "/usr/local/apache2" for PREFIX (without the
quotes).
要約すると「"PREFIX"をインストールするディレクトリに置き換えて実行するとそのディレクトリにインストールできます」と書かれています
まず, その指示に従って"./configure"を実行します.
このconfigureはソースコードをコンパイルするために必要な情報を収集し, それによってこのOSやライブラリといった環境にあった設定を行います.
この作業をすることによって, 初めてこの環境でコンパイルできる状態になります.
ここではインストール先を"/usr/local/apache2"とします.
よってここでは"./configure --prefix=/usr/local/apache2"と打ちます.
# cd httpd-2.0.48
# ls
(...省略...)
# more README (インストールする前に必ず目を通すようにします)
(...省略...)
# more INSTALL (インストールの方法が書かれています)
(...省略...)
# ./configure --prefix=/usr/local/apache2
checking for chosen layout... Apache
checking for working mkdir -p... yes
(...省略...)
config.status: creating build/rules.mk
config.status: creating include/ap_config_auto.h
config.status: executing default commands
#
configureについての他の機能やオプションについては
# ./configure --help
とすることで見ることができます.
続いて"make"を実行します.
この"make"とはmakeというコマンドを実行するという意味です.
OSなどによってはmakeコマンドの他にgmakeコマンドが存在することがあります.
これはtarコマンドの時と同じく, makeコマンドには純正のmake(BSD make)と"GNU make"と呼ばれるものがあります.
"GNU make"は純正のmakeを拡張してより高機能にしたものです.
今回の場合はどちらでも構いませんが, ソフトウェアの中には"GNU make"を前提にしてかかれているものもあります.
純正のmakeがインストールされている環境であれば, "GNU make"はgmakeというコマンドでインストールされていると思います.
もちろん, 純正のmakeしかない場合もあります.
逆に, "GNU make"しかインストールされていないものは"GNU make"がmakeというコマンドになっていると思います.
makeコマンドはカレントディレクトリにある"Makefile"というファイルを元にして, 実際のコンパイル作業を行ってくれます.
さらに続いて"make install"とすることでコンパイルしたファイルをインストールすることができます.
# make
Making all in srclib
make[1]: Entering directory `/usr/local/src/httpd-2.0.48/srclib'
Making all in apr
make[2]: Entering directory `/usr/local/src/httpd-2.0.48/srclib/apr'
Making all in strings
make[3]: Entering directory `/usr/local/src/httpd-2.0.48/srclib/apr/strings'
make[4]: Entering directory `/usr/local/src/httpd-2.0.48/srclib/apr/strings'
/bin/sh /usr/local/src/httpd-2.0.48/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX=2 -D_REENTRANT -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -I../include -I../include/arch/unix -c apr_cpystrn.c && touch apr_cpystrn.lo
(...省略...)
make[1]: Leaving directory `/usr/local/src/httpd-2.0.48'
# make install
Making install in srclib
make[1]: Entering directory `/usr/local/src/httpd-2.0.48/srclib'
Making install in apr
(...省略...)
Installing build system files
make[1]: Leaving directory `/usr/local/src/httpd-2.0.48'
#
また, コンパイルした時に出来たオブジェクトファイルなどを削除するときには
# make clean
とすることで自動的にその処理を行ってくれます.
これを行うと次にmakeするときには初めからコンパイルし直しになります.
また, 上記に加えてconfigureスクリプトの結果も消すこともできます. それには
# make distclean
もちろん, "make distclean"をしたときには, もう一度configureスクリプトからやり直さなければ, コンパイルをすることはできません.
ソフトウェアの中にはconfigureスクリプトを実行し直しても, 前のゴミが残っていてそれが原因で設定が反映されないことがあります.
そういう場合にはこの"make distclean"を行って, 改めてconfigureスクリプトを実行することで完全に初めから作業をやり直すことができます.
さて, プログラムのインストールは終わりました.
しかし, プログラムをインストールしただけでは, そのソフトウェアは動きません.
幾つかの設定をしなくてはいけません.それをこれから説明します.
まず, Apacheをインストールしたディレクトリに移動してみましょう.
そこにあるファイルを見てみると, 13個のディレクトリができています.
Apacheの設定を行っているのはconfディレクトリの中にある"httpd.conf"というファイルです.
このファイルをエディタで開いてみましょう.
# cd /usr/local/apache2
# ls
bin cgi-bin error icons lib man modules
build conf htdocs include logs manual
# vi conf/httpd.conf
(...下記の修正をする...)
大きなファイルですが, 修正する個所は2個所です.
まず, 1つ目が276行目付近にある,
ServerAdmin you@example.com
の部分です. この"you@example.com"をあなたのメールアドレスにします.
ここでは"hogefuga@foobar.baz"とします.
ServerAdmin hogefuga@foobar.baz
さらに, 2つ目が290行付近にある
#ServerName www.example.com:80
です. この行頭の"#"を消して, "www.example.com"という所をこのコンピュータのホスト名に置き換えてください.
ここでは"alpha.foobar.baz"とします.
ServerName alpha.foobar.baz:80
さて, これで設定は終りです. これらの変更を保存して, エディタを終了してください.
それでは実際にWebサーバを動かして見ましょう.
と言いたい所ですが, 1つだけやっておくことがあります.
先ほど修正した部分が正しく修正されているかということです.
間違って, 他の部分を変にいじってしまったりしていると, Webサーバは起動できません.
そうならないように, 設定ファイルが正しく書かれているかをチェックする方法があります.
# /usr/local/apache2/bin/apachectl configtest
Syntax OK
#
と表示されればOKです. もし,
# /usr/local/apache2/bin/apachectl configtest
httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
と表示された場合, 先ほどの修正が保存されていないか, 設定したホスト名が間違っています.
もしかしたら, これ以外のエラーが出るかも知れません.
その場合はもう1度初めから設定ファイルを書き直してみてください.
デフォルトの設定ファイルは"conf/httpd-std.conf"です.
もし, エラーが出たらこのファイルを"conf/httpd.conf"に上書きし, もう一度初めから設定ファイルを修正してください.
さあ, 準備が整いました. 早速Webサーバを立ち上げてみましょう
# /usr/local/apache2/bin/apachectl start
何もエラーが表示されなければ成功です.
Webブラウザからこのコンピュータにアクセスしてみましょう!
もし, Webサーバを止めるときは以下のようにします.
# /usr/local/apache2/bin/apachectl stop
Webサーバの動作中に設定ファイル書き換えても何も起りません. 前の設定のまま動き続けています.
もし, 変更した設定を反映させたいのあれば, Webサーバを再起動します.
以下のようにすると, Webサーバを再起動することができます.
# /usr/local/apache2/bin/apachectl restart
Apacheの設定などについてもっと詳しく知りたい場合はhttp://japache.infoscience.co.jp/を参考にすると良いでしょう.