2009年9月22日 星期二

營造 Linux 學習環境的好用工具 VirtualBox

作者:徐秉義(Albert Hsu)

在筆者教學 Linux 期間,常常遇到同學苦無 Linux 練習環境,主因是許多同學只有一台電腦而且已經裝了 Windows 系統,若是在早期的話會建議使用「多重開機」方式,但多重開機建置並非想像中的簡單,稍微不注意就很有可能『傷害』到已經存放資料的 Windows 系統,導致 Linux 還沒練到甚麼,卻被逼著要學會重灌 Windows 系統。

溫馨提示:這邊提到『傷害』在程度上也許是 Format 到 Windows 資料或造成 Windows 無法開機等等。

對於電腦不是很熟悉的新手們,會比較建議使用虛機的方式來快速營造 Linux 練習環境,雖然虛機有著執行速度較慢的缺點,所幸的是初期練習 Linux 基礎操作,事實上並不需要高速的硬體配備。筆者這次介紹 VirtualBox 虛機軟體,知名度雖然沒有 VMWare 那樣地高,她該有的功能其實也都有喔!話不多說就開始我們的 VirtualBox Windows 版安裝之旅吧!

軟體下載、安裝與中文化

至 http://www.virtualbox.org/ 下載 VirtualBox for Windows 編譯好的二進位執行檔(binary),點選左邊【Downloads】後,接著稍微向下捲動一些即可看到「VirtualBox for Windows hosts」軟體下載連結,筆者下載的是 1.5.2 Windows x86 版本。

磁碟狀態

安裝 VirtualBox Windows 版只要依照精靈一路走下去,裝到好應該是沒有太大的問題。

安裝完成後從【程式集】裡面【innotek VirtualBox】→【VirtualBox】來啟動 VirtualBox 主程式。

溫馨提示:VirtualBox 亦有給 Linux 及 Mac OS X 版本的二進位執行檔。

語系設定

新版 VirtualBox 提供繁體中文介面來使用,從【檔案】→【偏好設定】呼叫出設定對話框,對話框內左邊第三個「語系」選單,即可切換至繁體中文介面(先前的版本只有簡體中文介面)。

磁碟狀態

開始安裝虛擬機器

裝一台虛擬機器大致上要準備的有「給機器的名字」、「記憶體大小」及「硬碟大小」,至於安裝時候的開機媒介,一般使用 CD/DVD 開機(VirtualBox 亦支援 iso 檔案開機)筆者設定範例如下:

虛機名稱srv1
記憶體大小256 MB
硬碟大小5 GB
安裝光碟片DVD/CD

緊接著就來安裝一台 RHEL5 虛擬機器吧!建立虛機的路上皆有精靈帶領著我們,大致上都是點選〔下一步〕按鈕,底下僅僅針對幾個比較有需要講解的畫面來做解說。

點選〔新增〕按鈕來呼叫出建立虛機精靈,來到下圖的這個步驟替虛機取個名稱,筆者範例取名為「srv1」(Server one 之意),至於作業系統類型的部份,筆者並沒有特別挑選別的,使用預設值的「Other/Unknown」即可。

溫馨提示:若「感到」因沒有特別挑選作業系統類型,導致虛機安裝失敗的話,可試著調整這部份的設定。

磁碟狀態

虛機的記憶體用量,給 256 MB 安裝 RHEL5 算是剛好而已。

溫馨提示:若少於 256 MB 的記憶體來安裝 RHEL5 可能會遭到強制使用文字模式安裝的情況。

磁碟狀態

虛機所使用的硬碟,是母系統的映像檔案。VirtualBox 映像檔案為 VDI(Virtaul Disk Image)首次安裝需要新增一顆,所以我們點選〔新增〕。

溫馨提示:若是以前曾經有建立過 VDI 檔案,建立虛機時亦可使用既有的 VDI 檔案。

磁碟狀態

來到新增硬碟精靈,磁碟預設採用「動態擴充映像檔」(實際拷貝資料進去才會佔用硬碟空間)另一種則是「固定大小映像檔」(先行佔用磁碟空間,資料有無拷貝進去,不會影響母系統磁碟空間用量)

