LilyVM実行環境構築(CentOS 4.4編)


Xenとほぼ同時期の2002年頃から筑波大学にてユーザレベルOSという独自のアーキテクチャが本格研究されてきました(準仮想化技術の一種)。
本手法はカーネルコンパイル時に静的にカーネルコードの特権命令(及び特権命令に関連深い非特権命令)を機械的にサブルーチンで置き換えて、
ゲストOS側からのシステムコールを仮想マシン側で処理するというシンプルなものです。

このアーキテクチャを実装したソフトウェアとしてLilyVMがオープンソースとして公開されています(通称「軽量VM」)。
※ホストOS/ゲストOS共に32ビットOS限定となります。

LilyVMの最初の発表ではLinuxだけを実装対象にしていました。
しかしLilyVM 2003ではNetBSD/FreeBSDもサポート対象にして、更にネットワーク機能も本格サポートされています。
※LilyVMをMac OS Xに移植したという報告もあります(スクリーンキャプチャ付きで)。

LilyVMでのゲストOSは完全なユーザプロセスとして実行されます。
LilyVMに近い概念をもつ仮想化ソフトとしてUML(User Mode Linux)というものがあります。
しかしLilyVMではホスト/ゲスト共にLinuxに限定しないところがUMLと大きく異なります。
またLilyVMは仮想マシン環境ではないためVGAカードなどのエミュレート機能はありませんがネットワーク環境を簡単に構築できるのも大きな特徴です。

LilyVMは研究目的のプロトタイプ的傾向が強く以下の制限があり実用レベルに仕上げるにはコミュニティの力が必要のようです。
(1)ソフトウェアとしてのLilyVMの仕様が不明確で仕様に関するドキュメントが未整備です。
(2)ユーザマニュアルやオンラインヘルプ(lilyvm --help)もありません。
※LilyVM起動オプションはlilyvm.cソースを眺めればおよそのことは分かります(オプションチェックは大雑把です)。
(3)ゲストOSのネットワーク設定方法についての詳細が明確化されていません(DHCP使用不可)。
※実際には仮想ネットワークデバイス(tun)を使用したレイヤ3の単純なPoint-to-Pointをエミュレートします(低速通信です)。
(4)ゲストOSの実行に重点が置かれており使い勝手やチューニングについてはあまり考慮されていないようです(例:メモリ割当て等)。
(5)ホストOSとゲストOSの協調に関する信頼性確保やハードウェアの仮想化支援技術の利用も課題となっています。
(6)LilyVMのソースはCVSでの公開となっていますが新しいOS(ディストリビューション)には追従していません。

しかしながらLilyVMの導入は他の仮想化ソフトに比べて極めて単純でかつ持ち運びにも便利なようになっています。
※LilyVM自体の導入はシステム全体の他の設定ファイルに全く影響を与えません。
更にLilyVMのゲストOS用サンプル仮想ディスクも公開されており手軽に試行できるようになっています。

ここではCentOS 4.4をLilyVM環境のホストOSとして利用し、
そのゲストOSとしてDebian GNU/Linux 3.0/3.1やVine Linux 3.1(GUI操作)を使用する手順を紹介します。
(今回は公開版Debian用仮想パーティションイメージファイルをそのまま利用する方法に重点を置いています)

尚、ゲストOSをホストOSの物理ネットワークに参加させるネットワーク接続設定手順についても説明しています。
※ホストOSとしてVine Linux 4.0, Fdora Core 5, Debian GNU/Linux 4.0を使用する方法も補足しています。



1.ホストOS側でのLilyVM環境の構築

LilyVMにはバイナリパッケージというものはありません。
このため手作業にてLilyVM環境をソースから構築する必要があります。




2.公開されているゲストOS仮想ディスクの利用準備




3.公開されているゲストOSの起動

# cd /root/lilyvm
# ./start-linux
start-linuxを実行すると以下のコンソールメッセージが表示されてloginプロンプトが表示されます。

startkernel
Linux version 2.4.27 (aaa@bbb.ccc.ddd.ac.jp) ※便宜上、伏字/改行しました
(gcc version 2.96 20000731 (Red Hat Linux 7.2 2.96-112.7.1)) #2 Tue Nov 16 16:15:58 JST 2004
BIOS-provided physical RAM map:
 BIOS-e801: 0000000000000000 - 000000000009f000 (usable)
 BIOS-e801: 0000000000100000 - 0000000004000000 (usable)
