ブログネタ
Linuxに関する運用 に参加中!

Linux kernel 3.0が無事リリースされました。

Linux kernel 3.0上でのDomain-0機能が動作しないと嘆いてましたが、動きました

で、私の中での一番の注目点は、Linuxでの仮想化ソフトウェアXenのDomain-0(通常の仮想化ソフトウェアではホストOSなんだけど、厳密にはイコールではない)のサポート。

Linux kernelのメインストリームには、2.6.37から取り込まれていたのだけれども、 大々的に3.0からXen Domain-0が取り込まれたよ!!っていうんで、3.0 カーネルを実際にビルドしてみました。

昨今は、RedHatさんは、Xenを取りやめてKVMを採用してるけど、KVMだとUNIXなBSD系がFreeBSD以外全滅なので、Xenを試してみた次第。

カーネルのビルド方法

ビルド方法は、私のblogだと、 [高速化]、[軽量化]Linuxカーネルkernelの再構築 on Fedora 12 13 14[15も対応]
hiroumauma君のLinux Kernel 3.0.0リリース/ カーネルのビルド方法
aruneko君の[Fedora15]Kernelの再構築
などを参考にしてください。
hiroumauma君のところでmake CCACHE指定してるけど、makeするだけで、~/.ccacheがアホほど出来てるからいらないと思う。
指摘しないのは、自信がなかったりwww

Xenのハイパーバイザーのインストール

