coLinux による仮想化

Cooperative Linux をインストール、構成、そして使用する

最近の仮想化には、VmWare、Xen、そして KVM (Kernel-based Virtual Machine) が盛んに使われていますが、Linux®と Microsoft® Windows® を連携させて実行できることをご存知でしたか? この記事では CooperativeLinux (coLinux) に焦点を当て、仮想化の簡単な紹介から始めて、coLinux による仮想化の手法、そして Windows 上でcoLinux を起動して動作させる方法を説明していきます。

M. Tim Jones, Consultant Engineer, Emulex

M. Tim JonesM. Tim Jones は組み込みソフトウェアのエンジニアであり、『GNU/Linux Application Programming』や『AI Application Programming』(現在、第 2 版)、それに『BSD Sockets Programming from a Multilanguage Perspective』などの著者でもあります。技術的な経歴は静止軌道衛星用のカーネル開発から、組み込みシステム・アーキテクチャーやネットワーク・プロトコル開発まで、広範にわたっています。また、コロラド州ロングモン所在のEmulex Corp. の顧問エンジニアでもあります。



2007年 3月 31日

GNU/Linux と Microsoft Windows について考えるとき、連携という言葉はもっとも頭に浮かびそうにありませんが、まさにこの2 つの連携を実現するのが coLinux カーネルです。確信できないという方は、まず「coLinux の利点」を読んでください。

Linux オペレーティング・システムの移植版である coLinux は、Microsoft オペレーティング・システムで単一のプロセスとして動作します。この2 つのオペレーティング・システムは図 1 に示すように、中央演算処理装置 (CPU) を共有することによって連携します。

図 1. coLinux での Microsoft Windows と Linux の連携
図 1. coLinux での Microsoft Windows と Linux の連携

ネットワーキング・インターフェースなどの物理リソースも、カーネル・ドライバーを使用して共有されます。これについては後で詳しく説明するので、まずは仮想化の意味について説明することにしましょう。

仮想化

仮想化の範囲

この記事ではプラットフォームを仮想化する場合の連携ソリューションに焦点を当てますが、仮想化という言葉は他の手法にも適用されます。例えば、以下のような手法です。

  • ストレージでは、多数のディスクを仮想化して、必要に応じて割り振ることが可能なストレージのプールであるかのように見せることができます。
  • 通常はゾーニングと呼ばれていますが、ネットワークの仮想化も可能です。
  • 仮想化のよりシンプルな形である OS の仮想化は、複数のサーバーが 1 つのオペレーティング・システム上で動作しているように仮想化することです。

仮想化とは使い古された言葉ですが、この記事ではプラットフォームの変形のことを指します。プラットフォーム (またはハードウェア) の仮想化では、ハードウェアを1 つの物理プラットフォームから複数の論理プラットフォームの集合に抽象化し、そこでオペレーティング・システムを実行できるようにします。わかりやすく言うと、1つのハードウェア・プラットフォームで (同種または異種混同を問わず) 複数のオペレーティング・システムを実行するということです。

仮想化を実現するシステムの要素は、一般的に仮想マシン・モニターあるいはハイパーバイザーとして知られています。それぞれのオペレーティング・システムが固有の仮想マシンを使い、これらの仮想マシンがこのハイパーバイザーと連携して物理ハードウェアへのアクセスの調停を行います(図 2 を参照)。

図 2. ハイパーバイザーによる物理ハードウェアへのアクセスの調停
図 2. ハイパーバイザーによる物理ハードウェアへのアクセスの調停

オペレーティング・システムと同様で、仮想化で使うことができる方法も多種多様です。仮想化についての詳細は、「参考文献」セクションを参照してください。


coLinux

coLinux は標準 Linux カーネルの移植版です。言い換えると、coLinux は別のオペレーティング・システムと連携して動作するように修正が加えられたLinux カーネルということです。ホスト・オペレーティング・システム (Windows または Linux) はその物理リソースの制御をそのまま維持する一方、ゲスト・オペレーティング・システム(coLinux) には仮想化されたハードウェアのアブストラクションが提供されます。ホスト・オペレーティング・システムは特権リング (リング0) 内でドライバーを実行する手段を提供し、メモリーの割り当て手段をエクスポートします (図 3 を参照)。

図 3. ホスト・オペレーティング・システムのプロセスとして動作する coLinux
図 3. ホスト・オペレーティング・システムのプロセスとして動作する coLinux

coLinux のルート・ファイル・システムは、ホスト・オペレーティング・システムに含まれる通常のファイルです。Windows にとってこれは通常のファイルの1 つでしかありませんが、coLinux にとってはこのファイルが読み取り/書き込み可能な ext3 ファイル・システムとなります。

