Top | Wiki | Blog | Github  

coLinux

coLinux は,Windows と Linux を同時に走らせる非常に強力なツールです.デュアルブートでインストールしてある Linux を,再起動することなく Windows から呼び出すこともできます.coLinuxは,VirtualPC のような API レベルの接続ではなく,ネイティブに近いレベルで Linux と接続されているのが特徴で,動作が非常に軽快です.以下,インストールと設定時のトラブルシューティングについてメモします.

なお,編集の都合上ファイルに記述する内容については,次のような表記をとります.

1: 一行目の内容
2: 二行目の内容
3:              ←空行
4: coLinux で遊ぼう♪

行頭の番号とコロンは実際のファイルには記述されない(しない)ので,間違いのないようにご注意下さい.また,当ページの内容を実践した結果,いかなる問題・障害が起きようとも私は一切の責任を負いません.自己責任でお願い致します.念のため一応LOL

詳細
Linux OS Vine Linux 3.2 (FTP)
Windows Windows XP SP2
OSの状態 デュアルブート
coLinux version 0.6.4
Memory 2GB (640MBをLinuxへ)
試行日 2006/8/19

下準備

下準備として,すでにデュアルブート環境が構築されているとします.ちなみに,デュアルブート環境を構築する際に非常に便利なツールは次の2つ.

  1. RawWrite (Windows上でLinuxのインストールディスク等を作るためのツール.)
  2. BootPart (Windows上からLinuxのブート情報を抜き出し,起動オプションを追加してくれるツール.起動ディスクが作れないディストリビューションでは重宝します.)

私の場合は,パーティションを予め Windows 側から分けておき,そのうちの一つを FAT32 にフォーマットし,そこに Linuxディストリビューション(例えば,Vine Linux)のイメージファイルを配置します.インストールの開始を,インストールディスクから行い,パッケージのインストールはハードディスクに置いたイメージファイルから行います.インストールディスクは,FTPサイトからダウンロードした boot.img を Rawwrite で書き込んだ FD を使用します.このようにすれば,CD-ROMにイメージファイルを焼く面倒が無く,素早くインストール(数分)が終了するのでオススメです.

インストール(coLinux)

最新のバージョンを取得します.

今回使用したバージョンは,0.6.4です.coLinux はまだ完成されたものではないので,バージョンによって設定の内容などが大きく変わる場合があるので注意が必要です.最終的には全部マウスで設定できるレベルまで行くのではないかなと思っています.

インストール途中で,コンポーネントの選択ダイアログが立ち上がります.今回はデュアルブート環境があることが前提なので,

Root Filesystem image Download

のチェックは外します.デュアルブート環境がない場合はこれのチェックを入れ,イメージファイル(数GBでしょう)をネットワーク経由で入手することになります.

インストール先は,

C:\coLinux

としています.コンフィグファイルのデフォルトがこのパスです.

Linux 側の設定

オフシャルサイトの設定法を参考に,私の環境で成功した例を記します.

ディアルブートの Linux は,このような構成でインストールされているとします.

システム上のデバイス名 マウントポイント
hdc1 /boot
hdc2 /
hdc3 /home
hdc4 拡張パーティションの指定
hdc5 swap
hdc6 Windows Share (FAT32)

coLinux 用デバイスの作成

root で次のコマンドを発行します.

mknod /dev/cobdX b 117 X

Xには0~7の数値を入れます.(e.g. mknod /dev/cobd0 b 117 0)coLinux で扱いたいパーティションの数に応じてデバイスを用意します.例えば,swap, /home, /, の3つを通常マウントしている場合は最低,cobd0, cobd1, cobd2 を用意する必要があります.Linux を単体で起動させることを考慮し,/etc/fstab の変更を最小限に止めるために,/etc/fstab に記載したデバイスの数だけ cobd を準備します.ただし,現状では8つのデバイスしか作れないようです.私の場合,とりあえず8つ作っておきました.

/root/isStandAlone の作成

次の内容を記述したファイルを /root/isStandAlone として作成し,実行権限を付けておきます.

