Gentoo Linux 2006.0 + Xen 3.0インストールメモ - Domain 0のインストール
Gentoo Linux 2006.0 (kernel 2.6.17-r4)にXen 3.0をインストールしたときのメモを公開します。 以下かなり適当に説明するので、何をやってるのかわからない人はhttp://gentoo-wiki.com/HOWTO_Xen_and_Gentooを読んでください(ここの方法でうまくいけば、このメモ読む必要なし)。
Domain 0
準備
% nano /etc/make.conf
/etc/make.conf:
# CFLAGSに-mno-tls-direct-seg-refsを追加します。これを追加しないと著しくパフォーマンスが低下するらしいです。 # gcc4未満で-Osフラグを使用している場合は-O2に変えましょう。じゃないとbroken codeを吐いてしまうらしいです。 CFLAGS="-O2 -march=i686 -pipe -mno-tls-direct-seg-refs"
% echo "sys-libs/glibc nptlonly' >> /etc/portage/package.use % # 世界を更新しましょう。Gentoo-Portage Wikiよりそのまま引用しました。 % # --newuseを指定していないのは単に忘れてたから?よくわからないので無視しましょう。 % emerge --emptytree --deep --ask --versose world % # etc-updateやっておかないと大変なことになりますよ。 % etc-update % # 必須ではありませんがnet.eth0を無効に。 % rc-update del net.eth0 default
Xenカーネルのインストール
まずはhypervisorとxen toolsをインストールします。
/etc/portage/package.keywords:
app-emulation/xen app-emulation/xen-tools sys-devel/dev86 sys-kernel/xen-sources
ソースコードもインストールしておきましょう。
% USE="symlink" emerge xen-sources
% # pam-loginがblockしてる場合はemerge -C pam-login % emerge --ask --verbose app-emulation/xen app-emulation/xen-tools % rc-update add xend default % nano /etc/conf.d/rc
/etc/conf.d/rc:
# /etc/conf.d/rcのRC_NET_STRICT_CHECKINGをloにしないと正しくブリッジできなかったり起動中にフリーズしたりします。 RC_NET_STRICT_CHECKING="lo"
http://gentoo-wiki.com/HOWTO_Xen_and_GentooにもあるようにXenカーネルのコンパイル方法は二つあります。一つはgenkernelを使う方法で、もう一つは手動でmakeする方法です。上のページではgenkernelを使うことを事実推奨しているのですが、僕の環境ではgenkernelを使うこと自体が新たな問題を発生させているような感じがしました(/dev/ram0を認識できなかったり)。実際、http://gentoo-wiki.com/Talk:HOWTO_Xen_and_Gentooには「There seems to be a problem with using Genkernel to create an initramfs for Xen domains.」と書かれています。もちろんgenkernelの簡易さもすばらしいので、一度genkernelでコンパイルして動作できるか確認してみるのが良いでしょう。
% ls -l /usr/src/linux ... /usr/src/linux -> linux-2.6.16.26-xen % emerge genkernel
/etc/genkernel.conf:
ARCH_OVERRIDE="xen0"
ちなみに僕の環境のgenkernel(3.4.0)とxen-sources(2.6.16.26)は相性が悪いようで、以下のような修正を加える必要があります。
/usr/share/genkernel/xen0/config.sh:
KERNEL_MAKE="make ARCH=i386"
カーネルをコンパイルします。
% genkernel --menuconfig --clean all % # [Xen-compatible] % # [*] 802.1d Ethernet Bridiging % # XEN -> frontendドライバを無効
コンパイルが終了すれば/boot以下にkernel-genkernel-[spec]とinitramfs-genkernel-[spec]が生成されますので、grub.confでそれを指定してやります。
/boot/grub/grub.conf:
title=Gentoo Linux Xen 2.6.16.26 root (hd0,0) kernel /boot/xen.gz dom0_mem=96M module /boot/kernel-genkernel-xen0-2.6.16.26-xen root=/dev/ram0 real_root=/dev/sda1 module /boot/initramfs-genkernel-xen0-2.6.16.26-xen
これでkernel panicを起こさずに無事起動できたらもうこのメモを読む必要はありません。悲しいことに僕の環境ではkernel panicが起こってしまったので(/dev/ram0が認識できない)、もう一つの方法である手動makeでコンパイルすることになります(genkernelの試行錯誤でかなりの時間をもっていかれた)。
% cd /usr/src/linux % make menuconfig % # Domain 0 Kernel Config Processor type and features ---> [Xen-compatible] XEN ---> [*] Privileged Guest (domain 0) < > PCI device backend driver <*> Block-device backend driver < > Block Tap support for backend driver (DANGEROUS) <*> Network-device backend driver [ ] Pipelined transmitter (DANGEROUS) <*> Network-device loopback driver < > TPM-device backend driver < > Block-device frontend driver < > Network-device frontend driver < > Block device tap driver < > TPM-device frontend driver [*] Scrub memory before freeing it to Xen [ ] Disable serial port drivers <*> Export Xen attributes in sysfs Networking ---> Networking options ---> [*] IP: tunneling [*] 802.1d Ethernet Bridging % make && make modules_install % cp vmlinuz /boot/vmlinuz-xen0-2.6.16.26-xen
その他必要なオプションを有効にしておきましょう。
カーネルをコンパイルします。
% cd /usr/src/linux % make && make modules_install % cp vmlinuz /boot/vmlinuz-xen0-2.6.16.26-xen
/boot/grub/grub.conf:
title=Gentoo Linux Xen 2.6.16.26 root (hd0,0) kernel /boot/xen.gz dom0_mem=96M module /boot/vmlinuz-xen0-2.6.16.26-xen root=/dev/sda1
これでもうまく起動できない場合は、問題にあわせてkernelオプションにdoscsiやacpi=offやnoapicなどを指定してみてください。また、kernelコンパイルオプションを見直すのも大切です。それでも解決できない場合は、あきらめるかkernelのデバッグをしましょう。
draft
- Category(s)
- linux
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/matsuyama/coreblogentry.2006-08-21.5174391052/tbping