在 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)Backenddriversupport

Block-devicebackenddriver

Block-devicetapbackenddriver

Block-devicetapbackenddriver2

Network-devicebackenddriver

PCI-devicebackenddriver

SCSIbackenddriver

USBbackenddriver

<*>Block-devicefrontenddriver

<*>Network-devicefrontenddriver

SCSIfrontenddriver

USBfrontenddriver

<*>Framebuffer-devicefrontenddriver

<*>Keyboard-devicefrontenddriver

Disableserialportdrivers<*>ExportXenattributesinsysfs

Xenversioncompatibility(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工具。

相关推荐