coLinux実行環境構築(Vine Linux 3.1編)


序章

coLinuxとはWindows上で直接動作するLinuxカーネルで、実際のLinuxをほぼネーティブにWindows上で実行させるオープンソフトウェアです。
Windows上で動作するcoLinuxはLinux上で動作させるUML(User Mode Linux)やXen等に比べて導入も比較的簡単です。

coLinux導入メリットの一つは従来Windowsとのデュアルブート環境で使用していたLinuxをWindowsと同時に使用できるということです。
このためWindows上のサーバ機能とLinux上のサーバ機能を同時に実行させることもできるようになります。
従来デュアルブート環境のLinux側のちょっとした設定変更を行う場合にもWindowsを一旦終了させてLinuxを起動し直してから行うという面倒なことがありましたが、
Windowsを動作させた状態でcoLinux環境でそのLinuxを起動してLinux内の設定変更もすぐに行えるようになります。

またWindowsとLinux間のファイルのやり取りもcoLinuxのCofs機能で簡単に行えます。
Cofs機能を使用するとWindows側のNTFSのドライブ/ディレクトリをLinux側にマウントしてLinux側からWindows上のファイルを自由に読み書きできます。
と言うことは同じファイルをWindowsとLinuxの両方から更新含めた利用ができるためLinuxで作成したファイルをすぐにWindows側で利用(加工・印刷等)できることになります。
更にcoLinux上のLinuxはWindowsネットワークに自由に接続でき、インターネット接続も制限なく利用できるためLinuxパッケージのアップデートも従来通り行えます。
coLinux環境上のLinuxではLinuxならではのことを行い、Windowsアプリケーションとの同時操作を可能にしたのがこのcoLinuxです。

coLinuxと仮想マシン環境(Virtual PC等)との一番大きな違いはcoLinuxにはBIOSやビデオカード等の周辺デバイスをエミュレートする機能が省かれているということです(coLinuxコンソールはあります)。
そんなLinuxは使用できないと思う方もいるかも知れませんが、BIOSエミュレートをしないということはLinuxを高速起動できるということです。
またデスクトップ操作(GUI操作)についてはフリーのXサーバやVNCビューア等で簡単に行えます。
一般の仮想マシン環境では実環境との壁が厚く実際のLinuxパーティションにインストールされているLinuxも動作させるということは基本的にできません。

デュアルブート環境の場合、Windowsで使用している周辺デバイスをLinux側でも使用できるようにLinux用ドライバを探したり複雑な手順でそのドライバを組み込んだりしていました。
coLinux環境でのLinuxは周辺デバイスを使用できませんが周辺デバイスは通常Windows側で使用すれば実用という面からは事足りると思います。
(もちろんLinuxで周辺デバイスを動作させること自体に興味のある方は従来通りデュアルブート環境でLinuxを起動すれば問題ありません)
従来Windowsとのデュアルブート環境で使用していたLinuxをcoLinux環境で動作させるためにはそのLinux側に若干手を加える必要があります。
但し、手を加えたことで従来のLinux動作に制限が及ぶことはありません。
Linux側に手を加えるのはあくまでもcoLinux環境でそのLinuxを問題なく動作させる部分に限定されます。

繰り返し的になりますが、従来WindowsとLinuxのデュアルブート環境利用のために両方に同種のソフトウェアを導入することもありましたが、
coLinuxの導入はそのような無駄な労力・リソースの消費を回避し地球環境にも優しいPC利用形態と言えます。
また周辺デバイスを必要としないLinux用のお気に入りアプリケーション(メールソフト等)をWindowsと同時に使えて大変便利です。
WindowsとLinuxを同時に、しかも無償で使用できる環境を実現するのがcoLinuxです。
(WindowsからLinuxへのゆるやかな乗り換えを考えている方にもうってつけの解決手段と言えます)

coLinuxは仮想マシンという窮屈で硬い壁を乗り越えたソフトウェアでありcoLinux関連技術が進むとLinux上からもWindows用周辺デバイスも利用可能になるかも知れません。

前置きが長くなりましたがcoLinuxのもう少し細かい特徴と、デュアルブート環境で使用するLinuxを手間暇かけずにWindows上で動作させる具体的な手順をこれから順を追って紹介します。



第1章 coLinuxの特徴

