创建及安装一台 CentOS 5 domU
注:这篇文章适用于每个 CentOS 5 定点发行本,而不是针对某个特定的版本。KVM 的设置及用法已收录在别处。
1. 引言
这份教学文档描述如何在不利用 virt-manager 或文字版 virt-install 的情况下创建一台 CentOS 5 的 Xen domU。一般来说,这些工具都不能对实例作出所需的修订,所以很多时候采用它们背后的工具来创建实例会更好。最份教学文档的最后一部份描述如何利用 virsh 这个管理虚拟本地的万用工具来进行相同步骤。
这份教学文档假设 Xen 已经被安装,而 CentOS 正在 dom0(拥有特权的管理本地)被运行。简单来说,你可以安装 xen 及 kernel-xen 这两个组件,然后引导 Xen 版本的内核来达至这个目标。这些数据都已经详情收录在虚拟化指南内。
此外,这份教学文档现时亦假设你将会用一个硬盘映像档来作为 domU 的硬盘。当然,改用实体分区或磁盘区亦很简单。
让我澄清一些经常混淆新 Xen 用户的名词:dom0 是个拥有特权的管理本地,为数只得一个。domU 是没有特别权限的本地,同时可有多个共存。虽然这个比喻不正确,但你可以试想像 dom0 是主体系统,而 domU 是客端系统。
2. 创建一个映像
第一步是要创建存有 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))来换取多一层保障更为化算!
3. 为安装预备一个 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。
4. 样例 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
5. 开始安装
当你设置好安装的设置,你便可以引导 domU 的实例:
# xm create mailserver
如果你正确地设置了这台 domU,安装桯序将会顺利地开始。假若你选择了手动式安装,或者想观看 kickstart 的运作,你可以将一个主控台连接到这台 domU:
# xm console mailserver
安装完成后,这台 domU 将会重新引导并被销毁(因为这是重新引导的缺省动作,我们稍后会更改它)。
6. 安装后的设置
既然安装已经完成,现在便是一个好的时机来复制这个实例的映像作为范本。此时 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 的使用手册。
7. 自动引导本地
如果你想于(dom0)系统开机时自动引导一个本地,请将这个本地的配置文件转到 /etc/xen/auto 目录内。例如:
# mv /etc/xen/mailserver /etc/xen/auto
这样做亦会确保这个本地在系统关机时会被正确地关闭。
8. 利用 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
9. 其它阅读
这个 wiki 内其它涉及 xen 虚拟化的页面包括:
Xen 环境,包括设置 SELinux 安全性脉络
普遍关于 SELinux 安全性二元值
CentOS 上的虚拟化这个更广泛的题目
Translation of revision 10