1: dd if=/dev/hdc2 of=/dev/null bs=1 count=1 > /dev/null 2>&1
2: exit $?

/dev/hdc2 の部分は,「/」のパーティションを指定します.

ここの設定は,こちらのサイトを参考にしました.

/etc/init.d/kudzu の設定

次の1,5,6,7,行目の内容を追記する.

1: if /root/isStandAlone; then
2: if[ "$KUDZU" == "off" ]; then
3:     exit 0
4: fi
5: else
6:     exit 0
7: fi

/etc/rc.sysinit の設定

およそ296行目あたりに次の1,17を追記する.

 1: if /root/isStandAlone; then
 2:     failure "$STRING"
 3:     echo
 4:     echo
 5:     echo $"*** An error occurred during the file system check."
 6:     echo $"*** Dropping you to a shell; the system will reboot"
 7:     echo $"*** when you leave the shell."
 8:     
 9:     PS1=$"(Repair filesystem) \# # "; export PS1
10:     sulogin
11:     
12:     echo $"Unmounting file systems"
13:     umount -a
14:     mount -n -o remount,ro /
15:     echo $"Automatic reboot in progress."
16:     reboot -f
17: fi

C:\coLinux\vmlinux-modules.tar.gz のコピー

予め FTP で外部サーバにおいて置いたり,Windows との共有ドライブに入れておくのもOKですが,私は NTFS をマウントして直接取得しました.

mkdir /mnt/ntfs
mount -t ntfs /dev/hda1 /mnt/ntfs
cp /mnt/ntfs/coLinux/vmlinux-modules.tar.gz ./

取得したファイルを解凍し,/lib/modules 内にコピーする.

tar zxvf ./vmlinux-modules.tar.gz
cd ./lib/modules
mv ./X.X.XX-co-X.X.X /lib/modules

上記の X はダウンロードした coLinux のバージョンで違うと思います.

/etc/fstab の設定

まず「/」のラベルを変更します.

e2label /dev/hdc2 rootdev

次に,/etc/fstab の「/」を指定している行を次のように書き換えます.

LABEL=rootdev / ext3 defaults 1 1

さらに,その他の LABEL で指定されている行は,明示的にデバイス名に変更します.これは,coLinux のXML設定ファイルのエイリアス名でデバイス名を指定するためです.

こんな感じの /etc/fstab になりました(一部を抜粋表示).

1: LABEL=rootdev       /        ext3    defaults    1 1
2: #LABEL=/boot        /boot    ext3    defaults    1 2
3: /dev/hdc1           /boot    ext3    defaults    1 2
4: none                /dev/pts devpts  gid=5,mode=620  0 0
5: #LABEL=/home        /home    ext3    defaults    1 2
6: /dev/hdc3           /home    ext3    defaults    1 2
7: /dev/hdc5           swap     swap    defaults    0 0
8: /dev/hdc6           /mnt/win vfat    defaults    1 2

coLinux の設定

以上までの設定を Linux で終えたら,再起動して Windows を立ち上げます.

C:\coLinux\default.colinux.xml をコピーして,同じディレクトリに保存します.適当にリネームします(e.g. C:\coLinux\default.colinux.vine.xml).

そして,いくつかのタグを次のような内容に修正します.

block_device タグ

1: <block_device index="0" path="\DosDevices\c:\coLinux\root_fs" enabled="true" />
2: <block_device index="1" path="\DosDevices\c:\coLinux\swap_device" enabled="true" />

の2行を削除して,次のようにします.

1: <block_device index="1" alias="hdc1" path="\Device\Harddisk2\Partition1" enabled="true" /><!-- /boot -->
2: <block_device index="2" path="\Device\Harddisk2\Partition2" enabled="true" /><!-- / -->
3: <block_device index="3" alias="hdc3" path="\Device\Harddisk2\Partition3" enabled="true" /><!-- /home -->
4: <block_device index="5" alias="hdc5" path="\Device\Harddisk2\Partition4" enabled="true" /><!-- swap -->
5: <block_device index="6" alias="hdc6" path="\Device\Harddisk2\Partition5" enabled="true" /><!-- /mnt/win -->

