Xen的源码安装及dom0,domU的设置
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. 点击这里下载Xen的源码包,根据README编译安装:
# tar zxvf xen-4.1.2.tar.gz
# cd xen-4.1.2
# make world
# make install
如果是要在另一台机子上部署的用make dist。
编译过程中会通过git或hg从网上下源码,所以要确保网络连通(如果是通过代理上网参考 http://www.linuxidc.com/Linux/2013-02/79334.htm )。
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
从这里下载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的编译选项(参考这里或这里),接下来就是编译安装了:
# 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中创建虚拟盘(DOC参考下载)。
免费下载地址在 http://linux.linuxidc.com/
用户名与密码都是www.linuxidc.com
具体下载目录在 /2013年资料/2月/14日/Xen的源码安装及dom0,domU的设置
--------------------------------------------------------------
设置完后重新进入系统,假设新加的虚拟盘名为/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
Xen的源码安装及dom0,domU的设置的更多相关文章
- 在 CentOS 下源码安装 Xen
http://www.vpsee.com/2010/04/install-xen-on-centos-from-source/ 在 CentOS 源码编译安装 Xen 的过程和在 Debian 上编译 ...
- mono-3.4.0 源码安装时出现的问题 [do-install] Error 2 [install-pcl-targets] Error 1 解决方法
Mono 3.4修复了很多bug,继续加强稳定性和性能(其实Mono 3.2.8 已经很稳定,性能也很好了),但是从http://download.mono-project.com/sources/m ...
- 搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展
上一篇:搭建LNAMP环境(六)- PHP7源码安装MongoDB和MongoDB拓展 一.安装Memcached 1.yum安装libevent事件触发管理器 yum -y install libe ...
- 搭建LNAMP环境(二)- 源码安装Nginx1.10
上一篇:搭建LNAMP环境(一)- 源码安装MySQL5.6 1.yum安装编译nginx需要的包 yum -y install pcre pcre-devel zlib zlib-devel ope ...
- 搭建LNAMP环境(一)- 源码安装MySQL5.6
1.yum安装编译mysql需要的包 yum -y install gcc-c++ make cmake bison-devel ncurses-devel perl 2.为mysql创建一个新的用户 ...
- Greenplum 源码安装教程 —— 以 CentOS 平台为例
Greenplum 源码安装教程 作者:Arthur_Qin 禾众 Greenplum 主体以及orca ( 新一代优化器 ) 的代码以可以从 Github 上下载.如果不打算查看代码,想下载编译好的 ...
- salt源码安装软件和yum安装软件
上面简单列出了源码安装的sls文件书写思路. 涉及到一些固定的思路:如, 1,拷贝 解压安装时候需要依赖tar.gz存在 如果已安装则无需再次安装. 2,启动脚本 加入chk时候需要文件存在,如果已添 ...
- 搭建LNAMP环境(六)- PHP7源码安装MongoDB和MongoDB拓展
上一篇:搭建LNAMP环境(五)- PHP7源码安装Redis和Redis拓展 一.安装MongoDB 1.创建mongodb用户组和用户 groupadd mongodb useradd -r -g ...
- 搭建LNAMP环境(三)- 源码安装Apache2.4
上一篇:搭建LNAMP环境(二)- 源码安装Nginx1.10 1.yum安装编译apache需要的包(如果已经安装,可跳过此步骤) yum -y install pcre pcre-devel zl ...
随机推荐
- (转)完美解决 Android WebView 文本框获取焦点后自动放大有关问题
完美解决 Android WebView 文本框获取焦点后自动放大问题 前几天在写一个项目时,要求在项目中嵌入一个WebView 本来很快就完成了,测试也没有问题.但发给新加坡时,他们测试都会出现文本 ...
- JavaFX 之窗口拖动(三)
一.问题场景 在上一篇中,我们将窗口的默认标题栏隐藏从而导致鼠标点击窗体无法进行拖动. 二.解决思路 给组件添加鼠标按下事件监听器和鼠标拖动事件监听器. 三.代码实现 /** * 程序入口 * @au ...
- iOS中Cookie的管理
平常的app开发中只调用Rest Api可能用不到Cookie,但是当要在App中内嵌WebView就有可能要用到.最近用到了这一块的东西,总结一下. Cookie原理 关于cookie的原理简单描述 ...
- caffe读取多标签的lmdb数据
问题描述: lmdb文件支持数据+标签的形式,但是却只能写入一个标签,引入多标签的解决方法有很多,这儿详细说一下我的办法:制作多个data数据,分别加入一个标签.我的方法只适用于标签数量较少的情况,标 ...
- RK3288 dts和dtsi介绍
Device Tree 是一种描述硬件的数据结构,它起源于 OpenFirmware(OF).在 Linux2.6 中,ARM 架构的板机硬件细节过多地被硬编码在 arch/arm/plat-xxx ...
- GOF23设计模式之原型模式(prototype)
一.原型模式概述 1.通过new产生一个对象需要非常繁琐的数据准备和访问权限,则可以使用原型模式. 2.就是java中的克隆技术,以某个对象为原型,复制出新的对象,显然,新的对象具备原型对象的特点. ...
- python 冒泡排序,二分法
a = 0 lst = [13,5,1,7,2,6,4,5,6] while a < len(lst): # 控制次数 for i in range(len(lst)-1): if lst[i] ...
- NoSQL v.s. RDB
RDB 相对于 NoSQL 的劣势: 1. 集中式单点架构 2. 固定的数据模型: 可扩展性差,缺乏处理半结构化和非结构化数据的能力. 3. 扩容成本高:处理海量数据时存在性能瓶颈,大数据时代的存储需 ...
- [Java.Web]从零开始布署 Tomcat
1. 下载 JRE 1.7 2. 下载 Tomcat 7.0.77,我使用的是红圈的压缩包版本,也可以使用绿圈的安装包版本[更省心] 3. 加入环境变量 JRE_HOME .CATALINA_HOME ...
- 第七章 Rolling update
7.1 实践 apiVersion: apps/v1beta1 kind: Deployment metadata: name: httpd spec: replicas: 3 template: m ...