溫馨提示:若「感到」因使用「動態擴充映像檔」,導致虛機安裝失敗的話,可試著改用「固定大小映像檔」方式。

磁碟狀態

設定映像檔案大小,筆者母系統的硬碟不大所以開給虛機 5 GB 的空間,預設的 RHEL5 安裝完成大概與 Windows XP 差不多,大約 2 GB 左右的空間。

磁碟狀態

在新增完成映像檔硬碟後,就回到先前的選取硬碟的畫面,接著按下〔下一步〕。

磁碟狀態

虛機硬體配備已經準備差不多了,下一步是要光碟開機安裝 RHEL5。針對光碟開機這部份有兩個選擇:一個是點選下圖右方「光碟機」調整;一個是直接開機讓「首次運行精靈」來引導我們使用光碟開機。

磁碟狀態

採用直接開機是比較直覺的方式,會有「首次運行精靈」如下圖,直覺方式使用「母系統光碟裝置開機」。

溫馨提示:亦可使用「安裝光碟映像檔案開機」(要先準備好 iso 檔案)。

磁碟狀態

下圖是筆者使用 RHEL5 光碟片開機的情況,緊接著就是安裝 Linux 的部份,相信這部份大家都會,比較要特別介紹的是 VirtualBox 離開虛機的方式是「Right Ctrl」(右 Ctrl 鍵;位於畫面右下方)

磁碟狀態

安裝客端額外功能

在虛機安裝好之後,若是再加上「安裝客端額外功能」的話,較明顯可得到兩個好處:一個是進出虛機不需再按右 Ctrl 鍵(稱為「滑鼠游標整合」);另一個是母系統「分享資料夾」給子系統功能。

虛擬磁碟管理器

VirtualBox 客端額外功能軟體放在虛擬磁碟裡面,預設位於 C:\Program Files\innotek VirtualBox\VBoxGuestAdditions.iso 建議先使用【檔案】→【虛擬磁碟管理器】呼叫出虛擬磁碟管理程式中〔光碟映像檔〕分頁加入後給虛機掛載起來。

溫馨提示:虛機使用光碟映像檔可在虛機設定頁面〔光碟機〕(虛機還沒啟動前);或於(虛機啟動後的視窗)【裝置】→【掛載光碟】來調整。

磁碟狀態

RHEL5 安裝 VirtualBox 客端額外功能

在 Linux 虛機安裝 VirtualBox 客端額外功能只要抓到幾個重點,要裝起來應該不是難事。

重點一:安裝編譯工具 gcc,因為 VirtualBox 給 Linux 的是原始碼,所以要編譯。以 RHEL5 配置好 yum 來說,只要下達指令「yum -y install gcc」即可。

重點二:安裝核心編譯相關套件 kernel-devel,因為 VirtualBox 給 Linux 的這兩個功能是用核心模組方式,要編譯成副檔名為 .ko 檔(Kernel Object)。以 RHEL5 配置好 yum 來說,只要下達指令「yum -y install kernel-devel」即可。

如下圖的步驟:

光碟映像檔案若沒有自動掛載就手動掛載吧!使用指令「mount /dev/cdrom /mnt」

內容有一個「VBoxLinuxAdditions.run」!使用指令「sh VBoxLinuxAdditions.run」執行即可,安裝好後依照指示重開虛機。

磁碟狀態

分享資料夾功能

在安裝好客端額外功能軟體後,「滑鼠游標整合」功能明顯感受出來,至於「分享資料夾」要到虛機執行視窗的【裝置】→【分享資料夾】開放母系統資料夾,如此子系統才能使用。

下圖是開放 C 槽給子系統命名為「C_DRIVE」(此名稱待會要用到)。

磁碟狀態

在子系統使用「mount -t vboxsf 分享資料夾名稱 掛載點」的類似命令來掛載分享資料夾,下圖是使用指令「mount -t vboxsf C_DRIVE /mnt」情況,掛載後可以看到母系統(Windows)資料。

