仮想OS「User Mode Linux」活用法
 〜 技術解説からカーネルカスタマイズまで 〜

宮本 久仁男<miyamotokn@nttdata.co.jp>
NTTデータ システム開発事業本部
基盤システム事業部 第一ソリューション技術担当

2002/5/25

UMLで使用可能なツール

 以下に紹介するツールは、RPMパッケージでUMLをインストールすると、一緒にインストールされます。ツールのみのソースコードは、uml_utilities_*という名前が付いています。このソースコードも、やはりダウンロードページから取得可能です。

uml_mconsole

 ネットワークと通常提供されるコンソール以外のGuest OSの制御は、uml_mconsoleというプログラムで行います。

 mconsoleは、UMLがブート時に作成する「Unix Domain Socket」(以下UDS)ファイルを経由して実施します。UDSファイル名は、ブート時のメッセージに表示されます。例えば、

mconsole (version 1) initialized on /home/kmiya/.uml/4QV2hZ/mconsole

のように表示されます。

# uml_mconsole [mconsoleのソケット名]

として、指定したUDSファイル名(省略不可)のソケットと接続し、ワークステーションやサーバのROMモニタが提供するような機能を実行可能です。ただし、ダイレクトに「/home」で始まる名前をコマンドのパラメータとして与えても失敗します。ここでは、

# uml_mconsole 4QV2hZ

のように、mconsoleファイルが作成されるディレクトリ名を指定してください。

 使用可能なコマンドは以下のとおりです。

version カーネルバージョンを表示する
help ヘルプメッセージを表示する
halt UMLを停止(HALT)する
reboot UMLをリブートする
config <dev>=<config> 新しいデバイスをUMLに追加する。書式は起動コマンドラインと同じ
remove <dev> 指定したデバイスを削除する
sysrq <letter> [SysRQ]キー+特定のキーを入力したのと同じ挙動をする(
cad [Ctrl]+[Alt]+[Delete]キーと同じ処理を行う
quit mconsoleを終了する
switch <socket-name> socket-nameで指定した名前のソケットにコンソールを切り替える

注:詳しい挙動についてはhttp://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/sysrq.txt.htmlなどを参照してください。なお、UMLカーネルを作成するときに「Magic SysRq key (CONFIG_MAGIC_SYSRQ)」を有効にしないと機能しません。

uml_switch

 このプログラムは「スイッチデーモン」と呼ばれ、Guest OSに対して仮想的なネットワークスイッチを提供します()。このプログラムを使うと、UMLを起動する際にHost OSの内部に閉じたネットワークを構築できます。また、複数のネットワークを作成するのも容易です。

注:デーモンという割には、起動してもなぜかバックグラウンドに移行したりしないのですが……。

 コマンドラインとしては、

# uml_switch

と起動することで/tmp/uml.ctlというソケットを作成します。UMLは、このソケットファイルを経由してパケットをやりとりすることが可能です。このようにして作成した仮想的なスイッチに対して、

# /usr/bin/linux ubd0=./difffs,/home/hoge/rootfs eth0=daemon

とすることでGuest OSが接続されます。

 複数の仮想ネットワークを作り出したいときには、

# uml_switch -unix /tmp/net1.ctl /tmp/net1.dat
# uml_switch -unix /tmp/net2.ctl /tmp/net2.dat

とすることで実現できます()。

注:上記のコマンドは次々と実行できないので、X Window Systemなり仮想コンソールなりで分けて実行する必要があります。

 また、

# uml_switch -unix /tmp/net1.ctl /tmp/net1.dat

として作り出した仮想的なネットワークスイッチに対してGuest OS環境を接続したい場合は、下記のコマンドラインを実行します。

# /usr/bin/linux ubd0=./difffs,/home/hoge/rootfs eth0=daemon,,unix,/tmp/net1.ctl,/tmp/net1.dat

 いずれの形にしても、仮想的なスイッチに対して接続されたGuest OSからスイッチデーモンに対してパケットが送出されたり、スイッチデーモンを経由して別のGuest OSとパケットがやりとりされたりすると、以下のようなメッセージがスイッチデーモンから出力されます。

$ uml_switch -unix /tmp/test /tmp/test2
uml_switch attached to unix socket '/tmp/test'
New connection
Unknown connection for packet, shouldnt happen.
 Addr: fe:fd:00:00:00:00  New port 5
New connection
 Addr: fe:fd:c0:a8:00:0a  New port 6

3/5

Index
仮想OS「User Mode Linux」活用法
 〜 技術解説からカーネルカスタマイズまで 〜
  Page 1
User Mode Linuxとは?
 UMLの機能概要
 UMLのプロセス/メモリ管理
  Page 2
UMLを動かしてみよう
 RPMによるインストール
 動かしてみる
 動かした後のHost OSとGuest OS
 Host Filesystemの利用
  Page 3
UMLで使用可能なツール
 uml_mconsole
 uml_switch
  Page 4
非標準カーネルモジュール/パッチの組み込み
 FreeS/WANの組み込みと動作
 USAGI UMLカーネルの構築
  Page 5
UMLの展望と問題点
参考資料

Linux Square全記事インデックス


 Linux Squareフォーラム Linuxカーネル関連記事
連載:Linux Kernel Watch(連載中)
Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします
連載:Linuxファイルシステム技術解説
ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する
特集:全貌を現したLinuxカーネル2.6[第1章]
エンタープライズ向けに刷新されたカーネル・コア
ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する
特集:/procによるLinuxチューニング[前編]
/procで理解するOSの状態

Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する
特集:仮想OS「User Mode Linux」活用法
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
Linuxのカーネルメンテナは柔軟なシステム
カーネルメンテナが語るコミュニティとIA-64 Linux
IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間