安装时需具备的条件:
虚拟机上安装:
机器的cpu 要支持PAE 模式,也即物理地址扩展,同样,Vmware 也要支持,所以最好安装最新版本。
若是安装带KDB 的xen ,则最好是在64 位的Linux 系统下安装,因为KDB 调试在64 位系统下才稳定,否则会出现不稳定的情况。
一个由GRUB 引导的运行在P6 或以上级别的CPU 上的Linux ;
Iproute2 软件包;
Linux bridge-utils (e.g. /sbin/brctl) Available from http://bridge.sourceforge.net ;
Linux hotplug system (e.g. /sbin/hotplug 以及相关脚本) Available from http://linux-hotplug.sourceforge.net/ ;
编译工具(gcc v3.2.x 或 v3.3.x ,binutils ,GNU make );
Zlib 开发库(如:zlib-dev );
Python v2.2 或更高版本的开发库(如:python-dev );
对编译文档所需的Latex 和transfig 。
VMware 下Ubuntu9.04 中Xen 的安装:
更新或安装xen 所必需的软件包:
安装mercurial :sudo apt-get install mercurial, 以便下载相应的xen 内核版本;
安装git :sudo apt-get install git/git-core
gawk 包,使用sudo apt-get install gawk ;
zlib :http://www.zlib.net 下载zlib1.2.3
tar zvxf zlib-1.2.3.tar.gz
make
sudo make install
bridge-utils :sudo apt-get install bridge-utils, sudo cp /sur/sbin/brctl /sbin/
xgettext 的安装:sudo apt-get install gettext
openssl_devel 和zlib_devel 的安装:sudo apt-get install libssl-dev
x11_devel 的安装:sudo apt-get install libx11-dev
udev(dev86) :sudo apt-get install bin86 ;sudo apt-get install bcc (./chk build 没问题,./chk install 找不到udevinfo ,这是因为Ubuntu9 中没有udevinfo ,只有udevadm ,如何解决??至少编译make dist 时没有影响)
安装libSDL-dev :sudo apt-get install libSDL-dev
安装python-dev :sudo apt-get install python-dev
makeinfo 安装:sudo apt-get install texinfo
latex 安装(可选):sudo apt-get install texlive
fig2dev 安装:sudo apt-get install transfig
http://www.xen.org/download/ 下载Xen 3.4.0 plus kernel combined source distribution tarball 进行安装;
解压下载文件:tar zvxf xen-3.4.0.tar.gz ;
root 用户权限进入xen-3.4.0 文件夹,执行make dist ;
修改/config 目录下的Linux.mk 文件,让KERNELS ?=linux-2.6-xen0 linux-2.6-xenU (与xen3.0 手册中的2.4.2 对应)。这样编译出来才会出现xen0 和xenU 相关的内核,否则只有通用的xen 的内核。
./install.sh ;
安装的是按照xen-3.4.0/linux-2.6.18/buildconfigs 中的linux-defconfig_xen_x86_32 配置文件进行的,该目录下还有关于xen0 和xenU 的配置文件。xen 是一个通用的版本,可以说是介于xen0 和xenU 之间的。如需要分别安装xen0 和xenU ,还需要修改相应的makefile ,将编译时的配置指向xen0 或xenU 。
在/boot 目录下,出现xen-3.4.0.gz 以及vmlinuz-2.6.18.8-xen ;
修改/boot/grub/menu.lst ,添加:
title Xen 3.4.0 / Xen-Hypervisor
kernel /boot/xen-3.4.0.gz
module /boot/vmlinuz-2.6.18.8-xen0 root=/dev/sda1 ro console=tty0
mudole /boot/initrd.img-2.6.18.8-xen0
title Xen 3.4.0 / XenLinux
kernel /boot/xen-3.4.0.gz
module /boot/vmlinuz-2.6.18.8-xenU root=/dev/sda1
module /boot/vmlinuz-2.6.18.8-xenU
重启选择启动Xen ,发现无法启动,说是找不到内核。查看menu.lst 文件,发现都是用initrd 项引导的,试试看。
需要创建initrd-xxx.img 文件或者initrd.gz :使用/usr/sbin 目录下的update-initramfs 命令:
到/lib/modules 目录下,切换到root 用户,执行update-initramfs –c –k 2.6.18.8-xen
回到/boot 目录下查看,出现initrd.img-2.6.18.8-xen
在g )中加入iv 行
重启。
只安装xen 版本(而非xen0 和xenU )时,出现无法识别scsi 设备的问题,原因是xen-3.4.0/linux-2.6.18/buildconfigs 中的linux-defconfig_xen_x86_32 中的关于SCSI support type 的配置选项值全是m ,也即编译成模块,这样造成的问题就是在刚刚启动加载时无法识别作为模块的硬盘,从而导致找不到硬盘的错误出现。(不止这些项需要修改,还有很多的配置项需要改动,具体可参见linux-defconfig_xen0_x86_32 和linux-defconfig_xen_x86_32 的不同)
mkinitrd-cd 的安装(没有用了,用update-initramfs 命令解决了)
安装libuclibc0 包:http://packages.ubuntu.com/dapper/i386/libuclibc0/download 下载,deb 安装;
安装uclibc-toolchain 包:http://packages.ubuntu.com/dapper/i386/uclibc-toolchain/download 下载,deb 安装;
安装libuclibc-dev 包:http://packages.ubuntu.com/dapper/i386/libuclibc-dev/download 下载,deb 安装;
安装mkinitrd-cd 包:http://packages.ubuntu.com/dapper/admin/mkinitrd-cd 下载,deb 安装,安装后命令为mkinitrd-cd ;
运行xen 。重启后从grub 中选择xen 选项启动。重启前一定要禁掉TLS 库。如果您使用 XenLinux 2.6 内核,在用它引导前需要禁用掉 Thread Local Storage (TLS) (线程局部存储)(例如运行 /lib/tls /lib/tls.disabled ). 当需要TLS 时, 可以通过恢复其目录重新启用( 即 mv /lib/tls.disabled /lib/tls). 这是由于当前的TLS 应用程序使用了在Xen 下不允许的段方法. 如果禁用TLS, Xen 中使用的一个仿真模式将会实际性能有所削弱. 如果要避免这种现象, 您需要安装一个`Xen-friendly'(nosegneg) 版的共享库.
启动还是有问题。正常登录后,关于xen 的命令全都无法使用,原因是python 的路径设置不正确,解决办法有两个:一个是任意安装一个需要python 的小软件,让其自动加载python 的路径都root 中;另外一个就是手工添加路径:参见python path set 文件,主要是设置PYTHONPATH :
xul@xul-desktop:/usr/lib/python2.6/site-packages/xen/xm$ env |grep -i py
PWD=/usr/lib/python2.6/site-packages/xen/xm
OLDPWD=/usr/lib/python2.6/site-packages/xen
xul@xul-desktop:/usr/lib/python2.6/site-packages/xen/xm$ export PYTHONPATH = /usr/lib/python2.6/site-packages/
xul@xul-desktop:/usr/lib/python2.6/site-packages/xen/$su
口令:
root@xul-desktop:/usr/lib/python2.6/site-packages/xen/xm$ env |grep -i py
PWD=/usr/lib/python2.6/site-packages/xen/xm
OLDPWD=/usr/lib/python2.6/site-packages/xen
root@xul-desktop:/usr/lib/python2.6/site-packages/xen/xm$ export PYTHONPATH = /usr/lib/python2.6/site-packages/
设置好python 路径后,启动xend :xend start ,运用xm list 查看xen 是否正常。
root@xul-desktop:/usr/lib/python2.6/site-packages/xen/xm# /etc/init.d/x
x11-common xend xendomains
root@xul-desktop:/usr/lib/python2.6/site-packages/xen/xm# /etc/init.d/xend
Usage: /etc/init.d/xend {start|stop|status|restart|reload|force-reload}
root@xul-desktop:/usr/lib/python2.6/site-packages/xen/xm# /etc/init.d/xend start
Ignoring unknown interface eth0=eth0.
SIOCSIFNAME: Device or resource busy
/usr/lib/python2.6/site-packages/xen/util/acmpolicy.py:20: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
import sha
/usr/lib/python2.6/site-packages/xen/xend/XendAPI.py:21: DeprecationWarning: the sets module is deprecated
import sets
ifdown: interface eth0 not configured
SIOCSIFNAME: Device or resource busy
/usr/lib/python2.6/site-packages/xen/util/acmpolicy.py:20: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
import sha
/usr/lib/python2.6/site-packages/xen/xend/XendAPI.py:21: DeprecationWarning: the sets module is deprecated
import sets
root@xul-desktop:/usr/lib/python2.6/site-packages/xen/xm# ps ax|grep xen
9 ? S< 0:00 [xenwatch]
10 ? S< 0:00 [xenbus]
4939 ? S 0:00 xenstored --pid-file /var/run/xenstore.pid
4944 ? S 0:00 /usr/bin/python2.6 /usr/sbin/xend start
4945 ? Sl 0:00 /usr/bin/python2.6 /usr/sbin/xend start
4947 ? Sl 0:00 xenconsoled
5050 pts/0 R+ 0:00 grep xen
root@xul-desktop:/usr/lib/python2.6/site-packages/xen/xm# xm list
/usr/lib/python2.6/site-packages/xen/util/acmpolicy.py:20: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
import sha
Name ID Mem VCPUs State Time(s)
Domain-0 0 462 1 r----- 81.1