まずは、Xenのハイパーバイザーのインストールをしましょう。(あくまで、ハイパーバイザーのみで、ここではまだ、XenのDomain-0機能はインストールされません。

Fedora、CentOS5系列などRHEL5系列クローンならとても簡単で、

su -c "yum 'groupinstall Virtualization' "
su -c "yum install xen"

とするだけ。

ただ、RHEL5系列クローンは確か、Xenのハイパーバイザーは3系列なので、 Xen4系列の目玉、ゲストOSを高速に動作させる準仮想化PV(Para Virtualization)のさらに高速化したPvopsが使えないかな?(未確認)

RHEL6系列のクローンだと、 Redhat Enterprise Linux 6 Xen 4.0 tutorialでソースからビルド。ガンバ\(^o^)/

Linux kernel 3.0をビルド

Linux ディストリ共通

で、Linux 3.0 をビルドして、 仮想化ソフトウェアXen 4.0.1ハイパーバイザー + Dom0カーネル2.6.32 インストール on Fedora 12 13 14 15!!のgrub.confの設定を施す。(nomodesetは要らない。)
そして、rhgbを削除。

残念ながら、[Xen]とずらーっと出た後、Linux kernel 3.0が起動したところで、、pci周りでずーっとエラー出っぱなし。
だったのは、rhgbである、plymouseが邪魔してた。

携帯でエラーメッセージを写真で取ってみたけど、メッセージが速すぎて、ぼやけまくり。
DVC00001

こういう時は、シリアルコンソールで出力出来るらしい。

FedoraでのXenのDomain-0カーネルのインストール

Fedoraだと、Linux kernel 3.0 に相当する、2.6.40がアップデートが来たので、

su -c "yum upgrade kernel"

として、2.6.40カーネルをインストール。
仮想化ソフトウェアXen 4.0.1ハイパーバイザー + Dom0カーネル2.6.32 インストール on Fedora 12 13 14 15!!のgrub.confの設定を施す。(これもnomodesetは要らない
そして、rhgbを削除。したら、再起動し、該当するカーネル起動すれば、OK。
参考:Xen 4.1 on Fedora 15 with Linux 3.0

以下は、Linux kernel 3.0が動いたので、もういらないかも。
一応、XenのDomain-0カーネルの安定版2.6.32.xのインストールも書いておきます。 
Linux kernel 3.0だとサポートされてない機能もあると思うので。


で、Xenのハイパーバイザー側の設定が悪いのか、LinuxカーネルのDomain-0対応が原因なのかを切り分けるために、 仮想化ソフトウェアXen 4.0.1ハイパーバイザー + Dom0カーネル2.6.32 インストール on Fedora 12 13 14!!の Dom-0カーネルの項目のところにあるように、myoungさんのリポジトリのLinuxカーネル2.6.32.xにXen Domain-0用のパッチを全部当ててあるカーネルをインストールすると、

yum --disablerepo=fedora,updates --enablerepo=dom0-kernel \
install kernel

(32 bitな方は、kernelをkernel-PAEに。)

したら、

su -c "xm list"

xen-fedora15-myoung
写真の通り、無事起動して、XenのホストOS相当のDomain-0が見えている。

ゲストOSというか、Domain-Uをインストールしようとすると、SELinuxなスーパーセキュリティーシステムに怒られたので、今のところ試してはいないけど、
(XenのメーリングリストでもSELinuxをdisableにしろと書かれている。)
あんまり、SELinuxをdisableにしたくないし、disableにせずにポリシー当てられるようになりたいので Domain-U(Dom-U:つまりいわゆるゲストOS)についての追求は今回は、このへんまで。

結論

というわけで、ちゃんとmyuongさんのLinux kernelを使うと、動作するし、
Linux kernel 3.0のDomain-0サポートされました。まだ不完全、未実装なものはあるとは思うけど。

これより下の情報は、念の為残しておくけど、 Linux kernel 3.0でXenのDomain-0機能が動きましたよっと。

Xen公式のカーネル、 Xen paravirt_ops for upstream Linux kernel に掲載されている、jeremyさんのカーネルをを私の方ではビルドしてないけど、これも結局、Linux kernelのバージョンはあくまで2.6.32.xだったりするので、Fedoraでビルドしてくれてるmyoungさんのカーネルと変わらんと思う。というか、myoungさんは、たぶん、これを使って、rpmにしてくれてるだけだろうし。

たぶん、XenserverのCitrixさんやoracle vmさんもここまで、検証してないか、今までのLinux kernel 2.6.32.x辺りを使っているんだと思う。Xen ハイパーバイザーのxen4系列の採用はしてるか、現在作業中かもしれないけど。

もしかしたら、CitrixさんやOracle vmさんは、Linux kernel 3.0でも起動するように、独自にパッチ当ててたりして対応するかもしれないけど。

あとは、私の方でも、何か設定が足らないのかもしれないかな?

Xen公式のwiki、 Xen paravirt_ops for upstream Linux kernelを見ても、 Linux kernel 3.1に取り込む予定の機能は、

xen-pciback backend driver to be used in dom0 to support PCI passthru to VMs.
support for VGA text console in dom0.
memory hotplug support for xen balloon driver (allows adding more memory to the VM online / on-the-fly).
self-balloon driver to decrease memory in the guest and make the swap pages be shuffled by tmem to be compressed/shared/etc.
tmem driver to shuffle file-system and swap pages between guests as appropiate.
Xen PCI glue code cleanup.
Xen MMU debugfs tracing API support.
blkback providing completion latency that follows the hardware's completion latency.
Balloon expansion (using memory hotplug) to grow bigger than the initial domU memory size. 

となっていて、PCIがどうたらな項目が幾つかあったりする。
PCIパススルーなxen-pciback backend driverがXenのDomain-0の起動に必須なものかどうかは、 私の勉強不足で分からないけど、上の方でpciエラーがズラリと出るので、たぶん、この辺りが起動しない理由だと思う。

Linux kernel 3.0と、myoungさんのconfigとのdiffを取ってみると、(実際は、sortしたりして比較してる。)

diff  -u .config-no-customize-XEN .config-2.6.32-xen-XEN |grep XEN
--- .config-no-customize-XEN	2011-07-31 12:29:59.452766423 +0900
+++ .config-2.6.32-xen-XEN	2011-07-31 12:30:17.628765217 +0900
-# CONFIG_XEN_DEBUG is not set
+# CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER is not set
+# CONFIG_XEN_PCIDEV_BACKEND_PASS is not set
+# CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
+# CONFIG_XEN_PCIDEV_BE_DEBUG is not set
+CONFIG_ACPI_PROCESSOR_XEN=y
 CONFIG_HVC_XEN=y
-CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
+CONFIG_MICROCODE_XEN=y
 CONFIG_NETXEN_NIC=m
 CONFIG_PCI_XEN=y
 CONFIG_SWIOTLB_XEN=y
 CONFIG_XENFS=m
 CONFIG_XEN_BACKEND=y
 CONFIG_XEN_BALLOON=y
+CONFIG_XEN_BLKBACK_PAGEMAP=m
 CONFIG_XEN_BLKDEV_BACKEND=m
 CONFIG_XEN_BLKDEV_FRONTEND=m
+CONFIG_XEN_BLKDEV_TAP=m
 CONFIG_XEN_COMPAT_XENFS=y
 CONFIG_XEN_DEBUG_FS=y
 CONFIG_XEN_DEV_EVTCHN=m
 CONFIG_XEN_DOM0=y
-CONFIG_XEN_FBDEV_FRONTEND=y
+CONFIG_XEN_DOM0_PCI=y
+CONFIG_XEN_FBDEV_FRONTEND=m
 CONFIG_XEN_GNTDEV=m
-CONFIG_XEN_GRANT_DEV_ALLOC=m
+CONFIG_XEN_KBDDEV_FRONTEND=m
 CONFIG_XEN_MAX_DOMAIN_MEMORY=128
+CONFIG_XEN_MCE=y
 CONFIG_XEN_NETDEV_BACKEND=m
 CONFIG_XEN_NETDEV_FRONTEND=m
+CONFIG_XEN_PCIDEV_BACKEND=m
+CONFIG_XEN_PCIDEV_BACKEND_VPCI=y
 CONFIG_XEN_PCIDEV_FRONTEND=m
+CONFIG_XEN_PCI_PASSTHROUGH=y
 CONFIG_XEN_PLATFORM_PCI=m
 CONFIG_XEN_PRIVILEGED_GUEST=y
 CONFIG_XEN_PVHVM=y
+CONFIG_XEN_S3=y
 CONFIG_XEN_SAVE_RESTORE=y
 CONFIG_XEN_SCRUB_PAGES=y
 CONFIG_XEN_SYS_HYPERVISOR=y
 CONFIG_XEN_WDT=m
-CONFIG_XEN_XENBUS_FRONTEND=y
+CONFIG_XEN_XENBUS_FRONTEND=m

となっていて、PCI周りが何個かとblkdev、blkback辺りが引っかかってるかな。blkdevやblkbackが何のことやら分からんけども。(PCIの項目で is not setがあるところは、ドライバーを選べるだけ。)

というわけで、私の調査では、Linux kernel 3.0での XenのDomain-0サポートは、2011年 8月 7日 日曜日 10:30:17 JST現在、ちゃんと動きましたよっと。

それでも、Compizやら、Gnome-Shellは動作してくれないですね。残念。


Linux kernel 2.6.32.xなDomain-0でも、KMSをサポートしきれてないので、nomodesetをgrub.confに指定する必要があったりする。なので、たぶん基本的には、Gnome-ShellやらCompizやらのOpenGLは使えない…

VGAパススルーは、Xen側では実装してるっぽいので、Linux kernel 3.0がXenのDom-0サポートを進めてくれるまで待つしかなさそう…
と、思ったけど、Linux kernel 3.0 を使ってもまだ、VGAパススルーが出来てないっぽい。
もしかしたら、グラフィックボードが私は、オンボードなのでできないかもしれない。

というか、大人しく、Virtual Boxを使ったほうが、Addtionなんとかで、OpenGLを使いつつ、ゲストOSを使えるので、楽かもね。
libvirtから、CUIでいじれるっぽいし。

たぶん、Xenの本だとこの本が一番整っていると思うけど、Linux kernelは、2.6.32どころかもっと古く、XenハイパーバイザーもXen3系列だと思う。
もちろん、日本で一番、充実したXenの本であることは確かだけども。
今回の記事でなんと、このXen徹底入門の長谷川さんから、Twitterでアドバイスを貰えたりした…
しかも、倉木麻衣 ちゃん繋がりで… 
Twitterっれどこでどんな趣味で繋がるか分かりませんね…(´・ω・`)

Xen徹底入門 第2版 (CD-ROM付)
Xen徹底入門 第2版 (CD-ROM付)
クチコミを見る
すべてわかる仮想化大全2011 (日経BPムック)
すべてわかる仮想化大全2011 (日経BPムック)
クチコミを見る