在筆者教學 Linux 期間,常常遇到同學苦無 Linux 練習環境,主因是許多同學只有一台電腦而且已經裝了 Windows 系統,若是在早期的話會建議使用「多重開機」方式,但多重開機建置並非想像中的簡單,稍微不注意就很有可能『傷害』到已經存放資料的 Windows 系統,導致 Linux 還沒練到甚麼,卻被逼著要學會重灌 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 提供繁體中文介面來使用,從【檔案】→【偏好設定】呼叫出設定對話框,對話框內左邊第三個「語系」選單,即可切換至繁體中文介面(先前的版本只有簡體中文介面)。
裝一台虛擬機器大致上要準備的有「給機器的名字」、「記憶體大小」及「硬碟大小」,至於安裝時候的開機媒介,一般使用 CD/DVD 開機(VirtualBox 亦支援 iso 檔案開機)筆者設定範例如下:
虛機名稱 | srv1 |
記憶體大小 | 256 MB |
硬碟大小 | 5 GB |
安裝光碟片 | DVD/CD |
緊接著就來安裝一台 RHEL5 虛擬機器吧!建立虛機的路上皆有精靈帶領著我們,大致上都是點選〔下一步〕按鈕,底下僅僅針對幾個比較有需要講解的畫面來做解說。
點選〔新增〕按鈕來呼叫出建立虛機精靈,來到下圖的這個步驟替虛機取個名稱,筆者範例取名為「srv1」(Server one 之意),至於作業系統類型的部份,筆者並沒有特別挑選別的,使用預設值的「Other/Unknown」即可。
虛機的記憶體用量,給 256 MB 安裝 RHEL5 算是剛好而已。
虛機所使用的硬碟,是母系統的映像檔案。VirtualBox 映像檔案為 VDI(Virtaul Disk Image)首次安裝需要新增一顆,所以我們點選〔新增〕。
來到新增硬碟精靈,磁碟預設採用「動態擴充映像檔」(實際拷貝資料進去才會佔用硬碟空間)另一種則是「固定大小映像檔」(先行佔用磁碟空間,資料有無拷貝進去,不會影響母系統磁碟空間用量)
設定映像檔案大小,筆者母系統的硬碟不大所以開給虛機 5 GB 的空間,預設的 RHEL5 安裝完成大概與 Windows XP 差不多,大約 2 GB 左右的空間。
在新增完成映像檔硬碟後,就回到先前的選取硬碟的畫面,接著按下〔下一步〕。
虛機硬體配備已經準備差不多了,下一步是要光碟開機安裝 RHEL5。針對光碟開機這部份有兩個選擇:一個是點選下圖右方「光碟機」調整;一個是直接開機讓「首次運行精靈」來引導我們使用光碟開機。
採用直接開機是比較直覺的方式,會有「首次運行精靈」如下圖,直覺方式使用「母系統光碟裝置開機」。
下圖是筆者使用 RHEL5 光碟片開機的情況,緊接著就是安裝 Linux 的部份,相信這部份大家都會,比較要特別介紹的是 VirtualBox 離開虛機的方式是「Right Ctrl」(右 Ctrl 鍵;位於畫面右下方)
在虛機安裝好之後,若是再加上「安裝客端額外功能」的話,較明顯可得到兩個好處:一個是進出虛機不需再按右 Ctrl 鍵(稱為「滑鼠游標整合」);另一個是母系統「分享資料夾」給子系統功能。
VirtualBox 客端額外功能軟體放在虛擬磁碟裡面,預設位於 C:\Program Files\innotek VirtualBox\VBoxGuestAdditions.iso 建議先使用【檔案】→【虛擬磁碟管理器】呼叫出虛擬磁碟管理程式中〔光碟映像檔〕分頁加入後給虛機掛載起來。
在 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 出來用,對練習的幫助頗大。
灌一台電腦通常會比對拷一台要花上較長的時間,既然虛機磁碟是個 VDI 檔案,何不就「拷貝」一份成為另一台虛機呢?這樣的想法理論上是可行,但因為 VirtualBox 有使用 UUID 方式紀錄 VDI 檔案,所以直接 VDI 檔對拷後給另一台虛機用會出問題的,出問題的原因在於「同一台有重複 UUID 的 VDI 檔案」。
下圖是使用「複製貼上」做出 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。
接下來創建虛機 srv2 使用現有的 srv2.vdi 就可以快速複製虛機,方便我們同時開啟兩台 Linux 虛機用來練習。
當開啟兩台虛機 Linux 後,奇怪的是兩台 IP 一樣卻兩台都可以透過母系統 NAT 後存取外部網路,可是我們需要的功能「兩台 Linux 虛機互向存取」卻不通,就算是將這兩台 IP 錯開也一樣情況,原來是 VirtulBox 預設網路模式 NAT 運作特性與 Xen、VMWare 不太一樣,筆者稱呼 VirtualBox 的 NAT 模式為「AP Based NAT」(由應用程式 VirtualBox 提供的 NAT),單純的只是將內部虛機 NAT 成母系統 IP 存取外部網路。
這個 NAT 模式下,造成子系統可以存取母系統的外部 IP 位址,反過來若是母系統欲存取子系統的話,可利用母系統 Port Forwarding 達成,至於 Port Forwarding 的使用方法,請參考原廠的使用說明。
若要使得母系統與子系統、子系統與子系統之間相互網路存取更加方便的話,建議是使用橋接(Bridge)模式(後續介紹);若只是要解決子系統之間網路存取的話,可採用虛機各自新增一個內部網路介面即可。
圖為 srv1 設定第二張配接卡(配接卡 1)的畫面,記得下拉選取「內部網路」,當然 srv2 也一併要設定第二張配接卡,這樣 srv1 的 eth1 與 srv2 的 eth1 感覺像是接在同一個 Switch 上。
下圖為兩台 Linux 虛機 eth0 皆為 10.0.2.15 可連上外部網路;eth1 分別為 192.168.2.3 與 192.168.2.4 由 srv2 使用 ssh 登入 srv1 的情況。
VirtualBox 類似 VMWare、Xen 這些虛擬機器軟體,因此母系統與子系統之間的架構除了 NAT 模式外,常用的還有 Bridge 模式,她的 Bridge 模式啟用方法較為特殊,方法是:
『虛機各自新增 VirtualBox 主端介面卡,然後再用 Windows 內建 Bridge 功能橋接起來。』
在 srv1 設定畫面中,筆者將原先設定成 NAT 模式的網路配接卡,附掛到「主端介面」後,下方主端介面方框右邊,有兩個小按鈕用來增減虛擬介面卡的(一個是新增、一個是移除)點選新增後加入「VirtualBox 主端介面 1」給 srv1 使用。
下圖為設定成功後 srv1 使用「VirtualBox 主端介面 1」畫面。
在 Windows 網路設定畫面中,圈選需要被 Bridge 的介面卡(下圖為「母系統網路卡」以及「VirtualBox 主端介面 1」),按下滑鼠右鍵選擇【橋接】(Bridge)。
下圖是 Windows bridge IP 顯示畫面。
srv2 若是也要加入這個 Bridge 成員主機的話,也要如法炮製一個「VirtualBox 主端介面 2」來使用。
srv2 「VirtualBox 主端介面 2」採用後續再加入這個 Bridge 的方式也行的通,使用右鍵選擇【加入橋接器】(Add to Bridge)。
最後母系統、srv1 與 srv2 就「感覺像是」接在同一個網路交換器上囉!
下圖為母系統 Windows 使用 putty 連接到 srv1 以及 srv1、srv2 同時開機的情況,一台電腦當三台用。
RDP 全名 Remote Desktop Protocol 是 Windows 遠端桌面所使用的通訊方式,而 VirtualBox 用她來提供遠端控制虛機功能,方法是在設定虛機畫面中【遠端顯示】選項來做啟用即可。
RDP 預設使用埠號 3389,若是您的 Windows 有啟用遠端桌面功能就會先行佔用此連接埠,那虛機就避開即可(例如使用埠 3390)
下圖是在 Linux 使用 rdesktop 程式連接到 srv1 的畫面,請注意連線到的 IP 是母系統 Windows IP 位址。