本文介紹的是如何在Hyper-V虛機上安裝Red Hat Enterprise Linux Server(RHEL),以X64位RHEL 5.1版本爲例。
其實,嚴格意義上來說,Hyper-V也屬於Para-Virtualization(部分虛擬化)的範疇,只不過微軟有專門的術語叫做Enlightenment。
所謂Linux的Hyper-V支持,關鍵是要讓Linux成爲Enlightened OS,也就是說要理解底層Hypervisor的存在。這需要在Linux虛機裏啓用xen的內核支持,並安裝對應的Hypercall適配器。
爲什麼要安裝Hypercall適配器(Adaptor)?原因是Linux裏沒有Windows中的WinHv組件,無法把應用程序的常規調用轉化成Hypervisor能夠理解的Hypercall調用。Hypercall適配器是一個很薄的軟件層,以便把來自Linux內核的基於xen的虛擬化函數調用,翻譯成Hyper-V能夠理解的Hypercall函數調用。這樣Linux虛機就可以充分利用Hyper-V的高速內存總線VMBus所帶來的性能極大提升,從而極大地改進性能。
而這需要專門的Linux IC,並且可能需要重新編譯Linux內核,就目前來說(2009年5月7日),SUSE的安裝最簡單,不需要內核的重新編譯。Red Hat相對複雜些,需要對內核進行編譯,這比較消耗時間。
這裏補充orpheus兄弟的提問
微軟的Hyper-V層目前還沒給linux提供直接調用的接口,可以這麼理解吧?相對而言,VMware的ESX Server是不是做的更好呢?
盆盆的回答如下
微軟和主要Linux廠商,包括Novell和Red Hat簽署了互操作協議,兩者之間可以兼容。而且微軟和Citrix之間也有互協作關係,確保Xen和Hyper-V在更深層面的兼容性。所以不用擔心Linux在Hyper-V上的表現。還有些Linux發行版本,雖然微軟沒有提供官方技術支持,但是實際上也可以順利安裝。VMware採用完全不同的架構,其內部架構對上層的虛機來說是不可見的,並不是採用Hyper-V/Xen那樣的Para-Virtualization架構。曾經有高手做過比喻:VMware是一個渾身包裹着印度紗麗的美女,只能遠遠看到其綽約的身姿;而Xen則是穿着三點式的美女,能讓您看到更多…當然,也不能完全這樣進行區分,其實VMware也有Para-Virtualization的實現,大家都並存多種虛擬化手段,不能簡單地說孰優孰劣。
本文的實驗分爲四個步驟,爲了防止中間的誤操作,推薦每個步驟都用Hyper-V的快照功能新建一個快照,以便一旦出錯,可以快速回復到先前的狀態。對於生產系統,在最後成功以後,請確保刪除所有的快照,以便Linux虛機工作在最佳狀態下。
本文本非完全由盆盆所原創,其中大多數的實驗步驟和腳本、或者相關命令參考自國外的博文,該博文原鏈接如下:(如果您要轉載,請確保加上這句話)
http://www.jules.fm/Logbook/files/win2008_linuxic_rc2_rhel.html
一、準備工作
如果還沒有安裝,可以查看其安裝光盤映像名稱,如果是X64位,應該是類似如下形式:
rhel-5.1-server-x86_64-dvd
如果是32位,則應該是類似如下形式:
rhel-5.1-server-i386-dvd
如果已經安裝,則可以運行以下命令:
uname -a
如果結果是“…x86_64 x86_64 x86_64 GNU/Linux”,則表示是X64位版本。
提示
本文中所涉及的所有命令或者語句,均可以直接複製,然後在Hyper-V虛機中單擊剪貼板、輸入剪貼板文本,即可快捷方便地輸入文本內容。
2. 訂閱在線更新服務
必須訂閱其RHN軟件在線更新服務,否則在編譯內核時會報錯(對於X64位來說)。
訂閱的方式有兩種:
一種是購買Red Hat提供的收費服務,其報價可以參考以下網頁:
https://www.redhat.com/wapps/store/catalog.html
另一種是申請臨時服務,這是免費的,可以到以下網站申請(需要事先註冊一個賬戶):
https://www.redhat.com/rhel/details/eval/
設置好以後,在Linux中單擊應用程序、系統工具、軟件包更新工具,按照屏幕提示輸入所註冊的用戶名和密碼,即可。
3. 下載Linux IC
對於Linux版本,必須安裝專門的IC,而不能直接在Hyper-V虛機裏單擊操作、插入集成服務安裝盤來進行安裝。
我們可以訪問以下網站,以便下載Linux版本的IC,並解壓縮,即可獲得ISO映像文件。
http://connect.microsoft.com
4. 安裝Linux
打開Hyper-V管理器,新建一個虛機,處理器選擇一個(Linux僅支持一個CPU)、內存可以是1GB。除了默認配置外,請確保添加一塊舊版網絡適配器,以及SCSI虛擬硬盤。添加舊版網絡適配器非常重要(必須連接到外部網絡,以便可以訪問互聯網),因爲在安裝Linux IC以前,我們沒有辦法使用支持VMBus的網卡來下載必須的軟件更新。
在安裝Linux時,注意請不要安裝Red Hat自帶的Virtualization組件。盆盆在測試RHEL 5.2/5.3時,導致虛機無法正常引導,尚未確認是否由於安裝了其自帶的Virtualization組件所導致,如果有哪位老大知道,還請不吝賜教。
還有一點,請確保安裝所有必須的開發工具和組件,盆盆是安裝了看上去和開發有關的所有組件:)。
安裝好以後,在Hyper-V虛機裏掛載從connect.microsoft.com上安裝的Linux IC光盤映像文件。然後將光盤裏的所有文件全部複製到/opt/linux_ic目錄下。
5.
下載內核源碼安裝包首先運行以下命令,獲取當前的內核版本號:
rpm -q kernel
盆盆的RHEL 5.1版本,其內核版本號爲“kernel-2.6.18-53.el5”,所以其對應的內核源碼安裝包爲kernel-2.6.18-53.el5.src.rpm。我們可以到以下地址去下載:
ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/kernel-2.6.18-53.el5.src.rpm(紅體字部分請用正確的版本號替代)
下載好以後,也可以複製到/opt目錄下。
然後運行以下命令,以便安裝編譯內核所需的組件:
yum install redhat-rpm-config gcc rpm-build make gnupg
接下來的步驟,對於X64位的RHEL來說很重要,我們必須安裝unifdef組件,否則在編譯內核時,會提示"unifdef is needed by kernel****"的錯誤信息:
yum install unifdef
在運行yum時,如果提示RHN未激活之類的報錯信息,請參考本文前面的“2. 訂閱在線更新服務”部分進行設置。
然後就可以安裝所下載的內核源碼包了。首先進入內核源碼包的保存位置,然後開始安裝:
cd /opt
rpm -ivh kernel-*.src.rpm
二、編譯內核
安裝好所下載的內核源碼包,可以用文本編輯器打開“/usr/src/redhat/SPECS/kernel-2.6.spec”文件
確保在“build%”語句前插入以下的語句:
對於64位RHEL,應該插入以下語句:
patch -p1 -d ../linux-%{kversion}.%{_target_cpu} < /opt/linux_ic/patch/x2v-x64-rhel.patch
如果是32位RHEL,則應該插入以下語句:
patch -p1 -d ../linux-%{kversion}.%{_target_cpu} < /opt/linux_ic/patch/x2v-x32-rhel.patch
同時在該文本文件裏搜索定義“%define with_xen”的行,確保將該行的定義值從0改爲1,這樣就可以編譯帶xen支持的Linux內核,否則將無法支持Hyper-V的VMBus架構:
%define with_xen 1
然後輸入以下命令,進入該文件所在的路徑,並開始編譯:
cd /usr/src/redhat/SPECS
rpmbuild -ba kernel-2.6.spec
如果是32位RHEL,應該輸入以下命令:
rpmbuild -ba --target i686 kernel-2.6.spec
編譯的時間相當長,估計大概要6~8個小時!(筆者是晚上睡前開始編譯的,第二天一早已經編譯完畢),畢竟在虛機裏編譯,在沒有安裝Linux IC前,這個表現是正常的。
三、安裝內核
內核編譯完畢,就可以開始安裝了。
對於X64位系統,可以運行以下命令:
cd /usr/src/redhat/RPMS/x86_64
rpm -ivh kernel-xen-2*rpm
rpm -Uvh kernel-xen-devel-2*rpm
對於32位系統,可以運行以下命令:
cd /usr/src/redhat/RPMS/i686
rpm -ivh kernel-xen-2*rpm
rpm -Uvh kernel-xen-devel-2*rpm
然後運行以下命令,以便在Linux中添加相應的Hypercall適配器(x2v適配器,應該就是xen to Hyper-V的縮寫吧):
cd /opt/linux_ic
perl setup.pl x2v /boot/grub/grub.conf
然後檢查Red Hat的引導配置文件“/boot/grub/grub.conf”,應該類似下圖所示。
注意如果是32位系統,則“kernel”一行應該是“kernel /x2v-pae.gz”,注意必須是“pae”(物理地址擴展)而不是“32”。
然後重啓Linux虛機。
四、安裝驅動
在Linux虛機裏,微軟所提供的Linux IC一共包含三個驅動,VMBus總線、網絡和磁盤子系統。在安裝驅動前,首先要修復到“/lib/modules”的鏈接:
cd /lib/modules/`uname -r`
ln -nsf /usr/src/kernels/`uname -r`-`arch` build
接下來的驅動安裝和SUSE沒有什麼區別,運行以下命令即可:
/opt/linux_ic/setup.pl drivers
重啓Linux虛機以後,應該可以正常運行,並且所有的Synthetic組件都能夠正常工作,包括網絡和磁盤子系統。