Linux カーネルに必要なその他の機能 (ネットワーキングやビデオ・アクセスなど) は外部で代行されます。coLinux にネットワーキングへのアクセスを可能にするのは TUN/TAP ドライバーです (以下の「ネットワーキング」で説明)。要するに、このドライバーがイーサネット・デバイスにユーザー空間へのアクセスを提供し、パケットを送受信できるようにするということです。ディスプレイへのアクセスも同じく代行されます。ご存知のように、XWindow System はビデオ出力をホスト間で送信できるようにするためのプロトコルです。したがって、ホスト・オペレーティング・システムでX Window System サーバーを使用すれば、ビデオ出力を X サーバーにリダイレクトできます。

ここからは、coLinux のインストール、そしてネットワーキングとビデオ・ディスプレイの両方に対応した構成に話題を移します。


coLinux のインストール

coLinux のインストールは驚くほど簡単です。目的によって必要なステップはいくつかありますが、いずれもわかりやすいステップで、私が coLinuxを Windows XP にインストールしたときは何の問題もありませんでした。このセクションではまず、coLinux をインストールしてネットワーキングなどのサービスを有効にする方法を説明します。

最初のステップは、coLinux ディストリビューションのダウンロードです。まず、http://www.colinux.org にアクセスして、左のサイドバーにある Downloads を選択します。ブラウザーに SourceForge が表示されない場合は、SourceForge への直接リンクを選択してください。ページ中央のあたりに、coLinux-stableパッケージがあるので、この coLinux 実行可能ファイルをダウンロードします (この記事を作成した時点の最新バージョンは coLinux-0.6.4.exeです)。coLinux の 0.6.4 リリースは 2.6.11 Linux カーネルです。ダウンロードが完了したら、ファイルをダブルクリックしてインストールします。

通常のライセンス許諾の後、インストールするコンポーネントを選択するよう要求されます。ここではルート・ファイル・システム・イメージのダウンロードを含め、何も変更しないでください(すべてが選択されている状態にします)。coLinux のインストール先フォルダーは、以降の作業を楽にするため、c:\colinux\ に変更します。colinuxは、構成ファイルの観点からすると標準インストール・サブディレクトリーだからです。

インストール・プログラムがルート・ファイル・システム・イメージを選択するよう求めてきたら、Debian ディストリビューションを選択します。このディストリビューションはもっとも小さいサイズで、解凍しても1GB にしかならないからです。Install を選択すると、インストールとルート・ファイル・システムのダウンロードが実行されます。

インストールが完了しても、そこで終わったわけではありません。次のステップとして、フォルダーを開いてインストール・サブディレクトリーに進み、ルート・ファイル・システムを解凍してください。

coLinux README ファイルには、他のインストール・オプションに関する追加情報が満載されています。このファイルはインストール・サブディレクトリー(c:\colinux) にあります。ここに .bz2で終わる奇妙な名前のファイルがあるので、ファイル名を root_fs に変更します (これは、構成のデフォルト・ルート・ファイル・システムのファイルです)。

この時点で、基本的に coLinux のインストールは完了したことになります。coLinux デーモンを起動して Windows XP と連動させるコマンドは、以下のとおりです(Command Prompt ウィンドウで呼び出します)。

$ colinux-daemon.exe -c default.colinux.xml

colinux-daemon を呼び出すと、ブート・ウィンドウが表示されます (図 4 を参照)。このウィンドウには従来の Linux ブートの場合と同じブート情報が示されますが、coLinuxの場合、ブートはあっという間に完了します。

図 4. coLinux のブート・ウィンドウ
図 4. coLinux のブート・ウィンドウ

colinux-daemon に接続するコンソール・ウィンドウも現れます (図 5 を参照)。このウィンドウから coLinux にログインしてシェルと対話することができます。デフォルトのユーザー名とパスワードはroot/root です。

図 5. coLinux の仮想コンソール (シェル)
図 5. coLinux の仮想コンソール (シェル)

図 5 を見ると、coLinux コンソールには 2 つのセクションがあることがわかります。一方は従来のコンソール、もう一方はモニターに関する情報を示す仮想コンソールです。

ネットワーキング

