安装准备:
因为编译时需要从internet上下载一些补丁,所以先从外网下载。
hg clone
注:在下载之前需要先安装mercurial工具,这个是分布式版本控制软件,类似于svn,目前安装的是mercurial-1.3.1.tar.gz
把下载的文件发到内网。
tar zxf xen-3.4.2.tar.gz -C /usr
cp -r linux-2.6.18-xen.hg/ /usr/xen-3.4.2/
#studom是xen中的一个补丁集,可以增加性能,网上有说可以把这块去掉(具体步骤可以到网上去找),因为性能的原因这里还是没有去,在编译时会需要去下载一些文件:
grub-0.97.tar.gz
lwip-1.3.0.tar.gz
newlib-1.16.0.tar.gz
pciutils-2.2.9.tar.bz2
zlib-1.2.3.tar.gz
这里要提前下载,并把它放到/usr/xen-3.4.2/stubdom/下,就可以跳过这一步
cp stubdom/* /usr/xen-3.4.2/stubdom/
2、修改配置文件
vi buildconfigs/src.hg-clone
去掉从网上更新补丁的代码,最后的示例如下:
# Mercurial
HG ?= hg
LINUX_SRCDIR ?= linux-$(LINUX_VER)-xen.hg
# Repository to clone.
XEN_LINUX_HGREPO ?= $$(sh buildconfigs/select-repository $(LINUX_SRCDIR) $(LINUX_SRC_PATH))
# Set XEN_LINUX_HGREV to update to a particlar revision. XEN_LINUX_HGREV ?= tip $(LINUX_SRCDIR)/.valid-src: $(__XEN_LINUX_UPDATE)
set -e ; \
touch $@
3、编译
make dist
make install
mkinitrd -v -f initrd-2.6.18.8-xen.img 2.6.18.8-xen
mv initrd-2.6.18.8-xen.img /boot/
4、修改grub
cat /boot/grub/grub.conf
default=2
fallback=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-164.el5xen)
root (hd0,0)
kernel /xen.gz-2.6.18-164.el5
module /vmlinuz-2.6.18-164.el5xen ro root=/dev/VolGroup01/LogVol00 rhgb quiet
module /initrd-2.6.18-164.el5xen.img
title Red Hat Enterprise Linux Server-base (2.6.18-164.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup01/LogVol00 rhgb quiet
initrd /initrd-2.6.18-164.el5.img
title Xen 3.4.2 (2.6.18-8) / XenLinux 2.6
root (hd0,0)
kernel /xen-3.4.2.gz
module /vmlinuz-2.6.18.8-xen ro root=/dev/VolGroup01/LogVol00 rhgb quiet
module /initrd-2.6.18.8-xen.img
注:root这段需要跟前面的设置成一样,有的是root=LABEL=/,也有的是root=/dev/VolGroup01/LogVol00,如果不一致,会导致系统起不了
5、重启系统
reboot
6、现在可以用xm dmesg看下当前的版本,如果是3.4.2,说明编译成功
附:
1、在源代码的tools/check目录中有脚本,可以在编译前检查系统是否已经必需的软件包./chk build 及./chk install来进行检查
2、网上有些文档在编译时使用make world,进入Makefile可以发现,make world是由make clean,make kdelete 和make dist三个命令组成,前两个命令进行编译的回滚。而负责安装编译的命令是make dist,这里推荐使用make dist这个命令,因为这样不会删除拷进来的linux-2.6.18-xen.hg文件夹。
3、在编译过程中需要选择模块,如果想在编译前进行配置,可以使用命令:
make linux-2.6-xen-config CONFIGMENU=menuconfig
执行命令时系统会读取buildconfig目录中以mk开头的配置文件,请保证linux-2.6-xen-config的前面两段(linux-2.6)与buildconfig目录中的文件名一致。也可直接修改源代码目录中的build-linux-2.6.18-xen_x86_64/.config文件
4、这篇文档只在redhat5版本下进行测试,其他的系统可能方法会有小的差别
5、错误列表:
A.在mkinitrd可能出现下面错误:
No module dm-mem-cache found for kernel 2.6.18.8-xen, aborting.
No module dm-region_hash found for kernel 2.6.18.8-xen, aborting.
No module dm-message found for kernel 2.6.18.8-xen, aborting.
No module dm-raid45 found for kernel 2.6.18.8-xen, aborting.
解决方法:
(1)
#mkinitrd --without-dmraid -v -f /boot/initrd-2.6.18.8-xen.img 2.6.18.8-xen
(2)
#echo "DMRAID=no" > /etc/sysconfig/mkinitrd/noraid
#chmod 755 /etc/sysconfig/mkinitrd/noraid
B. 安装完毕,开机重启出现错误:
switchroot: mount failed: No such file or directory
Kernel panic - not syncing: Attempted to kill init!
解决办法:
见安装步骤3:(必须设置root为安装分区)
C.make world出现错误:
Unable to determine path to Linux source tree.
Falling back to linux-2.6.18-xen Mercurial repository.
可能是没有安装mercurial,参考安装步骤1解决
D.编译doc和tools时的错误
阅读(1470) | 评论(0) | 转发(0) |