新手安装Xentoo(Xen+Gentoo)的极速体验
Xen的出现是虚拟化技术的一大突破,操作系统在Xen虚拟机中运行速度和直接在硬件上运行速度几乎相当,这在以前是不可能的,下面我们一起来进入这个极速的虚拟世界……安装Xentoo不用深入学习Xen虚拟机,只须了解一下它的运行机制和几个基本术语就足够了:
Xen:
Xen 是在剑桥大学作为一个研究项目被开发出来的,目前在GPL许可下开源。Xen 被定义为一款 半虚拟化(paravirtualizing) VMM(虚拟机监视器,Virtual Machine Monitor),这表示,为了调用系统管理程序,要有选择地修改操作系统,然而却不需要修改操作系统上运行的应用程序。虽然 VMWare 等其他虚拟化系统实现了完全的虚拟化(它们不必修改使用中的操作系统),但它们仍需要进行实时的机器代码翻译,这会影响性能。现在的Xen要为内核打补丁,但是,将来的处理器能支持虚拟化,内核也就不需要打补丁了。比如说,Intel的VT和AMD的Pacifica处理器都将包括这种支持。XenSource公司2005年8月在Intel开发者论坛(IDF)上发表声明说,它已经利用Intel的VT-Enabled平台和Xen技术虚拟化了Linux和Windows XP SP 2。
dom0,domU:
在Xen中,一个“系统管理程序”(Xen自身被称为“系统管理程序”,是因为它比客户OS的系统管理代码运行所需的特权级还高。)运行在0环,客户OS运行在1环,应用程序运行在3环。当系统引导的时候,Xen被装载到0环的内存中。它在1环上启动修补过的内核,这被称作是domain 0(domain是指一个运行中的虚拟机,在其上有一个guest OS在执行)。从这个domain开始,你可以创建和管理更多的domain,这些domains统称为domain U。目前,修补过的Linux内核2.4和2.6可以作为domain 0,而物理设备驱动程序只能运行在特权级,也就是domain 0上。
Gentoo:
Gentoo Linux 是一个基于源码包的 Linux 系统。和已有的商业发行版相比,Gentoo 非常独特。
如今的商业 linux 发行版提供了一个几乎完全自动化的安装过程。在自动的硬件检测之后,你只要回答几个问题,划分硬盘就可以了。一会功夫,所有的东西就都安装好了,你只要登陆就行了。
Gentoo 的安装过程是基于命令行的,几乎没有东西是自动完成的。大部分的设置都是通过使用编辑器手工设置配置文件完成的,安装过程会消耗大量的时间。
Gentoo 的安装过程可以看做是一次 Linux 的课程。你可以从中学到很多有关系统的知识。大量的步骤都是手工完成的,消耗了很多时间,但从此以后,你可以更好地理解你的 Linux 系统地工作了。
Gentoo 还使用特定地编译器选项编译程序,这些选项可以生成为你的 CPU 定制的优化代码。
除此之外,你还可以加入或去掉某些编译特征。最终的结果就是一个符合你的需要的优化的、个性化的系统。
Xentoo:
一个新创的词,由Xen+Gentoo合成而来,意思是运行于Xen之上的Gentoo,在本文中,代表的是一个解决方案
那么,为什么要有Xentoo?
由于Gentoo有着上述的诸多优点,深受Linux爱好者喜欢,不过初学者安装时很容易因为误操作导致硬盘的数据全军覆没,而且还必须边看手册边安装,因此不少人用VMWare安装Gentoo,但是VMWare本身效率不高,导致安装和运行Gentoo时会浪费大量的时间。有一天,Linuxfans们终于忍不住了,说要有Xentoo,于是就有了Xentoo……
完美安装Xentoo,主要分3个阶段:
第一阶段:安装Xen和dom0新内核,测试Xen
1.1、这个安装经验主要参考Xen Users' manual,在安装Xen前必须认真阅读该文档
1.2、准备所需软件:Xen二进制安装包:xen-2.0.7-install-x86_32.tgz和Xen源代码包:xen-2.0.7-src.tgz,以及Xen User's manual文档中+号软件(安装运行Xen所需),*号的软件(编译Xen所需)(二进制包里面包含Xen的执行文件和修改过的Linux2.4/2.6内核,但这些内核只是基本配置,几乎所有(网卡,声卡,等硬件)驱动都没有编译进去.如果想真正体验Xen,为了使硬件得到正确驱动,应使用源码进行编译安装)
以下是Xen User's manual中提到的所需软件:
+ The iproute2 package.
+ The Linux bridge-utils (http://bridge.sourceforge.net)
+ The Linux hotplug system (http://linux-hotplug.sourceforge.net/)
* Twisted v1.3 或以上 (编译xen时通过make install-twisted得到)
* Build tools (gcc v3.2.x or v3.3.x, binutils, GNU make)
* libcurl 开发库(libcurl-devel)
* zlib 开发库 (zlib-dev)
* Python 开发库 v2.2 或以上 ( python-dev)
* LATEX(用于生成文档)
**从二进制包安装的,解压后执行install.sh安装(它会检测所需软件是否齐全,否则不会安装),完成后,跳到1.9
**以下步骤主要介绍从src安装(2.4与2.6的安装方式稍有不同,下面的介绍会同时针对这两种版本的内核)
1.3、解压
#cd /tmp
#wget http://www.cl.cam.ac.uk/Research ... s/xen-2.0.7-src.tgz
#tar -zxvf xen-2.0.7-src.tar.gz
#cd xen-2.0
1.4、阅读xen的makefile(很简单,就几十行,主要为了解make做了哪些工作,为下一步修改作准备,如果内核是2.6,这一步可跳过)
1.5、修改Makefile,(根据需要修改,内核为2.6的可以跳过这一步.Xen-2.0.7目前只支持linux-2.4.30,linux-2.6.11,netbsd-2.0,freebsd-5.3)
以下是针对我的redhat9,2.4内核的修改
KERNELS ?= linux-2.6-xen0 linux-2.6-xenU
改为
KERNELS ?= linux-2.4-xen0
xen0为host os - domain 0的核心,而xenU作为guest os - domain U的核心,可以不需要任何硬件驱动程序.
这里暂时不编译xenU,主要是为了节省一些时间,在后面安装Gentoo的时候直接采用Xen二进制安装包中预编译好的内核.因为我的机器比较慢,编译一次内核要2、3个小时,各位可以根据自己的实际需要决定是否编译xenU
1.6、复制Linux内核源码(bz2格式)到xen-2.0目录内(网速快的可以跳过这一步,Xen会从自动网上下载相应的内核)
1.7、使用自己的.config文件编译内核:(下面主要是以我的2.4.30内核为例,对于2.6内核原理相同,可以根据自己实际情况进行修改)
1)、Xen内核补丁程序的bug,不修改这个,编译内核会出错:(对于2.6内核没有这个bug,可以跳过这一步)
修改 linux-2.4.30-xen-sparse/mkbuildtree
找到cd ${AD}/include/asm-xen 在下面加入:
ln -sf ../asm-i386/acpi.h
ln -sf ../asm-i386/cobalt.h
ln -sf ../asm-i386/e820.h
ln -sf ../asm-i386/edd.h
ln -sf ../asm-i386/hc_sl811-hw.h
ln -sf ../asm-i386/lithium.h
ln -sf ../asm-i386/pci-direct.h
ln -sf ../asm-i386/save_state.h
ln -sf ../asm-i386/sl811-hw.h
ln -sf ../asm-i386/smpboot.h
2)、让Xen自动对内核打补丁,并在补丁完毕中止程序(一定要中止程序,否则Xen会使用它默认的defconfig,这个配置是没有任何硬件驱动的)
#make kernels
输入完命令后,Xen会自动下载内核源码并打补丁,打完补丁,准备make内核的时候(这时屏幕显示一大堆config信息),按Ctrl+c中止程序.
3)、复制现有内核的配置文件到 linux-2.4.30-xen0
#cp /boot/config-2.4.30 linux-2.4.30-xen0/.config
#cd linux-2.4.30-xen0
#make ARCH=xen oldconfig
期间会提示新增的有关Xen的选项,全部都选y
4)、编译内核
#make ARCH=xen dep
#make ARCH=xen modules
#make ARCH=xen modules_install
#make ARCH=xen install
5)、安装与内核版本对应的modutils(参考 linux-2.4.30-xen0/Documentation/Changes)
6)、TLS Libraries (这是Xen Users' manual 2.4.3小节中的原文,根据自己实际情况处理)
Users of the XenLinux 2.6 kernel should disable Thread Local Storage (e.g. by doing a mv /lib/tls /lib/tls.disabled) before
attempting
to
run
with a XenLinux kernel2.4. You can always reenable it by restoring the directory to its original location (i.e. mv /lib/tls.disabled /lib/tls).
The
reason for this is that the current TLS implementation uses segmentation in a way that is not permissible under Xen. If TLS is not disabled, an emulation mode is used within Xen which reduces performance substantially.
We
hope
that
this
issue
can
be
resolved
by
working
with
Linux distribution
vendors