monoの開発ブログ

Xenとpvopsカーネルをインストールする

Xenとpvopsカーネルをソースからインストールするメモ。

環境

OS (Dom 0) : CentOS 6.2

カーネル : jeremy's kernel (2.6.32)

Xen : 4.1.2

OS (Dom U) : CentOS 5.8

参考

以下のページを参考にしました。

準備

必要なパッケージをインストール

# yum -y groupinstall 'Development Tools'
# yum -y install yum-utils libsysfs-devel libidn-devel zlib-devel libcurl-devel libX11-devel gtk2-devel python-devel ncurses-devel libaio-devel pciutils-devel libuuid-devel udev dev86 gettext gnutls-devel openssl-devel flex bison wget git udev iproute python zlib openssl SDL-devel transfig texi2html ghostscript tetex-latex perl iasl glibc-devel.i686 glibc-devel.x86_64 mercurial

bridge-utilsにworkaroundを適用

RHEL6のbridge-utilsには独自にIGMP snoopingのサポートが追加されているようなのですが、これのせいでカーネルをRHEL以外のものに入れ替えてしまうとまともに動作しません。そのため、Fedora向けのrpmをインストールして代用します。

# wget http://dl.fedoraproject.org/pub/fedora/linux/releases/17/Fedora/source/SRPMS/b/bridge-utils-1.5-3.fc17.src.rpm
# rpm -ivh bridge-utils-1.5-3.fc17.src.rpm
# cd ~/rpmbuild/SPECS
# rpmbuild -ba --clean --rmsource --define 'dist .xen' bridge-utils.spec
# cd ~/rpmbuild/RPMS/x86_64
# rpm -Uvh bridge-utils-1.5-3.xen.x86_64.rpm

Xen

ダウンロード

# cd /usr/src
# wget http://bits.xensource.com/oss-xen/release/4.1.2/xen-4.1.2.tar.gz
# tar vzxf xen-4.1.2.tar.gz

インストール可能か確認

# cd /usr/src/xen-4.1.2/tools/check
# ./chk build
# ./chk install

make

# cd /usr/src/xen-4.1.2
# make -j2 xen tools

インストール

# make install-xen install-tools

pvopsカーネル

ダウンロード

# cd /usr/src
# git clone http://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-next
# cd /usr/src/linux-next
# git checkout -b xen/next-2.6.32 origin/xen/next-2.6.32

設定

# cp /boot/config-2.6.32-220.el6.x86_64 .config
# vi .config

以下の内容を.configの末尾に追加。

CONFIG_X86_IO_APIC=y
CONFIG_ACPI=y
CONFIG_ACPI_PROCFS=y
CONFIG_XEN_DOM0=y
CONFIG_PCI_XEN=y
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_XEN_PCIDEV_BACKEND=y
CONFIG_XEN_PRIVILEGED_GUEST=y
CONFIG_XEN_BALLOON=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_XEN_GNTDEV=y

CONFIG_XEN_BLKDEV_TAP=y

CONFIG_BRIDGE=y

インストール

# make oldconfig
# make -j2
# make modules_install
# make install

その他

grubの設定

# vi /boot/grub/grub.conf

Xenを起動するための項目を追加し、ついでにOS選択メニューを隠さないよう変更。内容は環境によって異なるので、他の項目を参考にしてください。

#hiddenmenu

title Xen (4.1.2) with CentOS (2.6.32.57)
      root (hd0,0)
      kernel /xen-4.1.2.gz
      module /vmlinuz-2.6.32.57 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=VolGroup/lv_root quiet rd_NO_DM
      module /initramfs-2.6.32.57.img

xenfs

# vi /etc/fstab

xenfsがマウントされないのでマウントするよう変更。

xenfs /proc/xen xenfs defaults 0 0

xencommons

デーモンを起動するよう設定。

# chkconfig xencommons on
# reboot

ブリッジ

Dom Uでネットワークを利用するためにブリッジを作成。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# vi /etc/sysconfig/network-scripts/ifcfg-xenbr0
# service network restart
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="00:00:00:00:00:00"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE="xenbr0"
DEVICE="xenbr0"
TYPE="Bridge"
BOOTPROTO="dhcp"
ONBOOT="yes"
DELAY="0"
NM_CONTROLLED="no"

Dom U

Kickstartの設定ファイル配信

Dom Uのインストールを自動で行うためにKickstartを利用します。

# yum install httpd
# service httpd start
# chkconfig httpd on
# vi /var/www/html/centos-ks.cfg

Kickstartの設定ファイルを記述。

install
url --url http://mirror.centos.org/centos/5/os/i386
lang en_US.UTF-8
keyboard jp106
network --device eth0 --bootproto dhcp
# openssl passwd -1 で生成したパスワードを貼り付け
rootpw --iscrypted
firewall --disabled
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Asia/Tokyo
bootloader --location=mbr --driveorder=xvda --append="console=xvc0"
reboot

clearpart --all --initlabel --drives=xvda
part /boot --fstype ext3 --size=100 --ondisk=xvda
part pv.2 --size=0 --grow --ondisk=xvda
volgroup VolGroup00 --pesize=32768 pv.2
logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=256 --grow --maxsize=512

%packages
@core

Dom UにOSをインストール

# mkdir ~/domu
# cd ~/domu
# dd if=/dev/zero of=/root/domu/centos.img oflag=direct bs=1M count=2048
# wget http://mirror.centos.org/centos/5/os/i386/images/xen/vmlinuz
# wget http://mirror.centos.org/centos/5/os/i386/images/xen/initrd.img
# vi centos-install

インストーラを起動するためのxlの設定ファイルを用意。

name = "centos"
kernel = "/root/domu/vmlinuz"
ramdisk = "/root/domu/initrd.img"
extra = "text ks=http://192.168.x.x/centos-ks.cfg"
memory = 512
disk = [ "tap:aio:/root/domu/centos.img,xvda,w" ]
vif = [ "bridge=xenbr0" ]
vcpus = 1
on_reboot = "destroy"
on_crash = "destroy"

インストーラを起動します。インストールは自動で行われるので見守っていればOKです。

# xl create -c centos-install

Dom Uを起動

# vi centos

通常起動のためのxlの設定ファイルを用意。

name = "centos"
bootloader = "/usr/bin/pygrub"
memory = 512
disk = [ "tap:aio:/root/domu/centos.img,xvda,w" ]
vif = [ "bridge=xenbr0" ]
vcpus = 1
on_reboot = "destroy"
on_crash = "destroy"

インストール用のイメージを外し、pygrubを使ってディスクイメージ内のOSを起動します。

# xl create -c centos

追記

2013/01/18 : いろいろ修正