パッチを適用する場合には、Apache2 をソースからのインストール必要があるので方法を説明します。
WebDAV を Windowsで利用する場合に、さまざまな不具合があります。サーバ側を変更して解決するものもあるので、パッチを紹介します。
「&」を利用したファイル名の場合に、「&」以降のファイル名が表示されない問題があります。
【対応パッチ】amp_encorde.patch
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; } }
SSL も導入するのであれば、先に OpenSSL をインストールします。
SSL が存在しない場合は Apache2 で ./configure 実行時に下記のようなエラーが出ます。
.... checking for sslc.h... no no SSL-C headers found configure: error: ...No recognized SSL/TLS toolkit detected
手順は次のようになります。
# cp /usr/bin/openssl /usr/bin/openssl_old
$ ./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
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
# 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 の 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.
$ 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
たとえば、ユーザに「削除」をさせなくするには次のように記述します。
<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>
以下のような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