首先澄清一些谣言,网上流传说grub2存在bug,导致xen无法正常启动,经过我的实际体验,这种说法是错误的,可以在grub2下使用xen。另外有人说python2.6无法启动xen,这也是错误的,其实python2.6使用的目录和先前的版本有所不同,因此只需要自行拷贝一些文件便可完美使用。
下面介绍一下如何在Ubuntu10.04下安装Xen 4.0.1。介绍分为两个部分,第一部分为如何安装Xen和并启动Dom0;第二部分为如何安装DomU,这里DomU以CentOS 5.5为例,因为有现成的kernel可以用比较简单,容易说明问题。
一、安装Xen并启动Dom0
1.1 安装Ubuntu10.04 Server
想必这个步骤不用我说大家应该也会安装,这里只说明一些比较重要的注意事项。首先,一定要选择64位版的Server。我原来一直以为64位和32位皆可,但是32位系统下编译内核总是莫名其妙的出错,只有64位系统下编译出来的内核可用。如果你的CPU不支持64位计算,那么赶紧去电脑城买新电脑吧。究其原因我也说不清楚,希望对内核非常熟悉的同学踊跃讨论。
Server版默认是文本界面的,如果你不喜欢或者不适应文本界面(比如我就不喜欢文本界面,因为没有滚动条,看以往的命令输出不方便),可以安装ubuntu-desktop包:
$ sudo apt-get install ubuntu-desktop
这里我推荐使用官方源,因为在教育网下官方源虽然慢点,但是东西可是真材实料,不会有后顾之忧。如果教育网链接官方源不稳定,可以尝试一下在同一个网段的另一台电脑上不停的ping官方源服务器,估计链接质量会有所改善。
1.2 准备各种源文件
需要准备源文件包括Xen的源代码,Linux Kernel的源代码,以及Kernel的Xen补丁。
Xen的源代码可以从Xen的官方网站上下载:www.xen.org,下载下来的文件名应该是xen-4.0.1.tar.gz。
Kernel以及补丁可以利用一下命令获得
$ wget
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.8.tar.bz2
$ wget
http://gentoo-xen-kernel.googlecode.com/files/xen-patch-2.6.31-10.tar.bz2
这里不推荐大家使用别的内核版本,这个版本是最稳定的了。为了操作方便,建议大家在主目录下新建一个目录,将这三个源代码包拷贝到其中。
然后我们还需要一些附加的以来软件包,需要的软件包比较多,我们通过apt进行安装,这一个步骤需要你的细心,别丢下了一些软件包。
$ 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-dev iasl
当然,你可以讲这些命令差分成多个apt-get命令,这样会靠谱些。
1.3 编译并安装xen
准备工作已经结束了,现在来编译并安装xen。首先解压缩软件包:
$ tar vxzf xen-4.0.1.tar.gz
然后进入软件包目录:
$ cd xen-4.0.1
编译并安装:
$ make xen tools stubdom
$ sudo make install-xen install-tools install-stubdom
将xend加入启动项:
$ sudo update-rc.d xend defaults 20 21
$ sudo update-rc.d xendomains defaults 21 20
如果没有报错,Xen实际上已经安装好了。但是别急,我们现在还不能使用它,因为首先,Xen是一个Para-virtualization技术的VMM,需要一个Xen化的内核,我们还没有,另外对Xen的守护进程的配置文件我们还有进行适当的设置。下文我们会逐步的代令你完成这些。
不过在这一步,我们需要注意两个问题。首先,建议大家不要使用make
world来编译xen,因为这样xen会自动从网上下载2.6.18版本的xen化内核,但是这个内核实际上并不怎么好用,而且最要命的是教育网把下载该内核的服务器给河蟹了(至少在我这是河蟹了)。其次,如果在编译过程中,出现任何的错误,其实都是你的前期工作没有做好,最有可能的情况就是你少安装了依赖软件包。通常报错的时候xen会提示你缺少的软件包名称。
1.4 编译Xen化内核
这个步骤比较纠结,我以前就是纠结在这个步骤上许久,不过经过百折不挠的尝试,我终于成功了。其实,究其原因,也就是选对内核版本,选对编译平台,选对内核配置即可。
内核版本和内核平台我都已经给出了最好的建议,那就是Linux Kernel 2.6.31.8,Xen-Patch 2.6.31-10,64位平台。
首先我们解压缩内核代码并打上Xen的补丁。
$ cd ..
$ tar vxjf linux-2.6.31.8.tar.bz2
$ mkdir xenpatch-2.6.31.8
$ cd xenpatch-2.6.31.8
$ tar vxjf ../xen-patch-2.6.31-10.tar.bz2
$ cd ../linux-2.6.31.8
$ for i in `ls ../xenpatch-2.6.31.8`; \
下面我们来配置内核,这部非常关键,小心操作。首先,我们直接把Ubuntu正在使用的内核配置信息弄过来,这样我们只需要对Xen的部分进行简单的配置即可完成配置工作。
$ cp /boot/config-2.6.32-21-server .config
然后进入配置界面,加入xen的配置:
$ make menuconfig
Processor type and features --->
Networking support --->
Device Drivers --->
配置好后,退出,保存,然后开始编译内核,注意,这是一个漫长的过程:
$ make
$ sudo make install
$ sudo make modules_install
$ sudo update-initramfs -c -k 2.6.31.8
$ sudo depmod 2.6.31.8
至此,内核也已经准备就绪,下面就是要让grub明白应该如何启动Xen以及Dom0
5. 收尾工作:
收尾工作包括3个部分,配置grub,配置xend等。
首先使用update-grub自动更新grub启动项,你会注意到,grub2不会识别xen。但这不代表grub2不能启动xen。我们需要对自动更新的项目作出一些修改。
$ sudo update-grub
$ sudo gedit /boot/grub/grub.cfg
找到里面的2.6.31.8那个启动项,首先删除“(恢复模式)”的项目,我们不需要。然后修改2.6.31.8的项目如下:
memuentry 'Xen,
}
只需要对红色字体部分进行修改,灰色字体部分可以删掉(也可以不删)。
然后配置xend的配置文件/etc/xen/xend-config.sxp。加入下列行:
(xend-http-server yes)
(xend-unix-server yes)
(xend-unix-path /var/lib/xend/xend-socket)
(xend-port 8000)
删掉如下行:
(xend-relocation-server yes)
并检查,确保如下行的存在:
(network-script network-bridge)
保存配置文件,即完成了对xend的配置。
对了,还记的前文我说的关于python2.6的问题么?对,这里需要作一些手动拷贝一些文件。因为对于早期版本的python来说,服务模块是放在site-packages目录中的,而2.6则是在dist-packages中,我们只要做一下拷贝即可
$ cd /usr/lib/python2.6
$ sudo cp -r site-packages/* dist-packages/
至此,万事俱备。
1.6 进入Dom0的世界
重新启动Ubuntu,在grub2的界面下选择启动项“Xen, Ubuntu, Linux 2.6.31.8”,并启动之。屏住呼吸,等待几秒钟。启动首先会加载Xen,然后进入Dom0的Kernel并加载initram,最后有启动脚本加载引导进入Ubuntu。有些AMD平台可能会出现ACPI什么错误,只需要在BIOS中关闭ACPI即可。如果你的启动卡在内核处,不要紧,重新启动几次,如果问题依旧,检查你的内核配置,然后重新来。
如果你很顺利的看到了一堆Done出现在屏幕上,然后就出现了鼠标,恭喜你,你进入Dom0的世界了。然后我们检查一下你的内核和xend是否已经在配合xen正常工作了。
$ uname -r
$ sudo xm list
如果这两个命令都没有出错,并且xm
list后看到了Domain-0在列表中,恭喜你,Xen已经成功的安装到了你的计算机上,并且他工作正常。
二、安装DomU
DomU其实可以理解为通常的Guest OS。这里以CentOS 5.5为例,因为CentOS5.5有现成的网络安装环境和Xen化内核。
2.1 准备工作
这里我们首先讲解一下如何利用xm直接创建一个DomU。在创建DomU之前,我们需要事先准备好一些东西,比如虚拟机的配置、虚拟机的硬盘、安装镜像等等。
我们首先来准备虚拟机的硬盘,利用dd命令,从/dev/zero获得以前全零文件:
$ sudo dd if=/dev/zero of=CentOS.img oflag=direct bs=1M count=10240
这样就创建了一个大小为10G的全零文件,我们用他来作为我们的虚拟硬盘。
然后获取安装镜像,首先我们需要获得安装镜像的kernel和initram:
$ wget
http://mirror.centos.org/centos/5.5/os/x86_64/images/xen/vmlinuz
$ wget
http://mirror.centos.org/centos/5.5/os/x86_64/images/xen/initrd.img
或者如果你使用教育网,我推荐使用如下:
$ wget
http://centos.ustc.edu.cn/centos/5.5/os/x86_64/images/xen/vmlinuz
$ wget
http://centos.ustc.edu.cn/centos/5.5/os/x86_64/images/xen/initrd.img
当你成功的下载了这两个文件以后,我们需要准备的东西基本上就齐备了。然后我们需要撰写一个配置文档,用来说明DomU的配置。该配置文档仅仅是用来安装系统的,当DomU的系统安装完毕,我们需要修改这个配置文档,以使其用于日常运行。配置文档的内容如下(假设配置文件的文件名为CentOS.xvm):
kernel="/path/to/yours/vmlinuz"
ramdisk="/path/to/yours/initrd.img"
name="CentOS"
memory="512"
disk=['tap:aio:/path/to/yours/CentOS.img,xvda,w',]
vif=['bridge=xenbr0',]
vcpus=1
on_reboot='destroy'
on_crash='destroy'
其中蓝色的部分需要根据实际情况进行替换。这里需要注意一点,就是配置文件是所有涉及到路径的,不能使用相对路径,只能使用绝对路径,否则创建DomU的时候会提示找不到东西。
2.2 给DomU安装系统
现在我们可以利用配置文件启动DomU来安装系统了,从网上下载的kernel和initrd会自动引导并安装系统。
$ sudo xm create CentOS.xvm
当再次返回到shell提示符时,说明DomU创建成功,可以利用xm list查看一下DomU是否已在运行。利用下面的命令将DomU绑定到当前的控制台:
$ sudo xm console CentOS
这是你就会看到DomU在控制台的输出。随着内核和初始镜像的加载完毕,DomU开始进入安装过程,你只要根据控制台的提示选择相应的选项即可,非常简单。
在选择安装方式的时候,我们选择HTTP安装。然后填写安装源的Host为:
centos.ustc.edu.cn 或 mirror.centos.org
目录为:
centos/5.5/os/x86_64
注意这个过程可能非常漫长,希望你有足够的耐心。
文本界面的最后一步是让你选择图形化安装模式还是文本安装模式。如果你选择了图形化安装,你需要根据提示,利用“应用程序”菜单中的“互联网”>“远程桌面查看器”来查看图形界面,通常的协议是VNC,地址根据文本界面给出的提示填写。
剩下的安装过程我想你大家都应该会了。如果大家觉得从这两个服务器下载下载很慢,你可以用迅雷把服务器的内容下载到某台你可以操纵的服务器上,并架设好http服务,这样可以快一点。如果你在大连使用教育网,那么我已经下载了一个现成的了,你可以使用,其Host为“210.30.97.167”,目录为“CentOS/os/x86_64”。
2.3 运行安装好的DomU
需要修改一下DomU的配置文件以适应正常运行:
bootloader="/usr/bin/pygrub"
name="CentOS01"
uuid="bfdd5fce-094d-06b4-0441-5405f5793e1e"
memory="512"
disk=['tap:aio:/path/to/yours/CentOS01.img,xvda,w']
vif=['bridge=xenbr0',]
vcpus=1
on_reboot='restart'
on_crash='destroy'
on_poweroff='destroy'
其中红色部分是需要进行修改的部分。然后使用xm命令启动DomU并进入DomU。
$ sudo xm create CentOS.xvm
$ sudo xm console CentOS01
首次启动的操作系统会进行一些安装后的配置工作,完成后,就可以在控制台下看到DomU的命令提示符了。至此,DomU安装完成。
我看到一篇论文说将根文件系统设为只读,然后就可以利用同一个磁盘镜像启动多个DomU,但是我没有成功的实现这一点,因为每次启动CentOS加载的一些软件需要对磁盘进行写操作。即便是把swap分区独立出来,也存在一些软件需要写硬盘。这个问题只好留到以后再弄了。
安装好的CentOS的DomU默认只有文本界面,通过xm console进行绑定控制台。如果你想使用图形界面需要在DomU内部和配置文件上做出小小的修改。首先在DomU的文件系统中,我们需要修改启动级别,让他能够启动到图形界面,通常这个级别是5,而文本界面的启动级别是3,这个设置在/etc/inittab文件中。
另外,对于DomU的配置文件,我们还需要添加一个虚拟显卡,这个显卡可以挂载VNC上,然后通过VNC输出。因此,我们需要在配置文件中添加一行:
vfb=['type=vnc,vncunused=1,vnclisten=0.0.0.0,keymap=en-us']
之后我们可以通过VNC客户端进行查看,IP地址是Dom0的IP地址。当然可能运行多个DomU会使用不同的端口号,如果你不确定端口号,可以通过sudo xm vncviewer CentOS来确认一下。这里推荐的VNC客户端是RealVNC(www.realvnc.com),其客户端是免费的,而且各种操作系统上都有对应的版本,非常方便。