Cygwin 1.7でNTFS ACLをやめる
Cygwin上でgitを使っていてすぐに気付いたんだけど、Cygwin外で作ったファイルのパーミッションがなんでもかんでも700とかそんな感じになってしまい、実行権限が取り込まれてしまうという現象に見舞われた。当然git svn dcommitするとリモートにもsvn:executableとかプロパティが付いてしまう。
きっとNTFS ACLとかその辺との絡みなんだろうなーと思いつつ毎回chmodしていたんだが、ちょくちょく忘れるしいい加減面倒でたまらないと思っていたところ、Twitterで「nontsecするといい」と教えて貰った。
なるほどこのオプションを設定するとNTFS ACLではなくファイルの内容から(fileコマンド的な感じ?)適当にパーミッションを決定してくれるらしい。
というわけで環境変数CYGWINにnontsecとか設定してみたんだが変化したように思えなくて、なんでかなーと調べてみたところ、どうやらCygwin 1.7系からはこの設定方法は廃止になっていて、マウントオプションnoaclになったらしい。
昔のCygwinはあんまり使ったことがないのでよくわからないけど、1.7からはレジストリではなく普通に/etc/fstabに設定するようになったとのことなので、こいつを編集してnoaclを加えてやればよい。
といってもデフォルトでは空っぽなのでmountコマンドの実行結果からデフォルト状態を見て適当に書き直してやる。
特に/usr/binと/usr/libがCygwin独特な感じなので注意。/binと/libでもあるわけだし。
# For a description of the file format, see the Users Guide # http://cygwin.com/cygwin-ug-net/using.html#mount-table # This is default anyway: # none /cygdrive cygdrive binary,posix=0,user 0 0 C:/cygwin / ntfs override,binary,noacl 0 0 C:/cygwin/bin /usr/bin ntfs binary,noacl 0 0 C:/cygwin/lib /usr/lib ntfs binary,noacl 0 0 none / cygdrive binary,noacl,posix=0,user 0 0
ルートについてはoverrideが必要らしい。
上記ではcygdriveを/に変えてるので、デフォルトがいい人は/cygdriveに。
なんでこんな面倒なことにと思うかもしれないけど、逆に言うと必要なところだけ設定を変えたりできるようになって便利になったんじゃないかな!かな!
……で、これをやったらパーミッションはちゃんと変わったんだけど、そのせいでgitリポジトリがおかしくなってしまった(gitからは途中でパーミッションが変わったように見えるため)。
他にも色々なところに影響があるかもしれないから、この設定はCygwinインストール時にしたほうがいいかもしれない。もう遅いけど。