CygwinでUnixライク環境を整える

読了まで:約4分


概要: 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)o)d)u)l)e)N)a)m)eとかnotest install M)o)d)u)l)e)N)a)m)eとかしてインストール。 でめんどくさかったので、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.execygterm.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

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。