2016-04-26

前言

一直习惯了QEMU && KVM组合,最近准备尝试一下Xen,遇到了很多坑,为了方便他人少踩坑,所以写了此文。回首编译Xen的过程,也就不难理解当年社区为啥不看好Xen了,QEMU && KVM的结构不仅从架构上来简单清晰,安装使用也很方便,反观Xen,各种坑。不过自己躺一遍这些坑倒是能够提高一下耐心和对Xen的理解。

环境

  1. Dom0:CentOS 6.7 x64,kernel version:3.18.24
  2. Xen:4.5.4

相关软件安装

可以从Compiling Xen From Source文中找到,具体如下:

yum groupinstall "Development Tools"
yum-builddep xen
yum install transfig wget tar less texi2html libaio-devel dev86 glibc-devel e2fsprogs-devel gitk mkinitrd iasl xz-devel bzip2-devel
yum install pciutils-libs pciutils-devel SDL-devel libX11-devel gtk2-devel bridge-utils PyXML qemu-common qemu-img mercurial texinfo
yum install libidn-devel yajl yajl-devel ocaml ocaml-findlib ocaml-findlib-devel python-devel uuid-devel libuuid-devel openssl-devel
yum install python-markdown pandoc systemd-devel glibc-devel.i686

安装dev86如下:

wget http://mirror.centos.org/centos/6/os/x86_64/Packages/dev86-0.16.17-15.1.el6.x86_64.rpm
rpm -ivh dev86-0.16.17-15.1.el6.x86_64.rpm

安装Xen

可从Xen官网或者使用git下载,使用如下命令编译安装Xen

./configure --prefix=/usr
make dist
make install
ldconfig

此时在/boot下面应该已经会有Xen的内核了,之前卡在这里就是在CentOS7下面编译Xen老是提示一个错误”set sse instruction disable”,然后折腾了好久,后来实在搞不定就换成6.7了,开源的东西伤不起,估计跟gdb的sse编译选项有关。

安装Dom0内核

这个用新一点的,Linux版本都4.x了,总不能还用2.6的吧内核,主要是早期对Xen支持不行,我用的是3.18。

make menuconfig进去之后死活找不到Xen的相关选项。特别是vpsee的那边流传甚广的文章对此也没有说清楚,可能是人家太熟悉了,直接滤过,导致走了不少弯路。后来才在官网找到了(所以,大家不要偷懒,该看文档还是要老老实实看)

make menuconfig进入配置界面之后,因为有一些依赖关系,所以最重要的首先需要在

Processor type and features | Linux guest support

打开,一股脑儿把这下面的都打开。后面的各种Xen选项就开了,Xen支持的几个选项是在以下几个项目中:

Processor type and features | Linux guest support
Device Drivers | Character devices
Device Drivers | Block device 
Device Drivers | Network device support
Device Drivers | Xen driver support

把上面与Xen有关的都最后还有一个CONFIG_CLEANCACHE和CONFIG_FRONTSWAP的选项也是在Processor Type and features,这里有个小tips就是在make menuconfig之后,直接输入”/”输入相关的关键字就可以查找对应的选项在哪个配置项里面。配置完了之后记得对照Mainline Linux Kernel Configs上面的检查一下。之后就可以愉快的编译内核了

make 
make modules_install
make install

添加启动条目

内核安装完了之后,在/boot下面就应该能够看见新内核的镜像了,在/boot/grub/menu.lst下面应该也会有一个新的启动项,复制新内核的启动条目放到最后,将root下面添加一行

kernel /xen-4.5.gz

之前的kernel和initrd都改成module,更改后类似下面这样

title Xen
root(hd0,0)
kernel /xen-4.5.gz
module /vmlinuz-3.18.24 xxxxxxxxxx
module /initramfs-3.18.24.img

其他

重启之后选择Xen启动,进入系统使用使用xl命令可能还会有错,如果是so找不到可以找到安装目录做一个软连接,如果是

xc: error: Could not obtain handle on privileged command interface (2 = No such file or directory): Internal error

需要再/etc/fstab中添加一行

none /proc/xen xenfs defaults 0 0

最后记得把xencommons设为开机启动

chkconfig --level 5 xencommons on

参考

  1. Compiling Xen From Source
  2. Mainline Linux Kernel Configs
  3. 在 CentOS 7.0 上源码安装 Xen 4.5


blog comments powered by Disqus