2009年1月19日 星期一

VirtualBox on OpenSuSE 11.1

今天下了一個決定。每次都只能在辦公室的xp上跑虛擬的linux,我覺得實在是很不過癮;一來是使用windows的時間跟機會本來就比較少,二來是沒有出現特效感覺怪怪的,因此檢查了一下硬碟空間的大小後,我決定把一部分的磁區用來安裝linux,再裝個虛擬的xp來跑非windows不可的程式。

我選了opensuse。在我先前的經驗裡面,OpenSuSE 11.0極不穩定,圖形跑一半會突然當機,還有許多大大小小的bugs。於是當時的我對opensuse 11.0的感覺是:除非真的很愛opensuse,否則這是一個白老鼠的版本。事實上我的經驗中,opensuse 10.1, 10.3都是很穩定的版本,似乎OpenSuSE的奇數版本號都是相對穩定的版本。然而這次已經出現了11.1,我除了期望可以有一個穩定的opensuse之外,好歹我也是個NCLP,對於suse linux也算是有一定程度的熟悉;因此我決定改用第二熟悉的linux:OpenSuSE 11.1。

在OpenSuSE上安裝VirtualBox基本上需要安裝pam, kernel headers, make以及gcc以供編譯適合kernel的模組。我的OpenSuSE裡的repos定義了6個,這些repos設定檔放在/etc/zypp/repos.d/裡:

repo-oss.repo
--------------------------------
[repo-oss]
name=openSUSE-11.1-Oss
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/distribution/11.1/repo/oss/
type=yast2
keeppackages=0
-------------------------------

repo-non-oss.repo
-------------------------------
[repo-non-oss]
name=openSUSE-11.1-Non-Oss
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/distribution/11.1/repo/non-oss/
type=yast2
keeppackages=0
--------------------------------

repo-update.repo
--------------------------------
[repo-update]
name=openSUSE-11.1-Update
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/update/11.1/
type=rpm-md
keeppackages=0
--------------------------------

swyear.repo
--------------------------------
[swyear]
name=swyear
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/home:/swyear/openSUSE_11.1/
path=/
type=rpm-md
--------------------------------

packman.repo
--------------------------------
[Packman Repository]
name=Packman Repository
enabled=1
autorefresh=1
baseurl=http://packman.mirrors.skynet.be/pub/packman/suse/11.1
type=rpm-md
keeppackages=0
--------------------------------

utility.repo
--------------------------------
[utility]
name=utility
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/network:/utilities/openSUSE_11.1
path=/
type=rpm-md
keeppackages=0
-------------------------------

anubisg.repo
-------------------------------
[anubisg]
name=anubisg
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/home:/anubisg1/openSUSE_11.1/
path=/
type=rpm-md
keeppackages=0
-------------------------------

JAVA.repo
-------------------------------
[JAVA]
name=JAVA
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/Java:/packages/openSUSE_11.1/
path=/
type=rpm-md
keeppackages=0
-------------------------------

multimedia.repo
------------------------------
[multimedia]
name=multimedia
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/multimedia:/audio/openSUSE_11.1/
type=rpm-md
keeppackages=0
------------------------------

當然以上以可以用yast來作,而且我很建議用yast來作;一方面可以體會yast強大的能力,一方面可以方便你匯入gpg keys。 匯入之後,我的習慣是先讓整個系統升級:
zypper ref
#更新repositories的cache
zypper update --auto-agree-with-licenses
#進行更新

接下來,我們先安裝一些VirtualBox所需要的套件:
zypper in pam-devel kernel-source make gcc lsb
#kernel-headers在suse/redhat系列的套件 都稱之為kernel-source,名稱不同,但是是一樣的東西。

然後我們下載最新版的VirtualBox(2.1.0)來安裝:

rpm -ivh --test VirtualBox-2.1.0_41146_openSUSE111-1.i586.rpm
沒有錯誤的話,我們再真正進行安裝:
yast2 --install VirtualBox-2.1.0_41146_openSUSE111-1.i586.rpm
## 例外狀況處理 ##
1. 我自己用到的情況是,OpenSuSE 11.1的函式庫太新了,當我某天更新完之後發現,原本安裝好的VirtualBox又無法開啟了。這時候我重新安裝竟然出現錯誤訊息: 查查看我的系統是否有安裝libpython2.5以上的版本:
zypper se libpython
結果訊息是:
S | Name             | Summary                           | Type
--+------------------+-----------------------------------+--------
i | libpython2_6-1_0 | Python Interpreter shared library | package
原來我們的版本比要求的還新!@@竟然是因為這樣不給裝,真的很討厭。這個問題在opensuse的論壇上已經是哀鴻片野,解決的方式有兩種:第一種方法就是硬裝:
rpm -ivh --nodeps VirtualBox-2.1.0_41146_openSUSE11-1.i586.rpm
很高興的把virtualbox安裝起來了。第二種方法,請詳見本文最後面。

