Posts Tagged server

Refererを制限したディレクトリに設置したPDFファイルが開けない対策

2006.12.16

SetEnvIf Referer “^http://www.hoge.com” ref_ok
order deny,allow
deny from all
allow from env=ref_ok

みたいな.htaccessファイルを設置したディレクトリにPDFファイルを置いて、WinIE6で開こうとすると何故か開けず、FirefoxとかIE7なら問題なく開ける。という不具合に遭遇。原因がなかなか判らなかったんだけど、同じトラブルの事例を見つけた。どうやらIE6が悪さしてるっぽい?特定のリビジョンの問題なのかもしれない。

そもそもRefererで閲覧制限する事自体がセオリーから外れまくっとるとはいえ、この条件でなんとかせにゃならない状況になっちゃったんで、

my $pdffile = “fuga.pdf”;
my $filesize = -s “$pdffile”;

print “Content-Length: $filesize\n”;
print “Content-Type: application/pdf\n\n”;

open(DAT, “$pdffile”);
while(){
print;
}
close(DAT);

とかいう感じのスクリプトをカマせて対処した。ダセぇ。

Turck MMCacheの設定

2006.11.12

以前Turck MMCacheが有効な環境だと、OpenPNEのレビュー機能がうまく動かなかったんで(商品検索すると画面が真っ白)、MMCacheをあきらめたんだけどなんとか両立できないもんかと色々試してみたら、php.iniで設定するmmcacheの項目のうち

mmcache.compress=”0″

とする(デフォルトだとmmcache.compress=”1″)ことで、OpenPNEのレビュー機能が正常に動くようになった。

非力な玄箱だけに体感速度はかなり早くなった。んで、先日と同じようにabでベンチマークを取ってみたら、

■MMCache無効
Requests per second: 7.66 [#/sec] (mean)

■MMCache有効
Requests per second: 16.29 [#/sec] (mean)

わーい。キャッシュ効果絶大。
玄箱でOpenPNEやってる方にはオススメっぽいですわ。

GLAN Tank でファイルサーバ構築WebDAV編

2006.08.30

昨日に続いてグラタンの設定。
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で共有できるファイルサーバができ上がった。丸二日もかかったけど何とかなるもんだ。

GLAN Tank でファイルサーバ構築

2006.08.29

仕事のとある案件で専用のファイルサーバを立てることになった。
要件としては、

  • Windows、MacOS9、MacOSXから共有可能
  • 一部ディレクトリは納品ファイル用としてWeb経由で読取りのみの権限でアクセス可能

といった感じ。
いろいろ検討した結果、設置スペースが小さくて済むのとミラーリングができるのが決め手になって、キワモノだけど挑戦者ブランドのGLAN Tankを導入することにした。以下は導入メモ。
OSのインストールと組み立ては、マニュアルを参考にして問題なく進んだ。同種の製品に玄人指向の玄箱があるけど、玄箱がネットワーク経由でOSインストール可能なのに対して、グラタンは別のDOS/VマシンにHDDを接続しないとOSインストールができない。
インストールが終わったら組み立てて電源ON。しっかし、2台のハードディスクのクリアランスがほとんど無いような密集っぷりだけど、熱とか大丈夫なのかしら;

[MIRROR]モードでOSをインストールしたので、勝手にミラーリングが始まる。当たり前かもしれないけど、これが結構時間かかった。ミラーリングの状況は

#cat /proc/mdstat

で、確認できる。
ミラーリングが終われば、始めっからDebianが入ってるし普通に使う分にはこれでおしまい。

ここからは、要件に合わせてカスタマイズ。
デフォルトだとグラタンのファイル共有は全部WebDAVで行うんだけれども、LAN内で使うにはどーなのよって感じなので、Sambaとnetatalkを使うことにした。まずは、Windowsとの共有用にSambaをインストール。

#aptitude update
#aptitude install samba

/etc/samba/smb.confを設定。
[global]セクションに文字化け対策として次を記述。

[global]
dos charset = CP932
unix charset = UTF-8
display charset = EUC-JP

Windows側で非表示にするファイルの設定

# hide Mac special files
veto files = /.AppleDB/.AppleDouble/.AppleDesktop/Network Trash Folder/\
TheFindByContentFolder/TheVolumeSettingsFolder/Temporary Items/.DS_Store/\
.VolumeIcon.icns/Icon?/Icon/Icon_/.FBCIndex/.FBCLockFolder/Trash/_4IM5Q~8/_\$\$Mac\<-\>WINName\$\$_/

さらに、以下を追記。

[share]
comment = share
browseable = yes
writable = yes
path = /share
public = no
create mode = 0666
directory mask = 0777
use sendfile = yes

sambaを再起動して設定を反映。

#/etc/init.d/samba restart

続いてMacからの共有用にnetatalkをインストール。こっちは苦労した。
設定に関しては以前別の環境にインストールした時と同じことをやっただけなんだけど、前の環境はCPUがi386。グラタンのCPUは「Intel Xscale」なのでarm。マイナーCPUの悲しさで、cjkパッチのあたったnetatalkのバイナリパッケージなんかあるわけもなく、どうしようかと困ってたところLANTANKで漕ぎいでな〜の人がパッチを当てたソースがあったので、これを使わせていただきつつ、この辺を参考に.debを作成してインストールした。感謝。

netatalk_2.0.2.orig.tar.gz、netatalk_2.0.2-3hat.diff.gz、netatalk_2.0.2-3hat.dscを/usr/src/に置いて、

$dpkg-source -x netatalk_2.0.2-3hat.dsc
$su
#cd 作成されたディレクトリ
#./debian/rules build
#debuild -uc -us
#dpkg -i ../netatalk_2.0.2-3hat_arm.deb

あとは以前の要領で設定しておしまい。Linuxが動いてればなんとかなるだろと安易に考えてたけど、普段耳にしないようなCPU使ってる製品には気をつけようと思った。

最後に、

  • 一部ディレクトリは納品ファイル用としてWeb経由で読取りのみの権限でアクセス可能

を満たす方法として、最初から入ってるしWebDAVでいいじゃんと思ったんで使うことにした。アクセス権限の設定だけでおしまいっ!…と、思ってたのに予想外の苦労を強いられることになっちまった。
つづく。

dnsmasqdeで内向きDNS

2006.03.17

自宅サバを運用する場合、ダイナミックDNSを使ったほうがお手軽なんだけど、オレはWAKWAKのアドレスプラスを使ってる関係で、内向きDNSを立てないと自宅からのアクセスはIP直打ちしなくちゃならなかった。

この状態だと色々問題ありまくりなので、djbdnsとかBINDとか使って内向きDNS立てようかと検討してたんだけど、メンドくさくて放置してたところでdnsmasqを見つけた。
以下導入メモ。

■dnsmasqをインストール

$ aptitude update
$ aptitude install dnsmasq

■/etc/hostsの編集

192.168.***.*** hoge.ne.jp

を追加

■/etc/resolv.confの編集

nameserver 127.0.0.1
nameserver 192.168.***.***
nameserver [プロバイダのDNS]

■ルータ設定
WAN側のDNSサーバアドレスをdnsmasqを立てたホストのアドレスに変更

■念のためdnsmasqを再起動

$ /etc/init.d/dnsmasq restart

以上でおしまい。お手軽すぎるっ!