创建及安装一台 CentOS 5 domU

<!> :这篇文章适用于每个 CentOS 5 定点发行本,而不是针对某个特定的版本。KVM 的设置及用法已收录在别处。

引言

这份教学文档描述如何在不利用 virt-manager 或文字版 virt-install 的情况下创建一台 CentOS 5 的 Xen domU。一般来说,这些工具都不能对实例作出所需的修订,所以很多时候采用它们背后的工具来创建实例会更好。最份教学文档的最后一部份描述如何利用 virsh 这个管理虚拟本地的万用工具来进行相同步骤。

这份教学文档假设 Xen 已经被安装,而 CentOS 正在 dom0(拥有特权的管理本地)被运行。简单来说,你可以安装 xenkernel-xen 这两个组件,然后引导 Xen 版本的内核来达至这个目标。这些数据都已经详情收录在虚拟化指南内。

此外,这份教学文档现时亦假设你将会用一个硬盘映像档来作为 domU 的硬盘。当然,改用实体分区或磁盘区亦很简单。

让我澄清一些经常混淆新 Xen 用户的名词:dom0 是个拥有特权的管理本地,为数只得一个。domU 是没有特别权限的本地,同时可有多个共存。虽然这个比喻不正确,但你可以试想像 dom0 是主体系统,而 domU 是客端系统。

创建一个映像

第一步是要创建存有 domU 虚拟硬盘的映像档。由于它只需要是一个被零填满的文件,我们的好朋 dd 便大派用场。在这个教学文档内,我们会将映像放在 /srv/xen 内,虽然官方普遍认可的位置似乎是 /var/lib/xen/images。假若你希望在文件增长时才配置数据块,你可以创建一个有洞的文件。以下的指令会创建一个 2048MB 的 /srv/xen/mailserver.img 文件,虽然实际数据块是以迟缓的方式来配置:

# dd if=/dev/zero of=/srv/xen/mailserver.img oflag=direct bs=1M seek=2047 count=1

如果你想立即配置所有数据块,你亦可以这样做:

# dd if=/dev/zero of=/srv/xen/mailserver.img oflag=direct bs=1M count=2048

这个方法可以避免日后存有映像档的磁盘区满载时,不能配置数据块的问题。

假如你使用 SELinux,你一定要确保映像档拥有正确的安全性脉络(xen_image_t),否则 domU 系统访问虚拟硬盘时便会被拒绝。你可以用 ls 进行检查:

# ls -Z /srv/xen/mailserver.img 
-rw-r--r--  root root user_u:object_r:xen_image_t      /srv/xen/mailserver.img

假如你在配置文件案脉络时遇到问题,请参阅 Xen 提示与技巧这一页。无论如何,停用 SELinux,一如某些有关这方面的教学文档所推荐,是个很坏的权宜之计。反过来,通过阅读两篇手册(semanage(8)restorecon(8))来换取多一层保障更为化算!

为安装预备一个 Xen 配置文件

Xen 在每个本地使用一个配置文件。这些本地设置在安装时会稍有分别,因为我们要提供所安装内核,甚至乎一些开机参数。你会需要 domU 安装用的 initrd 映像及内核。视乎机器的结构,它们都可以在这里下载:

http://mirror.centos.org/centos/5/os/i386/images/xen/

http://mirror.centos.org/centos/5/os/x86_64/images/xen/

你可以将它们放在一个合适的目录,并将它们改为恰当的名称。在这个例子里,内核及 initrd 映像分别会被命名为 /boot/vmlinuz-xen-install/boot/initrd-xen-install

当映像都就绪,你便可以创建安装配置文件,在这里名为 /etc/xen/mailserver

kernel = "/boot/vmlinuz-xen-install"
ramdisk = "/boot/initrd-xen-install"
extra = "text ks=http://localserver/minimal-ks.cfg"
name = "mailserver"
memory = "256"
disk = [ 'tap:aio:/srv/xen/mailserver.img,xvda,w', ]
vif = [ 'bridge=xenbr0', ]
vcpus=1
on_reboot = 'destroy'
on_crash = 'destroy'

你或许会想调整某些参数,例如这台 domU 专用的内存尺寸,又或者网桥的名称,假若你想这台 domU 利用另一个网桥。除此之外,这个配置文件亦利用一个 kickstart 档来自动进行安装。如果你想进行交互式安装,请删除 ks=http://localserver/minimal-ks.cfg 这一行。这个样例亦指定以文字模式进行安装 —— 你也可以用一个 VNC 查看器来进行图像式安装。但在我的经验里,文字式安装较为舒服,因为你可以在任何时候将一个文字主控台连接到这个本地,让你直接使用或监视 Anaconda。

样例 kickstart 档

这是一个作为参考用的样例 kickstart 档。如果你想使用它,你必需按你的处境作出修改(最低限度更改 root 的密码)。这个 kickstart 档会进行最细少的安装,假如你要复制一个映像来快速部署新的实例,这样做会很方便。

install
url --url http://mirror.centos.org/centos/5/os/i386
lang en_US.UTF-8
network --device eth0 --bootproto dhcp
# 密码是假的,请将它至更合适的!
rootpw bogus
firewall --enabled --port=
authconfig --enableshadow --enablemd5
selinux --enforcing −−port=22:tcp
timezone --utc Europe/Amsterdam
bootloader --location=mbr --driveorder=xvda --append="console=xvc0"
reboot