coLinux に対するネットワーキング・サポートは、インストールの完了時に Linux の観点から行われます。TAP ドライバーはインストール中にロードされます。TAPドライバーは、ホスト・オペレーティング・システムで管理されるイーサネット・デバイスへのユーザー空間タップです。この TAP ドライバーを使用することで、ゲスト・オペレーティング・システムはイーサネット・フレームをそのまま(ユーザー空間に拡張される) 仮想イーサネット・デバイスに書き込んだり、あるいはそこから読み取ることができます。すると、ユーザー空間内の仮想イーサネット・デバイスが、ホスト・オペレーティング・システムに含まれる実際のイーサネット・デバイスとの間でイーサネット・フレームの受け渡しを行います。ここで注意しなければならないのは、TAPドライバーはイーサネット・フレームの受け渡しを行いますが、インターネット・プロトコル (IP) の場合には TUN ドライバーが使用されるという点です。

TAP ドライバーを機能させるには、ホスト・オペレーティング・システムで使用可能なイーサネット・デバイスが共有されるように設定する必要があります。WindowsXP 内で共有を有効に設定するには、「コントロール パネル」から「ネットワーク接続」パネルを開き、アクティブな「ローカル エリア接続」を選択して「プロパティ」ダイアログ・ボックスを開きます。このダイアログ・ボックスで「詳細設定」タブを選択し、「ネットワークのほかのユーザーに、このコンピューターのインターネット接続をとおして接続を許可する」チェック・ボックスを選択します(図 6 を参照)。

図 6. ネットワーク・デバイスを共有するためのローカル・エリア接続のプロパティー
図 6. ネットワーク・デバイスを共有するためのローカル・エリア接続のプロパティー

ネットワークの共有を設定した後に coLinux 起動すると、ネットワークを通常と同じように使用できるようになります。これは、図 7 の pingコマンドを見るとわかります。

図 7. TAP ドライバーによる coLinux でのトランスペアレントな共有ネットワーク・デバイスの使用
図 7. TAP ドライバーによる coLinux でのトランスペアレントな共有ネットワーク・デバイスの使用

coLinux ではほとんど手間要らずの構成作業で、ネットワーキングをすぐに使える状態にできます。TUN/TAP によるネットワーキングについての詳細は、「参考文献」セクションを参照してください。

X Window System

コンソール・ウィンドウでも十分間に合いますが、グラフィカル・ウィンドウ・マネージャーがあれば理想的です。coLinux では、Xming などのオープン・ソースのX サーバーを使用して xterm ウィンドウを作成したり、あるいは他のグラフィカル・アプリケーションを使用することができます。VNC (VirtualNetwork Computing) をはじめ、文書化されているアプリケーションは数多くありますが、この記事では Xming を使用する方法を紹介します。

最初のステップとして、SourceForge から Xming をダウンロードしてください。インストールが終わった後に必要なのは、インストール・サブディレクトリーにある X0.hosts というファイルを更新することです。X0.hostsは、X サーバーへのアクセスが許可されるリモート・ホストを含めるファイルなので、このファイルに coLinux プロセスをホストするマシンのIP アドレスを追加します。その上で Xming X サーバーと coLinux を起動し、以下のコマンドを coLinux で実行します。

colinux:~# export DISPLAY=192.168.1.3:0.0
colinux:~# xterm &

このコマンドで指定する IP アドレスは、coLinux ホストの IP アドレスであることに注意してください。xterm コマンドを実行すると、新規xterm ウィンドウが表示されます (図 8 を参照)。

図 8. Xming で作成した xterm ウィンドウ
図 8. Xming で作成した xterm ウィンドウ

coLinux の拡張

どのルート・ファイル・システムをダウンロードするにせよ、必要なあらゆるものが含まれているわけではありません。とは言っても、ルート・ファイル・システムは簡単に拡張できます。例えばDebian GNU/Linux の場合、新しいパッケージのインストールや既存のパッケージの更新を行うには、APT (Advanced PackagingTool) というパッケージ管理システムを使用します。最初のステップは、インストール済みパッケージに関する管理情報 (新しく使用可能になったパッケージや、その入手先など)を維持する APT メタデータを更新することです。

$ apt-get update

これで、必要なパッケージを追加してルート・ファイル・システムを更新できます。例えばルート・ファイル・システムにあの優れた Ruby 言語を追加するには、以下のコマンドを呼び出します。

$ apt-get install ruby

このように、既存のルート・ファイル・システムを使用して必要に応じた調整を行うこともできれば、必要なものが coLinux に欠けている場合は、ソースから再ビルドすることもできます。


coLinux の利点

coLinux は、Linux を使用していろいろと試してみるには最適な手段です。Cygwin と同様、coLinux では Windowsオペレーティング・システム上で Linux アプリケーションを開発して実行できます。また、apt-get を使ってアプリケーションをインストール、アップグレード、あるいは削除して、Linux オペレーティング・システムを保守することもできます。

