Cygwin on Windows7で"快適な"CassandraとかHadoopとかの開発環境【書きかけ】

MinGW on Windows7(x64)でCassandraやらHadoopやらの調査・アプリ開発をしていたのだが、あまりに不便、というか無理なのでCygwinに移行することにした。素直にCentOS仮想マシン構築しろって話もあるんだけど、EclipseやらWebブラウザやらExcelやら立ち上げてると、すぐにメモリ4GBぐらい食いつぶすので。。。

インストール概要

とりあえず最小限しか入れないように。必要になった時点で足す感じで。

  • CassandraやHadoop(+ZooKeeper)を使える環境。
  • 日本語はUTF-8に。
  • X11GnomeKDE関係はインストールしない。
  • zshをインストールする。使ったことないけど。
  • lessの代わりlv。
  • Thriftのビルドに必要なパッケージをインストール。
  • CygwinパッケージのVimは日本語処理が不安?なので別途インストール。

インストールしたパッケージのリスト

基本デフォルトで。以下は自分で選択したパッケージ。依存性の解決は全てインストーラ任せで。

  • Devel
    • automake
    • bison
    • boost
    • flex
    • gcc
    • libtool
    • make
    • pkg-config
  • Shells
  • System
  • Utils
    • lv
  • Web

Vimのインストール

2010/04/14追記:結局、この手順だとVimがCP932になっちゃうので、Cygwin Vim使わないとダメかも。

ダウンロード→パス設定

Vim UTF-8 日本語版 - fudistのWindows用Vimをダウンロードしてきて、適当な場所に展開する。展開したら、Cygwinから使いやすくするようにパスを通しておく。
ちなみにうちでは以下のようにして、C:/cygwin/bin/にvim.exeのシンボリックリンクを作っている(管理者権限が必要)。まぁ、別にパスを通さなくても、.bashrcを編集してaliasでもいいと思う。

mklink c:\cygwin\bin\vim.exe "c:\Program Files (x86)\vim\vim.exe"

ちなみにWindows版のVimはKaoriYaさんのが有名だけど、UTF-8で使おうとすると設定が面倒なので、ここで紹介したVimを使用するのが無難。

クリップボード共有(gvimでWindowsのクリップボードを使う - へたれプログラマな日々より)

デフォルト設定では、VimとWindowsのクリップボードが連動していないので、vimrcに以下を追加。

set clipboard=unnamed

Cygwin初期設定

VimがインストールできたのでUTF-8で動かすようにCygwinの設定ファイルを弄る。

bash( cygwinのgitで日本語を文字化けさせない - もうカツ丼でいいよなより)

.bashrcに以下を追加。

export LANG=ja_JP.UTF-8
export PAGER='lv -Ou8'

alias ls='ls -F --color=auto --show-control-chars '
alias lv='lv -Ou8 '
alias less='lv -Ou8 '
zsh

zsh初回起動時、以下のようなメッセージが表示されるので、「0」を押して.zshrcファイルを生成する。

zsh-newuser-install:929: command not found: clear
This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~).  This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

--- Type one of the keys in parentheses ---

なんかエラーが表示されてzshが起動しない場合、Cygwin関係のプロセスを全部killして、コマンドプロンプトで以下を実行する。(Cygwinで "unable to remap *.dll" が出るときは rebaseall らしい - XXXannexより)
rebaseallしてもzshが起動しないことがあるんだけど、その場合、rebaseall自体が失敗してる可能性がある。うちではインストールしたCygwinのパッケージが壊れていたようで、reinstallしてみたらrebaseallできるようになった。

cd c:\cygwin\bin
ash rebaseall -v

.zshrcに最低限の設定を追加。詳細な設定は漢のzsh | コラム | エンタープライズ | マイナビニュースを参考にすると良い。

export LANG=ja_JP.UTF-8
export PAGER='lv -Ou8'

alias ls='ls --color=auto --show-control-chars '
alias lv='lv -Ou8 '
alias less='lv -Ou8 '
alias vi='vim'

PROMPT="%m:%n%% "
RPROMPT="[%~]"
SPROMPT="correct: %R -> %r ? "

Cygwin起動時のshellをbashからzshに変更する。C:\cygwin\cygwin.batを以下のように変更。(Windows7にもzsh環境を - kamuycikap - SentenceDataBaseより)

@echo off
C:
chdir C:\cygwin\bin
zsh --login -i

ちなみに「set CYGWIN=tty」付けたらVimがちゃんと起動しなくなってしまったので、つけちゃダメぽい。

CygwinからJava(JDK)を使う

基本的にはWindows版Java(JDK)をそのまま使うのだが、CygwinとWindowsのパス解決の違いがあるので、Linux/Mac用のJavaアプリ起動スクリプトはまず動作しない。スクリプト中のパス指定を全てcygpathを使ったものに書き換えてもいいのだが、めんどくさいので素直にCygwinでJavaを快適に使うのjava_wrapperを使うと楽ができるので、ここではjava_wrapperのセットアップ方法を紹介する。

以下のようにJDKがセットアップされていることが前提条件となる。

  • Windows用のJDKをインストール済み
  • 環境変数にJAVA_HOMEを設定済み

java_wrapperをダウンロードして、/usr/local/bin/java_wrapperへコピーし、実行可能に(chmod +x)する。ただし環境によってjava_wrapperが動作しないことがある*1ので、java_wrapperをテキストエディタで開き、最終行を以下のように修正する。($PROGRAMを""で囲む)

exec "$PROGRAM" $ARGS

スクリプトを修正したら以下のコマンドを実行する。ただし、この方法だと普段使わないappletviewer.exeやHtmlConverter.exeあたりのシンボリックリンクも生成されるので、好みで消したりするとよい。

cd /usr/local/bin
./java_wrapper createsymlinks

これで設定完了。javaやjavacなどのコマンドを実行できるか確認する。

Hadoopを擬似分散モード(シングルノード)動かす

別エントリで書いた。そのうちマージしたい。
Windows 7 + CygwinでHadoop(擬似分散モード)を動かす - DenkiYagi

おまけ:ckwからCygwinを使う

ckw 0.8.10 改造版を更に改造した(修正しただけ)からVista対応版のckwをダウンロードしてきて、適当なところにインストール。ckw.cfgのCkw*execを以下のように修正。

Ckw*exec:  C:\cygwin\Cygwin.bat

なお、ckwさんはウィンドウの×ボタンで閉じちゃうと、Cygwinのプロセスが生き残っちゃうので注意。

*1:今時のJDKはデフォルトでC:\Program Files\Java\jdk1.6.0_xxのように、スペースを含むパスにインストールされるので、ちゃんとjavaコマンドをコールできない