ここで指定する index=“X” の数字は cobdX の数字と合致します.path=“\Device\HarddiskX\PartitionY” のXは,0から始まるインデックス.Yは1から始まる数値です.Linux が hdc(3つ目のHDD)にインストールされているならば,X=2です.ここで,alias=“hdcX” のある block_device タグは,/etc/fstab に記述されているため必ずタグを XML ファイル内に記述し,なおかつ正しい(/etc/fstab の記述と整合の取れた) alias 名を指定しておきます.これが間違っているとうまく起動できません.「/」については alias は不要のようです.ルートに関しては別のタグで hdc2 と関連づけます.index=“5” と index=“6” の path要素内のPartitionYの番号が一つずれているように見えますが,これで正解です.理由は,index=“4”にあたるパーティションが拡張パーティションの指定をしているだけで,Linux 側ではこれをパーティションとしてカウントしないためです.このように,拡張パーティション内の論理パーティションを cobd と結び付ける場合には,Yの番号の指定に注意する必要があります.

bootparams タグ

自分の場合,coLinux で起動させる Linux をネットワーク経由で使うため,起動時のランレベルは 3 でOKです.bootparams タグでは,ランレベルとルートデバイスの指定を行います.

1: <bootparams>root=/dev/cobd2 3</bootparams>

memory タグ

0.6.4 では,128MBを指定するとクラッシュするそうです.私は640MBと指定しています.

1: <memory size="640" />

起動方法の選択

ここでは,バッチファイルによる起動とサービスによる自動起動の2つについて記します.

バッチファイル

次の内容のバッチファイルを作成し,ダブルクリックすれば起動できます. バッチファイルは,テキストファイルを編集後,coLinux.bat などにリネームすればダブルクリックで起動できるようになる.(注意: 1: と2: は記述しません.)

1: CD C:\coLinux
2: "./colinux-daemon.exe" -c ./default.colinux.vine.xml

サービス

バッチファイルからの起動では,

  1. 起動のたびにバッチファイルを叩かないといけない
  2. coLinux の起動中,コマンドプロンプトとcoLinuxのウィンドウの2つが開いていて邪魔

というデメリットがあるので,Windows の起動時に coLinux をサービスとして起動する方法があります.

コマンドプロンプトを起動させ,次のコマンドを打ち込みます.

1: cd C:\coLinux
2: colinux-daemon.exe -c "C:\coLinux\vine-colinux.xml" --install-service

次の手順でサービス化が成功しているかを確認+サービスの自動起動を設定します.

  1. マイコンピュータを右クリックし,「管理」を選択.
  2. 「コンピュータの管理」ダイアログが立ち上がるので,その中の「サービスとアプリケーション」で「サービス」を展開.
  3. リストされている複数のサービスの中に「Cooperative Linux」があることを確認.
  4. 「Cooperative Linux」を右クリックし,「プロパティ」を選択
  5. 「Cooperative Linux のプロパティ」ダイアログが立ち上がるので,その中の「スタートアップの種類」を「手動」から「自動」に変更.

以上で,Windows の起動時に Linux も立ち上がります.サービス化する前に,とりあえず coLinux から Linux を起動できるか調べることを忘れずに.

トラブルシューティング

成功に至るまでに分かったことがらを列挙します.うまく行かないときに参考にすると問題が解決する,かも.

XMLファイルの設定

答え 疑問
alias 要素の設定が間違っているだけで起動しない?
× swap を指定する行は一番上に無いとだめ?

/etc/fstab の設定

答え 疑問
LABELの設定がいきているとうまく行かない
× vfat 領域を coLinux でマウントしてうまくいく

その他

答え 疑問
cobd のタイプミスで codb としたことに気付かないとうまくいかない
この記事の内容を成功させるのは,すこし気合いと根性が必要
せっかくセットアップできても,それで満足してしまうことがある
現段階では,試行錯誤が成功への近道だ
ネットワークの設定もして,apt-getが通るとちょっと感動する