64MB LOWMEM available.
- 部分省略 -
Memory: 60440k/65536k available (896k kernel code, 4708k reserved, 204k data, 52k init, 0k highmem)
- 部分省略 -
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
- 部分省略 -
Setting kernel variables.
Mounting local filesystems...
mount: fs type hostfs not supported by kernel
Running 0dns-down to make sure resolv.conf is ok...done.
Cleaning: /etc/network/ifstate.
Setting up IP spoofing protection: rp_filter.
Configuring network interfaces: done.
- 部分省略 -
INIT: Entering runlevel: 2
Starting system log daemon: syslogd.
Starting kernel log daemon: klogd.
Starting internet superserver: inetd.
Starting printer spooler: lprng.
Starting deferred execution scheduler: atd.
Starting periodic command scheduler: cron.

Debian GNU/Linux 3.0 user-level-linux serial/0

user-level-linux login:

loginプロンプトでパスワードなしrootでログインします。






4.公開されているゲストOSのネットワーク設定変更

公開されているゲストOSのネットワーク設定ファイル(/etc/network/interfaces)は以下の内容になっています。

auto lo
iface lo inet loopback

auto vmn0
iface vmn0 inet static
    address 10.0.0.1
    network 10.0.0.0
    netmask 255.0.0.0
    broadcast 10.255.255.255
    gateway 10.0.0.254

ゲストOSからホストOSの物理ネットワークに接続できるように上記の設定(iface vmn0 inet static以下)を変更します。

【変更例】
    address 192.168.0.30
    network 192.168.0.0
    netmask 255.255.255.0
    broadcast 192.168.0.255
    gateway 192.168.0.1

続いて/etc/resolv.confの内容をホストOSの設定内容に変更してネットワークサービスを再起動します。
# vi /etc/resolv.conf
ホストOSの設定内容に合わせます。
# /etc/init.d/networking restart

他マシンへのpingは無効となりますがtelnet接続等はできます。
下記はtelnetサービスを起動したWindows XPにゲストOSからtelnet接続してみた時のコンソール画像です。



apt-getでDebianのミラーサイトにも接続できます。
/etc/apt/sources.listの中を適切に変更してパッケージを追加してみるのもよいかと思います(但し、空き容量は少ないです)。

尚、ゲストOSの終了はrebootコマンドを実行することでホストOSのコマンドプロンプトに戻ります。
※haltコマンドではホストOSのコマンドプロンプトには戻りません。

[補足]
(1)LilyVMの場合、UML用ゲストOS仮想ディスクに少し手を加えるだけで(/dev/vmdisk0ノードの作成等)LilyVM環境でも使用できるようです。
※coLinux用ゲストOS仮想ディスクも同様に使用できます。



5.Debian GNU/Linux 3.1の実行とGUI操作

公開されているゲストOSの仮想ディスクは容量も少なく、収録されているパッケージもごくわずかでssh/ftpコマンドさえもありません。
※sshサーバやftpサーバも収録されていません。
そこで、多くのアプリケーションをインストールしたDebian GNU/Linux 3.1の仮想ディスク(1.6GB程度)を用意して、
LilyVM環境のゲストをホストOSからVNC接続してGUI操作してみることにしました。




5.Vine Linux 3.1のGUI操作

Debian GNU/Linux 3.1の実行手順とほぼ同じ要領でVine Linux 3.1をGUI操作することができます。




6.Vine Linux 4.0へのLilyVM導入とVine Linux 3.1のGUI操作

CentOS 4.4にLilyVMを導入した手順とほぼ同様にVine Linux 4.0(kernel 2.6.16-0vl60)にもLilyVMを導入できます。




7.Fedora Core 5へのLilyVM導入とDebian GNU/Linux 3.1のGUI操作

CentOS 4.4にLilyVMを導入した手順と同様にFedora Core 5(kernel 2.6.15-1.2054_FC5)にもLilyVMを導入して利用できます。




8.Debian GNU/Linux 4.0へのLilyVM導入とDebian GNU/Linux 3.1のGUI操作

CentOS 4.4にLilyVMを導入した手順とほぼ同様にDebian GNU/Linux 4.0(kernel 2.6.18-4)にもLilyVMを導入して利用できます。