2012年5月4日金曜日

CygwinをPortable環境で使用するためのメモ

CygwinはLinuxをWindows上エミュレートするソフトウェアです。

最近のバージョンではレジストリを使わないようになりました
gccやVimもインストールできるため、これをUSBメモリ等にインストールすることによって
開発環境を容易に持ち運ぶことが可能となります

VMware/VirtualPCと比較した時の利点としては、持ち運び先に特定のソフトウェアがインストールされてなくても使えること、そしてスペックが低くてもある程度使用できることです。

しかし、デフォルトで作られる起動用バッチファイルとショートカットは絶対パスで指定してあり使いにくいことでしょう。

そこで今私が使用している設定を公開することにします。
もしよろしければ参考にどうぞ

まずは起動用バッチファイル
Cygwin.bat
@echo off
%~d0
set PATH=%SystemRoot%\system32
set cygdrive=%~d0
set cygdir=%~dp0

cd %~dp0\bin

set MAKE_MODE=unix
set CYGWIN=noacl nontsec nosmbntsec
set SHELL=/bin/bash
sh.exe -c "/usr/bin/mintty - &"
exit
こうすれば、USBメモリのドライブレターがどうなってもCygwinのパスに柔軟に対応できます
MAKE_MODE、CYGWIN、SHELLといった環境変数は自分の環境に合わせて書き換えてください。
私はshellをデフォルトのままのbashにしていますが、zshなどもいいかとおもいます。

そしてショートカット。
USBメモリのルートにCygwinフォルダを作成しインストールしているときは、
%windir%\system32\rundll32.exe url.dll,FileProtocolHandler "Cygwin\Cygwin.bat"
というリンクのショートカットをUSBメモリのルートフォルダにおいてください。
すると、あとはこのショートカットから起動することができます。
ちなみに私はこのショートカットのアイコンを%SystemRoot%\system32\cmd.exeに変更しています。
コマンドプロンプトのアイコンと同じになるはずです


おまけ・オススメのコマンド
apt-cyg aptやyumといったLinuxパッケージ管理に似ているコマンド。これでsetup.exeから解放されます。ただし、インストールする前にwget、subversion、bzip2、tar、gawkをインストールしておいてください。
インストール方法は、
# svn --force export http://apt-cyg.googlecode.com/svn/trunk/ /bin/
# chmod +x /bin/apt-cyg
を実行するだけでOK
あとはapt-cyg install <package name>などとするだけでかんたんインストールです。
apt-cyg find <string>でパッケージ検索も可能。

cocot これはCOde COnverter on Ttyの略で、cygwin ver1.7から標準のターミナルエミュレーターになったminttyを使うとき便利です。
minttyは高性能ですが、ckと違い文字コードは決め打ちです。
普通はLinuxエミュレータなのでUTF-8に設定していると思います。
しかしifconfigやpingを使用したい時、cygwinはそれらのコマンドを持っていないので
コマンドプロンプトのipconfig、pingコマンドを使用する必要がありますが、Shift-JISでしか出力できないためにmintty上では確実に文字化けしてしまうのです。

そこで、cocotを使用すると文字コードを判別してUTF-8で吐き出してくれます。
一番の魅力はnkfと違いpingのような逐次に出力するコマンドでもつかえることです。

ただし、このままだとコマンドが長くなって面倒なのでcocotを導入したときは次のようなエイリアスを.bashrc等に書き込むと便利でしょう

alias ifconfig="cocot ipconfig"
alias ping="cocot ping"
alias arp="cocot arp"
alias nslookup="cocot nslookup"
alias traceroute="cocot tracert"
alias route="cocot route"
alias netstat="cocot netstat"