顯示具有 OpenSuSE 標籤的文章。 顯示所有文章
顯示具有 OpenSuSE 標籤的文章。 顯示所有文章

2012年11月5日 星期一

OXIM on OpenSuSE 12.2

話說事情演變到gnome3,原本最鍾愛的oxim輸入法框架就不能繼續使用了,很是痛苦。嘗試著自己編譯,可是經常不知道我到底要修改的是Makefile本身還是source code,我完全不懂qt/gtk阿!但是很榮幸的得到黑眼珠大大的鼎力相助,現在在OpenSuSE 12.2上面我終於可以快樂的使用oxim了!

zypper ar obs://home:swyear:oxim15/openSUSE_12.2 oxim
zypper ref oxim
zypper in oxim oxim-setup oxim-filters oxim-tables-popular-zh_TW
像我使用的是amd64的OS,還要在多補一個:
ln -s /usr/lib64/oxim-setup /usr/lib/

重新登入應該就可以使用OXIM了!再次向swyear大大致敬!!

2012年6月27日 星期三

zypper筆記

zypper簡史

zypper是在SUSE Linux下的套件管理程式引擎(ZYpp library, 或是libzypp)最重要的指令。也是PackageKit的後端程式(Back-ends),目的是提供一個高階的套件管理程式,協助使用者解決套件相依性的問題、提供解決方案並且自動化設定。 也就是說,使用指令zypper來控制套件跟使用YaST管理套件是相同的行為。

zypper提供的功能主要有:

  1. 自動化安裝、升級以及移除套件
  2. 能夠管理多個套件庫來源URI(Universal Resource Identifier, 可以是localdir, local ISO, NFS, http, ftp, samba, etc.)
  3. 提供比rpm更彈性的管理、查詢功能。

Repositories

一個SuSE Linux標準的repostories設定檔,是放置在/etc/zypp/repos.d/底下,任何以.repo結尾的檔案都會被視為一個套件庫。以一個普通的SLES11.1.repo為例,格式如下:

[SLES11.1]
name=SLES11.1 repostory
enabled=1
autorefresh=1
baseurl=http://192.168.20.1/SLES11.1/x86_64
path=/
type=yast2
keeppackages=0
  1. zypper使用兩種『名稱』:Alias(別名)與Name(名稱描述)。其中[]內為Alias,name則為名稱描述。
  2. enabled必須設定為1才算啟動,這點與yum的定義剛好相反。
  3. autorefresh定義了是否要自動更新套件庫。以ISO檔或是固定來源(例如SLES)的套件庫可設定為0以節省時間。
  4. baseurl可以是local filesystem, ISO, http, https, ftp, nfs, obs等等。URL的來源不需要指定architecture,這會自動由/etc/zypp/zypper.conf或是/etc/zypp/zypp.conf來決定。
  5. path代表從baseurl底下直接視為此套件庫的根目錄。如果是type是yast2或是rpm-md的話,baseurl底下能找到repodata這個資料夾,此時path即可設定為根目錄(/)。
  6. type定義了套件庫類型。zypper能接受三種套件庫類型:yast2(傳統suse套件庫)、rpm-md(相容yum套件庫)以及plaindir(一個包含rpm檔案的資料夾)。
  7. keeppackages定義了安裝或更新完成後是否要從cache裡刪除檔案。

zypper的指令格式如下:

zypper  [--global-options]  <command>  [--command-options]  [args]
雖然有許多command,但是好記卻是zypper的特點--每一個command都有其縮寫,若能熟練縮寫則能減輕許多負擔。例如addrepos可以簡寫為ar,search可簡寫成se,remove可簡寫成rm。格式順序是重要的,但是不要強記--應以自己理解的步調為主。
這裡列舉幾個常見的Global Options:
  • -h (--help):
  • 顧名思義,列出一些重要的commands/options。
  • -q (--quiet):
  • 安靜模式,最常用於shell script裡放進crontab裡使用。
  • -n (--non-interactive):
  • 使zypper的流程變成自動化,但是未必所有情況都會自動回答yes。
  • --no-gpg-checks:
  • 若遇到需要GPG key驗證的時候,可以略過不進行檢查並繼續執行動作。
  • --gpg-auto-import-keys:
  • 若遇到套件庫要求匯入GPG key時能自動匯入。
