热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ubuntu10.04系统下安装配置Xen4.0.1虚拟机

首先澄清一些谣言,网上流传说grub2存在bug,导致xen无法正常启动,经过我的实际体验,这种说法是错误的,可以在grub2下使用xen。另外有人说python2.6无法启动xen,这也是错误的,其实python2.6使用的目录和先前的版本有所不同,因此只需要自行拷贝一些文件

首先澄清一些谣言,网上流传说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 \
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 ..     (因为刚才我们还在xen的目录中,先退出来)
$ 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`; \
  do patch -p1 <../xenpatch-2.6.31.8/"$i"; done

下面我们来配置内核,这部非常关键,小心操作。首先,我们直接把Ubuntu正在使用的内核配置信息弄过来,这样我们只需要对Xen的部分进行简单的配置即可完成配置工作。

$ cp /boot/config-2.6.32-21-server .config

然后进入配置界面,加入xen的配置:

$ 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

配置好后,退出,保存,然后开始编译内核,注意,这是一个漫长的过程:

$ 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, Ubuntu, Linux 2.6.31.8' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod ext2
    set root='hd(0,1)'
    search --no-floppy --fs-uuid --set xxxxxxx-xxxx-xxxxxxxxxx
    multiboot /xen-4.0.1.gz 
    module /vmlinuz-2.6.31.8 root=/dev/mapper/ubuntu-root ro quiet crashkernel=384M-2G:64M,2G-:128M
    module /initrd.img-2.6.31.8
}

只需要对红色字体部分进行修改,灰色字体部分可以删掉(也可以不删)。

然后配置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),其客户端是免费的,而且各种操作系统上都有对应的版本,非常方便。


推荐阅读
author-avatar
mobiledu2502883843
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有