当前位置首页 > Debian知识

Debian5dom0上跑XenDebian5lennydomU&Xenubuntu10.04LuciddomU--我爱

阅读次数:225 次  来源:admin  发布时间:

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

个人态度: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的链接”,即可完成虚拟机的迁移,最后留下一个问题:怎样扩展虚拟机镜像文件?
上一篇:CentOS8安装Geant4笔记(三):Geant4介绍、编译、安装支持Qt5界面并运行exampleB1例程显示Qt界面
下一篇:Linux路由学习笔记之一相关的数据结构