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
これはまあ前に書いた記事そのままなんだけど、cygwinのsubversionで日本語メッセージが化けるという問題。
具体的にはWindows版SubversionでAPR_ICONV_PATHが正しく指定されてない時のような感じで日本語メッセージが化ける。
で、これは前書いた記事の方法で解決できるんだけど、ここでおさらいすると、
- Subversionの日本語が化けるのは、Subversionで使用しているAPRがうまく機能してないのが原因
- で、APRがうまく機能しないのは、Cygwinの
nl_langinfoがテケトーな実装になってるのが原因 - で、やっつけで
nl_langinfoがUTF-8を返すようにすれば解決
という感じ。まあこれに関してはこの前の記事で書いたとおりなんで、そっちを参照してください。
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の方がいいかなぁという感じです。
まあ今までの作業のまとめは以上。
あとは設定ファイルの管理のごにょごにょとサイトの開発環境の整備とかだけです。