Karesansuiを試す

この記事はカーネルVM Advent Calendarの12/21日分の記事です。前日分はid:rti7743さんのなのは完売 とある関数の電脳戦 (じょうほうせん とある関数のバトルプログラム) - お前の血は何色だ!! 4です。

Karesansuiって?

ものすごく大雑把に言うとEC2のオープンソース実装です。

遊ぶ環境を作るのにAmazon EC2は便利ですけれど、自分の手元にもああやって気楽にVMをポンポン立てれる環境が欲しいですよね。
同様の目的の為にOpenStackとかEucalyptusもあるようですけれど、アイコンの好みからKaresansuiを試してみる事にします。
Dear users of Karesansui | Karesansui Project
具体的な特徴としては

  • WebUI
  • Pythonで動いてる
  • RHEL系のLinuxで走る(というかDebian系でインストール成功してる人見たこと無い
  • Xen/KVMを利用できる
  • アイコンが可愛い

などが挙げられると思います*1

インストールする

まず環境は

OS CentOS5.7 2.6.18-274.12.1.el5xen
CPU Core i5 660
Memory 8GB
仮想化 Xen

参考にしたページ http://netmark.jp/2009/07/centos53karesansui.html

前もって必要な設定

まずXenが動く環境にしないといけないです。

# yum groupinstall Virtualization yum install iscsi-initiator-utils cyrus-sasl-md5 qemu gnutls-utils PyXML mysql-server MySQL-python perl-HTML-Parser perl-URI
# echo "alias scsi_hostadapter xenblk" >>/etc/modprobe.conf
# grep -lr "DEFAULTKERNEL=kernel" /etc/sysconfig/kernel | xargs sed -i 's/DEFAULTKERNEL=kernel/DEFAULTKERNEL=kernel-xen/g'
# grep -lr "default=." /boot/grub/menu.lst | xargs sed -i 's/default=./default=0/g'
# reboot

ここまで打って

# uname -r
2.6.18-274.12.1.el5xen

的な感じになれば大丈夫です。xenですね。

Karesansuiのインストール

公式サイトから落としてきたtar.gzファイルを展開して./

# tar xvf karesansui-2.0.1-install-pack.tar.gz
# Karesansui/karesansui-install

と打つだけです。簡単ですね。と思いきや問題にブチ当たります。

エラー: このディストリビューションはサポートしていません。

CentOSに対応してるって言ってたじゃないかバーニィと言いたくなるのをぐっと堪えてインストーラを騙します。

$ emacs Karesansui/installer/const.py
SUPPORTED_DISTROS = [
("centos", "^5-[12345].*$"),
("redhat", "^5Server-5.[12345].*$"),
#("redhat", "^(5Server-5.[12345]|6-6\.).*$"),
]
↑のを↓のように書き換える
SUPPORTED_DISTROS = [
("centos", "^5-[1234567].*$"),
("redhat", "^5Server-5.[12345].*$"),
#("redhat", "^(5Server-5.[12345]|6-6\.).*$"),
]

手元のCentOSは5.7だったので対応外と怒られたんですね。
CentOS5.5で動いた物がわざわざ動かなくなることも無いだろうとそのまま書き変えました。
気をとりなおしてインストール再開します。

# Karesansui/karesansui-install

対話的インストールな感じで必要なフォームを埋めればすいすい進みます。
具体的にはhttp://karesansui-project.info/wiki/karesansui/Ja_tutorialに書いてある物とほとんど一緒です。

使ってみる

インストールが完了したら

# ./karesansui-checkenv

を打つ事で環境が正しく動いてるか確認できます。正しく動いていればその一番下で
http://(サーバ名)/karesansui/v2/
にアクセスしろと言われます。
アクセスすると認証ダイアログが出ます。

ユーザ名の欄にはインストール時に入力したメールアドレス、パスワードもインストール時に入力したものを入れれば入れます。

無事入れました。jQueryなどを駆使した近代的なインタフェースです。
ここに表示されているカエルアイコンはこのKaresansuiのインストールされた物理マシン(ホスト)を表しています。

ホストの追加もホスト名とユニークキーを教えてやることで簡単にできるようですが自由に使えるマシンが複数あるわけではないので今回は一台のみです。
EC2には(多分)無い特徴として、アイコンを自由に変えられます。

夢が広がりますね。、
ホストマシンのアイコンを2度クリックするとゲストOSの管理画面に入ります。

可愛いアイコンが見えなくなってちょっと残念ですね。
【+作成】ボタンからゲストOSをインストールできるようです。早速試してみましょう。

モーダルなダイアログが出てきました。リッチなUIです。

ブートイメージというのを指定する所に来てふと手が止まりました。
どうやらisoファイルを適当に指定して…というわけには行かないようです。

調べたところ、この2つはvmlinuzファイルとのinitrdファイルのフルパスかftpURIかで指定できるようです。
サーバ内部の物のフルパスを指定するのって何だか気持ち悪いのでftpでやります。で、手頃なftpサーバに出来るのがそのマシンそのものなのでそこをホストにします。

# yum install vsftpd
# /etc/init.d/vsftpd start

anonymous FTPで接続できる必要があるっぽいので適当に設定して接続します。

# ftp localhost
Connected to localhost.localdomain.
220 Welcome.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:hogehoge): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

