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
参考
以下のページを参考にしました。
- Xenのビルド
- paravirt_opsなDOM0 - .mjtの日記復帰計画
- XenParavirtOps - Xen Wiki
- RHEL6Xen4Tutorial - Xen Wiki
- HowTos/Xen/InstallingCentOSDomU - CentOS Wiki
- Network Configuration Examples (Xen 4.1+) - Xen
準備
必要なパッケージをインストール
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.rpmrpm -ivh bridge-utils-1.5-3.fc17.src.rpmcd ~/rpmbuild/SPECSrpmbuild -ba --clean --rmsource --define 'dist .xen' bridge-utils.speccd ~/rpmbuild/RPMS/x86_64rpm -Uvh bridge-utils-1.5-3.xen.x86_64.rpm
Xen
ダウンロード
cd /usr/srcwget http://bits.xensource.com/oss-xen/release/4.1.2/xen-4.1.2.tar.gztar 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.2make -j2 xen tools
インストール
# make install-xen install-tools
pvopsカーネル
ダウンロード
cd /usr/srcgit clone http://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-nextcd /usr/src/linux-nextgit checkout -b xen/next-2.6.32 origin/xen/next-2.6.32
設定
cp /boot/config-2.6.32-220.el6.x86_64 .configvi .config
以下の内容を.configの末尾に追加。
CONFIG_X86_IO_APIC=yCONFIG_ACPI=yCONFIG_ACPI_PROCFS=yCONFIG_XEN_DOM0=yCONFIG_PCI_XEN=yCONFIG_XEN_DEV_EVTCHN=yCONFIG_XENFS=yCONFIG_XEN_COMPAT_XENFS=yCONFIG_XEN_SYS_HYPERVISOR=yCONFIG_XEN_GNTDEV=yCONFIG_XEN_BACKEND=yCONFIG_XEN_NETDEV_BACKEND=yCONFIG_XEN_BLKDEV_BACKEND=yCONFIG_XEN_PCIDEV_BACKEND=yCONFIG_XEN_PRIVILEGED_GUEST=yCONFIG_XEN_BALLOON=yCONFIG_XEN_SCRUB_PAGES=yCONFIG_XEN_GNTDEV=y
CONFIG_XEN_BLKDEV_TAP=y
CONFIG_BRIDGE=y
インストール
make oldconfigmake -j2make modules_installmake 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 onreboot
ブリッジ
Dom Uでネットワークを利用するためにブリッジを作成。
vi /etc/sysconfig/network-scripts/ifcfg-eth0vi /etc/sysconfig/network-scripts/ifcfg-xenbr0service 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 httpdservice httpd startchkconfig httpd onvi /var/www/html/centos-ks.cfg
Kickstartの設定ファイルを記述。
installurl --url http://mirror.centos.org/centos/5/os/i386lang en_US.UTF-8keyboard jp106network --device eth0 --bootproto dhcp# openssl passwd -1 で生成したパスワードを貼り付けrootpw --iscryptedfirewall --disabledauthconfig --enableshadow --enablemd5selinux --disabledtimezone --utc Asia/Tokyobootloader --location=mbr --driveorder=xvda --append="console=xvc0"reboot
clearpart --all --initlabel --drives=xvdapart /boot --fstype ext3 --size=100 --ondisk=xvdapart pv.2 --size=0 --grow --ondisk=xvdavolgroup VolGroup00 --pesize=32768 pv.2logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --growlogvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=256 --grow --maxsize=512
%packages@core
Dom UにOSをインストール
mkdir ~/domucd ~/domudd if=/dev/zero of=/root/domu/centos.img oflag=direct bs=1M count=2048wget http://mirror.centos.org/centos/5/os/i386vmlinuzwget http://mirror.centos.org/centos/5/os/i386initrd.imgvi 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 = 512disk = [ "tap:aio:/root/domu/centos.img,xvda,w" ]vif = [ "bridge=xenbr0" ]vcpus = 1on_reboot = "destroy"on_crash = "destroy"
インストーラを起動します。インストールは自動で行われるので見守っていればOKです。
xl create -c centos-install
Dom Uを起動
vi centos
通常起動のためのxlの設定ファイルを用意。
name = "centos"bootloader = "/usr/bin/pygrub"memory = 512disk = [ "tap:aio:/root/domu/centos.img,xvda,w" ]vif = [ "bridge=xenbr0" ]vcpus = 1on_reboot = "destroy"on_crash = "destroy"
インストール用のイメージを外し、pygrubを使ってディスクイメージ内のOSを起動します。
xl create -c centos
追記
2013/01/18 : いろいろ修正