#language zh-tw = CentOS 6、7 的 Xen4 Libvirt = <> == Libvirt 及 Xen 的基礎 == Xen 的主機操作系統稱為 Dom0。透過 Xen 來執行的虛擬操作系統(VM)稱為 DomU。 在預設情況下,libvirt 會在預設網絡卡(一般是 eth0)背後建立一個 192.168.122.0/24 的 NAT 網絡。 在這個 NAT 網絡上運行的 DomU VM 可以互相連線及通過 Dom0 的網絡向外連線,但你只能在 Dom0 上透過 libvirt(或 xen)連線到它們。你可以把預設的 NAT 網絡改為一個橋接式網絡,這樣你便能連線到 DomU VM,仿如它們與 Dom0 在同一個實體網絡上。有關橋接的討論收錄在下文(第 7 部份)。 == 先決條件 == 此頁假設你已經遵照[[HowTos/Xen/Xen4QuickStart|Xen4QuickStart 指引]]安裝了一個 Xen 內核,而 '''xl info''' 這個指令作出類似的匯報: {{{ [root@xentest1 ~]# xl info host : immortal release : 3.10.56-11.el6.centos.alt.x86_64 version : #1 SMP Thu Oct 9 14:57:01 CDT 2014 machine : x86_64 nr_cpus : 4 max_cpu_id : 31 nr_nodes : 1 cores_per_socket : 4 threads_per_core : 1 cpu_mhz : 2533 hw_caps : bfebfbff:2c100800:00000000:00003f00:029ee3ff:00000000:00000001:00000000 virt_caps : hvm hvm_directio total_memory : 6141 free_memory : 5030 sharing_freed_memory : 0 sharing_used_memory : 0 outstanding_claims : 0 free_cpus : 0 xen_major : 4 xen_minor : 4 xen_extra : .1-4.el6 xen_version : 4.4.1-4.el6 xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 xen_scheduler : credit xen_pagesize : 4096 platform_params : virt_start=0xffff800000000000 xen_changeset : Wed Oct 15 15:36:23 2014 +0100 git:9f49483-dirty xen_commandline : dom0_mem=1024M,max:1024M loglvl=all guest_loglvl=all com1=115200,8n1 console=com1,vga cc_compiler : gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11) cc_compile_by : mockbuild cc_compile_domain : centos.org cc_compile_date : Mon Dec 15 17:54:14 UTC 2014 xend_config_format : 4 }}} 除非特別指定,所有指令均須由 '''root''' 用戶在 '''Dom0''' 機器上執行。 我習慣在最少安裝上加入數個套件,因為它們稍後也許會有用。請以此指令安裝它們: {{{ yum install rsync wget vim-enhanced openssh-clients }}} == 安裝 libvirt(在 Dom0 機器上) == 首先我們要安裝 libvirt 所需的基本套件: CentOS 6 監督器: {{{ yum install libvirt python-virtinst libvirt-daemon-xen }}} CentOS 7 監督器: {{{ yum install libvirt libvirt-daemon-xen }}} 安裝後,請重新啟動你的 Dom0 機器。 == 遠端存取 LibVirt == 在多數情況,下我們不建議在 Dom0 伺服器上安裝整套圖像化系統,因此多數人會從遠端存取/控制 Dom0 libvirt。 你有 2 個可取的途徑 …… 其一是透過一台圖像化機器(例如一台 CentOS-6 工作站),其二是透過 ssh 應用 virsh 指令行程式。 === 透過 PolicyKit 控制 libvirt 的存取權 === 如果你想將一台 CentOS-6 工作站連線到 Dom0 上的 virt-manager 並控制該台電腦上的 DomU 虛擬機器,你便需要利用 !PolicyKit。當你利用某台機器上的 virsh 終端機直接連線到 Dom0 及控制它的 DomU 虛擬機器時,!PolicyKit 也會被應用。 !PolicyKit 讓你設計有彈性、精細的存取權,功能遠超㙎本範例所介紹以 unix 群組授權存取 libvirt 的做法。 如要設計複雜的存取權,請參閱 [[http://www.freedesktop.org/software/polkit/docs/0.105/|polkit 的文檔]] <> ==== 設定 libvirt 供群組存取 ==== 若要把存取權授予某個 unix 群組的成員,我們只須建立一個 !PolicyKit 本地權限檔。 這是一個純文字檔,一般被放置於這個目錄中: {{{ /etc/polkit-1/localauthority/50-local.d/ }}} 你可隨意為這個檔案命名,但它必須以'''兩個數目字'''起首及以 '''.pkla''' 結尾。例如: {{{ /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla }}} 它的內容應包含: {{{ [Remote libvirt SSH access] Identity=unix-group:group_name Action=org.libvirt.unix.manage ResultAny=yes ResultInactive=yes ResultActive=yes }}} 你應該以合適的群組名稱取替 '''group_name'''。 舉個例說:你擁有一位名為 '''johnny''' 的 unix 用戶,而你希望建立一個名為 '''remote-libvirt''' 的群組來遠端存取 libvirt,並把 johnny 加進該群組內。 首先我們要透過 ssh 登入 Dom0 機器並取得 root 的身份。接著我們便執行以下指令來建立新的群組: {{{ groupadd remote-libvirt }}} 然後我們可以用這個指令把用戶加進 remote-libvirt 這個群組內: {{{ usermod -G remote-libvirt johnny }}} 現在 johnny 這個 unix 用戶可以遠端控制 libvirt。 === 連線到遠端的 Dom0 === <> ==== 從遠端機器透過 virt-manager 連線到 Dom0 機器 ==== 請登入你的圖像化桌面(它可以是台 CentOS-6 工作台或是一台用來管理數台非圖像化 Dom0 機器的圖像化伺服器),然後透過開啟一個終端機視窗及以 root 身份執行以下指令,確保 virt-manager 已被安裝: {{{ yum install virt-manager }}} 以普通用戶的身份開啟 virt-manager。你可利用 '''Applications => System Tools => Virtual Machine Manager''' 這條捷徑,或從終端機視窗輸入 '''virt-manager'''。 在 virt-manager 應用程式內,開啟 '''File => Add Connection''' 選單項目,接著選取 '''Xen''' 作為監督器,選用 '''connect to a remote host''',選取 '''SSH''' 作為方法,輸入你加進 remote-libvirt 群組內的用戶(在這個範例中是 '''johnny''')作為用戶名稱,最後輸入 DomU 的主機名稱或 IP 位址(這我的範例中,我們會採用 '''192.168.0.5''')…… 然後點擊 connect。 它會問 johnny 在 DomU 上的 ssh 用戶名稱 …… 輸入後,你便會看見它連線到主機及在 virt-manager 內看見一個 '''Domain-0''' 的圖示。 這個例子中的 URI 是: '''{{{xen+ssh://johnny@192.168.0.5}}}''' <> ==== 從遠端機器透過 virsh 連線到 Dom0 機器 ==== 你在 Dom0 上利用 virsh 控制 DomU 虛擬機器的做法有兩種。 第一種是純粹 ssh 到 Dom0 機器,然後成為 root 用戶及從指令行執行 '''virhs'''。 第二種是採用上述例子的群組然後執行以下指令: {{{ virsh -c xen+ssh://johnny@192.168.0.5 }}} 這種做法的好處就是我們無須把 Dom0 的 root 存取權發放給 '''johnny''' 用戶,他只須正常帳戶。他同樣能應用 virsh 的一切功能。 有關 virsh 的詳情,請參閱這份[[https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Managing_guests_with_virsh.html|指南]] == 建立 DomU 虛擬機器 == || {{attachment:ArtWork/WikiDesign/icon-admonition-alert.png}} |||| 如果你要安裝 CentOS 7 DomU 成為 paravirt 客端,請留意該虛擬機器的 /boot 不能採用 xfs —— 見 https://wiki.xen.org/wiki/PyGrub 。因此你必須利用 kickstart 檔或透過 vnc 進行安裝,以便能更改預設值。你可以在 extra-args 內加入這些選項。 || === 利用 virt-manager 來安裝 DomU === 現在你可以在 virt-manager 內選取新的主機名稱/IP 位址,然後'''按滑鼠右鍵'''並選取 '''New''' 或點擊 '''Create a new Virtual Machine''' 的圖示,接著按照提示來建立新的機器。 這個過程在遠端及本地連線下都相同 …… 唯一差別就是 '''Step 1 of 5''' 提示頁上的 Connection 對話方塊。 安裝新機器的過程與[[https://access.redhat.com/site/documentation//en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/chap-Virtualization_Host_Configuration_and_Guest_Installation_Guide-Guest_Installation_Virt_Manager-Creating_guests_with_virt_manager.html|此指南]]很相似,唯獨在 '''Step 1 of 5''' 提示頁上的連線將會顯示你的'''遠端主機名稱'''(在我們的範例中是 192.168.0.5),而在 '''Step 5 of 5''' 提示頁的進階選項的 '''Virt Type''' 內,你會看見 '''xen(paravirt)''' 或 '''xen(fullvirt)''' 而不是 KVM。 === 透過 SSH 利用 virt-install 來安裝 DomU === 另一個進行遠端安裝的方法就是利用 ssh 連線到 Dom0 機器及成為 root 用戶,然後利用 virt-install 及終端機來人進行安裝。以下指令(以 root 身份在指令行執行)可以從遠端進行文字模式的安裝: {{{ virt-install -d -n TestVM1 -r 2048 --vcpus=1 --disk /var/lib/libvirt/images/TestVM1.img,size=8 --nographics -p -l "http://192.168.0.10/centos/6.4/os/x86_64" --extra-args="text console=com1 utf8 console=hvc0" }}} 在上述例子中,指令的含意包括: '''-d ''' — 偵錯模式,列印大量文字及完整的設定樣作偵錯之用 '''-n TestVM1''' — 虛擬機器的名稱 '''-r 2048''' — 記憶體大少(2048 MB,即 2 GB) '''--vcpus=1''' — 虛擬 CPU 的數量 '''--disk=/var/lib/libvirt/images/TestVM1.img,size=8''' — 碟盤映像的位置及以 GB 計算的大少 …… 它可指向 LVM、等 '''--nographics''' — 由於我們的 Dom0 沒有安裝圖像介面,因此不要採用 VNC、等 '''-p''' — 採用半虛擬化 '''{{{-l "http://192.168.0.10/centos/6.4/os/x86_64"}}}''' — centos 目錄樹的位置,也可採用 '''{{{http://mirror.centos.org/centos/6/os/x86_64/}}}''' 或其它鏡像。 '''--extra-args="text console=com1 utf8 console=hvc0"''' — 告訴 linux 利用 com1 和 xen 利用 hvc0,好讓你能透過終端機進行文字模式安裝 註:這類安裝採用終端機,因此局限於文字模式的安裝。上述(前一段)的 virt-manager 卻能同時支援圖像化安裝。 有關利用 virt-install 進行安裝的詳情請參閱此[[https://access.redhat.com/site/documentation//en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/sect-Virtualization_Host_Configuration_and_Guest_Installation_Guide-Guest_Installation-Creating_guests_with_virt_install.html|指南]]。 == 控制 DomU 虛擬機器 == 透過 libvirt,你可利用圖像化應用程式(virt-manager)或文字應用程式(virsh)來控制 DomU 虛擬機器。 這些應用程式可以位於 DomU 虛擬機器所身處的 Dom0 上(本地控制),它們也可以位於不同的機器上並連線到 DomU(遠端控制)。 不論是透過遠端或本地連線,兩種工具的實際操作都是相同。 有關[[#ConVM|遠端 virt-manager]] 或[[#ConVSH|遠端 virsh]] 的連線,請參閱這些指引。你必須[[#ConLVGA|設置]] libvirt 才能用這兩個工具來進行遠端存取。 有關採用 '''virsh''' 這參閱此[[https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Managing_guests_with_virsh.html|指南]];有關採用 '''virt-manager''' 這參閱此[[https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Managing_guests_with_the_Virtual_Machine_Manager_virt_manager.html|指南]] == 橋接範例設定 == 以下是另一個橋接範例設定: 你必須安裝 bridge-utils 才可設置橋接。你可以在 CentOS 下以這個指令進行安裝: {{{ yum install bridge-utils }}} 以下檔案位於 '''/etc/sysconfig/network-scripts/''',它們必須被修改。 定義 br1 的最簡單範例 '''ifcfg-eth0''' {{{ DEVICE=eth0 NM_CONTROLLED=no ONBOOT=yes TYPE=Ethernet BRIDGE="br1" USERCTL=no }}} '''ifcfg-br1''' {{{ DEVICE=br1 BOOTPROTO=none NM_CONTROLLED=no ONBOOT=yes TYPE=Bridge IPADDR=192.168.0.5 PREFIX=24 GATEWAY=192.168.0.1 DNS1=8.8.8.8 DNS2=8.8.4.4 USERCTL=no }}} [[http://wiki.xen.org/wiki/Network_Configuration_Examples_%28Xen_4.1%2B%29#Red_Hat-style_bridge_configuration_.28e.g._RHEL.2C_Fedora.2C_CentOS.29|此處]]及[[https://sites.google.com/site/ghidit/how-to-2/configure-bridging-on-centos|此處]]探討了其他橋接範例設定。另外,Google 亦是你的好幫手 :) ~-Translation of revision 24-~