概要: 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 M
とかnotest install M
とかしてインストール。
でめんどくさかったので、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 の方がいいかなぁという感じです。
まあ今までの作業のまとめは以上。
あとは設定ファイルの管理のごにょごにょとサイトの開発環境の整備とかだけです。
#FIXME