monolithic kernel

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

July 06, 2012

    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/i386vmlinuz
    # wget http://mirror.centos.org/centos/5/os/i386initrd.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 : いろいろ修正