WASH on coLinux

以前OnlineJudgeを作った反省より、
WASH(http://www.informatik.uni-freiburg.de/~thiemann/haskell/WASH/)を勉強することにした。
Cygwinでビルドしようと思ったら、
makeが良くわからないところでとまるので、
coLinuxでやってみることにした。


しかしまぁ、coLinuxがなんというか、
非常に環境構築がめんどくさい。
何度も何度も失敗してようやく一連の流れが分かったので、
ここにそれを記しておくことにする。


とりあえずやりたいことは、
・HDD容量の増設
・基本的な環境の構築
・Xのインストール
・日本語ロケールの設定


まぁ、いろんなページから引っ張ってきただけだが、
まとまっていると何かと便利なので(私にとって)。


注:以下の作業はCygwinで行うものがあるので、Cygwinは入れておく

        • -

colinuxの起動準備


coLinuxをインストール


coLinuxのサイトよりDebian-3.0r2.ext3-mit-backports.1gb.bz2を入手、解凍。
解凍したものをroot_fsにリネーム


スワップ領域作成。サイズは適当に。

> dd if=/dev/zero of=swap_device bs=1M count=512


・引越し先の大容量ファイル作成。サイズは適当に。

> dd if=/dev/zero of=dst_file bs=1M count=4096


・コピー元ファイルを作成。

> cp root_fs src_file


・default.colinux.xmlを編集。


バイスを割り当て。




hogehogeはイメージのあるディレクト


メモリ割り当てがデフォルトでは少ないので、増量(環境に合わせて)


coLinux起動

> ./colinux-daemon -c default.colinux.xml


・ルートでログイン

ルートのパスは"root"


☆速攻で大容量ディスクに移動

# mkfs.ext3 /dev/cobd3

# mkdir /mnt/src
# mount /dev/cobd2 /mnt/src
# mkdir /mnt/dst
# mount /dev/cobd3 /mnt/dst
# cp -Rap /mnt/src/* /mnt/dst

# shutdown -h now


・default.colinux.xml 再編集

block_device 2 と 3 を削除。


大きいファイルをroot_fsにリネーム。
コピー元を削除。

> mv dst_file root_fs
> rm src_file


colinux再起動


☆基本的な環境の整備


・キーボードレイアウトの変更

日本語キーボードなら、
dpkg-reconfigure console-data で日本語キーボードに。


・/etc/network/interface の編集

エディタはnanoしか入っていないので、nanoで上記ファイルを編集。


・/etc/resolv.conf の編集

適当にDNSの設定をする。
TAPのIPでよいらしい。


・必要に応じて /etc/apt/sources.list /etc/apt/apt.conf の修正

プロキシを越える必要があるなら、
/etc/apt/apt.conf に

Acquire::http::Proxy "http://PROXY_SERVER_HOST:PORT/";

を記述する。


・ネットワーク再起動

# /etc/init.d/networking restart

・システムの更新

# apt-get update
# apt-get dist-upgrade


質問はすべてデフォルトで。


・sudo と ssh のインストール

# apt-get install ssh sudo


・adduser でユーザ作成
・visudo で今作ったユーザをsudoerに。
rootの設定をコピー。

(以降はSSHクライアントから操作する)


タイムゾーンの設定

# tzselect


スワップの設定

# mkswap /dev/cobd1


/etc/fstab を編集

/dev/cobd0 / ext3 errors=remount-ro 0 1
/dev/cobd1 none swap sw 0 0
proc /proc proc defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0

# swapon -a
# swapon -s で確認


・必要最低限なパッケージをインストール

# apt-get install locales host jless

ロケールは en_US.xxx ja_JP.xxx を入れておけばいいだろう


・いったん再起動


☆ X のインストール

とりあえず、Cygwin/Xを用いる方針で。

X window system のインストール

$ sudo apt-get install x-window-system

ドライバはとりあえずVGAを選択。
ディスプレイはLCD
解像度必要なやつは追加。
デフォルト色深度を選ぶ。
そのほかは適当にデフォルトで流す。


KDEのインストール


とりあえずKDEをインストールする。

$ sudo apt-get install kde

いらんもんが入るのがいやなら、

$ sudo apt-get install kdebase

で。

設定は良くわからんので、全部デフォルトで。
(不備があったら後で変えたらいいだろう)


・GDMのインストール

$ sudo apt-get install gdm


・/etc/X11/gdm/gdm.conf 編集

[xdmcp] セクション
Enable=true

[servers] セクション
0=Standard をコメントアウト

KillInitClients=false


・デフォルトディスプレイマネージャ設定

# echo "/usr/bin/gdm" > /etc/X11/default-display-manager


・gdm 開始

# /etc/init.d/gdm start


Cygwin から接続

> X -query colinux &

お好みでrootlessに

> X -query colinux -rootless &

ログイン画面が出る。
以降はGUIから操作可能。


☆日本語化

・日本語フォントのインストール

# apt-get install x-ttcidfont-conf ttf-kochi-mincho-naga10 ttf-kochi-gothic-naga10

TrueTypeフォントハンドリング=xtt


XFree86の設定

/etc/X11/XF86Config-4

Section "Files" に

FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/CID"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"

を追加

Section "Module"

#Load "freetype" ← これをコメントに
Load "xtt" ← これを追加


/etc/X11/fs/config
catalogue に
/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/
を追加


i18n インストール

# apt-get install kde-i18n-ja


・必要なパッケージインストール

# apt-get install vim
# apt-get install jvim-canna
# apt-get install kinput2-canna
# apt-get install emacs21
# apt-get install xemacs21-mule-canna-wnn
# apt-get install canna


・ローカル設定

# apt-get install language-env

$ set-language-env

(rootで実行しないように)

wnnskkに関してはNoを選ぶ。
後は全部Yesで。

最後にいくつかのパッケージをインストールしろと
言ってくるので、それをインストールする。

# apt-get install ja-trans manpages-ja egg

(今回言われたもの)


・その他修正

/etc/gdm/Xsession

先頭を

#!/bin/bash --login

に書き換える


KDEの言語設定

Control Center起動

Regional & Accessibility → Country/Region & Language
→ Languages → Add Language → Japanese

で日本語を追加。メニューが日本語化される。


・いったんログアウト

再びログインして完了。


☆ 開発環境インストール

# apt-get install gcc g++ make libc6-dev

とりあえずC/C++は使えるようになった。


Haskellを入れる。

# apt-get install ghc6 ghc6-prof ghc6-doc

ただし、今現在(2005/10)GHC6.4はunstableなので注意。
/etc/apt/sources.list を編集。


☆完了!!

あとはお好みによりいろいろ環境を整えて下さい。

        • -

しかし、まともな環境を構築するのに
ここまでの手順が必要だなんて…。
私なんか、Linuxの知識がほとんど無いもんだから、
なんども失敗して環境つぶしたり、
コマンドライン操作失敗してせっかく作ったHDDイメージがパーになったり、
もう散々で…ここまでこぎつけるのに五日もかかってしまった。


そして、WASHのコンパイル
コンパイル開始、しばし待つ。
lib/WASH/HTML/HTMLMonad98.hs のコンパイルでとまる…。
とまるというより、コンパイルが終わらない?
CPU100%が続き、数十分ほど経過すると、今度はHDDを
がりがりやり始める。
がりがりがりがり…とこれまた数十分。
そしてcoLinuxが落ちた。
どうも様子からしてものすごいスラッシングして
落ちたような感じなんだけど。
いろいろと調べると、WASHをコンパイルしようとして
同じようにハングしたというのを発見。
でも、Athlon64で15分ほどでコンパイルが終わったという報告も。
それで、出てきたものが、これ。
http://www.haskell.org/hawiki/GhcPerformance
なんと、線形時間でコンパイルできないモジュールらしい。
そういえば、今までコンパイラって当然コードサイズの線形で
コンパイルしてくれるものだと思い込んでたなぁ…
とにかく、これでは駄目そうなので、研究室の
FedoraでWASHをコンパイルすることに。
メモリは512MB。
コンパイルし始めると、やはり同じところでとまる。
システムモニタを見ながら眺めていると、
やはりとてつもない勢いでメモリを消費しているのが分かる。
結局そのファイルを20分ぐらいかけて、
最終的にメモリを800MB近く消費してコンパイルが完了した。
家のcoLinuxではメモリ128MB+スワップ256MBだったので、
全然足りなかったのか。
makeはもうひとつ同様に超長時間かかるファイルがあって、
40-50分で完了した。正直時間かかりすぎだ…。
それにメモリ食いすぎ。
最近のマシンじゃないとコンパイルできないって…。
で、家に帰って、メモリ割り当て384MB(512MB中)、
スワップ512MBにして再度コンパイル
やはりものすごく時間がかかる。
ものすごくHDDが頑張りながら、30分ぐらいして一つ目の山場を通過。
よし、後半分だ、と思ってもうひとつのファイルのコンパイルを見守っていると…
なんとWindowsが固まった。
なんの反応も無くいきなりシステムがうんともすんとも言わなくなってしまった。
環境はLet's note W4なのだが、裏面を触ってみると
もう、とんでもないぐらいに熱くなっていた。
これは、熱暴走だな…。というわけで、やっぱり断念。
メモリを1GB積んでいるデスクトップで再チャレンジ。
もうcoLinuxのセットアップ何回目だ…と思いながらも
頑張って、ようやくWASHをコンパイル
coLinuxに512MB割り当てて、スワップも1GBにして、
しかもHDDはRAID0だ。
コンパイルも、ほとんどスラッシングしないまま順当に終了した。
最初からこれでやっていれば…。
後はここでコンパイルしたバイナリを
ノートに持っていってそっちにもインストールしよう。
というわけでようやくWASHの動く環境を手に入れた。
なので、とりあえずなんかCGIを書いてみようと思う。