昨日に続いてグラタンの設定。
WebDAVの設定をするところまではよかったものの問題が発生した。
「.AppleDB」や、「.DS_Store」といったドットファイルがDAV経由だと表示されてしまい、フォルダごとコピーした場合などにはこれらも一緒にコピーされてしまう。WebDAV経由でアクセスしてくるユーザに「手動で削除してください」とは言えるハズもなく、色々調べてみたんだけどsambaのように、非表示にするファイル名を設定ファイルで指定するとか出来ないみたい。
どうするべ。
で、ようやく見つけた糸口がWebDAV-JPのメーリングリストのこのログ。
うぇぇーソースいじるしかないのか…orz。一介の田舎デザイナのオレに出来るんかいなと思いつつ、とにかく手を付けてみることに。
とりあえず、問題なのはmod-davだと思うので、ソースを書き換えたmod-davをmakeして現状インストールされているものと入れ替えたら解決するんじゃなかろうか?という仮説を立てた。
まずはソースの入手。aptitudeでインストールされるapache2が、現時点で「2.0.54-5sarge1」というパッケージだったので、
apache2_2.0.54.orig.tar.gz
apache2_2.0.54-5sarge1.diff.gz
の2つをダウンロードした。
apache2_2.0.54-5sarge1.diff.gzの内容をチラっと見た感じで、mod-davにパッチが当たっている様子は見受けられなかったので、apache2_2.0.54.orig.tar.gzを展開。以下のファイルを書き換えた。
httpd-2.0.54/modules/dav/fs/repos.h
/* the subdirectory to hold all DAV-related information for a directory */
#define DAV_FS_STATE_DIR “.DAV”
#define DAV_FS_STATE_FILE_FOR_DIR “.state_for_dir”
#define DAV_FS_LOCK_NULL_FILE “.locknull”
/* quickhack by rect 2006/08/30 */
#define HTTP_ACCESS_CONTROL_FILE “.htaccess”
#define HTTP_PASSWD_FILE “.htpasswd”
#define OSQ_APPLEDOUBLE_DIR “.AppleDouble”
#define OSX_DSSTORE_FILE “.DS_Store”
#define MAC_ICON_FILE “Icon”
#define MAC_WIN_CONVNAME_FILE “_$$Mac< ->WINName$$_”
/* quickhack End. */
httpd-2.0.54/modules/dav/fs/repos.c(1451行あたりに追記)
/* quickhack by rect 2006/08/30 */
/* skip the HTTPD access control file unless a HIDDEN is performed */
if (!(params->walk_type & DAV_WALKTYPE_HIDDEN)
&& !strcmp(dirent.name, HTTP_ACCESS_CONTROL_FILE)) {
continue;
}
/* skip the HTTPD passwd file unless a HIDDEN is performed */
if (!(params->walk_type & DAV_WALKTYPE_HIDDEN)
&& !strcmp(dirent.name, HTTP_PASSWD_FILE)) {
continue;
}
/* skip the AppleDouble dir unless a HIDDEN is performed */
if (!(params->walk_type & DAV_WALKTYPE_HIDDEN)
&& !strcmp(dirent.name, OSQ_APPLEDOUBLE_DIR)) {
continue;
}
/* skip the Ds_Store file unless a HIDDEN is performed */
if (!(params->walk_type & DAV_WALKTYPE_HIDDEN)
&& !strcmp(dirent.name, OSX_DSSTORE_FILE)) {
continue;
}
/* skip the Mac Icon file unless a HIDDEN is performed */
if (!(params->walk_type & DAV_WALKTYPE_HIDDEN)
&& !strcmp(dirent.name, MAC_ICON_FILE)) {
continue;
}
/* skip the Mac_Win_convertname file unless a HIDDEN is performed */
if (!(params->walk_type & DAV_WALKTYPE_HIDDEN)
&& !strcmp(dirent.name, MAC_WIN_CONVNAME_FILE)) {
continue;
}
/* quickhack End. */
N88-BASICでIF文を覚えたばっかりの小学生が作ったアドベンチャーゲームみたいなソースになっちまったけど(笑)ヘタなことしてハマるよりはいいや。
次に、configureしようとしたら[MIRROR]モードでセットアップされたグラタンには開発環境が入ってないらしくconfigureできない。この辺を参考にして、とにかくエラーが出なくなるまで片っ端からライブラリだのをインストールした。でようやく
./configure –enable-mods-shared=most –enable-module=all
make
make install
として、
mod_dav.so
mod_dav_fs.so
を作ることができたのだった。(きっとこの2つだけをmakeする方法とかあるんだろうけど、情報を見つけられなかったのでapache2全体をmakeしたらスッゲー時間かかった。)
この2つのファイルだけ残してmakeされた他のファイルを全部削除、さらにaptitude経由でインストールされたapache2も一旦削除してから改めて
#aptitude install apache2
#aptitude install libapr0
で再インストールしてから、退避しておいた「mod_dav.so」、「mod_dav_fs.so」を/usr/lib/apache2/modules/にコピー。
WebDAV経由でアクセスして、
.htaccess、.htpasswd、.AppleDouble、.DS_Store、Icon、_$$Mac< ->WINName$$_
が表示されないことを確認できた。Yesっ!
しっかし、この程度の事もっと簡単に出来ないのかなぁ。mod-dav以外のWebDAVサーバ知らないんだけど、他のもの使えばもっと簡単に出来るんだろうか。
最後に
<Limit GET HEAD OPTIONS>
AuthType Basic
AuthName “GLANTANK DAV Service”
AuthUserFile .htpasswdのフルパス
Require user hoge
</Limit>
を/etc/apache2/sites-enabled/000-defaultに追記して、Web-DAV経由ではhogeというアカウントでアクセスしてもらうことにする。以上で全部の設定おしまい。これでどーにかこうにかSamba、netatalk、WebDAVで共有できるファイルサーバができ上がった。丸二日もかかったけど何とかなるもんだ。