2015/10/16

snappy on kvm on lxc

RaspberryPi2でUbuntu Core Snappyは普通に動いた。が、アプリ作らないと面白く無さそうだし、ラズパイはまだまだRaspbianで遊びたいので、Snappy環境を別に作ろうと思った。
SnappyのKVMイメージが提供されているので、それで出来そうだ。

KVM on LXC

すでにLXCコンテナで環境構築しているので、その上にKVM仮想環境を動かせばいいかと。
作って動かしてみることにした。
ホストでLXCと平行してKVMも動かすのも可能だろうけど、その方が複雑な気がする。

KVMを動かすためのコンテナ作成
$ sudo lxc-clone master -n kvm
分かりにくいかもしれんけど、'kvm'という名前のlxcコンテナにした。
新規作成は面倒なので、いつもmasterコンテナをクローンする方法で作る。

kvmコンテナ設定
色々試行錯誤した結果、kvmをlxc内で動かすには以下のデバイスが必要。

/dev/net/tun
ブリッジネットワーク構築時に/dev/net/tunにアクセスするらしく、mknodで作ったのではダメで、ホストの/dev/netをマウントする必要があった。

/dev/kvm
は、kvmが稼働するときにアクセスするものだそうで、これはmknodで作ればよいらしい。

それを作ってアクセスできるように、コンテナのconfファイルに以下を追記
# device
lxc.cgroup.devices.allow = c 10:232 rwm
lxc.cgroup.devices.allow = c 10:200 rwm
lxc.mount.entry=/dev/net dev/net none bind,optional,create=dir
lxc.hook.autodev = /var/lib/lxc/kvm/mount-hook.sh
 /var/lib/lxc/kvm/mount-hook.shの中身
#!/bin/sh
mknod -m 600 ${LXC_ROOTFS_MOUNT}/dev/kvm c 10 232
コンテナ起動
$ sudo lxc-start -n kvm
で、/dev/kvm、/dev/net/tunがちゃんとできていることを確認する。

あとは、sshなりconsoleなりからコンテナにログインしての作業

kvmインストール

$ sudo apt-get install kvm virt-manager libvirt-bin bridge-utils
$ sudo apt-get install lxde tightvncserver fonts-ipafont
$ mkdir .vnc
$ ln -s /etc/X11/Xsession .vnc/xstartup

まとめて書いちゃいましたが、lxde以降はVNCデスクトップ構築のためです。kvmのvirt-managerや本題のSnappyアプリがディスプレイを必要とする場面があるため。

この時点で、libvirtdやlxcと同じようにdnsmasqが動いていればOK。
ifconfigしたときには、virbr0ブリッジインターフェースが出来ているはず。最初、これが作られなくて悩んだ。
自分はデフォルトのままでいいので、kvmネットワークは 192.168.122.0 である。lxcが10.0.3.0なので、10.0.2.0とかにした方が綺麗かもしれないけど。

UbuntuCore Snappy 取得と起動

https://developer.ubuntu.com/en/snappy/start/
をそのまんま実行しても動くには動くが・・

$ kvm -m 512 -redir :8090::80 -redir :8022::22 ubuntu-15.04-snappy-amd64-generic.img -curses
で起動はできけど、kvmのネットワークと繋がらない。kvmコマンドがよくわからないし面倒なので、libvirtへインストール方法で。

Snappyゲスト作成

https://help.ubuntu.com/community/KVM/CreateGuests
は参考にはなるが具体的なところがよくわからなくて結構悩んだ。

img => qcow2 変換 (必須じゃないけど、qcow2の方がサイズを小さくできるんで)

$ qemu-img convert -f raw -O qcow2 ubuntu-15.04-snappy-amd64-generic.img ubuntu-15.04-snappy-amd64-generic.qcow2

インストール

$ virt-install --name snappy --import --memory 512 --disk ubuntu-15.04-snappy-amd64-generic.qcow2

インストール後、勝手にコンソールが出てきて起動しちゃう。しかもキー入力が効かない。抜ける・・
でも、これでインストールは完了だ。

コンソール
$ virsh console snappy

Snappyは最初からsshd動いているんで、sshで入っても同じ。
ifconfigすると、ちゃんとKVMのゾーンのIPアドレスになっている。
外へpingしても、ちゃんと名前解決もできているし、外へも出られているようだ。

consoleから抜けるには、"Ctrl+5"とか"Ctrl+]"で抜けられる。

VNCから使ってみる

Snappyインスタンス内では、webdm/snappydが稼働しているので、見てみたい。
けれど、kvmコンテナ以外からのアクセスは出来ない。
そこで、KVMコンテナで、tightvncserverを動かして、そこに外からVNC接続して
そこからブラウザで
http://snappy-ip-address:4200
にアクセスすると、snappyアプリのダウンロードマネージャを操作できる。

仮想の仮想になっているんで、NATを2重にやれば外からのアクセスもできるはず。


左上に出ているのがSnappyゲストで疎いているwebdm画面で、SnappyStoreを覗いているところ。その横がSnappyのコンソール。左下がKVMのvirt-manager、で右下には愛用のEmacs上でbashを使っている状態。

Snappyを動かす環境として完全な状態か?といえば、そうじゃないと思う。
その都度、kvmやlxcの設定をやることになるんだろうなと思っている。それがまた楽し。

0 件のコメント:

コメントを投稿