# 进行分割
clearpart --all --initlabel --drives=xvda
part /boot --fstype ext3 --size=100 --ondisk=xvda
part pv.2 --size=0 --grow --ondisk=xvda
volgroup VolGroup00 --pesize=32768 pv.2
logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=256 --grow --maxsize=512

%packages
@core

开始安装

当你设置好安装的设置,你便可以引导 domU 的实例:

# xm create mailserver

如果你正确地设置了这台 domU,安装桯序将会顺利地开始。假若你选择了手动式安装,或者想观看 kickstart 的运作,你可以将一个主控台连接到这台 domU:

# xm console mailserver

安装完成后,这台 domU 将会重新引导并被销毁(因为这是重新引导的缺省动作,我们稍后会更改它)。

安装后的设置

既然安装已经完成,现在便是一个好的时机来复制这个实例的映像作为范本。此时 SSH 的金钥仍未被产生,这样就更容易让每个实例拥有一组独特的 SSH 金钥。

现在安装配置文件应该被修改用作非安装的用途。这是已修改了的配置文件:

name = "mailserver"
memory = "256"
disk = [ 'tap:aio:/srv/xen/mailserver.img,xvda,w', ]
vif = [ 'bridge=xenbr0', ]
bootloader="/usr/bin/pygrub"
vcpus=1
on_reboot = 'restart'
on_crash = 'restart'

如你所见,这个新的配置文件不会再使用内核或 initrd 映像。取而代之,它会使用 pygrub 作为开机程序。pygrub 会尝试在虚拟映像档的分区内寻找一个藏有 GRUB 配置文件的文件系统。假若能找到 GRUB 的配置文件,它便会被用来引导内核。这样做很方便,因为它容许你使用/管理 domU 里的内核。假如 yum update 将一个含安全性更新的内核下载到 domU 内,当这个本地下次开机时,这个内核会自动获得应用。

我们所作的另一个改动是关乎当机及重新开机。你多数会想在当机或重新开机时重新引导一个本地。

有了这些设置,你可以这样测试这个本地:

# xm create mailserver

如果你安装了 SSH,你可以通过 SSH 登录这个本地,又或者利用 Xen 的主控台:

# xm console mailserver

现在你可以像普通的 CentOS 机器般管理这个本地。你可以这样关闭这个本地:

# xm shutdown mailserver

欲知道更多关于 xm 所提供的选项,请参阅 xm 的使用手册。

自动引导本地

如果你想于(dom0)系统开机时自动引导一个本地,请将这个本地的配置文件转到 /etc/xen/auto 目录内。例如:

# mv /etc/xen/mailserver /etc/xen/auto

这样做亦会确保这个本地在系统关机时会被正确地关闭。

利用 virsh/libvirt

libvirt 这个库现正被开发,目的是要为现有的虚拟化科技提供一个抽象化的程序界面。一个较旧版本、支持 Xen 的 libvirt 已经包含在 CentOS 5 之内。新版本亦能将 KVM 及 qemu 抽象化。

libvirt 可以在指令壳内通过 virsh 这个指令来应用。利用这个指令来管理本地与 xm 大致相同。就这份文章而言,创建及关闭本地的指令是最重要的指令:

virsh create FILE
virsh shutdown domain-name/id/uuid

libvirt 利用 XML 作为本地的描述。这些本地描述档的格式已收录在 libvirt 的网站。为了助你一把,这里是安装时用的本地描述:

<domain type='xen'>
  <name>mailserver</name>
  <os>
    <type>linux</type>
    <kernel>/boot/vmlinuz-xen-install</kernel>
    <initrd>/boot/initrd-xen-install</initrd>
    <cmdline>text ks=http://localserver/minimal-ks.cfg</cmdline>
  </os>
  <memory>262144</memory>
  <vcpu>1</vcpu>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>destroy</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <interface type='bridge'>
      <source bridge='xenbr0'/>
      <script path='vif-bridge'/>
    </interface>
    <disk type='file' device='disk'>
      <driver name='tap' type='aio'/>
      <source file='/srv/xen/mailserver.img'/>
      <target dev='xvda'/>
    </disk>
    <console tty='/dev/pts/1'/>
  </devices>
</domain>

及正常运作的设置:

<domain type='xen'>
  <name>mailserver</name>
  <bootloader>/usr/bin/pygrub</bootloader>
  <os>
    <type>linux</type>
  </os>
  <memory>262144</memory>
  <vcpu>1</vcpu>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <interface type='bridge'>
      <source bridge='xenbr0'/>
      <script path='vif-bridge'/>
    </interface>
    <disk type='file' device='disk'>
      <driver name='tap' type='aio'/>
      <source file='/srv/xen/mailserver.img'/>
      <target dev='xvda'/>
    </disk>
    <console tty='/dev/pts/1'/>
  </devices>
</domain>

假设这些配置文件名叫 /srv/xen/mailserver.xml,你可以如此创建及关闭这个本地:

# virsh create /srv/xen/mailserver.xml
# virsh shutdown mailserver

其它阅读

这个 wiki 内其它涉及 xen 虚拟化的页面包括:

Translation of revision 10

zh/HowTos/Xen/InstallingCentOSDomU (last edited 2010-04-09 08:06:43 by TimothyLee)