2005-02-11:coLinux 0.6.2 on Win XP Pro SP2

Windows 上の1アプリとして気軽に Linux 環境を楽しめる coLinux のインストールと、VNC を用いた GUI 環境の利用、coLinux でのカーネルのリコンパイルの話題。

お役立ちリンク

ページ内リンク


coLinux のインストール

coLinux のインストール

coLinux のインストールについては ERROR STORM さんのところがとてもよくまとまっていて、すばらしいです。
なのでここでインストールメモを書くのは車輪の再発明っぽいんだけど、最近 Alt + PrintScreen というワザを覚えて(というかいままで知らなかった)、画面をいくつかキャプチャーしたので、せっかくなので使おうということであげておく。(^^;

まずは www.colinux.org に行って、coLinux-0.6.2.exe をもらってきて実行。
インストーラが立ち上がり、ライセンス条項が表示される。

続いてインストールするものの選択とインストール先の指定。

インストールするものの選択は以下のようになっている。

  • coLinux
  • coLinux Virtual Ethernet Driver (TAP-Win32)
  • coLinux Bridged Ethernet (WinPcap)
  • Root Filesystem Image Download

いっこめの coLinux は当然チェック。
ふたつめとみっつめは coLinux とのネットワーク接続をしてくれるもの。
どちらかを選んでそれぞれでの設定をする。わたしは TAP-Win32 の方を選択。
最後の Root Filesystem というのは coLinux で利用するディスクイメージを sourceforge からダウンロードする、というもの。
ここでチェックしなくても後で個別にダウンロードできるので、ここではチェックをいれない。
というか、なぜかわたしは何度やってもインストール中にダウンロードすることができなかった。。。

インストール先は、まぁ \Program Files\coLinux\ でよいでしょう。

次の画面で WinPCAP をダウンロードしてこい、というメッセージがでるが、TAP-Win32 を使うことにしたので無視。
プログレスバーがのびてインストールが進んでいく。

途中 TAP-Win32 のインストールに際して警告がでる。かまわずインストール。

無事インストール完了。とりあえず第一段階おわり。

ネットワークの設定

次に coLinux であげるシステム(ホスト)とのネットワークの設定。
先ほどのインストールで TAP-Win32 を入れたのでローカルエリア接続が増えている。
[マイネットワーク]→[ネットワーク接続を表示する] で確認しよう。

わたしの環境では「ローカルエリア接続3」が新たに出現している。
こいつをすでにあるネットワークとブリッジさせる。
ブリッジしたいネットワークと TAP-Win32 のネットワークを選択して右クリックすると、メニューの中に「ブリッジへ追加」というのがあるので、こいつを選ぶ。

Root Filesystem Image の取得と展開

coLinux であげるシステムの Root Filesystem Image を用意する。
sourceforge のダウンロードページ にあるので好きなものを選ぶ。
わたしは Debian が好きなので Debian-3.0r2.ext3-mit-backports.1gb.bz2 を選択。
bzip2 圧縮を解くと 1GByte になる。てきとーなツールで解凍すべし。

設定と起動

coLinux をインストールしたディレクトリに default.colinux.xml という設定ファイルのサンプルがある。
このファイルを別の名前にコピーして編集するなり、直接編集するなりしてcoLinux の設定をする。
大事なのは <block_device> と <network> かな。

以下はわたしの設定ファイル。

<?xml version="1.0" encoding="UTF-8"?>
<colinux>
    <block_device index="0" \
     path="\DosDevices\c:\Program Files\coLinux\images\Debian-3.0r2.ext3-mit-backports.1gb" \
     enabled="true" />
    <block_device index="2" \
     path="\DosDevices\c:\Program Files\coLinux\images\secondblockfile" \
     enabled="true" />
    <block_device index="3" \
     path="\DosDevices\c:\Program Files\coLinux\images\\thirdblockfile" \
     enabled="true" />
    <bootparams>root=/dev/cobd0</bootparams>
    <initrd path="initrd.gz" />
    <image path="vmlinux" />
    <memory size="1024" />
    <network index="0" type="tap" />
</colinux>

coLinux をインストールしたディレクトリに images というディレクトリを掘って、ファイルイメージをまとめている。
seconfblockfile, thirdblockfile というのは単純に Debian-3.0r2.ext3-mit-backports.1gb をコピーしたもの。
ディスクが 1G では足りないので増やしてみた。
coLinux の中からは <block_device> で指定したファイルが /dev/codb{index} で参照される。
例えば index=”2″ で指定した secondblockfile は /dev/codb2 になる。

設定ファイルが書けたら Windows のコマンドプロンプトを起動。
以下のコマンドを打って起動する。

cd "\Program Files\coLinux"
colinux-daemon.exe -c default.colinux.xml

-c で指定するのは上で設定したファイル。
ちゃんと設定されていれば Cooperative Linux console という窓が立ち上がる。

この時点でもう coLinux としての設定はおしまい。
あとは coLinux として起動したシステム(ホスト)の設定ができれば、もはや単なる1つの Linux が入ったマシンとして扱うことができる。
Windows の1アプリであることは気にすることがない、というか気づかれない。(^^;
うーん、coLinux スバラシイ。

ただ一点注意しなければならないことがある。それは

coLinux の起動コマンドを打ったコマンドプロンプトを殺してはいけない

ということ。
コマンドプロンプトを殺すと coLinux ももれなく殺されてくれる。気をつけよう。:-)

初回起動時は root がパスワードなしの状況なので、コンソールで root ログインして、さくっとパスワードを設定しよう。
あとはネットワークの設定をして apt-get upgrade なり、ユーザーを作るなり、好きにセットアップしてください。


VNC の利用

やぱり X も使いたいでしょ

これまでの作業で coLinux の中のシステムに console で入るなり、ssh クライアントで入るなりして利用することができるが、CUI だけじゃなく X な GUI 環境も使いたいと思うのが人情。
というわけで、coLinux の中のシステムに VNC の server を入れ、ベースの Windows の方に VNC の client を入れよう。

サーバ側の準備

coLinux の中のシステムにて sudo apt-get install vncserver で VNC の server を入れる。vnc-common も芋づるでインストールされる。
インストールが終わったら使いたいユーザーで vncserver を起動。

vncserver -geometry 1180x960 :1

初回起動時は “You will require a password to access your desktops.” と言われてパスワードを2回打たされ、ホームディレクトリに .vnc/passwd というファイルができる。
-geometry は画面のサイズ。お使いのディスプレイのサイズにあわせててきとーに設定すべし。
:1 は display 番号。
vncserver を殺したくなったら vncserver -kill :1 のように指定する。

クライアントの用意と実行

REAL VNC のダウンロードページ から Windows 版のクライアントをダウンロードしてくる。
名前や e-mail アドレスを登録して、Installable packages の Windows 9x/2000/NT/XP にチェックを入れてダウンロードしよう。
full installation と viewer program only のふたつがあるが、今回は viewer だけで十分。

exe ファイルをダウンロードしたら実行する。


サーバを聞かれるので coLinux のサーバ + display 番号を入力。
例えば xxx.xxx.xxx.xxx:1 みたいな感じ。
続けてパスワードを入力すると VNC viewer の窓が立ち上がる。

窓の中で X な window system が起動してくれている。

カーネルのリコンパイル

あれ? メモリが。。。

しばらく使っていて、設定ファイルに <memory size=”1024″ /> と設定しているにも関わらず、メモリが 512MB までしか認識していないことに気づいた。
あれ? と思って dmesg と見てみると。。。

[waasuke@pollux:waasuke]% dmesg | head
Linux version 2.6.10-co-0.6.2 (karrde@callisto.y i.org) \
(gcc version 3.3.5 (Debian 1:3.3.5-8)) #5 Sat Feb 5 10:19:16 IST 2005
512MB LOWMEM available.
initrd enabled: start: 0xdfea2000  size: 0x0015db27)
On node 0 totalpages: 131072
  DMA zone: 0 pages, LIFO batch:1
  Normal zone: 131072 pages, LIFO batch:16
  HighMem zone: 0 pages, LIFO batch:1
