在Hyper-V裏安裝Red Hat Enterprise Linux

本文介紹的是如何在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

一、準備工作

1. 確認Linux系統的版本

如果還沒有安裝,可以查看其安裝光盤映像名稱,如果是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組件都能夠正常工作,包括網絡和磁盤子系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章