Debian5 dom0上跑Xen Debian5 lenny domU&Xen ubuntu10.04 Lucid domU--我爱你,飞一般的感觉

阅读: 430 评论: 0 作者: ddr888 发表于 2010-06-01 08:32 原文链接

  我的声明:本文内容比略长的标题略长,部分内容参考网络,转载不究。

  个人态度:Linux作为桌面系统有意思吗?

  目的:用现成或过时的服务器搭建非常多小应用和测试环境。

  目标:在Debian上运行Xen,在其上运行两个(当然可以多个)常用Linux发行版。

1. 背景

  用的是 Xen Hypervisor,一个 Amazon EC2都在用的开源虚拟化工具,它不是Linux内核的一部分,但是它也需要一个内核来分配资源( KVM是内核里面的东西),它是种 para-virtualization(泛虚拟化),我个人感觉会比全虚拟化的产品性能要好点,非常适合烂机器使用,更多精彩的介绍请上 香港的谷歌。
  Linux发行版用的是 Debian和 Ubuntu,Ubuntu宣传的很到位,网上资料查起来比它爹Debian要丰富,软件更新非常快,两年还会有一个长期支持版,比较遗憾的是新的东西bug就相对多些,不如稳定的Debian同志(企业占有率比脚高),更遗憾的是B者是个时髦的系统管理员,因此在Ubuntu lucid LTS正式出来的前一天就下载来装,直接用apt来装xen发现官方源里面没有 xen-tools,又不想折腾源码安装,直接重装成Debian做dom0了,反正也不用它干什么。

2. Debian上跑Xen

  安装完大便Linux后就可以进行下面的步骤了,给一个速度快点的源给apt source,安装Xen hypervisor,安装修改过的适合xen的Linux内核,安装相关工具。
#vi /etc/apt/source.list
直接删了里面的内容加入下面的 台湾源(和Ubuntu在同一台服务器):
deb http://tw.archive.ubuntu.com/debian/ lenny main non-free contrib
deb-src http://tw.archive.ubuntu.com/debian/ lenny main non-free contrib
更新一下源:
#apt-get update
这儿需要根据自己机器的CPU架构选择内核,开始安装Xen相关:
#apt-get install xen-linux-system-2.6.26-2-xen-686 xen-utils-3.2-1 xenstore-utils xenwatch xen-shell xen-tools
让apt自行解决依赖问题,然后耐心等待。

安装后的微调

  让虚拟机有个桥接网络,使用独立的内网IP,需要修改一下xen的配置文件:
#vi /etc/xen/xend-config.sxp
搜索network-dummy,在下面加一行:
(network-script network-bridge)
查看新内核是否安装成功。如果成功,限制dom0的内存使用量,不然会抢占domU的内存:
#vi /boot/grub/menu.lst
...
title           Xen 3.2-1-i386 / Debian GNU/Linux, kernel 2.6.26-2-xen-686
root            (hd0,0)
kernel          /xen-3.2-1-amd64.gz dom0_mem=256M
module          /vmlinuz-2.6.26-2-xen-686 root=/dev/mapper/vpsee-root ro console=tty0
module          /initrd.img-2.6.26-2-xen-686
...
如果第一个Title是Xen相关的内核,说明新内核安装成功,然后在kernel一行后加入 dom0_mem=256M,然后重启服务器检查Xen安装是否成功:
#shutdown -h now
...等待重启...
#uname -a
...Xen...说明已从新内核启动
#xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   256     2    r-----    0.9
Xen Pypervisor已经安装成功,现在创建我们需要的虚拟机。

3. Xen上跑Debian5 lenny

  Xen虚拟机可以运行在lvm上或者文件系统上,本文用xen-tools提供的xen-create-image命令使用文件系统安装。
#man xen-create-image
#xen-create-image --hostname=monitorvm --ip=172.20.10.199 --netmask=255.255.255.0 --gateway=172.20.10.1 --dist=lenny --mirror=http://172.20.10.197/debian --size=10gb --memory=768mb --swap=768mb --arch=i386 --passwd --dir=/vms --force
首先查看xen-create-image的文档,然后创建一个虚拟机镜像,--ip指定ip地址,--dist指定Linux发行版本,--mirror指定安装源地址,这里可以使用网上的镜像地址,我这里把Debian光盘拷到本地做了一个web服务器,--passwd指定安装后需要设置密码,--dir指定镜像安装位置,然后开始创建镜像,在不出错误情况下,过会就会要求输入密码,然后等待安装完成。
  安装完成后,通过xm console命令查看我们创建的monitorvm时,会出现一直卡在自检后的界面情况,这时先关掉虚拟机,修改虚拟机配置文件如下:
