仮想アプライアンスの作り方
仮想アプライアンスは単純に、Xen domU用の Linuxルートファイルシステムを tar.(gz|bz2|lzma) で固めたものです。
具体的に WB用の仮想アプライアンスたる domUを作るにはどうしたらいいかというのはそのうち資料にしますが、簡単に述べると下記のようになります。
- カーネルは不要(dom0側に存在するため)、ramdiskは使用不可
- inittabなどで、有効なttyは1個だけにする
- ttyのデバイス名を tty1 の代わりに hvc0 にする
- /etc/securetty に hvc0 を追加する
- /etc/fstabにはルートファイルシステムとして /dev/xvda1 を指定する(タイプ=xfs)
- ネットワークは eth0を DHCPに設定する
- (推奨)スワップファイル(ブロックデバイスではなく一般ファイル)を作成し fstabに追加する
- (推奨)avahi-daemonとsambaを有効にしてLAN内での名前解決を可能にする
- (任意)sshdを有効にする。ただしホスト鍵は生成前の状態にしておきinitでの初回起動時に生成させること
- (推奨)Webサーバを有効にし、トップの index.html(など)に仮想アプライアンスの利用手引きを設置する
- (任意)X Window Systemを伴う場合は、画面にVNCでアクセス出来るようにする。その際、Webサーバのトップに設置する index.htmlには TightVNCなどの VNCビューアアプレットを配置しユーザーがアクセスしやすいようにする
- tarで固める際、/etc/shadowや秘密鍵、ログファイルなどに自分のものを残さないよう注意する
- (推奨)/etc/wb-va.xml に仮想アプライアンスのメタデータを設置する 2010-2-27追記 後述
tarアーカイブを作るときは p オプションを忘れないようにしましょう
アプリケーションについてはどれくらいまでセットアップを済ませた状態のものをVAとして提供するかですが
a. データベースの接続設定などといった専門的な設定
b. 初期ユーザの作成などWeb上から出来る初期設定
があるとしたら、aは済ませておいて bはユーザーにさせる方針が良いと思っています。
ただアプリケーションによっては aと bを別々のタイミングで設定できない場合もありますので、そういう場合は b まで設定してしまうかわりにトップページで「デフォルトの管理者ID/Passはxxxx/yyyyyです」のような表示をするように工夫すると良いと思います。(basercmsのVAが参考になるかもしれません)
redmineのように、セットアップしたときに既にbまで済んでしまっていてなおかつトップページをWeb上から書き換えられるようなシステムでない場合は、後述の /etc/wb-va.xmlに instruction 要素で簡単な利用方法を記述しておくことで WBUIからユーザーに提示されます。
それから、アプリケーションをセットアップする際にホスト名を要求されることがあります。ところが WBは仮想マシンの作成時にホスト名をユーザーが自由に変更できる(/etc/hostnameや /etc/sysconfig/networkや /etc/conf.d/hostnameを自動的に書き換える)ため、固定のホスト名設定を含めてしまうのはあまりよくありません。localhost でごまかせるところはごまかしてください。
自ホスト名からIPアドレスを引けることを前提にしているアプリケーションもあります。しかし、上述のような理由で、/etc/hostsにも固定のホスト名を書き入れるのは避けるべきという理由から nss_myhostnameというnssモジュールを使って回避しています。
参考
nss-myhostnameで、自ホスト名を常に引けるようにする
アプリケーションが日本語に対応している場合は、なるべく最初から日本語メッセージが表示され日本語が利用できるようにセットアップするといいでしょう。
/etc/wb-va.xml について
/etc/wb-va.xml ファイルに、そのVAに関する情報を書き込みます。。
/virtual-appliance/@uuid には そのVAのために適当に生成したUUIDを書き込んでください。リビジョンアップや、互換性のあるバージョンアップの場合はUUIDを引き継いでください。
/virtual-appliance/version には、そのVAのバージョンを書き込みます。バージョンのナンバリングルールは自由ですが、例えばそのVAが目的とするアプリケーションのバージョンが5.01で、2010年2月27日にパッケージングしたVAであれば 5.01-20100227や、それが2度目のリビジョンアップであれば 5.01-r2 などにすると良いでしょう。
/virtual-appliance/instruction には、そのVAを利用開始するために最低限必要な情報を書き込みます。多言語対応する場合は、デフォルトの言語で記述された要素を先頭に配置し、2個目以降の instruction要素に xml:lang属性付きでその他の言語における記述を行ってください。
/virtual-appliance/config-item (複数可) には、WBUIがそのVAをダウンロード完了した直後に行うべき設定についての情報を記載します(WBUI 0.0.17以降にて対応)。name属性と type属性が必須で、label子要素とdescription子要素を持つことが出来ます。その他に持つべき属性又は子要素については type属性の種類によって決まります。現在対応しているtypeは下記の通りです。
- "vncpasswd" VNC用の接続パスワードを file属性で指定されたファイルに書き込む。WBUIは現在のところ、これに対しシステムのシリアル番号(=ホスト名)を自動的に用いる(将来的にはユーザーに設定させることができるようになるかもしれない)
他の type については必要ベースで追加されていく予定です。
wb-va.xml例)
<?xml version="1.0" encoding="UTF-8"?>
<virtual-appliance uuid="XXXX-XXXX-XXXX-XXXX"><!--桁数適当です-->
<version>X.Y.Z-r1</version>
<instruction>初期ユーザー名とパスワードは admin/adminです</instruction>
<instruction xml:lang="en">The initial user ID and password is admin/admin</instruction>
<config-item name="vncpasswd" type="vncpasswd" file="/root/.vnc/passwd">
<!-- labelや descriptionはオプションで、かつ多言語対応も必須というわけではない -->
<label>VNCパスワード</label>
<label xml:lang="en">VNC Password</label>
<description>この仮想マシンにVNCで接続する際に使用するパスワードです</description>
<description xml:lang="en">A password which will be used to connect this VM through VNC</description>
</config-item>
</virtual-appliance>
上記のメタデータは仮想マシンの作成時に /var/cache/wb/以下にキャッシュされます。ユーザーはWBUIを通じて instruction 部を確認することができます(WBUI 0.0.16以降)
また、将来仮想マシンカタログからアップグレードパッチを提供出来るようにするためにこのメタデータが利用される可能性があります。

