<< PHPNOTE 第6回終了 | Top | 来年に向けてのメモ >>
[ Date: 2005年10月14日 / Modified: 2006年12月17日 ]
Cygwin 困ったときの備忘録:
まあ家ではほとんどLinuxだが、たまにWindowsNT+Cygwinなんて環境で作業することもある。いろいろととまどうことも多いので、気付いたことをメモっておこう。
ネットで調べると各変数値の意味はこうらしい(http://pcweb.mycom.co.jp/special/2002/cygwin/004.html).
[ ntsec ] Windows NT/2000/XPのセキュリティモデルを利用してUNIX風のファイルとプロセスに対するパーミッション設定を実現するもの.ただしファイルセキュリティはNTFS上でしか動作しないので、FAT32上でCygwinを使う場合やWindows 9x系の場合は必要ない.
[ smbntsec ] 共有フォルダ(Sambaドライブも含む)でも「ntsec」を有効にする設定.
[ glob ] UNIXスタイルのファイルワイルドカード文字をコマンドプロンプトからでも有効にするというもの.
ちなみに、私んとこのユーザ環境変数ではこうなってる。
CYGWIN = binmode ntsec smbntsec glob tty
そうじゃない方法はあるんだろうが、これが基本であって、まあ考えてみたらあたりまえのこと.CygwinのPerlはCygwin環境へのInstall権限さえあれば一般ユーザでもできるので、ついとまどってしまう.
nt:~$ which perl
/usr/local/bin/perl
nt:~$ ls -lF /usr/local/bin/perl
lrwxrwxrwx 1 jgb admins 17 Apr 26 17:10 /usr/local/bin/perl -> /usr/bin/perl.exe*
これは「/usr/bin/perl.exe」へのSリンクだと知っていたので、Windows側がCygwinのSリンクを理解できないのかと思い、CGIファイルの先頭に「#!D:/cygwin/usr/bin/perl.exe」などと書いていたが、ことごとくエラーになる.
そこでフォルダを開いてみると分かるのだが、Cygwinの/usr/binなどはWindows側からは見えないしくみになっている.そこで(どっかのサイトを読んでいて分かったのだが...)、実は「/bin/perl.exe」というのがあり、こちらは可視ファイルになっており、CGIファイルの先頭に「#!D:/cygwin/bin/Perl.exe」などと書くとあっさりうまくいった。
CygwinのプログラムをWindows側から利用する場合は、フォルダを開いてアイコンが見えるものを使わなければならない...ということだろう。
1.chmodでチェンジできない!
一般ユーザでCGIファイルのパーミッションを実行OKに変えようとして、何度「chmod 755」とかやっても、ちっとも変更されない場合がある。これは、ユーザー環境変数の「CYGWIN」の値が問題なようだ.もし「CYGWIN = nontsec」となっていたら、「ntsec」に変える。ただしこれはファイルシステムがNTFSだから関係あること.ネットで調べると各変数値の意味はこうらしい(http://pcweb.mycom.co.jp/special/2002/cygwin/004.html).
[ ntsec ] Windows NT/2000/XPのセキュリティモデルを利用してUNIX風のファイルとプロセスに対するパーミッション設定を実現するもの.ただしファイルセキュリティはNTFS上でしか動作しないので、FAT32上でCygwinを使う場合やWindows 9x系の場合は必要ない.
[ smbntsec ] 共有フォルダ(Sambaドライブも含む)でも「ntsec」を有効にする設定.
[ glob ] UNIXスタイルのファイルワイルドカード文字をコマンドプロンプトからでも有効にするというもの.
ちなみに、私んとこのユーザ環境変数ではこうなってる。
CYGWIN = binmode ntsec smbntsec glob tty
2.Active Perl のPPMは、administrator権限でWindowsのコマンドプロンプトからでないと使えない.
そうじゃない方法はあるんだろうが、これが基本であって、まあ考えてみたらあたりまえのこと.CygwinのPerlはCygwin環境へのInstall権限さえあれば一般ユーザでもできるので、ついとまどってしまう.
3.だからCygwinのPerlとWindows版のApache2でCGIのテスト環境にしたい!
...と思うんだが、実際やってみるとCGIファイル先頭の「#!...」のパス表現が分からない。しかたなくActivePerlのパスにもどしてやってたが、やっとしくみが分かった. cygwinのshellで「which perl」すると、「/usr/local/bin/perl」である.nt:~$ which perl
/usr/local/bin/perl
nt:~$ ls -lF /usr/local/bin/perl
lrwxrwxrwx 1 jgb admins 17 Apr 26 17:10 /usr/local/bin/perl -> /usr/bin/perl.exe*
これは「/usr/bin/perl.exe」へのSリンクだと知っていたので、Windows側がCygwinのSリンクを理解できないのかと思い、CGIファイルの先頭に「#!D:/cygwin/usr/bin/perl.exe」などと書いていたが、ことごとくエラーになる.
そこでフォルダを開いてみると分かるのだが、Cygwinの/usr/binなどはWindows側からは見えないしくみになっている.そこで(どっかのサイトを読んでいて分かったのだが...)、実は「/bin/perl.exe」というのがあり、こちらは可視ファイルになっており、CGIファイルの先頭に「#!D:/cygwin/bin/Perl.exe」などと書くとあっさりうまくいった。
CygwinのプログラムをWindows側から利用する場合は、フォルダを開いてアイコンが見えるものを使わなければならない...ということだろう。
投稿者 jgb : 2005年10月14日 16:34