請務必注意Global Options必須寫在command之前,若寫在command之後會被視為command-options。例如我想要安裝k3b跟net-snmp並移除emacs,過程中自動回答yes並視需要自動匯入GPG,則應該像是這樣:
zypper -q --gpg-auto-import-keys install -yf -d k3b net-snmp -emacs
這串冗長的指令被install一分為二:左側所有的options都是global-options,右側則都是command-options。新版的libzypp會把--no-gpg-checks與--gpg-auto-import-keys定義為Repository Options,但對於語法沒有衝突。

1. 新增套件庫來源:zypper addrepo(ar)

新增一個http站台為例:

zypper ar -f http://192.168.20.1/SLES11.1/x86_64 SLES11.1
-f (--refresh)加入並且立即更新套件資料庫。沒有-f時,zypper預設是不autorefresh的。
後面的網址部份是baseurl,SLES11.1則是Alias。由於我們沒有設定其他參數,因此其他設定會被指定成預設值,例如:enabled=1,type=yast2以及keeppackages=0。如果想要新增一個本地端的ISO檔作為repo,可以這麼定義:
zypper ar -t yast2 -n "SLES11.1 repostory" "iso:/?iso=/home/maxsolar/tftpboot/ISOs/SLES/SLES11sp1_x86_64.iso" "SLES11.1 iso"
以下分別是local DVD, NFS4, ftp以及https的範例:
zypper ar "dvd:/subdir?devices=/dev/sr0,/dev/sr1" DVD
zypper ar "nfs4://nfs-server/exported/path?mountoptions=ro" NFS
zypper ar "cifs://servername/share/path/on/the/share?user=usern&pass=password" SAMBA
zypper ar "ftp://user:password@server/%2fhome/user/path/to/media/dir" FTP
zypper ar "https://user:password@server/path?proxy=foo&proxyuser=me&proxypass=password" WEB
其中-c (--check)是定義加入此repo時檢查其可用性,如果有位置指定錯誤則會馬上得知。
-n (--name)定義了名稱描述。在不定義name時,name==alias。
alias是必要的參數,他不需要任何其他option來引用他。由於ISO檔的資料是固定不變的,因此不使用-f使其永遠不autorefresh以增進效能。

再看另一個例子:把swyear大大個人維護的repo拿來使用:
zypper ar -cdG -n "swyear opensuse" -p 70 -t rpm-md http://download.opensuse.org/repositories/home:/swyear/SLE_11_SP1/ swyear
  • -d (--disable)
  • 加入但不使用此repo。
  • -G (--no-gpgcheck)
  • 不檢查gpg key。
  • -p (--priority)
  • 指定一個不為0的整數作為優先權。

新增一個repo檔至套件庫:

zypper ar -r SLES11.1-kiso.repo
其實更簡單的方式,就是把這個repo檔直接放到/etc/zypp/repos.d/裡,那麼你幾乎可以忘記這個功能。

2. 查詢套件庫:zypper repos(lr)

現在可以查詢剛剛已經加入套件庫有哪些:

zypper repos
# | Alias                          | Name                               | Enabled | Refresh
--+--------------------------------+------------------------------------+---------+--------
1 | SLES11.1                       | SLES11.1                           | Yes     | Yes
2 | SLES11.1 iso                   | SLES11.1 repository                | Yes     | No
3 | swyear                         | swyear opensuse                    | No      | Yes 

事實上同一套件有可能被多個套件庫所維護。以Debian系列來說,系統預設會安裝版本號最新的套件;而SuSE系列的Linux則是依優先權(priority)來安裝,使用-d來查看所有細節(details):
zypper lr -d
# | Alias                          | Name                               | Enabled | Refresh | Priority | Type   | URI
--+--------------------------------+------------------------------------+---------+---------+----------+--------+--------------------
1 | SLES11.1                       | SLES11.1                           | Yes     | Yes     |   99     | yast2  | http://192.168.20.1/SLES11.1/x86_64/
2 | SLES11.1 iso                   | SLES11.1 repository                | Yes     | No      |   99     | yast2  | dir:///home/maxsolar/tftpboot/ISOs/SLES/SLES11sp1_x86_64.iso
3 | swyear                         | swyear opensuse                    | No      | Yes     |   70     | rpm-md | http://download.opensuse.org/repositories/home:/swyear/SLE_11_SP1/
 