一方 Cygwin と違う点は、coLinux では Linux アプリケーションを再ビルドしなくても実行できるということです。この点において、coLinuxは Windows オペレーティング・システムで動作 (連携) する本物の Linux オペレーティング・システムと言えます。

coLinux でもう 1 つ興味深い利点は、その移植性です。coLinux ディストリビューションは、どの Windows ホストでも一連のカスタム・アプリケーションと共存させることができます(ルート・ファイル・システム内で)。このルート・ファイル・システムは別のホストに移して再起動できるため、標準 USB (Universal SerialBus) メモリー・スティックに圧縮ルート・ファイル・システムを納めたモバイル開発プラットフォームが実現します。

最後に、coLinux は基本的にネイティブ・ハードウェアで動作するため、処理速度も高速です。


coLinux での問題

coLinux の欠点としては第一に、ホスト・カーネルではゲスト・オペレーティング・システムが特権モードで動作するため、coLinux にはマシン全体をクラッシュさせるだけの力があるということです。また、通常の操作(ウィンドウおよびネットワーキング・サポート) については外部ソフトウェアに依存するという点も挙げられます。このような欠点を抜かせば、coLinuxはインストールも構成も極めて簡単です。私は coLinux を長時間使っていますが、クラッシュしたことはありません。


まとめ

世間にはさまざまな仮想化方式が出回っていますが、coLinux はその手法と機能において今までにない方式です。coLinux は単独で Windows上に Linux を仮想化します。さらにオープン・ソースのツールを追加すれば、ネットワーキングとグラフィカル・ユーザー・インターフェースを備えた本格的なLinux 開発システムをサポートできます。coLinux は完璧ではありませんが、標準 Windows デスクトップ・コンピューターで Linuxを使用するには素晴しい手段です。

参考文献

学ぶために

  • coLinux の Web サイトで提供している現行バージョンのcoLinuxオープン・ソース・コードを使って、Linux ディストリビューションを Windows と連携させて実行できます。
  • coLinux wikiでは、coLinux の使用手順やその他の資料を紹介しています。
  • Dan Aloni のCooperative Linux (PDF 版) では、coLinux 実装の下位レベルの技術詳細を説明しています。
  • 「仮想 Linux」(developerWorks、2006年12月) では、仮想化の歴史、そして Linux に適用できるさまざまな仮想化の手段を紹介しています。
  • Amit Singh による「An Introduction to Virtualization」は、仮想化とその実装のバリエーションをわかりやすく説明した入門書です。この記事では、Linux 以外のオペレーティング・システムの仮想化 (Windows、Solaris)、そしてその他の仮想化手段(ネットワーク・スタックの仮想化など) についても説明しています。
  • TUN および TAP は、仮想ネットワークのカーネル・ドライバーです。
  • Xenは、XenSource で開発されたオープン・ソースの仮想マシン・モニター (ハイパーバイザー) です。Xen では、一般的にゲスト・オペレーティング・システムの修正が必要となるパラバーチャリゼーションを使用しますが、仮想化CPU を利用して、ゲスト・オペレーティング・システムを修正せずにサポートすることもできます。
  • APTは Debian Linux ディストリビューションによって提供されるパッケージ管理システムで、システムを最新の状態に保つ優れたユーティリティーです。
  • developerWorks Linux ゾーンには、Linux 開発者用の資料が豊富に揃っています。
  • developerWorks technical events and Webcastsで最新情報を入手してください。

製品や技術を入手するために

  • SourceForge で最新のソースおよびバイナリー・パッケージを入手してください。
  • SourceForgeで最新のTUN/TAP ドライバーを入手してください。
  • KVMKVM は Linux の仮想化に新たに登場した技術です。このカーネル・モジュール・ソリューションは、Linux カーネルに対する変更を最小限に抑え、カーネルをモジュールとしてロードします。KVMはゲスト・オペレーティング・システムを仮想化しますが、入出力には QEMUが必要です。KVM の 2.6.20 カーネルへの導入について読んでください。
  • Cygwin も同じく、Windows で動作する興味深い Linux エミュレーターです。coLinux では Cygwin が提供する X サーバー機能を使用できます。
  • Xming は、Microsoft Windows 環境に対応したオープン・ソースの X Window System です。
  • developerWorks から直接ダウンロードできる IBM トライアル・ソフトウェアを使用して、Linux で次の開発プロジェクトを構築してください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux, Open source
ArticleID=245810
ArticleTitle=coLinux による仮想化
publish-date=03312007