coLinuxには以下のような特徴があります。
尚、ここではcoLinux自体が動作するWindowsをホストOS、coLinux環境で動作するLinuxをゲストOSと呼ぶことにします。

  1. coLinuxのおおまかな構成と動作概略
    coLinux自体は以下の要素から構成されています。

  2. ゲストOS動作形態の多様性

  3. ネットワーク接続形態の多様性

  4. ゲストOSからホストOSファイルシステム(NTFS)の読み書きサポート(Cofs機能)
    ネーティブ環境ではLinux側からWindows側のNTFSをマウントできますが通常は読み取り専用のアクセスとなります。
    (但し、Linux側に特別なドライバを導入すればリスクを伴う書き込みも可能)
    coLinuxではCofsと呼ばれる機能でcoLinux環境で動作するLinux側からWindowsのドライブやディレクトリをマウントして読み書きができるようになります。
    (cofsドライバはcoLinuxカーネルに含まれます)
    尚、ゲストOS側からマウント可能なWindowsのドライブやディレクトリはCofsデバイスとしてcoLinux設定ファイルで定義しておく必要があります。
    Cofs機能を使用するとSamba/FTPサーバを導入しなくてもホストOSとゲストOS間で簡単にファイル共有ができるので便利です。

  5. 動作速度
    仮想マシン環境と比べてcoLinux環境ではBIOSエミュレータやブートローダを使用しないため起動も速くI/O動作含めて高速実行が可能です(非常に快適です)。

第2章 coLinux導入手順例

2.1 概要

ここではLinuxとしてVine Linux 3.1を使用し、実パーティションにインストールされたLinuxをcoLinux上で動作させる手順(ホストOSのネットワークにブリッジ接続する手順を含む)を紹介します。
尚、coLinux環境でのネットワーク接続形態はWinPcapを利用したブリッジ接続型とします。

2.2 前提条件

(1)ホストOS:Windows XP Professional SP1
(2)coLinuxバージョン:0.6.2
(3)Linux:Vine Linux 3.1 FTP版
(4)Linuxの動作環境:Windowsとのデュアルブート環境とcoLinux環境の共用タイプ
(5)Linux用パーティション:ext3
(6)Linux用Swapパーティション:定義せず
(7)ネットワーク接続形態:WinPcap利用のブリッジ接続
(8)Linuxログイン環境
 (a)ネーティブ実行環境では実際のビデオカードにgdmログイン画面を表示しXDMCP接続も許可
 (b)coLinux環境ではXDMCP接続でのgdmログイン画面表示
(9)coLinux環境でのXウィンドウ操作ソフト;
 (a)Xサーバ:Cygwin/X
 (b)VNCビューア:UltraVNC(今回はXDMCP接続できるVNCサーバ環境も同時に構築します)
(10)Linuxでの日本語入力環境:Anthy + uim (Vine Linux 3.1付属のkinput2-cannaはcoLinux環境では標準動作しないためネーティブ環境でもAnthy + uimを使用)
(11)その他:coLinux環境でのXサーバ(Cygwin/X)利用時の文字化け防止策の組み込み

2.3 ホストOS側の準備


2.4 WindowsとLinuxのデュアルブート環境の構築とcoLinux環境の構築


2.5 coLinux設定ファイルの準備とcoLinux起動ショートカットの作成

(1)coLinuxのインストール先ディレクトリ(C:\coLinux)にあるdefault.colinux.xmlをvine31.colinux.xmlにコピーします。
(2)vine31.colinux.xmlの内容を以下のように変更します。
 (Linuxが/dev/hda2にインストールされていることを前提にしています)

<?xml version="1.0" encoding="UTF-8"?>
<colinux>
<block_device index="0" path="\Device\HarddiskVolume2" enabled="true"/>
<bootparams>ro root=/dev/cobd0</bootparams>
<image path="vmlinux"/>
<memory size="512"/>
<network index="0" name="Local Area Connection" type="briged"/> ※nameを先に指定するようにして下さい。
</colinux>

【上記の補足】
※1 HarddiskVolume2はVine Linux 3.1のインストールされたパーティション2(/dev/hda2相当)を示します。
※2 bootparamsのroオプションはinitrd中のlinuxrcシェルにおけるリマント処理をスキップしてスーパーブロックアクセスエラーを防止するためのものでありLinuxパーティションへの書き込みを抑止するものではありません。
※3 memoryはホストOS(PC)の搭載メモリを考慮して適切な値を設定します。

