とりあえず CPU が PAEに対応していない Pentium M 搭載ノートPCに Xen での仮想化環境を構築してみた。といいつつ、まだ Domain-U は構築していないので油断はできない。
「PAE非対応のマシンにはインストール不可」(2007/9/25 mir the developer) 池田さんの記事をみてあきらめていた人、「Debian etch への PAE 非対応 Xen のインストール」(2008/5/22 竜宮城の道しるべ) makurakaiさんの記事をみて Debian かよ~と嘆いてた人は試してみてください。
基本環境
- Pentium M 1.4GHz ←PAE非対応
- Memory 2GB
- CentOS 5.3 (kernel 2.6.18-128.2.1.el5) インストール済み
この環境に yum で Xen 環境をインストールするとパッケージとしてはインストールされるが、ブートさせるとPAEに対応していないということでカーネルパニックで実行できません。
それで、ソースを入手して PAE を要求しない xen + dom0 を作れれば OK との理解で調査に乗り出した結果、少し前のバージョンの Xen 3.2.3 の以下のファイルをhttp://www.xen.org/download/index_3.2.3.htmlよりダウンロードしてインストールすることで、Xen環境が利用できるようになりました。
- Xen 3.2.3 official source distribution tarball
- Linux 2.6.18 with Xen 3.2.x support source tarball
ちなみに、Xen 3.2.3 になった経緯は、Xen 3.3以降の dom0 用 Linux Kernel のコンフィグレーションは XEN を有効にすると PAE が必ず要求されるのようになっていたため、.config から PAE を削除して無理やりコンパイルしてもうまく動作しなかったためです。
menuconfig 用のファイルはこんな感じになっていました。
linux-2.6.18-xen-3.2.0/arch/i386/Kconfig config X86_XEN bool "Xen-compatible" select XEN select X86_UP_APIC if !SMP && XEN_PRIVILEGED_GUEST select X86_UP_IOAPIC if !SMP && XEN_PRIVILEGED_GUEST select SWIOTLB help Choose this option if you plan to run this kernel on top of the Xen Hypervisor.
linux-2.6.18-xen-3.3.0/arch/i386/Kconfig
config X86_XEN
bool "Xen-compatible"
select XEN
select X86_PAE
select X86_UP_APIC if !SMP && XEN_PRIVILEGED_GUEST
select X86_UP_IOAPIC if !SMP && XEN_PRIVILEGED_GUEST
select SWIOTLB
help
Choose this option if you plan to run this kernel on top of the
Xen Hypervisor.
公式な文章として PAE が必須になったとは探せなかったのですが、私の理解は以上です。最新版も PAE なしで動かせるのなら知りたい。
まぁ Xen のバージョンが古いですが、CentOS 5.3 の yum/rpm ファイルでインストールされるビルド済み Xen は Xen 3.0.3 ベースのようでしたし、Kernel も 2.6.18 ベースでしたので、マイナーパッチはいろいろあるだろうとは思いましたが、良しとしました。
で、実際のコンパイル、インストールは ko-jiya さんのサイトの「Xenのビルド」を参考にアレンジして利用しました。
ポイントは以下です。
1. Xen と dom0 用 Kernel は別々にビルドする
2. libc の TLS警告は ldconfig で解決し、リビルドは不要
xen-3.2.3/Makefile を修正して kernel のビルドをしないよう以下のように修正を行う。
前後中略 install: install-xen install-tools dist: dist-xen dist-tools
xen-3.2.3/Config.mk の PAE の有効をコメントアウトしておく
前後中略 #ifeq ($(XEN_TARGET_ARCH),x86_32) #XEN_TARGET_X86_PAE ?= y #endif
で、ビルドインストール。
別途ダウンロードしてある linux-2.6.18-xen-3.2.0 のビルドは buildconfigs/linux-defconfig_xen_x86_32 を .config にコピーして make menuconfig を実施します。xen0 用は利用していません。
とりあえず、Processor type and features を設定
- Processor family => Pentimu M
- High Memory Support => 4GB
あとはお好みで!
最後に勝手に追加される grub.conf のエントリーを修正してリブート!!
title CentOS (2.6.18.8-xen-3.2.3) root (hd0,0) kernel /xen-3.2.gz dom0_mem=256M module /vmlinuz-2.6.18.8-xen-3.2.3 ro root=/dev/VolGroup00/LogVol00 quite module /initrd-2.6.18.8-xen-3.2.3.img
Xen をカーネルとして読み込み、Linux はモジュールとしてロードする設定になります。dom0に割り当てるメモリもなんとなく指定してみました。
ここで、起動中に以下の警告がでると思います。
*************************************************************** ** WARNING: Currently emulating unsupported memory accesses ** ** in /lib/tls glibc libraries. The emulation is ** ** slow. To ensure full performance you should ** ** install a 'xen-friendly' (nosegneg) version of ** ** the library, or disable tls support by executing ** ** the following as root: ** ** mv /lib/tls /lib/tls.disabled ** ** Offending process: grep (pid=4748) ** ***************************************************************
xen-friendly な nosegneg version のライブラリをインストールしろとのことなのですが、インストール済みのパッケージ glibc-2.5-34 では一緒に nosegneg version もインストールされているようです。/lib/i686/nosegneg/lib* がそれです。
しかしデフォルトでは利用するようになっていないので、ライブラリの検索パスに追加してあげます。
[追記] 今のところ問題ないが ldconfig は一番先にやっておいた方が良いかも。
# echo /lib/i686/nosegneg/ > /etc/ld.so.conf.d/xen-nosegneg.conf # ldconfig ※ネットでは echo 'hwcap 0 nosegneg' とする記述が良くみられます。 たぶんそれが正解?
これで、TLSを無効にしてある libc が利用されるようになり、警告はでなくなり、Xen + dom0 の構築は終了です!
お疲れさまでした。
と、こんな環境を利用する人は、まぁ、私くらいでしょうかね。PAE 問題があると知らず安易にPenM なノートPCを入手してしまったのが始まりでした。しかし、2GBメモリー搭載で1万5千円は、そりゃ魅力でしょう。
余談?
このTLS問題は「EC2上にCentOS5.3をインストールする」(firegoby の miya さん)によると、EC2上でも出るようなので、libc のリビルド無しに解決できるのならそれに越したことはなさそうです。
コメント
ほほー。
いいことを知りました。
今度試してみます。
トラックバックありがとうございます。
さっそくのコメントありがとうございます。
お役に立てるかまだわかりませんが、きっかけになれば幸いです。