Built 1 zonelists
Kernel command line: root=/dev/cobd0
Initializing CPU#0

カーネルの HIGHMEM が設定されてないんじゃないの?
というわけでカーネルのリコンパイルをやることにする。

coLinux 用のカーネルのリコンパイルの仕方は coLinuxのメモ – カーネルのコンパイル さんのところがよくまとまっていて参考になります。

ソースとパッチのゲット

ふたたび sourceforge のダウンロードページ に行って、colinux-0.6.2.tar.gz をもらってくる。
これに coLinux 用のカーネルを作るためのパッチが入っている。
linux の kernel ソース自体はてきとーなミラーから 2.6.10 を拾ってくる。
どちらも /usr/src/ 以下で展開し、以下のようにパッチをあてる。

# cd /usr/src/linux-2.6.10
# patch -p1 < ../colinux-0.6.2/patch/linux

カーネルの設定

colinux-0.6.2/conf/linux-config に coLinux のカーネル設定ファイルがあるので、これを kernel のツリーの方にコピーしておく。
make menuconfig して設定メニューが立ち上がったら、Load an Alternate Configuration File で linux-config を指定しよう。

カーネルのコンパイルとインストール

# make-kpkg --revision waa.1 kernel_image kernel_headers

Pen4 3.4GHz なマシンで、make-kpkg にかかった時間はだいたい10分ちょい。

