カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

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

概要: 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

これはまあ前に書いた記事そのままなんだけど、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.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の方がいいかなぁという感じです。

まあ今までの作業のまとめは以上。

あとは設定ファイルの管理のごにょごにょとサイトの開発環境の整備とかだけです。