在 Ubuntu 上源码安装 Xen
这篇文章是在写在Debian上源码安装Xen的时候一起写的,原本以为Ubuntu和Debian很相似、差别不大,配置过程可以直接套用而不用大修改,试了才知道其实不是那么简单。Ubuntu9.10使用的是grub2.0,被证实一些bug会导致Xen不能在grub2.0的引导下正常启动,所以一种workaround的办法就是删除掉grub2.0,使用老版本的grub.VPSee不喜欢在服务器上使用Ubuntu的最新版本就是因为Ubuntu更新速度太快,版本发行太频繁,导致很多旧版本的问题还没解决就要开始赶鸭子上架推新版本,对了,今天好像是Ubuntu10.04LTS的发行日。以下的操作记录使用最新的Xen4.0.0源代码版本和Ubuntu9.10,这里还有在CentOS下源码安装Xen的过程。
安装需要的软件包
首先最小化安装Ubuntu,然后安装编译Xen和Linuxxenkernel所需要的软件包:
$sudoapt-getinstallgccg++makepatchlibssl-devbzip2gettext\
zlib1g-devpythonlibncurses5-devlibjpeg62-devlibx11-dev\
libgcrypt11-devpkg-configbridge-utilsbccbin86libpci-dev\
libsdl-devpython-devtexinfolibc6-devuuid-devbisonflexfakeroot\
build-essentialcrashkexec-toolsmakedumpfilelibncurses5\
libncurses5-deviasl
$sudoapt-getbuild-deplinux
安装Xenhypervisor和tools
到http://www.xen.org/products/xen_source.html下载最新的Xen源代码,然后解开、编译、安装,标准的Linux软件源码安装动作:
$tarzxvfxen-4.0.0.tar.gz
$cdxen-4.0.0/
$makexentoolsstubdom
$sudomakeinstall-xeninstall-toolsinstall-stubdom
上面makestubdom的时候会从网上自动下载一些东西,所以如果是用代理上网的话需要在自己根目录下的.wgetrc里加上代理服务器,以便wget能通过代理正常下载:
$vi.wgetrc
http_proxy=http://proxy.vpsee.com:3128/
use_proxy=on
加入到自动启动脚本中:
$update-rc.dxenddefaults2021
$update-rc.dxendomainsdefaults2120
安装Xen内核
下载xen内核,给内核打补丁:
$cd
$wgethttp://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.8.tar.bz2
$tar-xjflinux-2.6.31.8.tar.bz2
$wgethttp://gentoo-xen-kernel.googlecode.com/files/xen-patches-2.6.31-10.tar.bz2
$mkdirxenpatch-2.6.31.8
$cdxenpatch-2.6.31.8
$tar-xjf../xen-patches-2.6.31-10.tar.bz2
$cd..
$cdlinux-2.6.31.8
$foriin`ls../xenpatch-2.6.31.8/`;dopatch-p1<../xenpatch-2.6.31.8/"$i";done
配置内核,直接把系统已经存在的配置文件拷过来然后在此基础上修改:
$cp/boot/config-2.6.31-14-server.config
$makemenuconfig
Processortypeandfeatures--->
EnableXencompatiblekernelNetworkingsupport--->Networkingoptions--->
<*>802.1dEthernetBridging
DeviceDrivers--->
XEN--->
PrivilegedGuest(domain0)BackenddriversupportBlock-devicebackenddriver
Block-devicetapbackenddriver
Block-devicetapbackenddriver2
Network-devicebackenddriver
PCI-devicebackenddriver
SCSIbackenddriver
USBbackenddriver
<*>Block-devicefrontenddriver
<*>Network-devicefrontenddriver
SCSIfrontenddriver
USBfrontenddriver
<*>Framebuffer-devicefrontenddriver
<*>Keyboard-devicefrontenddriver
Disableserialportdrivers<*>ExportXenattributesinsysfsXenversioncompatibility(3.3.0andlater)--->
3.3.0andlater
配置好内核参数以后,保存配置文件、退出配置界面就可以开始编译Linux内核了:
$make
$sudomakeinstall
$sudomakemodules_install
$sudoupdate-initramfs-c-k2.6.31.8
$sudodepmod2.6.31.8
如果Xen加了内核模块的话加入/etc/modules文件以便启动时候自动加载:
$sudovi/etc/modules
...
netbk
blkbk
Ubuntu9.10默认用的是grub2.0,被证实一些bug会导致Xen不能正常启动,删除grub2.0换成老版本的grub:
$sudoapt-getpurgegrub-pc
$sudorm/boot/grub/*
$sudoapt-getinstallgrub
$sudogrub-install--recheck/dev/sda
$sudoupdate-grub
$sudovi/boot/grub/menu.lst
重新启动系统,就应该可以进入dom0了:
$sudoreboot
Troubleshooting
如果重新启动系统能正常进入dom0但是执行xm命令时报错:
$sudoxmlist
Error:Unabletoconnecttoxend:Nosuchfileordirectory.Isxendrunning?
检查Xen日志,发现'Permissiondenied'问题,这也是常见问题,是因为xentools和内核不搭配:
$vi/var/log/xen/xend.log
...
[2010-04-1611:55:572320]INFO(SrvDaemon:219)Xendexitedwithstatus1.
[2010-04-1613:56:0413207]INFO(SrvDaemon:331)XendDaemonstarted
[2010-04-1613:56:0413207]INFO(SrvDaemon:335)Xendchangeset:unavailable.
[2010-04-1613:56:0413207]ERROR(SrvDaemon:347)Exceptionstartingxend((13,'Permissiondenied'))
...
$vi/var/log/xen/xend-debug.log
...
XendstartedatFriApr1613:56:042010.
domctloperationfailed--needtorebuildtheuser-spacetoolset?
sysctloperationfailed--needtorebuildtheuser-spacetoolset?
Exceptionstartingxend:(13,'Permissiondenied')
...
所以解决办法就是下载对应的xen内核版本和xen工具。