[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

建立及安裝一台 CentOS 5 domU

<!> :這篇文章適用於每個 CentOS 5 定點發行本,而不是針對某個特定的版本。KVM 的設置及用法已收錄在別處。

1. 引言

這份教學文檔描述如何在不利用 virt-manager 或文字版 virt-install 的情況下建立一台 CentOS 5 的 Xen domU。一般來說,這些工具都無法對實例作出所需的修訂,所以很多時候採用它們背後的工具來建立實例會更好。最份教學文檔的最後一部份描述如何利用 virsh 這個管理虛擬區域的萬用工具來進行相同步驟。

這份教學文檔假設 Xen 已經被安裝,而 CentOS 正在 dom0(擁有特權的管理區域)被運行。簡單來說,你可以安裝 xenkernel-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 虛擬化的頁面包括:

Translation of revision 10


2023-09-11 07:23