磁碟狀態

快速複製虛機

灌好一台 Linux 虛機後,就可以開始練習 Linux 基本操作,以及大部分單機使用 Linux 所可以做到的事情,像是帳號密碼與群組管理、Software RAID 與 LVM 管理、Quota 設定與管理等等。持之以恆地練下去的話,不久之後就會來到網路服務,也就是架設各類 Server 的部份,像是 DNS、DHCP、Mail、Web、NFS、Samba 等等服務,此時難免需要「另一台」主機(甚至另兩台)來作互動及測試,這時候再虛一台 Linux 出來用,對練習的幫助頗大。

溫馨提示:Linux 兩大證照 RHCE 與 NCLP 不約而同地重視兩台 Linux 主機之間的互動操作。

VirtualBox 複製虛機

灌一台電腦通常會比對拷一台要花上較長的時間,既然虛機磁碟是個 VDI 檔案,何不就「拷貝」一份成為另一台虛機呢?這樣的想法理論上是可行,但因為 VirtualBox 有使用 UUID 方式紀錄 VDI 檔案,所以直接 VDI 檔對拷後給另一台虛機用會出問題的,出問題的原因在於「同一台有重複 UUID 的 VDI 檔案」。

下圖是使用「複製貼上」做出 VDI 檔,欲加入硬碟群時所出現的錯誤訊息。

磁碟狀態

溫馨提示:此 VDI 檔案拷貝到別台母系統卻是可以直接使用,因為別台沒有相同 UUID 的 VDI 檔案。

要複製虛機在同一台母系統上使用的話,就要用 VirtualBox 內建指令才不會有上述問題產生,關鍵在於執行 vboxmanage 指令搭配 clonevdi 參數(克隆 VDI 檔案)例「vboxmanage clonevdi srv1.vdi srv2.vdi」。

VBoxManage 執行檔案擺放位置C:\Program Files\innotek VirtualBox\VBoxManage.exe
虛機磁碟 VDI 檔案預設路徑C:\Documents and Settings\Administrator\.VirtualBox\VDI

開啟指令視窗,使用「cd "C:\Documents and Settings\Administrator\.VirtualBox\VDI"」切換至虛機磁碟 VDI 檔案預設路徑(筆者的 srv1.vdi 位於這裡)。

接著使用指令「"c:\Program Files\innotek VirtualBox\VBoxManage.exe" clonevdi srv1.vdi srv2.vdi」來將 srv1.vdi 克隆(clone)成 srv2.vdi。

溫馨提示:VBoxManage 指令在此需要使用完整的路徑名稱,要是之後經常使用這個指令的話,最好還是設定環境變數 path 包含 c:\Program Files\innotek VirtualBox\ 這個路徑會比較方便(類似 Linux $PATH)。

磁碟狀態

接下來創建虛機 srv2 使用現有的 srv2.vdi 就可以快速複製虛機,方便我們同時開啟兩台 Linux 虛機用來練習。

磁碟狀態

探討 VirtualBox 網路模式 NAT

當開啟兩台虛機 Linux 後,奇怪的是兩台 IP 一樣卻兩台都可以透過母系統 NAT 後存取外部網路,可是我們需要的功能「兩台 Linux 虛機互向存取」卻不通,就算是將這兩台 IP 錯開也一樣情況,原來是 VirtulBox 預設網路模式 NAT 運作特性與 Xen、VMWare 不太一樣,筆者稱呼 VirtualBox 的 NAT 模式為「AP Based NAT」(由應用程式 VirtualBox 提供的 NAT),單純的只是將內部虛機 NAT 成母系統 IP 存取外部網路。

這個 NAT 模式下,造成子系統可以存取母系統的外部 IP 位址,反過來若是母系統欲存取子系統的話,可利用母系統 Port Forwarding 達成,至於 Port Forwarding 的使用方法,請參考原廠的使用說明。

溫馨提示:Port Forwarding 一次 forward 一個埠,要多個埠 forward 就要多做幾次設定。

