re:inventing the wheel

それでも車輪は回っている

(DIY)RaspbianにWebVirtMgrを入れてみた

最近エンジニアらしい活動をおろそかにしていた為、自宅の検証環境整備をはじめました。

使っていないThinkPad X61をKVMサーバとしたのですが、VPNサーバ程度にしか使用していない RaspberryPi2をフロントのGUIにおいて仮想マシン管理しようと画策して見ました。

なぜWebVirtMgr?

トレンド的にはRHEVと統合されたoVirtの方が面白そうなのですが、ARM(RaspberryPi)で動かすには手間が掛かりそうだなという事でパス。 Djangoベースで開発されたWebVirtMgrを利用する事にしました。

WebVirtMgrはインスタンスの作成からVNCコンソールの提供や、仮想マシンのクローンなど必要な機能は 一通り揃っているので自宅使いには十二分だと思います。
何よりスマフォからも操作しやすいので、移動時間でも弄りやすく便利です。

早速インストール

今回、Raspbianにインストールした訳ですが、公式サイトのDebian向けのインストレーションで簡単に導入できました。
“Install WebVirtMgr”に記載されている通りに実行するだけで、何の問題もなくインストールできました。

※確実に、公式ドキュメントの方が精度が高いので、詳細はこちらをご覧ください。

必要なパッケージをインストールします。

1
$ sudo apt-get install git python-pip python-libvirt python-libxml2 novnc supervisor nginx

続いて、webvirtmgrをcloneし、Djangoと必要なライブラリー、初期設定を実行します。

1
2
3
4
5
$ git clone git://github.com/retspen/webvirtmgr.git
$ cd webvirtmgr
$ sudo pip install -r requirements.txt
$ ./manage.py syncdb
$ ./manage.py collectstatic

Nginxを設定します。

ドキュメントだと、/var/www/webvirtmgr 以下をドキュメントルートにする様なので合わせました。

1
2
3
4
$ sudo mkdir -p /var/www
$ sudo cd ..
$ sudo mv webvirtmgr /var/www
$ sudo chown -R www-data:www-data /var/www/webvirtmgr

Nginxの設定ファイル webvirtmgr.conf/etc/nginx/conf.d/ に配置します。
内容をみるとわかると思いますが、デフォルトサーバとして定義しているので状況に合わせて調整が必要です。 公式ドキュメントにはちゃんとnginx.conf側のコメントアウト手順も記載されていました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
    listen 80 default_server;

    server_name $hostname;
    #access_log /var/log/nginx/webvirtmgr_access_log;

    location /static/ {
        root /var/www/webvirtmgr/webvirtmgr;
        expires max;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        client_max_body_size 1024M; # Set higher depending on your needs
    }
}

supervisorのセットアップ

まずは、novncをinsservを利用してnovncを実行するようにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ sudo service novnc stop
$ sudo insserv -r novnc
$ sudo vi /etc/insserv/overrides/novnc
#!/bin/sh
### BEGIN INIT INFO
# Provides:          nova-novncproxy
# Required-Start:    $network $local_fs $remote_fs $syslog
# Required-Stop:     $remote_fs
# Default-Start:     
# Default-Stop:      
# Short-Description: Nova NoVNC proxy
# Description:       Nova NoVNC proxy
### END INIT INFO

設定ファイル webvirtmgr.conf/etc/supervisor/conf.d に記述します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr.log
redirect_stderr=true
user=www-data

[program:webvirtmgr-console]
command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=www-data

設定できたら、supervisorを再起動します。

1
2
$ sudo service supervisor stop
$ sudo service supervisor start

っと、以上でインストールは完了しました。

実際使ってみて…

やりたい事と手間暇を考えると正直これで満足とい言った状況です。
ただ、WebVirtMgrとKVMサーバを分けた事で起こる弊害として、ISO用のストレージプールが KVMホストを向いているため、画面からISOファイルをアップロードしても反映されない事でしょうか。

今は作成したISO用のストレージプールと同じパスにファイルを置いて凌いでいますが、 本格的に使いたいと思うのであればNFSなど利用して共有する必要があると思います。

余談ですが、aptitude search ocfs とかするとOCFS2のパッケージがあるようなので、 気が向いたら RaspberryPi2でiSCSIサーバでも試してみようかと思います。


以上です。