Gentoo Portage on Fedora Core 2
前言
Gentoo Portage是一個強大的原始碼套件管理系統,其結構類似FreeBSD的Ports,但是基本上比Ports更新的速度快,比較容易使用,而且功能不斷地在加強。
以下介紹我在Fedora Core2安裝Portage的心得,不過下面提到的兩個script在其他Distro應該也可以使用,只是我沒測試過。
用Portage有什麼好處?
我想對已經有RPM及yum/apt-get等系統的FC使用者來講是原始碼自動下載、安裝、更新及管理。只不過使用前有幾點要注意,除非你有一定的把握,否則盡量把RPM系統跟Portage系統分開,比如說可以的話某套件跟全部的相依套件只用Portage裝。建議是只用來裝一些FC2本身沒有附的東西,例如一些多媒體軟件(mplayer, xine etc)。還有大概不用我提但絕對不建議使用在實務機器上。RPM的Devel套件能裝就裝,要不然很多東西編不出來。
需求: Python, GCC, Rsync, Wget, 冒險的精神
1.下載
http://demonbane.org/files/portageinstall.sh及
http://demonbane.org/files/portageinject.sh2.執行portageinstall.sh,它會自動做好一切準備工作,到一半當它第一次在跟Server上的Portage Tree同步(作emerge sync)時會需要一段時間(約10-20分鐘),因為整個Portage Tree約有十萬個檔案。還有執行過程中會出現一些警告訊息,除非導致執行中斷,否則基本上不用理會。
3.Sync好了之後接下來執行portageinject.sh,這個script會把一些比較核心的套件(如baselayout glibc等等)不作安裝直接加到Portage資料庫裡,當Portage裝軟體時就不會因為相依性而去安裝那些套件。除非你打算冒險嘗試把你的系統整個轉成Gentoo,要不然如果真的安裝Gentoo的baselayout或Glibc之類的話系統大概會完蛋。
4.全部好了之後就可以開始使用Portage了!基本指令為
emerge <套件名>
例: emerge mplayer
ok但在開始用之前還有一件很重要的事,就是編輯Portage的設定檔, /etc/make.conf。裡面看起來很多東西但基本上比較重要的只有幾個變數:
USE
CFLAGS
CXXFLAGS
ACCEPT_KEYWORDS
FEATURES
USE基本上是用來控制編譯軟體時的選項(看要支援什麼之類的),可以用ufed這個工具來編輯比較方便(先emerge ufed)
關於Use flags的詳細介紹請看
這裡。
CFLAGS跟CXXFLAGS是GCC在編譯套件時使用的參數,可以利用這個在編譯時針對你的CPU把編出來的執行檔的效能最佳化。預設是"-O2 -mcpu=i686 -pipe"
如果你是用Athlon XP的話通常建議的CFLAGS是
-O3 -march=athlon-xp -pipe -fomit-frame-pointer
Pentium 4的話:
-O3 -march=pentium4 -pipe -fomit-frame-pointer
註:Portage基本上只支援GCC3以上
上面第一個參數-OX就是指最佳化的程度,有1-3(1的話1不用寫出來)及s,-O只做一些基本的最佳化,-O2是作除了會增大執行檔以外的最佳化, -O3是幾乎作所有的最佳化,所以編譯出來的執行檔案也最大,-Os是-O2加上一些可以針對執行檔大小(減到最小)的最佳化。到底哪個才能達到最好效果很難說,因為過度的最佳化有時會造成編譯出來的執行檔不穩定,而執行檔越大表示硬碟要讀取的檔案越大,記憶體也耗越大。所以有些人說Os好,也有人說O2及O3。聽某Gentoo dev說好像-Os在x86會造成CPU fetch的指令跟執行檔的指令不平衡(之類的),不過說老實話我完全不了解意思:)
我覺得要看你的硬體,編譯的軟體,GCC版本等等因素很多,只能自己試。我個人用Gentoo也有一段時間了,整個系統分別用-Os, -O2和-O3編譯其實我都試過一陣子。整體而言覺得-O2提供最佳化及穩定性的均衡點,所以我現在用的CFLAGS是-O2 -march=athlon-xp -pipe -fomit-frame-pointer
順帶一提我用的是AthlonXP 2000
接下來的-march是針對特定的CPU作最佳化,比如說用-march=athlon-xp,gcc會使用athlon-xp特有的指令來作最佳化。意思就是說編出來的執行檔只能用AthlonXP執行,拿到其他CPU如Pentium4的電腦就不能用。但這也代表了在AthlonXP上執行可以拿到最佳效能。如果想保持相容性的話可以考慮用-mcpu
最後兩個-pipe及-fomit-frame-pointer,-pipe是叫gcc利用pipe增進編譯速度,-fomit-frame-pointer是不編進一般使用者大概用不到一些debug資訊。
CXXFLAGS是編輯C++軟體時用的,留在預設(跟CFLAGS一樣)就好了。
其他還有很多參數有興趣的朋友可以去參考
GCC文件。
ACCEPT_KEYWORDS很簡單,只有兩個值(不提x86以外), x86或~x86
x86是stable, ~x86就是testing/unstable
所以用~x86可以拿到最新版本,而且一般來講很穩定,因為都是安裝都由原始碼編。以目前的Debian來比喻的話x86是Woody, ~x86是Sid
最後FEATURES是Portage的一些功能,建議使用sandbox跟ccache
sandbox是讓Portage編完一個軟體後先裝到另一個地方,測試沒問題後才真的安裝。
ccache是使用ccache增進編譯速度
其他詳細請看
http://www.gentoo.org/doc/zh_tw/handbook/handbook-x86.xml?part=2&chap=35. make.conf編輯好之後終於可以用Portage來裝軟體了!
在此的建議是先用emerge -p <package名稱> 來看它會為了相依性而安裝哪些套件。如果相依的套件你都以經有RPM安裝的話,你可以用emerge --nodeps <package名稱>,讓它不裝相依的軟件。有一些沒有的話,看需要用emerge --nodeps一個一個來裝。
package名稱有時候需要自己找一下
emerge -s <名稱> 為找名稱裡有該字串的套件
例: emerge -s apache
emerge -S <名稱> 為找描述裡有該字串的套件
例: emerge -S proxy
如果要的東西都找不到的話那可能是Portage裡沒有,或是搜尋的名稱不對。
我想剛開始使用會常出現某套件編不出來的情況,這時要靠錯誤訊息來判斷問題出在哪裡。
6.最後要介紹的是gentoolkit
gentoolkit是一組查詢,修改及修復Portage的工具,要安裝打"emerge --nodeps gentoolkit",裡面最常用到是qpkg,下面講幾個常用的用法:
查看所有安裝好的套件:
qpkg -I
查看該套件所有的檔案:
qpkg -l <名稱>
查看某檔案屬於哪個套件:
qpkg -f <檔案>
檢查套件所有檔案的md5碼:
qpkg -mc <套件>
註:不寫套件的話會查全部,加-v會列出被改過的檔案
查timestamp(修改日期):
qpkg -tc <套件>
查md5跟timestamp:
qpkg -c <套件>
7.其他常用的Portage維護指令:
更新Portage Tree:
emerge sync
查看哪些套件有更新(p拿掉就是直接安裝)
emerge -pu world
以下是一些Gentoo系統放設定檔的地方,如果你打算用Portage裝一些服務,可能就要注意一下:
/etc/conf.d -> 大致上等於FC的 /etc/sysconfig
/etc/init.d -> 等於FC的/etc/init.d
/etc/env.d -> 基本上等於/etc/profile.d,只是要更改/etc/profile才會被用到
References:
http://www.gentoo.orghttp://forums.gentoo.org/viewtopic.php?t=125553 (兩個script從這裡來的,加上我一
些小修改)