(3)coLinux起動ショートカットの作成
 C:\coLinux中のcolinux-daemon.exeのショートカットを作成し、そのショートカット名をvine31-colinuxというような名称にします。
 vine31-colinuxのプロパティとして以下を設定します。
 C:\coLinux\colinux-daemon.exe -t nt -c C:\coLinux\vine31.colinux.xml

(4)WindowsのhostsファイルへのゲストOS用IPアドレス登録
 C:\Windows\system32\drivers\etc\hostsにゲストOS用IPアドレスとホスト名の対応を登録します。


2.6 coLinux環境でのVine Linux 3.1の実行



第3章 Cofs機能の利用例(ゲストOSからホストOSのディレクトリ/ファイルアクセス)

(1)coLinux設定ファイルにおけるCofsアクセスディレクトリの定義例
<cofs_device index="0" type="flat" path="\DosDevices\C:\temp" enabled=true />の追加(C:\tempが実在するものと仮定します)

(2)ゲストOSからのCofsアクセス
# mkdir /mnt/win
# mount -t cofs cofs0 /mnt/win ※cofs_device index="1"指定ならcofs1を指定。
# cp /etc/vine-release /mnt/win
# ls /mnt/win
C:\tempにvine-releaseというファイルがコピーされていればOKです。


第4章 coLinux環境ネットワークのまとめ

coLinux環境でのネットワーク接続形態を下表に示します。

項目 ブリッジ接続
(WinPcapの利用)
ブリッジ接続
(TAPとネーティブWindowsブリッジ接続を利用)
NAT接続
(TAP利用)
slirp接続
(ユーザモード接続)
xml(coLinux設定ファイル)で指定するtypeの値 bridged tap tap slirp
xml(coLinux設定ファイル)で指定するnameの値 Local Area Connection
(TAPデバイスが複数ある場合はその接続名を指定)
不要
OpenVPN(coLinux版)要否
○:必要
× ×
WinPcap要否
○:必要
× × ×
ホストOSでのインターネット接続共有設定要否
○:必要

(あってもよい)
× ×
特徴 (1)ゲストOSはホストOSのネットワーク環境にそのまま接続できるためホストOSと同レベルのネットワーク接続が可能。 (1)ゲストOSはホストOSのネットワーク環境にそのまま接続できるためホストOSと同レベルのネットワーク接続が可能。 (1)ホストOS−ゲストOS双方向への接続が可能。 (1)ホストOS及びホストOSの繋がった他のPCからそのゲストOSへの接続ができない。
(2)SLIRPはPPP/SLIPのエミュレータでありネットワークでのデータ転送が極めて低速。
ゲストOS側IPアドレス ホストOSと同じネットワーク上のIPアドレス体系が使用可能 ホストOSと同じネットワーク上のIPアドレス体系が使用可能 192.168.0.x 10.0.2.16
ゲストOS側ゲートウェイアドレス ホストOSと同じネットワーク上のゲートウェイアドレス ホストOSと同じネットワーク上のゲートウェイアドレス 192.168.0.1
(固定)
10.0.2.2
(固定)
ゲストOS側DNSアドレス ホストOSのネットワーク設定でのDNSアドレス ホストOSのネットワーク設定でのDNSアドレス 192.168.0.1
または
127.0.0.1
10.0.2.3
(固定)
ゲストOSからのインターネット接続 (ping/telnet/ftp/Webアクセス等)
ゲストOSからホストOSへ接続 (ping/telnet/ftp/Webアクセス等)
ゲストOSからホストOSの繋がった他のPCへの接続(ping/telnet/ftp/Webアクセス等)
ホストOSからゲストOSへの接続(ping/telnet/ftp/Webアクセス等)
(XDMCP接続も可能)

(XDMCP接続も可能)

(XDMCP接続も可能)
×
ホストOSの繋がった他のPCからそのゲストOSへの接続(ping/telnet/ftp/Webアクセス等) × ×