できた deb パッケージをインストール。

# mv /lib/modules/2.6.10-co-0.6.2 /lib/modules/2.6.10-co-0.6.2_old
# dpkg -i /usr/src/kernel-image-2.6.10-co-_waa.1_i386.deb

続いてカーネルソースツリーにできた vmlinux を coLinux のインストールディレクトリにコピーする。
coLinux の中のファイルのベースの Windows のファイルシステム上へのコピーはいろいろやり方があると思うのでお好きなように。
わたしはベースの Windows 上の cygwin からの scp で。

いったん coLinux の中のシステムを落として、設定ファイルの <image> を新しい vmlinux に指定しなおして coLinux の再起動。
立ち上がったところで dmesg を確認すると。。。

[waasuke@pollux:waasuke]% dmesg | head
Linux version 2.6.10-co- (root@pollux) \
(gcc version 3.3.5 (Debian 1:3.3.5-5)) #1 Sat Feb 12 06:52:35 JST 2005
0MB HIGHMEM available.
512MB LOWMEM available.
initrd enabled: start: 0xdfea2000  size: 0x0015db27)
On node 0 totalpages: 131072
  DMA zone: 0 pages, LIFO batch:1
  Normal zone: 131072 pages, LIFO batch:16
  HighMem zone: 0 pages, LIFO batch:1
Built 1 zonelists
Kernel command line: root=/dev/cobd0

だめじゃーーーん (;_;)

カーネルの HIGHMEM の設定自体はできているみたいだが。。。
わたしの技術力ではここでお手上げ。
どなたか 512MByte 以上のメモリを認識させる方法をご存じの方、教えてください。m(_ _)m

[2005/02/12追記]
会社でやまだくんに「src/colinux/kernel/monitor.c:839-840 あたりを見ろ」と言われた。

% cd /usr/src/colinux-0.6.2/src/colinux/kernel
% head -n 844 monitor.c | tail
        co_debug("configured to %d MB\\n", cmon->memory_size);

        if (cmon-%gt;memory_size < 8)
                cmon->memory_size = 8;
        else if (cmon->memory_size > 512)
                cmon->memory_size = 512;

        co_debug("after adjustments: %d MB\\n", cmon->memory_size);

        cmon->memory_size <<= 20; /* Megify */

coLinux の設定ファイルの <memory> のところを読んでいるルーチンの中なんだけど、512 以上の指定は 512 で制限してしまっているのね。
coLinux の中の kernel の問題だとばかり思ってて、coLinux の方の問題だとは思わなんだ。
やまだくん指摘ありがとう。

というわけでここをいじってやればよさそうな気がするが、colinux-daemon.exe をリビルドする環境は手元にないぞ。。。


おまけ

わたしの職場のマシンの風景。
Dual head なマシンの片画面を VNC 経由で X を使う用にしている。
とっても快適。coLinux はほんとスバラシイ。