OpenBlockS / WebServer


httpdとその仲間


追加ソフトのインストール手順

OpenBlockS に apache とバックエントを入れて http サーバーを構築する手順

目次

  • Apache - 2.0 系はまだやばいのかな?
  • expat - コンパイル時に無くても問題ないようだが、あったら使われる
  • mod_dav - 外からファイルを書き込んだりできる
  • php - PukiWiki を入れるため

Apache

[2003/11/1] apache 1.3.29 へ更新。手順は同じ

[2003/7/24] apache 1.3.28 へ更新

/usr/local/www/data 下や、/usr/local/etc/apache 下のファイルを必ずバックアップしてから実行する。ファイルの取得は適当なミラー・サイトから行う(WEBブラウザからダウンロードすればよい)。予め公開鍵を GnuPG にインポートしておく。

$ cd ~/src/01distfiles
$ wget http://www.apache.org/dist/httpd/apache_1.3.28.tar.gz
$ wget http://www.apache.org/dist/httpd/apache_1.3.28.tar.gz.asc
$ wget http://www.apache.org/dist/httpd/apache_1.3.28.tar.gz.md5
$ gpg --verify apache_1.3.28.tar.gz.asc
$ cat apache_1.3.28.tar.gz.md5
MD5 (apache_1.3.28.tar.gz) = 2cdece7b4881d541e072de6a2b65db77
$ md5sum apache_1.3.28.tar.gz
2cdece7b4881d541e072de6a2b65db77 apache_1.3.28.tar.gz
$ cd ..
$ tar xzvf 01distfiles/apache_1.3.28.tar.gz
$ cd apache_1.3.28
$ ./configure --with-layout=FreeBSD --enable-shared=max
$ time make
.. (途中省略) ..
real 3m42.685s
user 2m58.110s
sys 0m41.290s
$ mkdir ~/src/02localpkg/apache
$ make root=~/src/02localpkg/apache install
$ cd ../02localpkg/apache/
$ rm usr/local/etc/apache/httpd.conf
$ tar czvf apache_1.3.28-ssdlinux-1.tgz --owner=root --group=wheel usr var
$ rm -rf usr var
$ su
# apachectl stop
# rm -rf /usr/local/www
# rm -rf /usr/local/share/doc/apache
# tar xzvf apache_1.3.28-ssdlinux-1.tgz -C /

この後、/usr/local/etc/apache/httpd.conf や、/usr/local/www/data を戻して、apachectl start する。php や mod_dav 等が不整合を起こしていないか確認する。幸い、1.3.27 → 1.3.28 の時は問題ないようだった。

1.3.27 に比べて、1.3.28 は libexpat.so.0 に依存していることが判明(ldd /usr/local/sbin/httpd で調べることができる)。Auto Configure の弊害というやつだ。apache には、xml parser として expat-lite というライブラリを自分で持っているが、システムに expat がインストールされている場合は、そちらを使うようになる。configure のオプションで、そうしないようにすることができるような気がするが、確認できていない。

バイナリのローカル・パッケージを作って、expat がインストールされていない環境へ持っていったときに初めて発覚するので注意。

[2003/6/2] ブラウザのキャッシュ問題。

掲示板の背景を毎月新しくするのだが、いちいちファイル名を変えると、cgi も変更しなければいけないので、同じファイル名で内容だけ入れ替えたのだが、ブラウザ(mozilla や Netscape 7 等)によっては、変わったことを認識してくれないようだ。

mozilla のキャッシュ設定には4種類あって、[ページをアクセスする毎に] [セッション毎に] [キャッシュしたページが古いとき] [しない] という選択肢で、デフォルトは、[キャッシュしたページが古いとき] のようだ。IE の場合は、[ページを表示するごとに確認する] [Internet Explorer を起動するごとに確認する] [自動的に確認する] [確認しない] の4種類だ。

キャッシュとサーバーのファイルの比較で古いかどうかの判断は、ブラウザで異なるようだが、キャッシュに無いファイルを読み込んだときは、Cache-Control: ヘッダか、Expires: ヘッダでどのくらいの期間キャッシュするか決めているようだ。どちらのヘッダも無いときは、ブラウザが適当に決めているらしい。過去にアクセスした履歴で更新されていない期間が長ければ、これからも更新されないだろう、というような判断も行っているかもしれない。

