星期三, 3月 14, 2007

RPM Tips

RPM Tips

English Version

首先,我不會寫有關如何撰寫 RPM 的 spec 檔案。有關這個題目在網際網路已經有很多的 howto。撰寫一個 RPM spec 檔案可能很簡單或可能很複雜。這要看你要撰寫 RPM spec 檔案的程式本身。無論如何,這會需要蠻 多時間。

如果我要撰寫一個 RPM spec 檔案的話,我主要參考資料如下:

http://www.rpm.org/max-rpm/
http://www.rpm.org/RPM-HOWTO/

我從來不願意從來源程式安裝。不是因為難。相反的,蠻容易。只是,我不願意搞亂我的系統。如果我將從source安裝 的程式更新,常常會發生的問題是還有一些檔案沒有被刪除的乾淨。有時候這種情況會產生問題。如果要刪除這個程式, 你怎麼保證所有被安裝的檔案都被刪除?

盡可能,我寧願用 RPM 來安裝。用 RPM 來更新和刪除,RPM 做的很乾淨。

所以,我在這邊想談的是:如果你只有source程式,是否有辦法將來源程式轉換成 RPM 包裝?

如果我需要一個特定的程式,我會先到安裝 CD 找這程式。找不到的話,我會到 freshmeat,然後到 sourceforge.net 或者 google去找。

如果找不到 RPM 包裝,我會去找 rpmfind.

問題是:如果還是找不到這程式的 RPM 包裝呢?該怎麼辦才好?以下討論可能會解決這個問題,就是建 RPM 包裝終究是可能的。

你要建或重建 RPM 之前,你必須先安裝 rpm-build 包裝:

rpm -Uvh rpm-build-4.3.2-21.i386.rpm


要建或重建 RPM 的話,專家建議以一般使用者﹝不是 root﹞的身分來做這個工作。但做這個工作之前, 你必須建所謂的 RPM build directories ﹝建 RPM 所需要的子目錄﹞。現在以一般使用者身分登入, 然後建以下子目錄:

mkdir rpmbuild
mkdir rpmbuild/BUILD
mkdir rpmbuild/RPMS
mkdir rpmbuild/RPMS/athlon
mkdir rpmbuild/RPMS/i386
mkdir rpmbuild/RPMS/i486
mkdir rpmbuild/RPMS/i586
mkdir rpmbuild/RPMS/i686
mkdir rpmbuild/RPMS/noarch
mkdir rpmbuild/SOURCES
mkdir rpmbuild/SPECS
mkdir rpmbuild/SRPMS

現在建一個檔案,檔名為 .rpmmacros ﹝請注意這是所謂的 dot file,就是檔案名稱第一個字元是一個句點﹞,內容為:

%_topdir /home/username/rpmbuild

username 應該改為真正一個使用者的帳號名稱。

我們現在已經就緒建 RPM 包裝了。

Source RPM

如果你想安裝 ClamAV 防毒程式,從 crash-hat 你可以下載 RPM 包裝。 這個地方也提供 source rpm (.src.rpm)。我自己喜歡下載 source RPM 然後重建一個 RPM。這樣的做法是 完全針對我的系統來編譯。

重建就執行以下指令:

rpmbuild --rebuild clamav-0.83-1.src.rpm

重建 source RPM 之後,會建三個檔案如下:

rpmbuild/RPMS/i386/clamav-0.83-1.i386.rpm
rpmbuild/RPMS/i386/clamav-milter-0.83-1.i386.rpm
rpmbuild/RPMS/i386/clamav-devel-0.83-1.i386.rpm

Source Tarball with spec file

假如你想安裝 SpamAssassin。 在這網頁沒有提供 RPM 包裝。但是所提供的 source tarball 已包含了 RPM spec 檔﹝Mail-SpamAssassin-3.0.2.tar.bz2 和 Mail-SpamAssassin-3.0.2.tar.gz﹞。

你怎麼知道在 source tarball 裡有 RPM spec 檔?拿上段兩個檔案做例子,執行以下指令就會知道的:

tar fzt Mail-SpamAssassin-3.0.2.tar.gz | grep .spec
tar fjt Mail-SpamAssassin-3.0.2.tar.bz2 | grep .spec

用這種方式建 RPM 包裝:

rpmbuild -tb Mail-SpamAssassin-3.0.2.tar.gz
rpmbuild -tb --define "srcext .bz2" Mail-SpamAssassin-3.0.2.tar.bz2

Source tarball without spec file

我上面已提過,我不喜歡從source程式安裝。但是來源程式沒有 spec 檔案,怎麼辦?請你安裝 CheckInstall 讓它幫你建 RPM。

建 RPM 包裝的程序如下:

tar xvfz program_name-version.tar.gz
cd program_name-version
./configure
make

下一部本來要下:

make install

但是,這一次應該下:

checkinstall