需特別注意priority=1表示最高優先權,若不指定優先權則預設為99。你還需要知道哪些重要的小功能呢?
  • -P (--sort-by-priority):
  • 依優先權排序。
  • -U (--sort-by-uri):
  • 依URI排序。
  • -N (--sort-by-name):
  • 依名稱排序。
  • -e (--export):
  • 將所有套件庫匯出至一個檔案。
zypper lr -e foo.repo

3. 刪除與修改套件庫:zypper removerepo(rr)/modifyrepo(mr)/namerepo(nr)

   3.1 刪除套件庫(removerepo)有三個控制項:id(#)、URI以及Alias,任意一項都可以:

zypper rr 1
等同於
zypper rr SLES11.1
等同於
zypper rr http://192.168.20.1/SLES11.1/x86_64/

   3.2 修改套件庫(modifyrepo)有四個控制項:id(#)、URI、Alias以及name,建議用最直覺的id即可。可以修改的options族繁不及備載,這裡僅列出幾項作拋磚引玉之用:

zypper modifyrepo
  • -e (--enable)與-d(--disable):
  • 啟用與停用。
  • -r (--refresh)與-R(--no-refresh):
  • 啟用/停用自動更新。
  • -p (--priority) <positive-integer>:
  • 設定大於0的整數作為優先權。
  • -n (--name) <name string>:
  • 指定一個字串作為name。
  • -k (--keep-packages)與-K(--no-keep-packages):
  • 安裝/更新後,套件是否保留在cache裡。
  • -a (--all):
  • 將規則套用到所有套件庫。
假設我要把#1變成優先權為10,#2改變name為SLES11_ISO_repo並啟用autorefresh,把#3設定為啟用並且將所有repos都設定keeppackages=1:
zypper mr -p 10 1
zypper mr -rn SLES11_ISO_repo 2
zypper mr -e 3
zypper mr -ka
或許你已經注意到,modifyrepo並不能修改Alias,想要修改Alias必須使用namerepo這個子指令。

   3.3 修改套件庫名稱(namerepo)也有四個控制項:id(#)、URI、Alias以及name,建議用最直覺的id即可。他的目的就只有一個--修改Alias:

zypper nr 2 SLES11_ISO_image

4. 查詢套件:zypper search(se)/info(if)/what-provides(wp)

   4.1 查詢套件(search)的方式相當靈活,在此我先列出常用的options再加以靈活運用:

  • -s (--details):
  • 顯示詳盡訊息
  • -d (--search-descriptions):
  • 連套件描述的文字也納入搜尋。
  • -r (--repo) <alias|name|#|URI>
  • 指定套件庫內容來搜尋。
  • --match-exact <STRING>
  • 指定某一精確的字串來搜尋。
例如我想知道套件名稱有包含snmp的套件:
zypper se snmp -s
kernel的種類太多,只想精確搜尋kernel-syms:
zypper se --match-exact kernel-syms
S | Name        | Summary                              | Type      
--+-------------+--------------------------------------+-----------
  | kernel-syms | Kernel Symbol Versions (modversions) | package   
  | kernel-syms | Kernel Symbol Versions (modversions) | srcpackage
這裡的type與使用zypper repos顯示的type意義是不同的。repos裡的type是套件庫的種類;search裡的type是套件本身的種類,有package(一般正常的rpm檔)、pattern(推薦的套件群組)、product(必須安裝的套件群組)以及srcpackage(原始碼)。此時不指定type時,package為預設類別。 只搜尋#1套件庫,套件描述裡包含kvm的套件呢?
zypper se -r 1 -d kvm
想找kernel開頭的套件:
zypper se kernel-*

   4.2 查詢套件詳細訊息(info)需要給定一個正確的套件名稱,先search之後再使用info是個好方法。

zypper if expect

   4.3 查詢某個檔案或套件事由誰提供(what-provides)

zypper wp libldap-2.4.so.2

5. 安裝套件:zypper install(in)/source-install(si)

   5.1 install的基本格式為

zypper install [options] <name|capability|rpm_file_uri>
安裝swyear提供的k3b到系統上:
zypper in k3b -r swyear
也可以寫成
zypper in swyear:k3b
安裝多個rpm檔:
zypper in http://192.168.20.1/progs/madedit/MadEdit/MadEdit-0.2.9/madedit-0.2.9-1.x86_64.rpm ~/progs/Adobe/AdbeRdr9.4.7-1_i486linux_enu.rpm
安裝同時移除套件:
zypper in vim-enhanced -gcin
安裝某一個缺少檔案所帶來的套件:
zypper in 'libXfixes.so.3'
安裝所有以kernel-開頭的套件:
zypper in kernel-*
強制/重新安裝:
zypper in iperf -f
有些好用的options應該要知道:
  • -f (--force):
  • 強制/重新安裝套件。
  • -y (--no-confirm):
  • 遇到問答一律回答yes。
  • -l (--auto-agree-with-licenses):
  • 自動同意軟體授權同意條款。
  • -R (--no-force-resolution)與--force-resolution:
  • 在interactive模式下,zypper預設會幫我們算出解決方案並執行之(--force-resolution);然而在non-interactive模式下,由於顧慮到系統安全,因此放棄自動執行解決方案(--no-force-resolution)以便讓使用者有機會手動解決問題。
    interactive/non-interactive模式是屬於Global Options,這些options必須要比zypper的command更早被使用。
  • -D (--dry-run):
  • 只做測試,不會真的進行安裝。
  • -d (--download-only):
  • 只下載而不進行安裝。
例如:
zypper --non-interactive --no-gpg-checks in -flR iperf
也就是我執行一個非互動式的安裝,不檢查gpg,強制安裝iperf並同意授權條款,若發生錯誤則仍然自動執行解決方案。

   5.2 source-install相對容易多了,他只要接一個原始碼的套件名稱即可。使用si之前需要先使用search:

zypper se -t srcpackage udev
S | Name | Summary                                           | Type      
--+------+---------------------------------------------------+-----------
  | udev | A rule-based device node and kernel event manager | srcpackage
得知這個原始碼套件名稱就是udev,接著就可以進行安裝。
zypper si udev
si預設會把需要編譯該套件的其他套件一起裝起來。

6. 移除套件:zypper remove(rm)

remove的功能很明確,就是移除套件。下列只有幾個簡單的options可供選擇:

  • -t (--type):
  • 指令套件類別。
    zypper rm -t srcpackage udev
  • -R (--no-force-resolution):
  • 不強制使用解決方案。移除時遇到套件相依性問題,系統預設會使用計算出來的解決方案。想要自己手動選擇方案,需要使用-R。
  • -u (--clean-deps):
  • 一同移除沒被使用到的套件。
  • -D (--dry-run):
  • 純粹只是測試,不進行真正更動。

7. 刷新/清空套件庫:zypper refresh(ref)/clean(cc)

   7.1 利用zypper refresh來更新套件庫的快取。若套件庫被標示為不更新(autorefresh=0)的則不受影響。當使用只執行更新時,其實有四種類型的資料會牽涉其中:

  1. metedata
  2. 包含repository metadata(套件大小、版本、相依性等資訊)以及raw metadata(套件的時間戳記、sha1校驗碼以及位置)。
  3. database
  4. libzypp資料庫。
  5. raw data
  6. 就是rpm, source rpm以及patch等實體檔案。
  7. service
  8. 目前版本的zypper(1.5.1)支援的服務僅有Repository Index Service(RIS),訂閱這個服務可以自動管理所有的套件庫,並且由此服務所建議的方案來維護系統上的套件。
refresh預設只會更新metadata,而這也是大部分系統管理員預期的行為。不同的參數可控制細部的行為,可參閱manpages以取得細節。

   7.2 利用zypper clean來清除套件庫的快取(/var/cache/zypp*)。預設只清除套件本身(raw data),如果想要徹底清除metadata並開始一個新的更新,下列參數可能需要:

  • -m (--metadata)
  • 只清除repository metadata,所有已下載的套件都會被保留。
  • -M (--raw-metadata)
  • 所有metadata都清除,但已下載的套件都會被保留。
  • -a (--all)
  • 所有metadata都清除,連已下載的套件都一併刪除。
因此在網路頻寬充裕的情況下,啟動更新前最佳的模式應該是:
zypper clean -a

8. 更新/列舉更新系統:zypper update(up)/dist-upgrade(dup)

update的行為與dist-upgrate僅差別在範圍大小,參數都是共用的。有幾個參數可以特別注意:

  • -r (--repo)
  • 指定某套件庫來源進行更新。
  • -l (--auto-agree-with-licenses)
  • 自動同意license。通常還會搭配-y表示同意
  • --force-resolution
  • 更新預設的行為是--no-force-resolution,會提示解決方案由使用者決定。使用force表示採用zypper所計算出的最佳解決方案。
  • -D (--dry-run)
  • 一個測試性質的動作,不影響系統狀態。
假設不預先執行zypper refresh,光是執行zypper update就會先執行refresh的動作。update會更新所有metadata,並且更新、下載安裝套件之後,再更新database。
update的行為是更新已安裝的套件,但dist-upgrade的行為著重在系統的升級,例如更新了repo之後,利用dup從SLES11.1升級至SLES11.2,此時會安裝新版本所建議的套件、更新原本安裝的套件,也會移除新版本所廢除的套件。

9. 檢查使用舊套件之程序:zypper ps

在經歷update或是dist-upgrade之後,系統總會提示使用者要執行zypper ps已檢查有哪些套件或檔案已被更新但系統仍持續佔用(occupied)。他沒有參數,只具參考價值;對於仍持續被系統佔用的舊套件只有重開機之後才能使用更新後的套件/檔案。

這份筆記並不適用於zypper 0.5(例如SLES10)。因為SLES10並不讀取repo檔案,zypper的使用效率也很低落;想在SLES10使用zypper必須自行參考他所提供的manpages。

Share

2009年2月4日 星期三

OpenSuSE的vim變黑白了

這真是可怕的事情!黑白的vim就是黑白的人生阿!看看我們的vim:

zypper se vim
S | Name         | Summary                                          | Type    
--+--------------+--------------------------------------------------+-----------
 | avimanager   | Manage your (large) movie (DVD,DivX,(S)VCD) co-> | package 
 | avimanager   | Manage your (large) movie (DVD,DivX,(S)VCD) co-> | srcpackage
 | gvim         | A GUI for Vi                                     | package 
i | vim          | Vi IMproved                                      | package 
i | vim-base     | Vi IMproved                                      | package 
 | vim-data     | Vi IMproved                                      | package 
 | vim-enhanced | A version of the VIM editor which includes rec-> | package   
哦~原來是我們沒有安裝vim增強模式阿,那麼就來裝一下吧!
yast -i vim-enhanced
怎麼回事,還是黑白的阿!!明明在/etc/vimrc裡就有定義syntax on阿!只好再試試看吧!
yast -i vim-data
好險,我的人生終於恢復成彩色的了!真搞不懂opensuse阿!

參考資料:
好用的vim設定
http://www.viemu.com/

2009年2月2日 星期一

在OpenSuSE上安裝JDK以及netbeans

我真是跟不上時代進步,我竟然不知道JDK已經可以直接從網路安裝了@_@

本文介紹兩種jdk安裝方式,一種是使用網路安裝openjdk,一種是手動安裝jdk。

1.透過網路自動安裝openjdk:
首先,先移除原本的java:

zypper remove java-1_6_0-sun Java-1_6_0-plugin

接著,再安裝openjdk:
zypper in java-1_6_0-openjdk java-1_6_0-openjdk-devel java-1_6_0-openjdk-plugin

其中,java-1_6_0-openjdk是jre,java-1_6_0-openjdk-devel是jdk,java-1_6_0-openjdk-plugin是給瀏覽器的plugin。如果你只要jre的環境,請只安裝java-1_6_0-openjdk就好;如果你需要可以開發的環境,請安裝java-1_6_0-openjdk-devel。

假如你所看到的openjdk的版本是1.5或是看不到openjdk,請加入下列repo:

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
-----------------------
此時,請到java的網站驗證是否裝了瀏覽器的plugin: 沒錯,我們的jdk版本實在是太舊了(目前最新的版本為1.6.0 update 11,安裝的版本為最早期的1.6.0)。其實java se 6的差異實在不大,如果你沒有追求最新版的慾望,事實上已經建置好java的開發環境了;但是假設你就是想要用最新版的jdk,請參考第二部份的手動安裝。

2.手動安裝JDK
請到sun官網下載JDK 6 Update 11或是JDK 6 Update 11 with NetBeans 6.5(bundle)。安裝bundle比較簡單,這裡介紹分開安裝的方式。安裝以前建議先把openjdk移除,除非你有需要兩個版本的jvm。

zypper rm java-1_6_0-openjdk java-1_6_0-openjdk-devel java-1_6_0-openjdk-plugin
然後先安裝jdk 6 update 11(不建議安裝rpm的那個):
mv jdk-6u11-linux-i586.bin /opt/sun/
sh /opt/sun/jdk-6u11-linux-i586.bin
此時你還需要手動設定jdk的PATH。你需要新增兩行到.profile下:
JAVAHOME=/opt/sun/jdk1.6.0_11/
JDK=/opt/sun/jdk1.6.0_11/bin
export PATH=$PATH:$JDK
接著安裝netbeans:
mv netbeans-6.5-ml-javase-linux-tw.sh /opt/sun/
sh /opt/sun/netbeans-6.5-ml-javase-linux-tw.sh
結果卻出現:
Configuring the installer...
Searching for JVM on the system...
sed: -e expression #1, char 52: Invalid range end
sed: -e expression #1, char 52: Invalid range end
sed: -e expression #1, char 52: Invalid range end
sed: -e expression #1, char 52: Invalid range end
sed: -e expression #1, char 52: Invalid range end
sed: -e expression #1, char 52: Invalid range end
sed: -e expression #1, char 52: Invalid range end
Java SE Development Kit (JDK) was not found on this computer
JDK 6 or JDK 5 is required for installing the NetBeans IDE. Make sure that the JDK is properly installed and run installer again.
You can specify valid JDK location using --javahome installer argument.

To download the JDK, visit http://java.sun.com/javase/downloads
暫時設定java的PATH給root吧:
JAVAHOME=/opt/sun/jdk1.6.0_11/
export PATH=$PATH:$JAVAHOME
或是使用參數的方式安裝:
sh /opt/sun/netbeans-6.5-ml-javase-linux-tw.sh --javahome /opt/sun/jdk1.6.0_11
就可以成功啟動安裝程式了。為了方便管理,我一樣把netbeans安裝在/opt/sun底下: 便可以成功啟動netbeans。

3.手動安裝支援java的plugin給瀏覽器
如果不是suse系列的linux,安裝的方式請參照sun的官方教學。如果是java的話,使用官方的教學是沒有用的。suse無論使用任何瀏覽器都會去讀取同一個動態函式庫,因此:

ln -s /opt/sun/jdk1.6.0_11/jre/plugin/i386/ns7/libjavaplugin_oji.so /var/lib/rpm/alternatives/libjavaplugin.so
更多資訊請參考: 簡易佈署java程式 Java on Linux 簡易設定

OpenSuSE skype 無音效問題解決

自從上一篇OpenSuSE 11.1使用感想之後,我發現出現Problem with Audio Playback的問題並非只有opensuse而已。幸好我的問題是最單純的,我的音效卡驅動程式有順利載入,這樣接下來的問題就比較好解決。 首先,先確定音效卡的driver有安裝成功:
lspci -v
你應該會看見:
03:00.0 Multimedia audio controller: ESS Technology ES1969 Solo-1 Audiodrive (rev 02)
Subsystem: ESS Technology Device 8898
Flags: bus master, medium devsel, latency 64, IRQ 19
I/O ports at ec00 [size=64]
I/O ports at e880 [size=16]
I/O ports at e800 [size=16]
I/O ports at e480 [size=4]
I/O ports at e400 [size=4]
Capabilities: 
Kernel driver in use: ESS ES1938 (Solo-1)
Kernel modules: snd-es1938
如果有看到Kernel driver in use的話,便表示有正確的載入驅動程式(或是模組)。或是利用yast看看設定檔,檢查driver有沒有被載入正確: 接著,我們必須手動調整skype的音效裝置: 其中sound in選hw,sound out選plughw,這時你按apply後,做做看音效及撥話測試,應該就會有聲音了!

2009年1月23日 星期五

OpenSuSE 11.1使用感想

我用opensuse的經驗尚淺,僅紀錄一些我自己的感覺。

1. skype無音效:
這個問題在討論串哀鴻遍野不絕於耳,至今仍然沒有好的解決方法,沒有聲音就是沒有聲音!我原本以為是這台電腦內建音效卡的問題,於是跟人家A了一片音效卡來裝,還是一樣;回到家裏用自己的電腦來裝,也是一樣,沒有聲音就是沒有聲音!這對於需要用skype網路電話來工作的我,是完全無法接受的。 幸好,問題已經解決了,請參考OpenSuSE skype 無音效問題解決

2.安裝JDK會出現開機卡住的問題:
如果安裝了rpm版本,安裝完成會自動的幫使用者設定好環境變數,相當的方便;不過可怕的事情在後頭:當你重新啟動機器時,他會卡在一個訊息:
Starting jexec services
我也不知道他究竟會卡多久,即使我使用runlevel 1來開機也是一樣。網路上的的討論串認為是因為jdk所包成的rpm大致上是以redhat系列的linux為主,而opensuse有自己的spec,所以雖然是可以安裝,不過進到開機程序時會出現這樣不預期的問題。jexec daemon是每個runlevel都會啟動的,因此逃到single user mode還是難逃卡住的宿命。解決方法如下:
A. 找一片live cd或是用隨身碟開機進入另一套linux,把opensuse的root 分割區mount起來後,修改掉jexec的服務:

mv /etc/rc.d/rc5.d/S01jexec /etc/rc.d/rc5.d/xS01jexec
mv /etc/rc.d/rc5.d/K01jexec /etc/rc.d/rc5.d/xK01jexec
sync
init 6
B. 由於A步驟使開機時跳過了啟動jexec的服務,所以可以順利開機;請把先前安裝的jdk給移除,改安裝非rpm的版本。非rpm的版本只要解壓縮後放在一個固定位置,之後在手動去設定java的環境變數即可,可以成功的避掉這個問題。關於安裝jdk的問題,請參考在OpenSuSE上安裝JDK以及netbeans

3.桌面特效會不預期的自動消失:
工作到一半,畫面就會跳一下;各個桌面的視窗就會全部擠到第一個桌面來!好不熱鬧!後來乾脆不用,還不用被突如其來的閃爍給氣到拍桌。

4.X-window重新啟動的保護措施:
在一般的linux使用經驗裡,我們修改完一些設定需要重新登出時,我們通常都很懶,不喜歡還要點阿點阿再登出;我通常都是直接用crtl+alt+backsapce重新啟動X!不過在opensuse裡,這個方便的功能被拿掉了!為了避免使用者不小心就重新啟動x,opensuse 11以後就要按兩次組合鍵才會生效。
倘若你想要恢復一次就重新啟動x,你可以在xorg.conf裡新增一個option:
Option "ZapWarning" "on"

5.方便的桌面特效:
只要不是特別有名的顯示卡廠牌,安裝完opensuse就能啟動compiz特效;對於許多使用linux的新手實在是非常方便。

6.One Click Installation:
OpenSuSE非常神奇的有一個單鍵安裝的機制。當你找到一個想要的套件名稱,但是不知道如何安裝、下載、甚至不知道去哪裡加新的repo,這時友善的單鍵安裝就可以幫你很多忙。例如我家裡的nvidia顯卡需要安裝驅動程式,我決定用opensuse建議的安裝方式而不是去nvidia官方下載驅動程式自己裝,我只是在google上面輸入「nvidia opensuse」的關鍵字,第一筆就是引導我如何單鍵安裝nvidia的driver。
安裝的過程會要求root密碼,隨後會依據需求新增所需的repo、建立該repo的cache並且安裝起來。整個過程實在是俐落又方便,實在是非常值得推崇的一個linux發行版本。

7.強大而方便的yast
這有點像是大家都知道的優點。因此我才會認為suse以及redhat系列的linux真的是適合佈署在企業環境,使用者介面做得很俐落方便。

8.極為詳盡的設定檔說明:
suse的說明檔裡面的註解非常的詳盡,比起其他套linux而言真是非常的用心。要去編輯一個設定檔需要先去了解該參數的目的及用途,許多套linux有說明等於沒說明;suse的註解說明非常的清楚詳細,看了他的說明幾乎可以不用浪費時間上網google了。

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 !!!