2005-02-11:coLinux 0.6.2 on Win XP Pro SP2
Windows 上の1アプリとして気軽に Linux 環境を楽しめる coLinux のインストールと、VNC を用いた GUI 環境の利用、coLinux でのカーネルのリコンパイルの話題。
お役立ちリンク
- Cooperative Linux [www.colinux.org]
- ERROR STORM [www.geocities.jp]
- RealVNC – VNC Downloads [www.realvnc.com]
- VNCのページ [www.sra.co.jp]
- coLinuxのメモ – カーネルのコンパイル [scratchpad.fc2web.com]
ページ内リンク
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 はほんとスバラシイ。