SKAS(Separate Kernel Address Space)パッチについて
たとえ初期のバージョンのUMLでも、Tracing Thread(TT)モードと呼ばれるものを使えばホストカーネルに特別なサポートがなくてもゲストカーネルを実行することができた。ただし、TTモードにはUMLのセキュリティとパフォーマンスに悪影響を与えるという欠点がある。こうした問題を解決するためにUMLの開発者Jeff Dike氏によって実装されたのが、SKAS(Separate Kernel Address Space)モードと呼ばれる優先モード(現在はSKAS3モードとして知られる)でUMLを実行できるようにする、ホストカーネルのパッチである。
しばらくの間はTTモードとSKAS3モードしか選択肢がなかったため、より優れているSKAS3モードのほうが広く受け入れられた。そのため、UMLに真剣に取り組むつもりがあれば、現在はSKAS3パッチとして知られているパッチを使って自分の手でホストカーネルを構築するのが最善だっただろう。TTおよびSKAS3モードについては、UML Webサイトのskasモードのページにもっと詳しい説明がある。
最近になってDike氏が開発したUMLゲストカーネル向けのパッチはSKAS0と呼ばれ、これを使えばUMLゲストカーネルはTTモードよりも優れたセキュリティとパフォーマンスを発揮でき、ホストカーネルにパッチをあてる必要もない。SKAS0はバージョン2.6.13以降のLinuxカーネルでサポートされているため、最近のカーネルを使っていれば特に何もしなくてもSKAS0モードでUMLゲストカーネルを実行できるという恩恵を受けられる。UMLゲストカーネルが本当にSKAS0モードで実行されているかどうかは、UMLゲストカーネルのブート時に出力される情報の最初のほうに次のような表示があるかどうかでわかる。
Checking for the skas3 patch in the host: - /proc/mm...not found - PTRACE_FAULTINFO...not found - PTRACE_LDT...not found UML running in SKAS0 mode
この表示は、SKAS3モードに必要な機能がホストカーネル内に見つからなかったためにUMLがSKAS0モードの使用に切り換えたことを示している。ただし、この動作はそれほど都合の悪いものではない。パフォーマンスとセキュリティの点でSKAS3モードには及ばないとはいえ、SKAS0モードはTTモードより優れているからだ。したがって、UMLを使って多くの処理を行うつもりがない限り、SKAS3をサポートするカーネルをわざわざ構築する必要はないだろう。Dike氏はSKAS4パッチが登場する可能性にも言及しているので、この記事が読まれるタイミングによってはすでにSKAS4パッチがリリースされているかもしれない。
UMLは急速に発展を遂げつつあるテクノロジなので、残念ながらWebサイト上のドキュメントのなかには最新の情報が反映されていないものもある。具体的な例を挙げると、この記事の執筆時点ではSKASモードのページにSKAS0モードの説明がなかった。この記事が読まれている頃にはドキュメントが更新されていることを願おう。
なお、Dike氏の著書『 User Mode Linux 』とLinux Kernel Mailing List(LKML)宛てのメールにはSKAS0モードの説明がある。
自作のルートファイルシステムを作成する
UMLを使い始めるにあたって一番簡単なのは、http://uml.nagafix.co.uk/から手に入る素晴しいファイルシステムなど、事前に構築されたルートファイルシステムをダウンロードしてくることだ。だが最終的には、自前でルートファイルシステムを作成したくなるかもしれない。
そんな人のためにUML Webサイトの「Creating your own filesystems(自作のファイルシステムを作成する)」のページには、mkrootfs、UML Builder、gBootRoot、rootstrapなど、ルートファイルシステムの構築に役立つ多数のツールが紹介されている。
UMLゲストのネットワークを構築する
UMLゲストのためのネットワーク構築が必要になることもあるだろう。その方法はいくつかあり、詳細はネットワークの設定によってかなり違ってくるが、最も容易なのは、ホストのTUN/TAPインタフェースに接続された仮想的なeth0インタフェースをゲスト側に作成することだ。
ホスト側のLinuxカーネルがすでにTUN/TAPをサポートしていれば(あるいはmodprobe tunを実行してロードされるtun.koカーネルモジュールが存在すれば)、UMLのtunctlというユーティリティを使ってホスト上にTAPインタフェースを作成し、利用しているネットワークのIPアドレスをifconfigによって設定できる。
ゲスト側の設定を行うには、eth0=tuntap,,,<ホスト側TAPインタフェースのIPアドレス>という指定をUMLのコマンドラインに追加する。これにより、UMLゲストにeth0インタフェースが作成される。また、uml_mconsoleというユーティリティを使ってeh0インタフェースのホットプラグを行うこともできる。
UMLゲストのeth0インタフェースにはIPアドレスの割り当て(またはDHCP経由での取得)が必要なので、たいていの場合はrouteコマンドを使ってこの新しいインタフェースを通るデフォルト経路を設定することになるだろう。またネットワークの設定によっては、ホスト側のIPフォワーディングの有効化やiptablesによるフォワーディングルールの設定が必要になる場合がある。
UMLゲスト上でXプログラムを実行する
UMLゲスト上でXのプログラムは実行できないのかという質問がそろそろ出て来そうだが、その答えはイエスだ。ネットワークの設定が終わったら、UMLゲストのDISPLAY環境変数の設定により、Xのプログラムをゲスト側で実行してホスト側のXサーバ上に表示させることができる。これで満足できれば結構だが、ゲスト上でXのプログラムをいくつか実行するだけでは飽き足らず、GNOMEやKDEのような完全なデスクトップ環境を使いたいという人もいるだろう。実は、それも可能だ。UMLゲスト上でXnestを実行すれば、ゲスト側の表示内容をホストのXサーバに表示することができる。Xnestはホスト側Xサーバのクライアントとして動作すると同時に、ゲスト側仮想マシンのプログラムにとってはXサーバとして動作する。したがって次のようにすれば、ゲスト側でGNOMEデスクトップを実行し、ホスト側のウィンドウでそのデスクトップを見ることが可能だ。
%guest Xnest :1 &
%guest gnome-session --display=:1 &
まとめ
UMLは、完全に独立した仮想マシンの作成を可能にする。つまり、各仮想マシンを互いに分離された形で実行し、それぞれに個別のLinuxカーネルを持たせることができるのだ。サーバプロセスどうしを相互にかつ物理マシンからも分離し、セキュリティ性を高めるためにUMLを利用してもよい。あるいは、他の開発またはプロダクション環境の模倣や、さらには仮想マシンに対するrootのアクセス権をユーザに与えることさえできる。また、システムを破壊してしまうのではないかという心配なしに新しいソフトウェアを試すことも可能だ。
NewsForge.com 原文