Apache2 をソースからインストール

パッチを適用する場合には、Apache2 をソースからのインストール必要があるので方法を説明します。


WebDAV 利用者のためのApache2 用パッチ一覧

WebDAV を Windowsで利用する場合に、さまざまな不具合があります。サーバ側を変更して解決するものもあるので、パッチを紹介します。

「&(アンド)」を利用したファイル名が表示されない

「&」を利用したファイル名の場合に、「&」以降のファイル名が表示されない問題があります。

【対応パッチ】amp_encorde.patch

WebDAV上でシンボリックリンクを表示したい

WebDAV上ではシンボリックリンクが表示されません。表示するためにはApache2のソースを書き換える必要があります。

【対応方法】httpd-2.2.6/modules/dav/fs/repos.c を、以下のように変更します。

/* Enable access symlinks */
if (fsctx->info1.finfo.filetype == APR_LNK) {
	status = apr_stat(&fsctx->info1.finfo, fsctx->path1.buf,
					  APR_FINFO_NORM, pool);
	if (status != APR_SUCCESS && status != APR_INCOMPLETE) {
		err = dav_new_error(pool, HTTP_NOT_FOUND, 0, NULL);
		break;
	}
}

【参考】WebDAV(mod_dav)でシンボリックリンクを使う

OpenSSL のインストール

SSL も導入するのであれば、先に OpenSSL をインストールします。

SSL が存在しない場合は Apache2 で ./configure 実行時に下記のようなエラーが出ます。

....
checking for sslc.h... no
no SSL-C headers found
configure: error: ...No recognized SSL/TLS toolkit detected

