UACの呪い

Cygwinのインストールが(も)失敗するのは、どうやらVista様のUAC (User Account Control)という機能が原因らしいと判明した。

しかし、話はそう単純ではないようだ。

  1. UACを無効にしてみた(Vistaを再起動しなければならない)
  2. 再度インストールをするがやはり失敗する
  3. cygwin配下を一度消してからやり直そうと思うが、「消せない」
  4. 「消せない」オブジェクトの属性をみると「セキュリティ」がなくなっている。
  5. 「セキュリティ」属性を持たないオブジェクトは、Administratorsであっても「消せない」。権限が不足するということらしい。それで属性を変えようにも属性自体持たないから変更のしようがない。
  6. 仕方ないから再度UACを有効にする(Vistaを再起動しなければならない)
  7. cygwin配下の所有者と属性を設定した上で、配下を一掃できた。

ここまでやってみて、UACを無効にするということが本当に適切か対策かどうか疑問になってきた。一生?UACを無効にして生活するなら良いかもしれないが、セキュリティ属性を持つものと持たないものの混在は、Vista環境においては大変好ましくない影響を与えると思ったからだ。

そこで、注意深くc:\cygwinの属性を設定した上で、改めてきれいな状態で、cygin setupをやり直したが、不思議なことにやはり途中で失敗する。c:\cygwin以外のフォルダやリソースに何かしようとしているのだろうか?止まる箇所はpostinstall処理で、観測したところ、

  • c:\cygwin\etc\postinstallの配下の*.shというファイルについて、順に処理を実行し、正常終了すると*.shを*.sh.doneという名前にrenameしているらしいことがわかった。
  • そこで、処理がとまるところの*.shをcygwin環境で手動でshellで実行するとちゃんと終わる。甚だ不思議だ。だんまりになったsetup.exeを終了させては、手動でスクリプトを実行、ファイル名を変更、再度setup.exeを実行、というループでついにインストールを終わらせたが、甚だ怪しい動きをして、動かないプログラムが多数ある。
  • 半分あきらめてそのまま使おうと思うと、今度はmount -b c:/home /homeのようなマウントがすべてエラーになる。このmountはCygwin環境とWindows環境をシームレスに使う上で、あるいはMeadowを使う上で重要なのだが。