原文地址:http://blog.csdn.net/ariesjzj/article/details/8570566

Xen作为一种应用广泛的虚拟机方案,无论是在工业还是教育领域都发挥着巨大的作用。Xen不仅有其引以为豪的Paravirtualization实现,还有基于硬件支持的HVM实现。对于Xen,Ubuntu中有现成的解决方案,只要通过一些apt-get install(ubuntu-xen-desktop, xen-hypervisor-4.1-amd64, xen-tools, xen-utils)命令即可傻瓜式安装。但实际中,我们出于种种原因(比如源中的版本不够新,或是加了自己的补丁等等),还是倾向于自己DIY。

本文的环境为VirtualBox 4.2.6 + Xen 4.1.2 + Ubuntu 12.04(64位)。

一、编译安装Xen

1. 编译Xen之前需要装一些软件

# apt-get install bcc bin86 gawk bridge-utils iproute libcurl3 libcurl4-openssl-dev bzip2 module-init-tools transfig tgif texinfo texlive-latex-base texlive-latex-recommended texlive-fonts-extra texlive-fonts-recommended pciutils-dev mercurial build-essential make gcc libc6-dev zlib1g-dev python python-dev python-twisted libncurses5-dev patch libvncserver-dev libsdl-dev libjpeg62-dev iasl libbz2-dev e2fslibs-dev git-core uuid-dev ocaml ocaml-findlib libx11-dev libc6-xen gcc-multilib xz-utils

注意有些不是必须的。如果编译的是Xen 4.2,先运行configure可以知道缺了什么。  


2. 在http://xen.org/download/index_4.1.2.html上下载Xen的源码包,根据README编译安装:

# tar zxvf xen-4.1.2.tar.gz

# cd xen-4.1.2

# make world

# make install

如果是要在另一台机子上部署的用make dist。

编译过程中会通过git或hg从网上下源码,所以要确保网络连通(如果是通过代理上网参考 http://blog.csdn.net/ariesjzj/article/details/8573872)。


3. 对于Xen的管理工具,Xen 4.1后的趋势是xl逐渐替代xm。用哪个可以在配置文件中设置:

/etc/default/xen
TOOLSTACK="xm"


4.  设置启动服务

# update-rc.d xencommons defaults 19 18
# update-rc.d xend defaults 20 21
# update-rc.d xendomains defaults 21 20
# update-rc.d xen-watchdog defaults 22 23

和启动模块,在/etc/modules中添加:

xen-evtchn
xen-gntdev
xen-netback
xen-blkback
xenfs
blktap


5. 安装xen-tools

从http://xen-tools.org/software/xen-tools/releases.html下载xen-tools 4.3.1源码,解压后运行:

# make install

该工具包含xen-create-image等工具,它使得domU的创建更加方便。


二、编译安装dom0

1. 面向Xen开发者的kernel源码主要有Konrad和Jeremy两个版本,当然它们中的改动也会被merge到Torvalad的mainline当中。这里以Jeremy版本为例:

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen

$ cd linux-2.6-xen

$ git checkout -b xen/next-2.6.32 origin/xen/next-2.6.32

进行kernel的编译配置:

# make oldconfig 

# make menuconfig

加上Xen的编译选项(参考http://wiki.xen.org/wiki/Mainline_Linux_Kernel_Configs或http://wiki.xensource.com/xenwiki/XenParavirtOps),接下来就是编译安装了:

# make

# make modules_install

# make install

默认是会生成initrd.img的,如果没有的话就要用mkinitramfs手动生成了。


2. 设置grub

假设前面编译好的image文件为vmlinuz-2.6.32.57和initrd.img-2.6.32.57,在/etc/grub.d/40_custom中加入:

menuentry "Xen - Linux 2.6.32.57" {
     insmod ext2
     set root='(hd0,msdos1)'
     multiboot /boot/xen.gz dummy=dummy
     module /boot/vmlinuz-2.6.32.57 dummy=dummy root=UUID=323d1960-8f62-4bb4-9b92-81e7c835cb07 ro dom0_mem=512M nomodeset
     module /boot/initrd.img-2.6.32.57
}

注意系统会根据/etc/grub.d/中的文件生成/boot/grub/grub.cfg,而/etc/default/grub用于设置其默认选项,timeout等参数。


重启,长按shift调出grub菜单,选刚才新加的那项,进入dom0。


下面开始创建domU。


三、安装domU

1. 创建guest的逻辑卷

# apt-get install lvm2

由于lvm无法在正在使用的分区上创建逻辑卷,所以首先在Virtualbox中创建虚拟盘(参考http://howtobi.wordpress.com/2010/10/30/adding-a-additional-hard-disk-in%C2%A0virtualbox/)。

设置完后重新进入系统,假设新加的虚拟盘名为/dev/sdb。在其上生成文件系统:

# mkfs -t ext3 /dev/sdb

接着创建physical volume和volumn group(名为vg0):

# pvcreate /dev/sdb

# vgcreate vg0 /dev/sdb

如果用xen-create-image的话就不用手动用lvcreate创建logical volumn。

如果要重新创建可以先删掉原来的:

# lvremove /dev/vg0/xxxx


2. 安装domU的kernel,生成配置文件

比如创建名为mylucid的domU,用刚才创建的名为vg0的volumn group,使用pygrub(domU用单独的grub):

# xen-create-image --hostname=mylucid --dist=lucid --lvm=vg0 --mirror=http://cn.archive.ubuntu.com/ubuntu --role=udev --force --verbose --pygrub --dhcp

中途需要从网络下载,完了就会生成/etc/xen/mylucid.cfg。


3. 设置网络

不是必须的,目的是让虚拟机中的系统能够访问外部网络。参考下面的网络设置部分:

http://wiki.xen.org/wiki/Xen_Beginners_Guide#Creating_a_Debian_PV_.28Paravirtualized.29_Guest

http://wiki.xen.org/wiki/Xen_Beginners_Guide


4. 启动guest

# xm list,应该会出现类似于:

root@jzj-laptop:/home/jzj# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1896     1     r-----     97.6


可能出现的问题:

1) ImportError: libxenctrl.so.4.0: cannot open shared object file: No such file or directory

在64位环境中,Xen编译生成了libxenctrl.so.4.0,并把它放到/usr/lib64中,为了让系统能找到它,需要在/etc/ld.so.conf.d/libc.conf中加入

/usr/lib64

然后

# ldconfig

2) can't find module xxxx

Xen的管理工具里很多是python写的,而Ubuntu中默认是不将/usr/lib/python2.7/site-packages放入module搜索路径的。比较简便的方法是在.bashrc中加

export PYTHONPATH=/usr/lib/python2.7/site-packages

3)Error: Unable to connect to xend: No such file or directory. Is xend running?

可以试试重新启动xend:

# xend restart

当然很多情况可能导致这个问题,版本不对或是设置不对等等。


现在可以启动guest了:

# xm create -f /etc/xen/mylucid.cfg -c

用xen-create-image给出的密码即可登录root。


ctrl+]可退出console,回到console可用:

# xm console mylucid

关闭guest:

# xm shutdown mylucid

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