建立及安裝一台 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