#vi /etc/xen/monitror.conf
...
#
#  Extra
#
extra = 'console=hvc0 xencons=tty'
在最后加入这么一行,然后再进xen console成功,输入密码进入系统:
#xm list
#xm create monitor.conf
#xm list
#xm console monitor.conf
进入系统最好修改Debian的apt源(跟上面一样),然后用 puttyssh登录虚拟机,但是居然显示:ssh stdin: is not a tty,解决办法是重新安装udev:
#apt-get install udev
重新登录,成功!如果希望dom0重启后虚拟机自动启动,可以这样:
#ln -s /etc/xen/monitorvm /etc/xen/auto
创建一个到auto的链接,从此您就可以像操作普通服务器Linux一样使用虚拟机了。

4. Xen上跑Ubuntu 10.04 Lucid LTS

  Debian上默认安装的xen-tools还没有对Ubuntu Lucid支持的很好,这里需要很tricky的修改一些配置文件和模板文件,最新版的xen-tools已经对Lucid进行支持。
  将xen-tools的edgy.d模板目录复制一份为lucid.d以方便使用和修改:
#cp -r /usr/lib/xen-tools/edgy.d /usr/lib/xen-tools/lucid.d
然后创建一个lucid到gutsy profile的链接:
#ln -s /usr/share/debootstrap/scripts/gutsy /usr/share/debootstrap/scripts/lucid
创建两个针对Xen和pygrub的链接:
#ln -s /usr/lib/xen-3.2-1 /usr/lib/xen
#ln -s /usr/lib/xen/bin/pygrub /usr/bin/pygrub
修改/etc/xen-tools/xm.tmpl使其先列出root设备,pygrub才能正常。用下列代码替换"# Disk device(s)."部分:
{
  for ( my $i = 0; $i <= $#PARTITIONS; $i++ )
  {
      if ( $PARTITIONS[$i]{'mountpoint'} eq '/' )
      {
          $OUT .= "root        = '/dev/$device" . ($i + 1) . " ro'\n";
      }
  }
  $OUT .= "disk        = [\n";
  for ( my $i = 0; $i <= $#PARTITIONS; $i++ )
  {
      if ( $PARTITIONS[$i]{'mountpoint'} eq '/' )
      {
            $OUT .= "                  '$PARTITIONS[$i]{'imagetype'}$PARTITIONS[$i]{'image'},$device" . ( $i + 1 ) .",w',\n";
      }
  }
  for ( my $i = 0; $i <= $#PARTITIONS; $i++ )
  {
      if ( $PARTITIONS[$i]{'mountpoint'} ne '/' )
      {
            $OUT .= "                  '$PARTITIONS[$i]{'imagetype'}$PARTITIONS[$i]{'image'},$device" . ( $i + 1 ) .",w',\n";
      }
  }
  $OUT .= "              ]\n";
}
将/usr/lib/xen-tools/lucid.d/30-disable-gettys内容由以下代替:
#!/bin/sh
#
#  This script comments out all virtual terminals which aren't on the
# first console - that must remain so that 'xm console ...' works
# correctly.
#
# Steve
# --
# http://www.steve.org.uk/
#
# Updated for Lucid; DDS/ABC
#

prefix=$1


#
#  Source our common functions
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
    . /usr/lib/xen-tools/common.sh
else
    . ./hooks/common.sh
fi


#
# Log our start
#
logMessage Script $0 starting

#
#  Remove the links for upstart
#
rm ${prefix}/etc/init/tty[!1].conf


#
#  Are we using an alternative serial device?
#
if [ ! -z "${serial_device}" ]; then

    serial_device=`basename ${serial_device}`

    # Let the user know.
    logMessage "Replacing default serial device (tty1) with ${serial_device}; having destroyed the rest"

    # replace existing device.
    mv ${prefix}/etc/init/tty1.conf ${prefix}/etc/init/${serial_device}.conf
    sed -i -e s/tty1/${serial_device}/ ${prefix}/etc/init/${serial_device}.conf

    # make sure that it is allowed to login.
    echo $serial_device >> ${prefix}/etc/securetty
fi

#
#  Log our finish
#
logMessage Script $0 finished
创建/etc/xen-tools/role.d/pygrub文件(可选),并赋予可执行权限,使虚拟机能从自己的内核启动,而不是从Xen提供的内核,如果进行这一步,在创建虚拟机镜像时需要使用pygrub和udev两个role。
#!/bin/sh
#
#  Configure the new image to be suitable for booting via pygrub
#
# Wejn
# --
# http://wejn.org/
#
# Updated for Lucid; DDS/ABC
#


prefix=$1


#
#  Source our common functions - this will let us install a Debian package.
#
if [ -e /usr/lib/xen-tools/common.sh ]; then
    . /usr/lib/xen-tools/common.sh
else
    echo "Installation problem"
fi


#
#  Update APT lists.
#
chroot ${prefix} /usr/bin/apt-get update
 

#
#  Install the packages
#
set -e
installDebianPackage ${prefix} perl
installDebianPackage ${prefix} libklibc
installDebianPackage ${prefix} klibc-utils
installDebianPackage ${prefix} initramfs-tools
#installDebianPackage ${prefix} linux-image-2.6-xen-amd64
installDebianPackage ${prefix} linux-virtual

# Force initrd if none exists
echo ${prefix}/boot/initrd* | grep -q 2\\.6
if [ $? -ne 0 ]; then
        chroot ${prefix} update-initramfs -c -k `ls -1 ${prefix}/lib/modules/ | head -n 1`
fi

# Generate grub menu.lst
LNZ=`basename \`ls -1 ${prefix}/boot/vmlinuz*|tail -n 1\``
RD=`basename \`ls -1 ${prefix}/boot/initrd*|tail -n 1\``
mkdir -p ${prefix}/boot/grub
cat - <<-EOF > ${prefix}/boot/grub/menu.lst
default         0
timeout         5

title           Debian/Ubuntu
root            (hd0,0)
kernel          /boot/$LNZ root=/dev/xvda2 ro
initrd          /boot/$RD
EOF
创建虚拟机镜像,需要注意其中的一些参数选项:
#xen-create-image --hostname=lucid --ip=172.20.10.196 --netmask=255.255.255.0 --gateway=172.20.10.1 --dist=lucid --mirror=http://172.20.10.197/lucid/ --size=10gb --memory=512mb --swap=512mb --arch=i386 --passwd --dir=/vms --force --role=udev,pygrub
--dist指定为lucid,镜像同样是自己从光盘拷贝的内容,--role指定了udev和我们创建的pygrub。
  下面修改虚拟机配置文件,将其自动生成的内核部分注释掉,以使虚拟机从自己内核启动,同样,最后也加上console相关的选项,不然xen console进不去:
...
#kernel      = '/boot/vmlinuz-2.6.26-2-xen-686'
#ramdisk     = '/boot/initrd.img-2.6.26-2-xen-686'
...
#
#  Extra
#
extra = 'console=hvc0 xencons=tty'
启动虚拟机:
#xm list
#xm create lucid.conf
直接启动putty用ssh方式登录虚拟机,完毕!

小结

  本文,实现了Debian5 dom0跑Xen Debian5 lenny domU&Xen ubuntu10.04 Lucid domU两种虚拟机,由于lucid刚刚发布,xen-tools对其支持不太完善,需要手动修改一些地方,比较麻烦。
  最后需要注意的是虚拟机是以镜像文件形式存在,包括一个配置文件位于/etc/xen/VM_NAME.conf,一个镜像文件和一个swap文件位于创建虚拟机时指定的--dir下,在迁移虚拟机时也非常方便,将镜像和swap文件复制到新xen服务器上,再把配置文件复制到/etc/xen/下(可以使用vsftp,参考 Ubuntu网络配置),并修改配置文件中的#  Disk device(s)部分的disk到新xen服务器的镜像存放目录,而对于使用pygrub的虚拟机还需要执行上文提到的“创建两个针对Xen和pygrub的链接”,即可完成虚拟机的迁移,最后留下一个问题:怎样扩展虚拟机镜像文件?

评论: 0 查看评论 发表评论

沪江网招聘ASP.NET开发工程师

最新新闻:
· 当微博连通大屏幕(2010-06-01 12:42)
· 从1.0到2.2 细数Android系统18个月历程(2010-06-01 12:07)
· 只因有你 回眸Qzone五年成长历程(2010-06-01 12:04)
· 谷歌手机Adsense冻结开发者账户遭质疑(2010-06-01 11:58)
· Chrome推送网页至手机功能视频展示(2010-06-01 11:55)

编辑推荐:关于Java与.NET的讨论

网站导航:博客园首页  个人主页  新闻  闪存  小组  博问  社区  知识库

你可能感兴趣的:(Debian5 dom0上跑Xen Debian5 lenny domU&Xen ubuntu10.04 Lucid domU--我爱你,飞一般的感觉)