手順は次のようになります。

  1. ソースの入手(http://www.openssl.org/)、展開
  2. 念のため旧Openssl を退避
     # cp /usr/bin/openssl /usr/bin/openssl_old
  3. Makefile の作成(Autoconf)
     $ ./config --prefix=/usr linux-elf
     $ make
     # make install
     $ /export/usr/local/ssl/bin/openssl version

/usr/bin/ にショートカットを作成します。

# cd /usr/bin/
# ln -s /export/usr/local/ssl/bin/openssl .

daemon が無ければインストール。

apt-get install daemon

Apache2 のインストール

Apache のソースファイルを取得したら下記コマンドを入力。

# ./configure \
--enable-auth-basic=shared \
--enable-auth-digest=shared \
--enable-authn-alias=shared \
--enable-cgi=shared \
--enable-cgid=shared \
--enable-actions=shared \
--enable-alias=shared \
--enable-asis=shared \
--enable-rewrite=shared \
--enable-dav=shared \
--enable-dav-fs=shared \
--enable-dav-lock=shared \
--enable-so \
--enable-ssl=shared \
--with-ssl=/usr/local/ssl/

# make
# make install
# mkdir /etc/apache2
# cd /etc/apache2
# ln -s /usr/local/apache2/conf .

発生した問題点

Listen 443 というのを config の中で複数書くと、下記のメッセージが出る。

# /usr/local/apache2/bin/apachectl startssl
[Wed Jul 23 19:24:22 2003] [warn] _default_ VirtualHost overlap on port 443, the first has precedence
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs

たとえば、httpd.conf と httpd-ssl.conf の両方で443をListenしてたら、あとから読み込んだファイルでエラーが発生する。

・・・書きかけ

/export/home/kazutaka/openssl-0.9.8g/apps/openssl.cnf
/export/usr/lib/ssl/openssl.cnf
/export/usr/local/ssl/openssl.cnf
/etc/ssl/openssl.cnf

/etc/apache2/bin/apachectl restart

digest 認証の有効

# cd modules/aaa
# /usr/local/apache2/bin/apxs -D DEV_RANDOM -c -a -i ./mod_auth_digest.c
....
chmod 755 /usr/local/apache2/modules/mod_auth_digest.so
[activating module `auth_digest' in /usr/local/apache2/conf/httpd.conf]
emacs /etc/httpd/conf/httpd.conf

下記を追加する。

# LoadModule foo_module modules/mod_foo.so
LoadModule auth_digest_module modules/mod_auth_digest.so

再起動します。

/etc/apache2/bin/apachectl restart

発生した問題点

client denied by server configuration:

と表示されてアクセスできない

[error] The locks could not be queried for verification against a possible "If:" header. 
[error] Could not open the lock database. 
[error] (13)Permission denied: Could not open property database.

そのディレクトリに対して書き込む権限が必要だ、ということです

chown www-data:www-data /var/lock/apache2/

PHPをインストール

php の configure 時に libxml が無くてエラーになるのでインストールする。

Configuring extensions
checking whether to enable LIBXML support... yes
checking libxml2 install dir... no
checking for xml2-config path... /usr/local/bin/xml2-config
configure: error: libxml2 version 2.6.11 or greater required.

libxml2-2.6.30.tar.gzを取得

$ tar zxvf libxml2-2.6.30.tar.gz
$ cd libxml2-2.6.30
$ ./configure
$ make
$ make install

シンボリックリンクを作成する。

$ su
$ cd /usr/local/include/
$ ln -s ./libxml2/libxml libxml

PHPのインストールで、様々なエラーが発生して configure が成功しない。

configure: error: Cannot find libmysqlclient_r under /usr/local/mysql.
Note that the MySQL client library is not bundled anymore!

必要なものは、全て apt-get install する(lib***関連)。

$ apt-get install libz-dev
$ apt-get install libgdbm-dev
$ apt-get install libmysqlclient15-dev
$ apt-get install libbz2-dev
$ apt-get install libjpeg-dev
$ apt-get install libpng-dev
$ apt-get install libt1-dev 
$ apt-get install libcurl3-dev

別途インストール。

$ apt-get install mysql-server
$ apt-get install mysql-client
$ apt-get install apache2-mpm-worker 
$ apt-get install libapache2-mod-php5 php5-cli php5-common php5-cgi
$ apt-get install php5-mysql
$ apt-get install bzip2
$ apt-get install unzip
$ tar zxvf php-5.2.5.tar.gz
$ cd php-5.2.5
$ ./configure \
  --prefix=/usr \
  --with-apxs2=/usr/local/apache2/bin/apxs \
  --with-config-file-path=/etc \
  --with-mysql=/usr \
  --with-jpeg-dir=/usr \
  --with-zlib-dir=/usr \
  --with-bz2 \
  --with-openssl \
  --with-gd \
  --with-t1lib \
  --with-ttf \
  --enable-exif \
  --enable-mbregex \
  --enable-mbstring \
  --enable-zend-multibyte \
  --enable-gd-jis-conv \
  --enable-gd-native-ttf \
  --with-curl
$ make
$ make install
$ cp -p php.ini-recommended  /usr/local/apache2/php/php.ini

/usr/local/apache2/conf/httpd.conf を編集

# LoadModule foo_module modules/mod_foo.so
LoadModule php5_module        modules/libphp5.s
/etc/apache2/bin/apachectl restart

発生した問題点

PHPのインストールに失敗して、make clean 行わず、再度ビルドしたのが原因。

apachectl: Configuration syntax error, will not run "graceful":
Cannot load /etc/httpd/modules/libphp5.so into server:
/etc/httpd/modules/libphp5.so: undefined symbol: zend_qsort

WebDAVを利用して「削除」「移動」等を規制する

たとえば、ユーザに「削除」をさせなくするには次のように記述します。

<Location /davauth>
        DAV     on
        AuthUserFile     /home/kmiya/htpwd/user.pwd
        AuthGroupFile    /dev/null
        AuthName         DAVhome
        AuthType         Basic
   <Limit DELETE>
       order deny,allow
       deny from all
   </Limit>
</Location>

WebDAVをURL入力で直接開くリンクの書き方

以下のようなURLを記述すると Web フォルダを直接開きます。

<a style="behavior: url('#default#AnchorClick')"
   href="https://<自分のURL>/<WebDAVのフォルダ>/"
   Folder="https://<自分のURL>/<WebDAVのフォルダ>"<WebDAVを直接開く</a>

href は省略可能です。href を付けておくと IE 以外では、href をブラウザで普通に開きます。

発生した問題点

大量の日本語ファイルをアップロードしたらエラーが発生。

ログには次のようなエラーが残っている。

[error] File does not exist: 日本語のファイル名
[error] Could not get next bucket brigade  [500, #0]

WebDAV サーバーへのファイルサイズが大きいファイルの移動またはコピーに失敗するようです。

50MB までなら WindowsXP でも使えるようですが、マイクロソフトの既知の不具合のようです。

WebClient サービスを停止すると解消します。

1. スタートメニューから、コントロール パネルをクリックします。 
2. クラシック表示を選択していない場合、パフォーマンスとメンテナンスをクリックします。 
3. 管理ツールをクリックします。 
4. サービスをダブルクリックします。 
5. WebClientを選択して、右クリックします。 
6. メニューの中から、停止をクリックします。 

ただし、ドライブ割り当てはできなくなります。前述の「Web フォルダ」を利用してください。

発生した問題点

ダイジェスト認証(Digest認証)を使った場合、IE6でアクセスに失敗することがあります(HTTP 400)。

Apacheのエラーログは次のように表示されています。

Digest: uri mismatch - XXX does not match request-uri YYY, referer: ZZZ

これはIE(IE6)のバグのようです(PHPで「inde.php?」などにアクセスすると発生)

で、これ、ApacheにIE不具合ワークアラウンドが入ってます。 これを有効にするためには、httpd.confか.htaccessにでも以下のように書きます。

BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On

参考文献


Valid XHTML 1.1! Valid CSS! 初版更新日 2007/11/26   最新更新日 2007/11/28