検証用の仮想マシンを管理するために、OpenStack はちょっと大げさだし phpVirtualBox でサーバ仮想化は心もとないし、何か良いものはないかと探していたところ、WebVirtMgr というのを見つけた。
WebVirtMgr は KVM + libvirt を操作する Web UI で、仮想マシンの追加削除などの機能がひと通り揃っているほか、Web ベースのコンソールもついている。その他の機能は Features を参照のこと。ホスト OS には Ubuntu や CentOS をサポートしている。現時点でのバージョンは v2.2.1。
日本語情報が皆無だが、便利そうなので早速試してみることにした。
前提環境
今回は Ubuntu Server 13.04 (amd64) に入れることにする。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 13.04
Release: 13.04
Codename: raring
OS はあらかじめインストールしておく。パッケージは OpenSSH のみ選択する。
WebVirtMgr のインストール
まっさらの環境が用意できたところで、WebVirtMgr をインストールする。と言ってもほぼ公式の README 通りでインストールできるのだが、備忘録として手順を残しておく。
まず apt-get を最新の状態にしておく。
$ sudo apt-get update
$ sudo apt-get upgrade -y
必要なパッケージをインストールする。
$ sudo apt-get -y install git python-pip virtinst apache2 libapache2-mod-python libapache2-mod-wsgi python-novnc python-numpy
$ sudo pip install Django==1.4.5
Git でソースコードを clone する。
$ mkdir ~/src
$ cd ~/src
$ git clone git://github.com/retspen/webvirtmgr.git
$ cd webvirtmgr
$ git checkout v2.3.2
DB を初期化し、WebVirtMgr のアカウントを作成する。
$ ./manage.py syncdb
:
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'admin'): (任意のユーザ名を指定)
E-mail address: (任意のメールアドレスを指定; 特に何か届くわけではなさそう)
Password: (任意のパスワードを指定)
Password (again): (再度入力)
:
標準の flavor を登録しておく。flavor とは、仮想マシンを作るときのスペック (メモリやディスク容量など) のひな形のようなもの。
$ ./manage.py loaddata conf/flavor.json
テスト用の Web サーバを起動してみる。
$ ./manage.py runserver 0:8000
下記の URL にアクセスすると、ログイン画面が表示される。
http://(ホストの IP アドレス):8000/
ひとまずログインはできるようになった。
Apache と連携
ここまでの手順で一応ログインはできる状態になったが、あくまでもテスト用の Web サーバなので、Console が使えないなどの制約がある。すべての機能を恒久的に使えるようにするために、Apache と連携させる。
Apache の config ファイルを作成する。
$ sudo tee /etc/apache2/conf.d/webvirtmgr.conf > /dev/null
<VirtualHost *:80>
ServerAdmin [email protected]
#ServerName dummy-host.example.com
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE webvirtmgr.settings
PythonOption django.root /webvirtmgr
PythonDebug On
PythonPath "['/var/www/webvirtmgr'] + sys.path"
ErrorLog ${APACHE_LOG_DIR}/webvirtmgr-error_log
CustomLog ${APACHE_LOG_DIR}/webvirtmgr-access_log common
</VirtualHost>
WSGIScriptAlias / /var/www/webvirtmgr/webvirtmgr/wsgi.py
WSGIPythonPath /var/www/webvirtmgr/
Alias /static /var/www/webvirtmgr/static/
Alias /media /var/www/webvirtmgr/media/
<Directory /var/www/webvirtmgr/webvirtmgr>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
^D
WebVirtMgr のソースを Apache の DocumentRoot にコピーする。
$ sudo cp -r ~/src/webvirtmgr /var/www/
$ sudo chown -R www-data:www-data /var/www/webvirtmgr
Apache をリロードする。
$ sudo service apache2 reload
これで下記の URL から使用できるようになる。
http://(ホストの IP アドレス)/
noVNC 用の Websoket proxy の設定
noVNC (ブラウザで使えるコンソール) を使えるようにするための設定をする。
起動スクリプトを init.d に置く。
$ sudo cp ~/src/webvirtmgr/conf/initd/webvirtmgr-novnc-ubuntu /etc/init.d/webvirtmgr-novnc
起動する。
$ sudo service webvirtmgr-novnc start
OS 起動時に一緒に起動するようにしておく。
$ sudo update-rc.d webvirtmgr-novnc defaults
これで Console が使えるようになる。
KVM と libvirt の設定
Web UI が入ったので、肝心の KVM とその API の libvirt を設定する。こちらも公式の Docs の通り。なお、WebVirtMgr と KVM のホストは、同じマシンでも別マシンでも良くて、一つの WebVirtMgr で複数の KVM ホストを管理することもできる。今回は同じマシンに同居させる。
apt-get で必要なパッケージを入れる。
$ sudo apt-get -y install kvm libvirt-bin sasl2-bin
各設定ファイルの設定値を変更する。
$ sudo sed -i 's/libvirtd_opts="-d"/libvirtd_opts="-d -l"/' /etc/default/libvirt-bin
$ sudo sed -i 's/^#listen_tls = 0/listen_tls = 0/' /etc/libvirt/libvirtd.conf
$ sudo sed -i 's/^#listen_tcp = 1/listen_tcp = 1/' /etc/libvirt/libvirtd.conf
$ sudo sed -i 's/^#vnc_listen = "0.0.0.0"/vnc_listen = "0.0.0.0"/' /etc/libvirt/qemu.conf
libvirtd を再起動する。
$ sudo service libvirt-bin restart
libvirt のアカウントを作成する。OS や WebVirtMgr のユーザ名、パスワードとは同じでなくて良い。
$ sudo saslpasswd2 -a libvirt (任意のユーザ名)
Password: (任意のパスワード)
Again (for verification): (再度入力)
接続できるか確認しておく。
$ virsh -c qemu+tcp://127.0.0.1/system nodeinfo
Please enter your authentication name: (さっきのユーザ名)@(ホスト名)
Please enter your password: (さっきのパスワード)
CPU モデル: x86_64
:
なお、環境によって、authentication name: の “@(ホスト名)” がいる場合といらない場合があるようだ。以下のようなエラーになったら、ホスト名を消して試してみると良い。
エラー: ハイパーバイザーへの接続に失敗しました
エラー: authentication failed: authentication failed
ブリッジ接続用の設定
仮想マシンをブリッジ接続 (ホストと同じネットワークに接続) したいなら、以下の設定もしておく必要がある。
bridge-utils をインストールする。おそらく既に入っているが念のため。
$ sudo apt-get -y install bridge-utils
ブリッジインターフェイスの設定をする。変更点は下記のような感じ。設定を間違えるとネットワークにつながらなくなるので注意すること。
$ sudo diff -u /etc/network/interfaces.bak /etc/network/interfaces
--- /etc/network/interfaces.bak 2013-06-27 21:09:13.738797661 +0900
+++ /etc/network/interfaces 2013-06-27 22:00:34.707818384 +0900
@@ -7,12 +7,19 @@
# The primary network interface
auto (物理 NIC 名)
-iface (物理 NIC 名) inet static
+iface (物理 NIC 名) inet manual
+
+auto br0
+iface br0 inet static
address (ホストの IP アドレス)
netmask (サブネットマスク)
network (ネットワークアドレス)
broadcast (ブロードキャストアドレス)
gateway (デフォルトゲートウェイ)
+ bridge_ports (物理 NIC 名)
+ bridge_stp off
+ bridge_maxwait 0
+ bridge_fd 0
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers (DNS リゾルバ)
dns-search (検索ドメイン)
設定を反映させる。
$ sudo service networking restart
反映されたか確認しておく。
$ sudo ifconfig br0
br0 Link encap:イーサネット ハードウェアアドレス XX:XX:XX:XX:XX:XX
inetアドレス:(ホストの IP アドレス) ブロードキャスト:(ブロードキャストアドレス) マスク:(サブネットマスク)
ディスクイメージの用意
仮想マシンをインストールするために、適当なディストリビューションのインストールディスクの ISO イメージを用意する。今回は CentOS 6.4 (64bit) にする。
ISO 用のディレクトリを作っておく。場所や名前は任意のもので良い。
$ sudo mkdir /var/lib/libvirt/isos
CentOS のイメージを落としてくる。
$ sudo curl -o /var/lib/libvirt/isos/CentOS-6.4-x86_64-minimal.iso http://ftp-srv2.kddilabs.jp/Linux/packages/CentOS/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso
仮想マシンの作成
いよいよ仮想マシンを作成してみる。
下記の URL からログインする。ID とパスワードは最初の方に作成したもの。
http://(ホストの IP アドレス)/
Dashboard が表示されるので、[Add Connection] をクリックする。
libvirt の接続情報を入力する。Hostname は識別しやすい任意の名前で良い。IP / Domain 欄には “127.0.0.1” や “localhost” は指定できないようだ。
ホストが追加されるので、[Overview] をクリックする。
Overview が表示される。仮想マシンのディスクイメージを保管する場所を設定するために、[Strage pool] をクリックする。
[Add Pool] をクリックして、仮想マシンのディスクイメージを保管する場所と、先の手順で追加しておいた ISO イメージを保管する場所を設定する。
正常に Pool を追加できれば、先ほど落としておいた CentOS の ISO イメージが表示される。
仮想マシンを作るために、左側メニューの [Create VM] をクリックする。flavor の一覧が表示されるので、適当なのを選んで [Create] をクリックする。
仮想マシンを作成する。今回はブリッジ接続したいので、Network は br0 を選択する。
仮想マシンが作成されたら、インストールディスクの ISO イメージをアタッチする。
いよいよ仮想マシンを [Start] する。
[Console] ボタンをクリックすると、noVNC の Web コンソールが開く!あとは普通にインストールすれば良い。
Tips
[Shutdown] ボタン
[Shutdown] ボタンが効くようにするには、仮想マシンで acpid を動かしておく必要がある。CentOS の場合、次のようにしてインストール、起動できる。
# yum install -y acpid
# chkconfig acpid on
# service acpid start
ユーザの追加
現状権限の設定などの機能がないのであまり意味はないと思われるが、WebVirtMgr のログインユーザを追加したい場合、manage.py を叩く。
$ cd /var/www/webvirtmgr
$ sudo ./manage.py createsuperuser
他にもいろいろ機能があるようだ。
$ sudo ./manage.py
Usage: manage.py subcommand [options] [args]
Options:
-v VERBOSITY, --verbosity=VERBOSITY
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings=SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath=PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Print traceback on exception
--version show program's version number and exit
-h, --help show this help message and exit
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
[auth]
changepassword
createsuperuser
[django]
cleanup
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
reset
runfcgi
shell
sql
sqlall
sqlclear
sqlcustom
sqlflush
sqlindexes
sqlinitialdata
sqlreset
sqlsequencereset
startapp
startproject
syncdb
test
testserver
validate
[staticfiles]
collectstatic
findstatic
runserver
おわりに
以上で WebVirtMgr で仮想マシンをインストールできるまでの環境が整った。OpenStack のように機能盛りだくさんではないが、ちょっとした検証環境を用意したいときにはちょうど良いと感じた。
現状、ディスクイメージの付け替えなどができず、未対応の操作をするには直接ホストにログインしてコマンドを叩いたり xml を編集する必要がある。今後のバージョンアップに期待したい。というかコードが GitHub でホストされているので、Pull Request してみると良いかも知れない。
コメント