install xen-4.0 from source

以下指令使用root用户执行。

 sudo su - apt-get install bcc bin86 gawk bridge-utils iproute libcurl3 libcurl4-openssl-dev bzip2 module-init-tools transfig tgif texinfo texlive-latex-base texlive-latex-recommended texlive-fonts-extra texlive-fonts-recommended pciutils-dev mercurial build-essential make gcc libc6-dev zlib1g-dev python python-dev python-twisted libncurses5-dev patch libvncserver-dev libsdl-dev libjpeg62-dev iasl libbz2-dev e2fslibs-dev git-core uuid-dev hg clone http://xenbits.xen.org/xen-4.0-testing.hg cd xen-4.0-testing.hg

这个指令会下载linux-2.6-pvops.git,需要较长时间

 make world

这个指令会安装xen.gz和vmlinuz-2.6.31到系统/boot目录下,vmlinuz-2.6.31这个linux kernel文件在下面会重新设置参数并生成,可查看后面linux kernel编译步骤详细说明。

 make install

不修改.config文件,可以直接重新生成xen,kernels,tools,docs到dist目录中

 make dist

修改了.config文件,可以用以下指令重新生成kernel

 make linux-2.6-xen-config CONFIGMODE=menuconfig # (or xconfig) make linux-2.6-xen-build make linux-2.6-xen-install

linux kernel编译步骤

 git clone git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen

这个指令会从xen.git仓库中下载props dom0 kernel 2.6.31.x,大概是1.6G左右,需要不少时间

 cd linux-2.6-xen

这个指令的作用是检查源码是否有.o文件和依赖问题,从全新的源码编译时不需要这一步。make mrproper主要清除环境变量及配置文件

 make mrproper

设置linux kernel编译参数,在图形界面中输入斜杠"/"可以查询"XEN_DOM0"、"PAE"、"HIGHPTE"等参数设置

 make menuconfig

退出并保存配置文件之后,手工调整.config文件,并且在内核参数设置中需要注意:

  1. 如果编译32位的内核,XEN需要有PAE支持,(Processor type and features -> High Memory Support (64GB) -> PAE (Physical Address Extension) Support),对于64位内核PAE不需要,32位的操作系统最大内存支持不到4G,安装了PAE之后可以支持64G。
  2. 编译32位的内核,必须设置CONFIG_HIGHPTE=n。
  3. 要为DOM0开启ACPI功能。
  4. 在.config文件中添加以下选项,并重新运行make menuconfig,并检查XEN_DOM0等参数设置状态
CONFIG_ACPI_PROCFS=yCONFIG_XEN=yCONFIG_XEN_MAX_DOMAIN_MEMORY=32CONFIG_XEN_SAVE_RESTORE=yCONFIG_XEN_DOM0=yCONFIG_XEN_PRIVILEGED_GUEST=yCONFIG_XEN_PCI=yCONFIG_PCI_XEN=yCONFIG_XEN_BLKDEV_FRONTEND=mCONFIG_NETXEN_NIC=mCONFIG_XEN_NETDEV_FRONTEND=mCONFIG_XEN_KBDDEV_FRONTEND=mCONFIG_HVC_XEN=yCONFIG_XEN_FBDEV_FRONTEND=mCONFIG_XEN_BALLOON=yCONFIG_XEN_SCRUB_PAGES=yCONFIG_XEN_DEV_EVTCHN=yCONFIG_XEN_BACKEND=yCONFIG_XEN_BLKDEV_BACKEND=yCONFIG_XEN_NETDEV_BACKEND=yCONFIG_XENFS=yCONFIG_XEN_COMPAT_XENFS=yCONFIG_XEN_XENBUS_FRONTEND=mCONFIG_XEN_PCIDEV_FRONTEND=y

在rhel5和centos5中,需要在.config文件中加入以下2个参数:

CONFIG_SYSFS_DEPRECATED=yCONFIG_SYSFS_DEPRECATED_V2=y

要使用initrd,编译内核时必须选择以下两项:

CONFIG_BLK_DEV_RAM=yCONFIG_BLK_DEV_INITRD=y

重新运行menuconfig,检查配置,最后保存配置文件。

 make menuconfig make install

这个指令会将内核映象和相应的System.map拷贝到/boot目录下。

可以查看指令运行完成后,在/boot目录下新增加的文件列表。

 ll --sort=time /boot/total 214594-rw-r--r--  1 root root  109K 2010-07-02 11:51 config-2.6.31.13-rw-r--r--  1 root root  1.6M 2010-07-02 11:51 System.map-2.6.31.13-rw-r--r--  1 root root  3.9M 2010-07-02 11:51 vmlinuz-2.6.31.13...

生成初始化镜像文件(initialed ramdisk)

 cd /boot depmod 2.6.31.13# ubuntu中生成初如化镜像文件的指令 mkinitramfs -o initrd-2.6.31-xen.img 2.6.31.13# 或者是用这个指令(CentOS5) mkinitrd -v -f --with=aacraid --with=sd_mod --with=scsi_mod initrd-2.6.31-xen.img 2.6.31.13 vi /boot/grub/menu.lsttitle Xen 4.0, dom0 Linux kernel 2.6.31.13kernel /boot/xen.gz dom0_mem=512Mmodule /boot/vmlinuz-2.6.31.13 root=/dev/sda7 ro nomodesetmodule /boot/initrd-2.6.31-xen.img

注:一般内核编译中会有以下一些步骤

 make menuconfig make make bzImage make modules make modules_install make install

References

  1. http://wiki.xensource.com/xenwiki/Xen4.0
  2. http://wiki.xensource.com/xenwiki/XenParavirtOps