第4章 こんな時は?

  1. Windows側からLinuxパーティションを読み書きできるソフトを常時使用していますがアンインストールすべきですか?
    Windows側からLinuxパーティションをマウントしたままではcoLinux起動に失敗します。
    これはWindowsのI/OとcoLinuxのI/Oの整合性を図るためのようです。
    アンインストールの必要はありませんが常時マウント型の利用はやめて下さい。
    Windows側からLinuxパーティションのファイル操作を行うにはLinux側にSambaを導入し、思い切ってpublicセクションで「path=/」を指定してWrite可能に設定して下さい。
    更にcoLinux環境を自動起動するようにしておけばいつでもLinux実パーティションのファイルをアクセスできます。
    coLinuxの起動は高速ですし、テキストログイン状態にしておけば邪魔にもなりません。

  2. Linux側のcoLinux環境設定を変更してcoLinux環境でLinuxをブートできなくなりました。
    デュアルブート環境からLinuxをネーティブ起動してcoLinux環境設定を変更して下さい。

  3. coLinux環境でLinuxをブートできますがネーティブ環境での挙動がおかしくなりました。
    当然のことながらcoLinux環境でLinuxをブートしてネーティブ環境での動作設定を変更して下さい。

  4. Linuxの設定を間違えてネーティブ環境・coLinux環境共にLinuxをブートできなくなりました。
    Windows側からLinuxパーティションを読み書きできるソフトを使用してLinux設定ファイルを変更して下さい。

  5. ネーティブ環境にcoLinux環境を組み込むのは怖いのでディスクイメージでcoLinuxを利用したい。
    まず公開されているDebian GNU/Linux 3.1インストール済みcoLinux環境用ディスクイメージをダウンロードします。
    そのcoLinux設定ファイル(XML)にLinux実パーティションを定義してDebianを起動しddコマンドでその実パーティションのディスクイメージを作成して下さい。
    そのディスクイメージをCofsマウントしたところに格納すれば既にWindows側に取り込めた状態になっています。

  6. coLinux環境のLinuxから別PCにあるWindowsディレクトリをアクセスしたい。
    LinuxにSambaクライアントを導入して下さい。
    Cofs機能が共有ドライブを正式サポートしているかどうかは未確認です。

  7. ディスク容量に余裕が無いためLinuxのディスクイメージを別マシンにおいて利用したい。
    正式サポート状況は未確認です。試してみて下さい。

  8. 公開されているDebianのディスクイメージの容量が小さくてパンク寸前です。
    容量の大きな空のディスクイメージを作成してcoLinux設定ファイルに定義し、Debian側からその大きなディスクイメージにファイルシステムを作成してマウント後に自分自身を注意深くコピーして下さい(マウントしたものまでコピーしないように)。
    coLinuxではブートローダは使用しないためディスクイメージの内容入れ替えだけで済みます。
    仮想マシン環境なら別のディスクイメージを用意してコピーコマンダでext3含めたディスクコピーができますがcoLinuxにはBIOSエミュレータが無いためそのようなユーティリティソフトの適用は現状は困難です。

  9. 仮想マシン上でcoLinuxが動きません。
    特権モードで一部の処理が実行されるcoLinuxはVirtual PC等の仮想マシンでの動作保障はしていないようです。

  10. ノートPCでLANは無線LANアダプタを使用していますがcoLinux環境でネットワークは利用できますか?
    通常のNIC(ネットワークインタフェースカード)利用と同じ手順で無線LANアダプタでもcoLinux環境でネットワークを組めます。

  11. オフィススペースが狭くファイルサーバとしてcoLinux環境を利用したいのですが...。
    WindowsUpdateの度にリブートが必要となるWindows上でのcoLinux常時使用(業務使用)はお奨めできません。
    手狭ならノートPCにLinuxだけをネーティブインストールし外付けディスク運用で回避して下さい。

  12. ホストOSからゲストOSへのhttp/telnet/ftp接続ができません。
    WinPcapを使用していてそのような現象になるのであればホストOS側のNICのハードウェアチェックサムが有効になっていることに起因している可能性があります。
    それらしきオプションをすべて無効にしてみて下さい。

  13. お気に入りのSylpheedメールソフトがVNC接続で文字化けして使用できません。
    Cygwin/X起動パラメータでフォントパス(-fp)を指定して当面回避して下さい。

  14. coLinux環境に直接Linuxをインストールするフリーソフトは使っても大丈夫ですか?
    そのようなソフトを開発する人には頭の下がる思いが致します。
    インストール時間の節約という観点から見ると使って損は無いと思いますがインストールオプションを指定できないソフトであればどのようなインストールがされるかを事前に確認してから使用するのがいいと思います。

  15. Windows上でLinuxを動作させるソフトが市販のものを含めてたくさんありますがどれがいいのでしょうか?
    どれもこれも一長一短があるようです。
    個人的見解ですがWindowsのクラッシュを絶対避けたいのであれば一部の処理を特権モードで動作させるcoLinuxよりは仮想マシンソフト利用の方が多少安全なのではないかと思います。
    しかし現状デュアルブート環境で使用しているLinuxをWindowsを動かしながら使用したいのであれば現状はcoLinux利用が一つの解だと思います。
    フリーのもので媒体を動的にひっかえとっかえしたいのであればQEMUでしょうか?
    動作速度を気にしないのであればBochsという手もあります。
    尚、QEMUやBochsにおけるcoLinuxに対する大きなアドバンテージの一つはx86上のQEMUやBochsでは64-bitのゲストOSを実行できることです。
    (VMware 5や5.5でもx86上のVMwareでは64-bitのゲストOSを実行できません:64-bitのゲストOSを実行できるのはホストOS自体が64-bitの場合に限定されます)

  16. Linux実パーティションを使用するのとディスクイメージを使用するとどちらがいいですか?
    これも一長一短があります。
    Linuxの中核部分の設定等を頻繁に変更したりするのであればバックアップの簡単なディスクイメージ利用が運用的に楽です。

  17. Virtual PCでのLinuxパーティションをcoLinuxに移行させるにはどうすればよいですか?
    Virtual PCの仮想ディスクはcoLinuxのディスクイメージとは異なります。
    Virtual PCでのLinuxが仮想ディスクの/dev/hda1にインストールされている場合は次のようにします。
    (1)そのLinuxがインストールされている仮想ディスクファイル(例:vinelinux.vhd)のコピーを例えばvinelinux2.vhdという名称で作成します。
    (2)仮想マシンのハードディスク設定を次のようにします。
    ハードディスク1:vinelinux.vhd
    ハードディスク2:vinelinux2.vhd
    (3)Virtual PCのvinelinux.vhdからブートしてrootで以下のコマンドを実行します。
    # cd
    # dd if=/dev/hdb1 | bzip2 >covine31_root.fs.bz2
    (4)FTP/Samba等でcovine31_root.fs.bz2をホストOSのWindows側に転送して元のcovine31_root.fs.bz2を削除します。
     その後仮想マシンのハードディスク設定を元に戻してvinelinux2.vhdファイル自体を削除します。
    (5)Windows側でcovine31_root.fs.bz2を解凍してcovine31_root.fsを得ます。
    (6)以上によってcovine31_root.fsをcoLinux用ディスクイメージとして利用できるようになります。
    ※ 元のLinux実パーティションがボリュームのどこにあっても同じ要領でcoLinux用ディスクイメージを作成してcoLinuxで利用できます。

  18. coLinuxがWindowsのファイルを破壊する危険はありますか?
    判断できません。
    ファイルを定期的に削除するcron設定を行う際に間違ってCofsマウントしているファイルを削除しないように気を付けて下さい。

  19. OpenVPNやWinPcapを導入できない環境においてcoLinuxを試してみたいのですが...。
    ネットワークはslirp接続をお使い下さい。

  20. Linuxのブートの仕組みを勉強したいのですが...。
    BIOSやブートローダ含めたブートの仕組みはcoLinuxでは学習できません。
    BIOSやブートローダ以外の部分ではいろいろなところにechoコマンドを入れて流れを目で確認することは可能です(ディスクイメージバックアップを取ることは忘れずに)。

  21. coLinuxはどのようなビジネシーンで力を発揮しますか?
    いろいろ考えられますが今後設立されるLinuxアプリケーション開発ベンチャ企業では歓迎されると思います(開発栄経費の面から)。
    現状coLinuxあるところにWindowsありきですからマイクロソフトのWindowsビジネスも名長続きしますね。
    でもWindowsからLinuxへの移行を後押しする側面も持っているのも事実かと思います。




付録 Vine Linux 3.1 実動作画面