若要使得母系統與子系統、子系統與子系統之間相互網路存取更加方便的話,建議是使用橋接(Bridge)模式(後續介紹);若只是要解決子系統之間網路存取的話,可採用虛機各自新增一個內部網路介面即可。

虛機互通:各自新增內部網路介面

圖為 srv1 設定第二張配接卡(配接卡 1)的畫面,記得下拉選取「內部網路」,當然 srv2 也一併要設定第二張配接卡,這樣 srv1 的 eth1 與 srv2 的 eth1 感覺像是接在同一個 Switch 上。

磁碟狀態

溫馨提示:新版(1.6.X 版)有個新的欄位 Network Name(網路名稱)其網路名稱需設定一樣,虛機之間才能互相存取(例如都設定成 foo);Network Name 名稱若不同則視為兩個不同的網路。

r

下圖為兩台 Linux 虛機 eth0 皆為 10.0.2.15 可連上外部網路;eth1 分別為 192.168.2.3 與 192.168.2.4 由 srv2 使用 ssh 登入 srv1 的情況。

磁碟狀態

溫馨提示:若要母系統與子系統互通的話,建議使用橋接模式。

探討 VirtualBox 網路模式 Bridge

VirtualBox 類似 VMWare、Xen 這些虛擬機器軟體,因此母系統與子系統之間的架構除了 NAT 模式外,常用的還有 Bridge 模式,她的 Bridge 模式啟用方法較為特殊,方法是:

『虛機各自新增 VirtualBox 主端介面卡,然後再用 Windows 內建 Bridge 功能橋接起來。』

虛機新增 VirtualBox 主端介面卡

在 srv1 設定畫面中,筆者將原先設定成 NAT 模式的網路配接卡,附掛到「主端介面」後,下方主端介面方框右邊,有兩個小按鈕用來增減虛擬介面卡的(一個是新增、一個是移除)點選新增後加入「VirtualBox 主端介面 1」給 srv1 使用。

溫馨提示:虛機開啟時,很多設定都不能調整,請停虛機後再做設定。

磁碟狀態

下圖為設定成功後 srv1 使用「VirtualBox 主端介面 1」畫面。

磁碟狀態

將介面 Bridge 起來

在 Windows 網路設定畫面中,圈選需要被 Bridge 的介面卡(下圖為「母系統網路卡」以及「VirtualBox 主端介面 1」),按下滑鼠右鍵選擇【橋接】(Bridge)。

磁碟狀態

溫馨提示:橋接後 Windows 母系統 IP 要設定在橋接器上而不是在原來的網路介面。

下圖是 Windows bridge IP 顯示畫面。

磁碟狀態

srv2 若是也要加入這個 Bridge 成員主機的話,也要如法炮製一個「VirtualBox 主端介面 2」來使用。

磁碟狀態

srv2 「VirtualBox 主端介面 2」採用後續再加入這個 Bridge 的方式也行的通,使用右鍵選擇【加入橋接器】(Add to Bridge)。

磁碟狀態

最後母系統、srv1 與 srv2 就「感覺像是」接在同一個網路交換器上囉!

下圖為母系統 Windows 使用 putty 連接到 srv1 以及 srv1、srv2 同時開機的情況,一台電腦當三台用。

磁碟狀態

VirtualBox RDP 功能

RDP 全名 Remote Desktop Protocol 是 Windows 遠端桌面所使用的通訊方式,而 VirtualBox 用她來提供遠端控制虛機功能,方法是在設定虛機畫面中【遠端顯示】選項來做啟用即可。

磁碟狀態

RDP 預設使用埠號 3389,若是您的 Windows 有啟用遠端桌面功能就會先行佔用此連接埠,那虛機就避開即可(例如使用埠 3390)

溫馨提示:使用 VirtualBox RDP 功能時各台虛機埠號最好錯開,不然就避免同時啟動使用相同埠號的虛機。

下圖是在 Linux 使用 rdesktop 程式連接到 srv1 的畫面,請注意連線到的 IP 是母系統 Windows IP 位址。

磁碟狀態