2007年05月20日

Mac OS Xでのシンボリックリンク、はまりました

XAMPPを使うにあたって、開発したコード(htdocsディレクトリ)をどこに置くかが問題でした。MAMPでは、MAMP本体とは別に開発したコードだけをバックアップできるように、MAMPフォルダ内ではなく、/Usersフォルダ内に分離して置いています。

XAMPPでもMAMPとコードを共用したいし、同じ考え方でバックアップもしたいし、/Applications/xampp/xamppfiles/htdocs/ にコード置き場のディレクトリをシンボリックリンクしてみることにしました。

ところが、これがはまりましたもうやだ〜(悲しい顔)

単純にシンボリックリンクを作って、所有者を変えたりパーミッションを変えたりディレクトリのリンクではなく単一ファイルに変えたり、いろいろやってみましたがダメです。
$ ln -s /Volumes/Users/user001/Documents/MAMP/htdocs/test

$ ls -l test/*
-rw-r--r-- 1 user001 wheel 189 May 20 07:09 test/index.php
-rw-r--r-- 1 user001 wheel 217 May 20 07:09 test/info.php
-rw-r--r-- 1 user001 wheel 245 May 20 07:09 test/unittest.php
-rw-r--r-- 1 user001 wheel 187 May 20 07:09 test/xmlrpc.php

$ sudo -u nobody ls -l test
lrwxr-xr-x   1 user001 wheel  79 May 20 11:06 test -> /Volumes/Users/user001/Documents/MAMP/htdocs/test

$ sudo -u nobody ls -l test/*
ls: testproj/index.php: Permission denied
ls: testproj/info.php: Permission denied
ls: testproj/unittest.php: Permission denied
ls: testproj/xmlrpc.php: Permission denied
不思議なのは、所有者自身が参照すると問題なさそうなのに、所有者でない者(XAMPPはnobodyで動作)がディレクトリを2階層飛び越えてアクセスしようとすると、エラーとなってしまうのです。そのためWebブラウザから http://localhost/test/ としてもPermissionエラーとなってしまうのでした。

半日は悩んで、やっと原因がわかりました。Path名から想像がつくと思いますが、シンボリックリンクを置いた /Applications/xampp/xamppfiles/htdocs/ と、コードの実体である /Volumes/Users/user001/Documents/MAMP/htdocs/test は、別ボリューム(別パーティション)にあります。

パーティション間のシンボリックリンク、これが原因のようでした。試しにハードリンクを作ってみようとしたら怒られたことから思いつき、コードの実体を同一のボリュームに移して実験してみると、素直にリンクが動作します。あ〜、疲れたふらふら

解決したわけではないけど、パーティション越えのシンボリックリンクをあきらめれば、なんとかなるか... これはバグだよなぁ。Appleに報告すべき?
posted by 急いでジャンプ at 15:59| Comment(0) | TrackBack(0) | Mac OS X | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック