概要: Cygwin を使って Windows に Unix ライクな環境を用意する
coLinux とか VMware とか使ってみたけどどうにも定着しない、でも UNIX ライクな環境は欲しいということで、 しばらく前というか結構前から Cygwin を導入し始めてみました。
で、そのときにはまったポイントとか問題が起きたときの解決方法を書いてみる。
zsh
まず、cygwin で普通にインストールして入ってくる zsh4.3.9-1 では
$ echo 日本語
と打つと、
$ echo <00e6><0097><00a5><00e6><009c><00ac><00e8><00aa><009e>
という風に化けます。
cygwin が提供してる関数が悪いのか zsh 側の実装が悪いのかどうかは分かりませんが、 これは最新の zsh4.3.10 をソースからコンパイルしても同じことが起きました。
で、Google で色々検索しても解決方法が出てこなかったので、試しに 2ch の Cygwin スレで質問してみたところ、 バージョン下げてみたらと解答されたので、試しにバージョンを下げてみたところ、見事に直りました。
ということで、今は zsh4.3.4-1 を使ってます。
subversion
これはまあ 前に書いた記事 /post/50888804685 そのままなんだけど、cygwin の subversion で日本語メッセージが化けるという問題。
具体的には Windows 版 Subversion でAPR_ICONV_PATHが正しく指定されてない時のような感じで日本語メッセージが化ける。
で、これは前書いた記事の方法で解決できるんだけど、ここでおさらいすると、
- Subversion の日本語が化けるのは、Subversion で使用している APR がうまく機能してないのが原因
- で、APR がうまく機能しないのは、Cygwin の
nl_langinfoがテケトーな実装になってるのが原因 - で、やっつけで
nl_langinfoが UTF-8 を返すようにすれば解決
という感じ。まあこれに関しては この前の記事で書いた /post/50888804685 とおりなんで、そっちを参照してください。
svk
次に svk。
まずcpanの設定してcpanで
$ cpan cpan [[1]] > install SVK
でインストール。すればいいだけなんですが、自分がやったときは幾つかモジュールがこけよったので、
clean {ModuleName}とかnotest install {ModuleName}とかしてインストール。
でめんどくさかったので、svk もnotest install SVKとしました。
で、あとはリポジトリをミラーして、チェックアウトするだけ!だったんですが、ここで問題発生。 なんか、
$ svk co //path/to/repository
すると
repository: No such file or directory at /usr/lib/perl5/site_perl/5.10/SVK/Util.pm lie 573
と言われてチェックアウトできないという。
んで、これはcygwin svk checkoutで Google 検索したらほぼ一発で出てきました。
- #26714: Fix checkout on cygwin で書いてあるように、
SVK/Util.pmの line 573 辺りのabs_pathメソッドの前半、非 Windows 環境の処理を部分を、
sub abs_path { my \$path = shift; if (!IS_WIN32) { require Cwd; $path = '.' if !length $path; return Cwd::abs_path ($path) unless (-l $path || ! -e $path); my (undef, $dir, $pathname) = splitpath ($path); $dir = '.' if !length $dir; return catpath (undef, Cwd::abs_path ($dir), $pathname); }
のように書き換えるとうまくチェックアウトできるようになりました。
で、原因は何でもCwdの挙動が Cygwin 環境だと他の Linux 環境と異なるのが原因らしいです。
まあそれはいいんだけど、確か svk は新規機能の開発は終了するよって言ってたと思うので、 いまのうちに git に乗り換える方がいいかも知れません。まあせっかく Cygwin 使い始めたことだしね。
環境変数
Cygwin はデフォルトだと Windows の環境変数を引き継ぐんですが、
それがなんかキモイというか、それがイヤで Cygwin 使ってなかったわけなんだけど、嫌だったので、
~/.zshenvで以下のようにして Windows 環境の環境変数を削除してやりました。
unset ALLUSERSPROFILE unset APR_ICONV_PATH unset APPDATA unset CLIENTNAME unset COMMONPROGRAMFILES unset COMPUTERNAME unset COMSPEC unset FP_NO_HOST_CHECK unset FTP_PASSIVE unset HOMEDRIVE unset HOMEPATH unset LOGONSERVER unset NUMBER_OF_PROCESSORS unset OS unset PATHEXT unset PERL5LIB unset PROCESSOR_ARCHITECTURE unset PROCESSOR_IDENTIFIER unset PROCESSOR_LEVEL unset PROCESSOR_REVISION unset PROGRAMFILES unset RUBYOPT unset SESSIONNAME unset SVN_SSH unset SYSTEMDRIVE unset SYSTEMROOT unset USERDOMAIN unset USERPROFILE unset VS90COMNTOOLS unset WINDIR unset __COMPAT_LAYER
cygterm
で最後にコマンドプロンプトは使いづらい、putty 使いたいということで、 cygterm( CygTerm - Yet another Cygwin console )を導入しました。
であとはシェルに入って、
$ cd ~/tmp $ wget http://www.dd.iij4u.or.jp/~nsym/cygwin/cygterm/cygterm107.tgz $ tar zxvf cygterm107.tgz $ cd cygterm107.tgz $ make
な感じで、cygterm.exeを生成。あとは生成したcygterm.exeとcygterm.cfgを/binにコピーしてインストール。
ちなみに自分のcygterm.cfgはこんな感じ。
# CygTerm setting TERM = "Z:\usr\local\putty\putty.exe" -load "cygterm" -telnet %s -P %d TERM_TYPE = xterm PORT_START = 20000 PORT_RANGE = 40 SHELL = /bin/zsh --login -i # set env ENV_1 = MAKE_MODE=unix ENV_2 = HOME=/home/nyarla ENV_3 = PATH=/bin:/usr/X11R6/bin ENV_4 = INCLUDE=/usr/include ENV_5 = LIB=/lib:/usr/lib ENV_6 = TEMP=/tmp ENV_7 = TMP=/tmp
であとは putty の方で cygterm 用セッションを作ってやれば OK。
まあこれに関しては Google で検索した方が詳しい情報が出てくると思います。
以上終了
とりあえず以上が現時点で自分の環境でやった作業です。 なんかトラブルばっかり起きてたような気がしますが、 とりあえず解決できたのでよしとします。(ぉぃ
まあ正直素直に Ubuntu とか使ってた方がトラブルないような気がしますが、 Windows と融合した UNIX 環境を作るとなると、Cygwin の方がいいかなぁという感じです。
まあ今までの作業のまとめは以上。
あとは設定ファイルの管理のごにょごにょとサイトの開発環境の整備とかだけです。