FreeBSD on OpenStack

FreeBSD を OpenStack で管理したいなぁと思って自宅に OpenStack 環境作ってました。

お正月なのに…

使ったのは folsom ベースの OpenStack (nova-network) と FreeBSD 9.1 です。8 系 の FreeBSD でも大体同じ作業で実現出来るぽいです。あと nova-network でって書い たのは自宅に quantum だと少し厳しいからです。FlatDHCPManager が調度良かった。

今回のポイントは FreeBSD の HDD, NIC のドライバに virtio を使うように修正する ところです。OpenStack (KVM) は virtio 前提なので、そうせざるを得なかったです。

今回使ったソフトウェア

  • OpenStack Folsom (nova-network)
  • Ubuntu Server 12.10
  • FreeBSD 9.1 amd64

作業方法

準備としてこれらが必要になります。事前に行なってください。

  • FreeBSD-9.1-RELEASE-amd64-disc1.iso ダウンロード
  • 作業ホスト (Ubuntu Server 12.10) に qemu-kvm をインストール

freebsd9.img として qcow2 イメージを作成します。

% kvm-img create -f qcow2 freebsd9.img 8G

作成したイメージファイルに FreeBSD 9.1 をインストールします。

% kvm -m 256 -cdrom ./FreeBSD-9.1-RELEASE-amd64-disc1.iso \
-drive file=./freebsd9.img -boot d -net nic -net user -nographic -vnc :10

VNC のディスプレイ番号は空いているものを使ってください。空いていれば他でも構い ません。

VNC viewer をインストールし localhost:10 に接続します。ここでは作業ホストに X Window System が入っていることを前提に書いていますが、Non-X な方は他のホストか らその他の VNC ソフトウェアを使ってアクセスしてもらっても構わないです。

% sudo apt-get update
% sudo apt-get gvncviewer
%gvncviewer localhost:10

インストーラが起動しているのでインストール行なってください。気をつける点として は一つ。src をインストールしてください。後に virtio をインストールするのに必要 になってくるからです。kmod ファイルをコンパイルしてインストールすることになります。

インストールが終わったら今度は仮想マシンを HDD から起動します。

% kvm -m 256 -drive file=./freebsd9.img -boot c -net nic -net user \
  -nographic -vnc :10

VNC で再度接続し仮想マシン上で emulators/virtio-kmod をインストールします。

freebsd9% cd /usr/ports/emulators/virtio-kmod/
freebsd9% su
freebsd9# make install clean

次に virtio ドライバを扱うように HDD, NIC ドライバ周りの設定を変更します。 virtio のインストールが終わった後に「こうしろ」とメッセージが出てきますので それを参考に行います。一部、僕の環境ではそのままではダメだったので修正して 使いました。

インストールした virtio を起動時に読み込むために下記を追記します。

freebsd9# vi /boot/loader.conf
virtio_load="YES"
virtio_pci_load="YES"
virtio_blk_load="YES"
if_vtnet_load="YES"
virtio_balloon_load="YES"

HDD ドライバを virtio を使うように変更します。これによってデバイス名が変わって くるので /etc/fstab を編集します。

freebsd9# sed -i.bak -Ee 's|/dev/ada?|/dev/vtbd|' /etc/fstab

NIC も virtio を使います。僕の環境では ifconfig_re0 でした。これを vtnet0 に変 更します。

freebsd9# cat /etc/rc.conf
ifconfig_vtnet0="DHCP"
..<snip>..

qemu の起動方法、もしくはデフォルトのハードウェア定義によって re0 は変わってく るかもしれません。適宜変更します。

仮想マシンをシャットダウンします。

freebsd9# shutdown -p now

完成したイメージファイル freebsd9.img を openstack 環境に転送し (openstack 環 境で作業している方は必要無いです) glance に登録します。

環境変数諸々を揃えて…

% glance add name="FreeBSD 9" is_public=true container_format=ovf disk_format=qcow2 < freebsd9.img
% glance image-list
+--------------------------------------+------------------------+-------------+------------------+-------------+--------+
| ID                                   | Name                   | Disk Format | Container Format | Size        | Status |
+--------------------------------------+------------------------+-------------+------------------+-------------+--------+
| 1af6f41b-1048-4d78-9715-87935c0bc6ae | FreeBSD 9              | qcow2       | ovf              | 4305584128  | active |
+--------------------------------------+------------------------+-------------+------------------+-------------+--------+

以上です。

まとめ

FreeBSD は仕事場でもプライベートでもまだまだ現役だし OpenStack で扱えるように することは僕にとってとても重要でした。なので満足w FreeBSD 8 系では同じ手順で 扱えるらしいのだけど、それ以前のバージョンになるとどうか… virtio がポイント なのと、KVM とゲスト OS バージョンって相性がめちゃ有るのでここもポイントになり そう。ハイパーバイザに VMWare も使えるらしいので今度やってみるかな。VMWare で も相性はあるけど、KVM ほどシビアにならなくていい印象がある。FreeBSD 3系でも頑 張れば動いたし。

あとは cloud-init 。まだ開発途中だそうです。なので metadata サーバにアクセスし て、色んな事しようと思ってもまだ難しい。

この年末に Windows も OpenStack に乗せてみたので、そちらの記事も時間があったら 載せようっと。

2013/01/02 追記

FreeBSD 8.3 で試してみましたが、全く同じ手順で起動してくれました。ただ、 emulators/virtio-kmod が 8.2 or 9 に対応しているとあったので Makefile を修正し て virtio-kmod をインストールしています。今のところ何も問題出ていません。

# diff -u /usr/ports/emulators/virtio-kmod/Makefile.org  /usr/ports/emulators/virtio-kmod/Makefile
--- /usr/ports/emulators/virtio-kmod/Makefile.org   2013-01-02 06:02:48.000000000 +0900
+++ /usr/ports/emulators/virtio-kmod/Makefile   2013-01-02 06:02:59.000000000 +0900
@@ -28,7 +28,7 @@
 
 .include <bsd.port.pre.mk>
 
-.if ${OSREL} != "8.2" && ${OSREL} != "9.0"
+.if ${OSREL} != "8.3" && ${OSREL} != "9.0"
 IGNORE=not supported $${OSREL} (${OSREL})
 .endif