ひと月に1回背景の画像を変更するような場合、同じファイル名で内容だけ更新すると、ブラウザによっては何日も更新されていないように見えることがある。結局、一番簡単で無難な解決策は、画像ファイル名を更新の度に変える事だ。

$ cd ~/src/apache_1.3.27
$ configure --with-layout=FreeBSD --enable-shared=max
$ make
$ su
# make install

expat (XML Parser)

apache コンパイル時に必要なわけではないが、php で XML Parser を使ったりする場合にあると便利。

SourceForge.net- Project Info - Expat XML Parser から WEBブラウザでダウンロード、~/src/01distfiles へ保存。

$ cd ~/src
$ md5sum 01distfiles/expat-1.95.6.tar.gz
ca78d94e83e9f077b5da2bfe28ba986a 01distfiles/expat-1.95.6.tar.gz
$ tar xzvf 01distfiles/expat-1.95.6.tar.gz
$ cd expat-1.95.6
$ ./configure
$ make
$ sudo make install

mod_dav

$ cd mod_dav-1.0.3-1.3.6
$ ./configure --with-apxs=/usr/local/sbin/apxs
$ make
$ su
# make install

$ cd mod_encoding-20020611a
$ ./configure --with-apxs=/usr/local/sbin/apxs
$ make
$ su
# make install

# cd /usr/local/etc/apache
# vi http.conf

# apachectl start

起動時に自動的に立ち上がるようにする。/etc/rc.local に以下の内容を加える。

if [ -f /usr/local/sbin/apachectl ]; then
        /usr/local/sbin/apachectl start
        echo -n ' apache'
fi

log rotate

/var/log/access_log, /var/log/error_log をローテーションしなければいけない。WEB サーバ(Apache)の設定 を参考に /etc/newsyslog.conf に以下を加えた。毎週日曜日の午前4時に最大7世代のローテーションを行う。

/var/log/access_log     644     7       *       W0D4    B /var/run/httpd.pid
/var/log/error_log      644     7       *       W0D4    B /var/run/httpd.pid

php

cd ~/src/01distfiles
wget http://jp2.php.net/get/php-4.3.11.tar.bz2/from/this/mirror
cd ..
tar xjvf 01distfiles/php-4.3.11.tar.bz2
cd php-4.3.11
./configure --with-apxs=/usr/local/sbin/apxs --enable-zend-multibyte \
 --enable-mbstring=all --enable-mbregex
make

コンパイルに45分程度かかる。--with-mysql(デフォルト)で build すると 以下のような警告が出た。

/home/otsuka/src/php-4.3.1/ext/mysql/libmysql/my_tempnam.c:115: 
the use of `tempnam' is dangerous, better use `mkstemp'

【後日談】 php-4.3.10 を build したら、最後に (It is safe to ignore warnings about tempnam and tmpnam). と出るので、問題ないと思われる。

build ディレクトリを使うと、テストやインストールが出来ないようだ。

local package を作る場合は、ダミーの httpd.conf を用意しないとインストールに失敗する。

mkdir -p ~/src/02localpkg/php/usr/local/etc/apache
cp /usr/local/etc/apache/httpd.conf.default \
 ~/src/02localpkg/php/usr/local/etc/apache/httpd.conf
make INSTALL_ROOT=~/src/02localpkg/php install
cd ../02localpkg/php
(cd usr/local/etc/apache; rm httpd.conf.bak; mv httpd.conf httpd.conf.php)
cp ../../php-4.3.11/php.ini-recommended usr/local/lib/php.ini.default
tar czvf php-4.3.11-minig-1.tgz --owner=root --group=wheel usr
rm -rf usr
sudo /usr/local/sbin/apachectl stop
sudo rm -rf /usr/local/include/php
sudo rm -rf /usr/local/lib/php
sudo tar xzvpf php-4.3.11-minig-1.tgz -C /

/usr/local/lib/php.ini が存在しないときは、/usr/local/lib/php.ini.default をコピーする。

Apache でせっかくバージョン表記を隠しているのに、X-Powered-By: PHP/4.3.11 とか返されるのがいやなので、以下を追加。

/usr/local/lib/php.ini:
expose_php = Off

免責事項

ここに記載されている内容を実際に運用した場合のトラブルに関しては一切責任を負えませんのでご了承ください。
Copyright 2000-2005 Koichi Otsuka