2.不過當你要啟動VBox時還是會失敗,他會告訴你某個virtualbox函式Permission Denied的錯誤訊息。請你把自己加入vboxusers群組:

usermod -A vboxusers maxsolar
記得要重新登入,就可以正常出現VBox了!

3.如果你執行VirtualBox卻沒反應,在終端機輸入VirtualBox卻出現如下訊息:

/usr/bin/VirtualBox: line 72: /usr/lib/virtualbox/VirtualBox: Permission denied
/usr/bin/VirtualBox: line 72: exec: /usr/lib/virtualbox/VirtualBox: cannot execute: Success
但是,由root執行VirtualBox卻可以成功執行。看看到底是甚麼權限問題:
ls -l /usr/lib/virtualbox/VirtualBox
原來,有了suid,卻少了執行的權限。
chmod +x /usr/lib/virtualbox/VirtualBox
就可以成功啟動執行。

4.或者你遇到的問題是:

WARNING: The vboxdrv kernel module is not loaded. Either there is no module
      available for the current kernel (2.6.27.7-9-default) or it failed to
      load. Please recompile the kernel module and install it by

        sudo /etc/init.d/vboxdrv setup

      You will not be able to start VMs until this problem is fixed.
那麼依照指示,你應該重編一個virtualbox的模組:
/etc/init.d/vboxdrv setup

5.打開vbox後赫然發現,事情似乎沒有想像中順利: 查詢google大神的結果,我們似乎可以藉由修改fstab來解決:

/sys/bus/usb/drivers /proc/bus/usb usbfs devmod=664,devgid=1000 0 0
其中的devgid可別照抄!你應該利用id指令來查看自己的gid。 然後手動掛載:
sudo mount /proc/bus/usb
或是重開機以使設定生效。結果令人驚喜,usb設備無法存取的狀況解決了!

6.不過當我們對guest進行設定時,又出現了一個錯誤訊息: 怎會如此屋漏偏逢連夜雨呢?別擔心,問題的解決必須要靠詳細觀察。訊息上提示我們有存取/dev/sr0上的問題。sr0就是光碟機,許多套linux在啟動nero linux時也會出現相同的問題。我們看看/dev/sr0的權限設定: 可以發現光碟機可以存取的是root以及disk群組。可惜我們並不在disk群組。解決的方法很多,你可以利用groupmod -A maxsolar disk把自己加進disk群組裡(也可以直接修改/etc/group)、也可以利用chmod 666 /dev/sr0直接改變others權限。不過我個人並不建議上述作法。 我們可以發現權限後面有一個"+"號,這表示這個檔案具有Access Control List的權限,我們透過setfacl來解決問題才是最恰當的。首先,我們先檢視一下acl裡的權限:

sudo getfacl /dev/sr0
由圖中可以發現user可以給出的最高權限為rw,gdm使用者也是rw。我們也來給使用者maxsolar一個rw的權限吧!
sudo setfacl -m u:maxsolar:rw /dev/sr0
這時,使用者maxsolar已經對於/dev/sr0已經可以有rw的權限了。假設我要移除gdm使用者的權限又該如何作呢?
setfacl -x u:maxsolar /dev/sr0
OK!快樂的在OpenSuSE上使用VirtualBox吧! 參考資料:ACL簡易設定筆記

P.S. 你也可以使用OpenSuSE的vbox套件庫來源:

VirtualBox.repo
-----------------------------
[VirtualBox]
name=VirtualBox
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/Virtualization:/VirtualBox/openSUSE_11.1/
path=/
type=rpm-md
keeppackages=0
----------------------------
refresh套件庫的cache之後,我們便可以略過libpython2.5的相依性要求。
yast -i virtualbox-ose

說真的,弄一個virtualbox來玩,在opensuse上真的蠻累的。相依性的問題,還是在debian上面方便解決多了。
假設你要在guest linux上使用文字終端(ctrl+alt+F1),會發現怎麼用都是切到host的文字終端。在vbox的熱鍵預設為right-ctrl,你可以使用熱鍵+F1~F6去切換guest的文字終端。我都是用這招自訂fedora系列的partitions,不然每次切好放在最前面的swap都會被硬塞到最後面,非常令人討厭;可以利用這招切換到文字終端,自訂fdisk切出想要的分割區在安裝就可以了!
I Love Debian !!!

沒有留言: