爲OpenStack製做Windows 2008 R2鏡像

前提條件:git

支持硬件輔助虛擬化(Intel VT-x或AMD-V)的主機一臺。github

已安裝好的CentOS7,默認的最小安裝便可,配置網絡使之能夠訪問外網。vim

準備Windows 2008 R2安裝光盤鏡像windows

配置過程:bash

注:如下配置中過程當中,eno16777736爲主機外部網絡所對應的網卡,IP地址爲192.168.1.9,配置過程當中,請根據實際狀況修改網絡

  • 環境準備dom

安裝相關軟件包socket

yum install -y vim wget net-tools bash-completion qemu-kvm libvirt virt-install
systemctl start libvirtd.service

建立橋接網絡ide

cat > /etc/libvirt/qemu/networks/bridge.xml << EOF
<network>
  <name>bridge</name>
  <bridge name="br-ex"/>
  <forward mode="route" dev="eno16777736"/>
  <ip address="192.168.1.9" netmask="255.255.255.0"/>
</network>
EOF

virsh net-define /etc/libvirt/qemu/networks/bridge.xml
virsh net-autostart bridge

配置網卡自動添加到橋接器工具

cp /etc/sysconfig/network-scripts/ifcfg-eno16777736 /etc/sysconfig/network-scripts/ifcfg-br-ex
sed -i -e '/^NAME=/d' -e '/^DEVICE=/d' -e 's/^TYPE=.*/TYPE=Bridge/' -e '/^UUID=/d' -e '/^HWADDR=/d' /etc/sysconfig/network-scripts/ifcfg-br-ex
echo "DEVICE=br-ex" >> /etc/sysconfig/network-scripts/ifcfg-br-ex
sed -i -e '/^IPADDR/d' -e '/^NETMASK/d' -e '/^PREFIX/d' -e '/^GATEWAY/d' -e '/^DNS/d' /etc/sysconfig/network-scripts/ifcfg-eno16777736
echo "BRIDGE=br-ex" >> /etc/sysconfig/network-scripts/ifcfg-eno16777736

重啓系統使配置生效

reboot

確認"bridge" 網絡已啓動

virsh net-list
brctl show

spacer.gifwKiom1T8ks_xYFsrAAERAM9UXRc456.jpg

關閉防火牆或者開放5900+N端口(要從客戶端鏈接虛擬機控制檯,默認從5900端口開始,每一個虛擬機實例佔用一個端口號,也能夠指定虛擬機實例所使用的端口)

systemctl disable firewalld.service ; systemctl stop firewalld.service

建立鏡像製做目錄

mkdir /opt/p_w_picpath ; cd /opt/p_w_picpath

下載virtio驅動軟盤

wget -O virtio-win-drivers.vfd https://launchpad.net/kvm-guest-drivers-windows/20120712/20120712/+download/virtio-win-drivers-20120712-1.vfd


  • 安裝Windows 2008 R2系統

建立qcow2格式的虛擬磁盤

qemu-img create -f qcow2 win2k8.qcow2 10G

wKioL1T8k-rAFlGTAACRPFuyOoY460.jpg

將系統安裝鏡像文件上傳至/opt/p_w_picpath(此過程不在本文描述範圍,略過),並命名爲 win2k8.iso。若是使用其餘文件名,請在後續操做中自行修改鏡像文件名。

若是隻有光盤沒有鏡像,能夠將光盤放入到光驅,經過如下命令將光盤製做爲iso鏡像。

dd if=/dev/sr0 of=/opt/p_w_picpath/win2k8.iso

建立虛擬機實例。如下命令建立一個Win2k8虛擬機實例,配備1G內存,單核CPU,使用virtio網卡和磁盤適配器,掛載win2k8.iso和virtio-win-dirvers.vfd,遠程控制使用spice(自動分配端口號,默認從5900開始)

virt-install --connect qemu:///system --virt-type=kvm \
--name win2k8 --ram 1024 --vcpus 1 --arch=x86_64 \
--network network=bridge,model=virtio \
--disk win2k8.qcow2,format=qcow2,device=disk,bus=virtio \
--cdrom win2k8.iso \
--disk virtio-win-drivers.vfd,device=floppy \
--graphics spice,listen=0.0.0.0 --video qxl --channel spicevmc \
--os-type windows --os-variant win2k8

出現如下兩條告警能夠忽略,後續將從Windows客戶端進行鏈接,無需使用 virt-viewer

  • 若是沒有安裝 virt-viewer,會出現警告信息 WARNING Unable to connect to graphical console: virt-viewer not installed.

  • 若是在命令行模式下運行此命令,會出現警告信息 WARNING **: Could not open X display

在本地Windows上安裝SPICE客戶端(下載連接 https://fedorahosted.org/released/virt-viewer/),Linux系統可在GUI界面下安裝virt-viewer

安裝完成後,運行 Remote viewer

spacer.gifwKiom1T8ks-DVL0uAAAn9aoc9Hk392.jpg


執行如下命令獲取鏈接虛擬機實例所用的端口號,默認從5900開始

virsh domdisplay win2k8

在鏈接地址欄中填入 spice://host地址:5900 注意將查詢到的地址中的localhost替換爲主機實際的IP地址,而不是虛擬機的IP地址

spacer.gifwKioL1T8k-qybjePAADPSOphU4U255.jpg

點擊 Connect,便可打開遠程虛擬機的安裝界面

wKiom1T8ktGy-l-NAAQIIIO8vXE538.jpg

由於使用了virtio半虛擬化驅動器,2008 R2和Win7 中默認沒有該驅動,因此須要手動加載其驅動

spacer.gifwKioL1T8k-zTPOmrAABOUqqmC94737.jpg

從軟驅中加載storage驅動(這裏顯示2003R2,一樣可用於2008R2。多是軟驅容量有限,製做者沒有加入太多內容)

wKiom1T8ktHS0t-JAADmzZFzx68186.jpgspacer.gif

wKioL1T8k-ziarx6AACCyiD16LQ513.jpg

而後點擊下一步,稍等片刻後便可看到前面分配的磁盤空間了。

wKiom1T8ktGCK_5ZAACi5mgK4I8435.jpg

接下來的系統安裝步驟省略。安裝完成以前重啓會致使spice鏈接斷開,從新鏈接便可,安裝完成以後重啓就不會再斷開了


系統安裝完成後,安裝網卡驅動(軟驅中的驅動)。配置虛擬機網絡,使其與外部網絡連通。

spacer.gifwKioL1T8k-zgiFVjAAEyf__LWno999.jpg

下載virtio驅動和qxl顯示驅動。(網絡已經配置好,也能夠使用RDP鏈接虛擬機實例,方便複製連接和文件)

(備用連接 http://alt.fedoraproject.org/pub/alt/virtio-win/stable/virtio-win-0.1-81.iso)

http://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-0.74.exe

http://www.spice-space.org/download/windows/qxl/qxl-0.1-21/qxl_8k2R2_x64.zip

安裝spice-guest-tools-0.74.exe,安裝qxl顯卡驅動

wKiom1T8ktLiGfIKAAFWFvKJzlc616.jpg

wKioL1T8k-3g6FLJAAEPGTqJ8Ck204.jpg

安裝完成以後,設備驅動以下圖

wKiom1T8ktKRB_lXAAEushGXEgQ277.jpg

這時就虛擬機實例和主機之間就能夠共享剪切板了(基於Spice Agent),可以複製網址、截屏等文本和圖像信息,但不能複製文件。

wKioL1T8k-3TPO2BAACMBNgcy-U853.jpg

安裝更新,刪除臨時文件。


  • 配置系統與OpenStack整合

下載cloudbase-init工具並安裝 https://github.com/cloudbase/cloudbase-init

wKiom1T8ktOgxvvgAAGjj1FL1qM564.jpgspacer.gif

wKioL1T8k-7gehnRAAFHefb2pR4840.jpg

選擇執行Sysprep封裝

wKiom1T8ktShDXr-AAHTC28Xw6E730.jpg

將網卡配置修改成DHCP,刪除臨時文件(包括前面下載的驅動和安裝文件),關機。

此程序安裝完畢後生成一個「Cloud Initialization Service」服務,下次啓動時,此服務會自動啓動。

wKioL1T8k--CqyMyAACtbtdvELo229.jpg

它會從OpenStack接收元數據(http://169.254.169.254),而後執行一系列初始化操做,

  • 設置主機名;

  • 建立或更新本地用戶(安裝過程當中所指定的用戶名,默認爲Admin),添加他的本地組(多個組之間用半角逗號分隔),並注入密碼;

  • 配置網絡(前面安裝過程當中所指定的的網卡);

  • 在用戶目錄下建立包含SSH密鑰的authorized_keys文件(由元數據提供,也就是建立實例時所選擇的密鑰對);

  • 執行建立實例時所指定的腳本(輸入腳本時,第一行寫入 rem cmd 爲批處理命令,第一行寫入 #ps1 爲PowerShell腳本)

詳細信息可參考此連接 http://www.cloudbase.it/cloud-init-for-windows-instances/

  • 壓縮虛擬機磁盤

qemu-img convert -c -p -O qcow2 /opt/p_w_picpath/win2k8.qcow2 /opt/p_w_picpath/win2k8r2.qcow2

其中,-c表示使用壓縮,-p表示執行過程當中顯示進度,-O指定輸出格式爲qcow2

對比先後文件大小

wKiom1T8ktShVNq3AABc-7_5hQA016.jpg

  • 上傳到glance

將虛擬機磁盤文件拷貝到控制節點,執行如下命令完成鏡像上傳

glance p_w_picpath-create --name "Windows_2008_R2" --is-public true --disk-format qcow2 --container-format bare --file /opt/p_w_picpath/win2k8r2.qcow2



排錯:

故障現象:

執行virsh net-list時,出現如下錯誤提示

error: failed to connect to the hypervisor 

error: no valid connection

error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory 

wKioL1T8k-_BIyjIAACk13VXc0s330.jpg

問題緣由:

libvirtd服務未啓動

解決方法:

執行 systemctl start libvirtd.service 啓動該服務便可。

可經過 systemctl status libvirtd.service 檢查該服務運行狀態,確保服務處於active (running) 狀態

systemctl start libvirtd.service
systemctl status libvirtd.service

wKiom1T8ktThDSkVAAE2qkDR_Ys783.jpg

相關文章
相關標籤/搜索