原本以为 Ubuntu 和 Debian 很相似、差别不大,配置过程可以直接套用而不用大修改,试了才知道其实不是那么简单。Ubuntu 9.10 使用的是 grub 2.0,被证实一些 bug 会导致 Xen 不能在 grub 2.0 的引导下正常启动,所以一种 workaround 的办法就是删除掉 grub 2.0,使用老版本的 grub. 以下的操作记录使用最新的 Xen 4.0.0 源代码版本和 Ubuntu 9.10,
安装需要的软件包
首先最小化安装 Ubuntu,然后安装编译 Xen 和 Linux xen kernel 所需要的软件包:
$ sudo apt-get install gcc g++ make patch libssl-dev bzip2 gettext \
zlib1g-dev python libncurses5-dev libjpeg62-dev libx11-dev \
libgcrypt11-dev pkg-config bridge-utils bcc bin86 libpci-dev \
libsdl-dev python-dev texinfo libc6-dev uuid-dev bison flex fakeroot \
build-essential crash kexec-tools makedumpfile libncurses5 \
libncurses5-dev iasl gawk
$ sudo apt-get build-dep linux
安装 Xen hypervisor 和 tools
到 下载最新的 Xen 源代码,然后解开、编译、安装,标准的 Linux 软件源码安装动作:
$ tar zxvf xen-4.0.0.tar.gz
$ cd xen-4.0.0/
$ make xen tools stubdom
$ sudo make install-xen install-tools install-stubdom
上面 make stubdom 的时候会从网上自动下载一些东西,所以如果是用代理上网的话需要在自己根目录下的 .wgetrc 里加上代理服务器,以便 wget 能通过代理正常下载:
$ vi .wgetrc
http_proxy =
use_proxy = on
加入到自动启动脚本中:
$ sudo update-rc.d xend defaults 20 21
$ sudo update-rc.d xendomains defaults 21 20
安装 Xen 内核
下载 xen 内核,给内核打补丁:
$ cd
$ wget
$ tar -xjf linux-2.6.31.8.tar.bz2
$ wget
$ mkdir xenpatch-2.6.31.8
$ cd xenpatch-2.6.31.8
$ tar -xjf ../xen-patches-2.6.31-10.tar.bz2
$ cd ..
$ cd linux-2.6.31.8
$ for i in `ls ../xenpatch-2.6.31.8/`; do patch -p1 < ../xenpatch-2.6.31.8/"$i"; done
配置内核,直接把系统已经存在的配置文件拷过来然后在此基础上修改:
$ cp /boot/config-2.6.31-14-server .config
$ make menuconfig
Processor type and features --->
[*] Enable Xen compatible kernel
Networking support --->
Networking options --->
<*> 802.1d Ethernet Bridging
Device Drivers --->
XEN --->
[*] Privileged Guest (domain 0)
Backend driver support
Block-device backend driver
Block-device tap backend driver
Block-device tap backend driver 2
Network-device backend driver
PCI-device backend driver
SCSI backend driver
USB backend driver
<*> Block-device frontend driver
<*> Network-device frontend driver
SCSI frontend driver
USB frontend driver
<*> Framebuffer-device frontend driver
<*> Keyboard-device frontend driver
[*] Disable serial port drivers
<*> Export Xen attributes in sysfs
Xen version compatibility (3.3.0 and later) --->
3.3.0 and later
配置好内核参数以后,保存配置文件、退出配置界面就可以开始编译 Linux 内核了:
$ make
$ sudo make install
$ sudo make modules_install
$ sudo update-initramfs -c -k 2.6.31.8
$ sudo depmod 2.6.31.8
如果 Xen 加了内核模块的话加入 /etc/modules 文件以便启动时候自动加载:
$ sudo vi /etc/modules
...
netbk
blkbk
Ubuntu 9.10 默认用的是 grub 2.0,被证实一些 bug 会导致 Xen 不能正常启动,删除 grub 2.0 换成老版本的 grub:
$ sudo apt-get purge grub-pc
$ sudo rm /boot/grub/*
$ sudo apt-get install grub
$ sudo grub-install --recheck /dev/sda
$ sudo update-grub
$ sudo vi /boot/grub/menu.lst
重新启动系统,就应该可以进入 dom0 了:
$ sudo reboot
Troubleshooting
如果重新启动系统能正常进入 dom0 但是执行 xm 命令时报错:
$ sudo xm list
Error: Unable to connect to xend: No such file or directory. Is xend running?
检查 Xen 日志,发现 'Permission denied' 问题,这也是常见问题,是因为 xen tools 和内核不搭配:
$ vi /var/log/xen/xend.log
...
[2010-04-16 11:55:57 2320] INFO (SrvDaemon:219) Xend exited with status 1.
[2010-04-16 13:56:04 13207] INFO (SrvDaemon:331) Xend Daemon started
[2010-04-16 13:56:04 13207] INFO (SrvDaemon:335) Xend changeset: unavailable.
[2010-04-16 13:56:04 13207] ERROR (SrvDaemon:347) Exception starting xend ((13, 'Permission denied'))
...
$ vi /var/log/xen/xend-debug.log
...
Xend started at Fri Apr 16 13:56:04 2010.
domctl operation failed -- need to rebuild the user-space tool set?
sysctl operation failed -- need to rebuild the user-space tool set?
Exception starting xend: (13, 'Permission denied')
...
所以解决办法就是下载对应的 xen 内核版本和 xen 工具。
ubuntu 10.04 上编译安装 Xen 4.0.1 后的 xend 启动问题
因为 Ubuntu 10.04 不再官方维护 Xen 软件包了,所以以后要想在这两大平台上用到 Xen 的话就需要自己亲自下载 Xen 源代码编译安装(当然也可以用第三方源)。今天 VPSee 在一台 Ubuntu 10.04 服务器上升级 Xen 到 4.0.1 的时候遇到一个问题,按照 Ubuntu 9.10 上源码安装 Xen上的步骤编译和安装都正常,启动 Xen 内核也没问题,最后启动 xend 的时候报错如下:
$ sudo /etc/init.d/xend start
Traceback (most recent call last):
File "/usr/sbin/xend", line 36, in
from xen.xend.server import SrvDaemon
ImportError: No module named xen.xend.server
Traceback (most recent call last):
File "/usr/sbin/xend", line 36, in
from xen.xend.server import SrvDaemon
ImportError: No module named xen.xend.server
.Traceback (most recent call last):
File "/usr/sbin/xend", line 36, in
from xen.xend.server import SrvDaemon
ImportError: No module named xen.xend.server
.Traceback (most recent call last):
File "/usr/sbin/xend", line 36, in
from xen.xend.server import SrvDaemon
刚开始怀疑是 Python 版本问题,后来查了一下 /usr/sbin/xend 文件发现第36行:from xen.xend.server import SrvDaemon 在导入 SrvDaemon 就报错,xend 可能没有找到 xen tools,怀疑和安装路径有关。Ubuntu 上 Python 的默认安装在 /usr/lib/python2.6/ 下面,如果不设定 PYTHON_PREFIX_ARG 参数手动编译安装 xen tools 后也会默认安装到 /usr/lib/python2.6/,这样就出问题了,因为 xend 会默认从 /usr/local/lib/python2.6/dist-packages/ 找 script 和导入库,但是这时候 /usr/local/lib/python2.6/dist-packages/ 下面什么东西都没有。
所以要改变 install-tools 的默认安装路径到 /usr/local/lib/python2.6/dist-packages/ 下,PYTHON_PREFIX_ARG 不带任何参数就可以了:
$ sudo make install-tools PYTHON_PREFIX_ARG=
最后检查一下是否能正常启动 xend:
$ sudo /etc/init.d/xend start
$ sudo xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 3713 4 r----- 6.4