こんな感じに動けば大丈夫そうです。
で、ゲストOSとしてgentooに挑戦しようとしたのですが、vmlinuzとinitrdがどこにあるか分からなかったのでCentOSを入れてみます。
isoファイルをftpで見えるところにマウントしてやるだけですね。

# cd /var/ftp/
# wget http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.2/isos/i386/CentOS-6.2-i386-LiveCD.iso
# mount -t iso9660 CentOS-6.2-i386-LiveCD.iso -o loop pub

こんな感じで ftp://(サーバ名)/pub/isolinux/vmlinuz0 と ftp://(サーバ名)/pub/isolinux/initrd0.img がそれぞれアクセスできるようになります。
ブラウザに直接そのURLつっこめば導通チェックできます。
するとしばらくしてゲストOSが立ち上がってきます。

アイコン可愛いですね。これはKaresansui組み込みのアイコンの一部ですが、Twitterアイコンと組み合わせたりするサービスが現れないかなーとか夢が広がります。

立ち上げに失敗した場合は[ジョブ]タブの中でエラーの詳細を見ることができます。楽ですね。

これはFTPのURLを打ち損じてコケてる画面です。生のコマンドが表示されるので、何かでコケたらターミナル開いたりして再現できますね。

さて、無事にゲストOSの作成に成功したらこんな感じになるはずです。

立ち上げるにはアイコンを2度クリックして開始ボタンを押せば良いです。

と思ったら立ち上げに失敗したようです。

どうやらXenまわりのエラーのようですね…

/opt/hde/lib/python/sqlalchemy/orm/scoping.py:127: SADeprecationWarning: Use session.add()
return getattr(self.registry(), name)(*args, **kwargs)
libvir: error : Unknown failure
libvir: Xen Daemon error : POST operation failed: xend_post: error from xen daemon: (xend.err "Error creating domain: Boot loader didn't return any data!")
Failed to start guest. - dom=cen
POST operation failed: xend_post: error from xen daemon: (xend.err "Error creating domain: Boot loader didn't return any data!")

軽くググったところ、設定を間違ったようなのですがここでうっかりスナップショットのタブを押したらKaresansuiさんが機嫌を損ねたようで謎のエラーがポップアップされるようになってホストOSが表示できなくなりました…。

まだ僕には早すぎたのかも知れません。

表示できないホストマシンアイコンの図。

もう少し追跡したいのですが終電の時間が迫っているので今日はここまでで勘弁してください。

カーネルVM Advent Calendar明日は @cosmo__ さんです。

*1:詳しいこと知らないだけだろとも言う