備忘録のため,内容の正当性については責任を持ちません。

検証用の仮想マシンを管理するために、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 webmaster@dummy-host.example.com
    #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] をクリックする。

Dashboard

Dashboard

libvirt の接続情報を入力する。Hostname は識別しやすい任意の名前で良い。IP / Domain 欄には “127.0.0.1” や “localhost” は指定できないようだ。

libvirt の接続情報の設定

libvirt の接続情報の設定

ホストが追加されるので、[Overview] をクリックする。

Dashboard

Dashboard

Overview が表示される。仮想マシンのディスクイメージを保管する場所を設定するために、[Strage pool] をクリックする。

Overview

Overview

[Add Pool] をクリックして、仮想マシンのディスクイメージを保管する場所と、先の手順で追加しておいた ISO イメージを保管する場所を設定する。

Storage Pool の設定

Storage Pool の設定

正常に Pool を追加できれば、先ほど落としておいた CentOS の ISO イメージが表示される。

Storage Pool

Storage Pool

仮想マシンを作るために、左側メニューの [Create VM] をクリックする。flavor の一覧が表示されるので、適当なのを選んで [Create] をクリックする。

Create Virtual Machine

Create Virtual Machine

仮想マシンを作成する。今回はブリッジ接続したいので、Network は br0 を選択する。

Add New Virtual Machine

Add New Virtual Machine

仮想マシンが作成されたら、インストールディスクの ISO イメージをアタッチする。

Media Details

Media Details

いよいよ仮想マシンを [Start] する。

Virtual Machine

[Console] ボタンをクリックすると、noVNC の Web コンソールが開く!あとは普通にインストールすれば良い。

Console

Console

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 してみると良いかも知れない。


コメント

コメントする




CAPTCHA