利用 RPM 來管理整個 Linux 的套件,同時以一個簡單的範例來操縱 SRPM 的建立
本文資料主要針對 Fedora Core 4 的系統進行說明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而來, 這個 Red Hat Linux 9 並不是當前大家聽到的 RHEL 喔!那是在 RHEL 出現之前的產品,基本上是在 2003 年以前的作品了!Fedora Core 4 則是在 2005 年 6 月份釋出,使用的核心是 2.6.11 版,當時是很紅的一個作品!只是生命週期太短,所以用這個 Fedora 系列來介紹 Server, 當時的決定確實有點莫名其妙了...
建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 Fedora Core 4 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!
在上一章當中,我們介紹了以 Tarball 的方式來安裝我們的套件,同時也說明了 Source code 與執行檔之間的關係。不過,如果每次安裝套件都需要進行編譯的動作,那麼實在很沒效率!這個時候,由 Red Hat 公司所開發出來的套件管理程式( Red Hat Package Manager, RPM )可就幫了大忙了!RPM 除了可以用來安裝套件之外,還可以進行查詢、升級、反安裝、以及其他驗證等等的功能, 這些功能讓我們在管理系統的套件上,更顯的方便呢!此外,我們也可以利用 RPM 的原理來『自行創造自己的 RPM 檔案』呢!
由於 RPM 實在是太好用了,目前主要的 Linux distributions 都是使用 RPM 來管理他們的套件,例如 Red Hat 系統 (含 Fedora ), SuSE 與改版後的 Mandriva ,所以,您不能不知道 RPM 是什麼東西?該如何利用他,以及熟悉相關的功能!趕緊來參詳參詳!
xxxxxxxxx.rpm <==RPM 的格式,已經經過編譯且包裝完成的 rpm 檔案;
xxxxx.src.rpm <==SRPM的格式,包含未編譯的原始碼資訊。
那麼我們怎麼知道這個套件的版本、適用的平台、打包的次數呢?呵呵!只要透過檔名就可以知道了!例如
rp-pppoe-3.1-5.i386.rpm
這的檔案的意義為:
rp-pppoe - 3.1 - 5 .i386 .rpm
套件名稱 套件的版本資訊 釋出的次數 適合的硬體平台 副檔名
除了後面適合的硬體平台與副檔名外,主要是以『-』來隔開各個部分,
這樣子可以很清楚的發現該套件的名稱、版本資訊、打包次數與操作的硬體平台!
好了,來談一談每個不同的地方吧:平台名稱 | 適合平台說明 |
i386 | 幾乎適用於所有的 x86 平台,不論是舊的 pentum 或者是新的 pentum-IV 與 K7 系列的 CPU等等,都可以正常的工作!那個 i 指的是 Intel 相容的 CPU 的意思,至於 386 不用說,就是 CPU 的等級啦! |
i586 | 就是 586 等級的電腦,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插腳 ) 等等的 CPU 都算是這個等級; |
i686 | 在 pentun II 以後的 Intel 系列 CPU ,及 K7 以後等級的 CPU 都屬於這個 686 等級! |
noarch | 就是沒有任何硬體等級上的限制。一般來說,這種類型的 RPM 檔案,裡面應該沒有 binary file 存在。 |
/etc | 一些設定檔放置的目錄,例如 /etc/crontab |
/usr/bin | 一些可執行檔案 |
/usr/lib | 一些程式使用的動態函式庫 |
/usr/share/doc | 一些基本的軟體使用手冊與說明檔 |
/usr/share/man | 一些 man page 檔案 |
[root@linux ~]# rpm -i rp-pppoe-3.1-5.i386.rpm
不過,這樣的參數其實無法顯示安裝的進度,所以,通常我們會這樣下達安裝指令:[root@linux ~]# rpm -ivh package_name 參數: -i :install 的意思 -v :察看更細部的安裝資訊畫面 -h :以安裝資訊列顯示安裝進度 範例: 範例一:安裝 rp-pppoe-3.1-5.i386.rpm [root@linux ~]# rpm -ivh rp-pppoe-3.1-5.i386.rpm Preparing... ####################################### [100%] 1:rp-pppoe ####################################### [100%] 範例二、一口氣安裝兩個以上的套件時: [root@linux ~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm # 後面直接接上許多的套件檔案! 範例三、直接由網路上面的某個檔案安裝,以網址來安裝: [root@linux ~]# rpm -ivh http://website.name/path/pkgname.rpm另外,如果我們在安裝的過程當中發現問題,或者已經知道會發生的問題, 而還是『執意』要安裝這個套件時,可以使用如下的參數『強制』安裝上去:
可下達的參數 | 代表意義 |
--nodeps | 使用時機:
如果您在安裝某個套件時,老是發現 rpm 告訴你『有屬性相依的套件尚未安裝』,
而您又想要直接強制安裝這個套件時,可以加上 --nodeps 告知 RPM 不要去檢查套件的相依性。 危險性: 套件會有相依性的原因是因為彼此會使用到對方的機制或功能,如果強制安裝而不考慮套件的屬性相依, 則可能會造成該套件的無法正常使用! |
--nomd5 | 使用時機:
不想檢查 RPM 檔案所含的 MD5 資訊時。 說明: 還記得我們在前一章有提到的 MD5 這個指紋辨識吧?!沒錯,這裡指的就是不要檢查 RPM 套件的 MD5 資訊。但除非您很清楚這個套件的來源,否則不建議使用這個參數。 |
--noscripts | 使用時機:
不想讓該套件自行啟用或者自行執行某些系統指令。 說明: RPM 的優點除了可以將檔案放置到定位之外,還可以自動執行一些前置作業的指令,例如資料庫的初始化。 如果您不想要讓 RPM 幫您自動執行這一類型的指令,就加上他吧! |
--replacefiles | 使用時機:
如果在安裝的過程當中出現了『某個檔案已經被安裝在您的系統上面』的資訊,
又或許出現版本不合的訊息( confilcting files )時,可以使用這個參數來直接覆蓋檔案。 危險性: 覆蓋的動作是無法復原的!所以,您必須要很清楚的知道被覆蓋的檔案是真的不重要喔!否則會欲哭無淚! |
--replacepkgs | 使用時機: 重新安裝某個已經安裝過的套件! |
--force | 使用時機: 這個參數其實就是 --replacefiles 與 --replacepkgs 的綜合體! |
--test | 使用時機:
想要測試一下該套件是否可以被安裝到使用者的 Linux 環境當中。範例為: rpm -ivh pkgname.i386.rpm --test |
-Uvh | 後面接的套件即使沒有安裝過,則系統將予以直接安裝; 若後面接的套件有安裝過舊版,則系統自動更新至新版; |
-Fvh | 如果後面接的套件並未安裝到您的 Linux 系統上,則該套件不會被安裝;亦即只有安裝至您 Linux 系統內的套件會被『升級』! |
[root@linux ~]# rpm -qa [root@linux ~]# rpm -q[licdR] 已安裝的套件名稱 [root@linux ~]# rpm -qf 存在於系統上面的某個檔案 [root@linux ~]# rpm -qp[licdR] 未安裝的某個檔案名稱 參數: 在查詢的部分,所有的參數之前都需要加上 -q 才是所謂的查詢! 查詢主要分為兩部分,一個是查已安裝,另一個則是查某個 rpm 檔案內容。 查詢已安裝套件的資訊: -q :僅查詢,後面接的套件名稱是否有安裝; -qa :列出所有的,已經安裝在本機 Linux 系統上面的所有套件名稱; -qi :列出該套件的詳細資訊 (information),包含開發商、版本與說明等; -ql :列出該套件所有的檔案與目錄所在完整檔名 (list); -qc :列出該套件的所有設定檔 (找出在 /etc/ 底下的檔名而已) -qd :列出該套件的所有說明檔 (找出與 man 有關的檔案而已) -qR :列出與該套件有關的相依套件所含的檔案 (Required 的意思) -qf :由後面接的檔案名稱,找出該檔案屬於哪一個已安裝的套件; 查詢某個 RPM 檔案內含有的資訊: -qp[icdlR]:注意 -qp 後面接的所有參數以上面的說明一致。但用途僅在於找出 某個 RPM 檔案內的資訊,而非已安裝的套件資訊!注意! 範例: 範例一:找出你的 Linux 是否有安裝 logrotate 這個套件? [root@linux ~]# rpm -q logrotate logrotate-3.7.1-10 [root@linux ~]# rpm -q logrotating package logrotating is not installed # 注意到,系統會去找是否有安裝後面接的套件名稱。注意, # 不必要加上版本喔!至於顯示的結果,一看就知道有沒有安裝啦! 範例二:列出上題當中,該套件的所有目錄與檔案: [root@linux ~]# rpm -ql logrotate /etc/cron.daily/logrotate /etc/logrotate.conf ......以下省略...... # 可以看出該套件到底提供了多少的檔案與目錄。 範例三:列出 logrotate 這個套件的相關說明資料: [root@linux ~]# rpm -qi logrotate Name : logrotate Relocations: (not relocatable) Version : 3.7.1 Vendor: Red Hat, Inc. Release : 10 Build Date: Fri Apr 1 03:54:42 2005 Install Date: Sat Jun 25 08:28:26 2005 Build Host: tweety.build.redhat.com Group : 系統環境/基礎 Source RPM: logrotate-3.7.1-10.src.rpm Size : 47825 License: GPL Signature : DSA/SHA1, Sat May 21 01:34:11 2005, Key ID b44269d04f2a6fd2 Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> Summary : 循環、壓縮、移除以及郵寄系統紀錄檔案。 Description : The logrotate utility is designed to simplify the administration of log files on a system which generates a lot of log files. Logrotate allows for the automatic rotation, compression, removal, and mailing of log files. Logrotate can be set to handle a log file daily, weekly, monthly, or when the log file gets to a certain size. Normally, logrotate runs as a daily cron job. # 列出該套件的 information (資訊),裡面的資訊可多著呢,包括了套件名稱、 # 版本、開發商、SRPM檔案名稱、打包次數、簡單說明資訊、套件打包者、 # 安裝日期等等!如果想要詳細的知道該套件的資料,用這個參數來瞭解一下 範例四:分別僅找出 logrotate 的設定檔與說明檔 [root@linux ~]# rpm -qc logrotate [root@linux ~]# rpm -qd logrotate 範例五:若要成功安裝 logrotate ,他還需要什麼檔案的幫忙? [root@linux ~]# rpm -qR logrotate /bin/sh config(logrotate) = 3.7.1-10 libc.so.6 ....以下省略.... # 由這裡看起來,呵呵~還需要很多檔案的支援才行喔! 範例六:由上面的範例五,找出 /bin/sh 是那個套件提供的? [root@linux ~]# rpm -qf /bin/sh bash-3.0-31 # 這個參數後面接的可是『檔案』吶!不像前面都是接套件喔! # 這個功能在查詢系統的某個檔案屬於哪一個套件所有的。 範例七:假設我有下載一個 RPM 檔案,想要知道該檔案的需求檔案,該如何? [root@linux ~]# rpm -qpR filename.i386.rpm # 加上 -qpR ,找出該檔案需求的資料!常見的查詢就是這些了!要特別說明的是,在查詢本機上面的 RPM 套件相關資訊時, 不需要加上版本的名稱,只要加上套件名稱即可!因為他會由 /var/lib/rpm 這個資料庫裡面去查詢, 所以我們可以不需要加上版本名稱。但是查詢某個 RPM 檔案就不同了, 我們必須要列出整個檔案的完整檔名才行~ 這一點朋友們常常會搞錯。底下我們就來做幾個簡單的練習吧!
例題: 我想要知道我的系統當中,以 c 開頭的套件有幾個,如何實做?
http://web.site.name/path/httpd-x.x.xx.i386.rpm 則我可以這樣做: rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm --replacepkgs
rpm -qf /etc/crontab 就可以知道是那個套件囉!重新安裝一次該套件即可! |
[root@linux ~]# rpm -Va [root@linux ~]# rpm -V 已安裝的套件名稱 [root@linux ~]# rpm -Vp 某個 RPM 檔案的檔名 [root@linux ~]# rpm -Vf 在系統上面的某個檔案 參數: -V :後面加的是套件名稱,若該套件所含的檔案被更動過,才會列出來; -Va :列出目前系統上面所有可能被更動過的檔案; -Vp :後面加的是檔案名稱,列出該套件內可能被更動過的檔案; -Vf :列出某個檔案是否被更動過~ 範例: 範例一:列出你的 Linux 內的 logrotate 這個套件是否被更動過? [root@linux ~]# rpm -V logrotate # 如果沒有出現任何訊息,恭喜你,該套件沒有被更動過。 # 如果有出現任何訊息,才是有出現狀況啊! 範例二:查詢一下,你的 /etc/crontab 是否有被更動過? [root@linux ~]# rpm -Vf /etc/crontab S.5....T c /etc/crontab # 瞧!因為有被更動過,所以會列出被更動過的資訊!好了,那麼我怎麼知道到底我的檔案被更動過的內容是什麼?呵呵!簡單的說明一下吧! 例如,我們檢查一下 logrotate 這個套件:
[root@linux ~]# rpm -ql logrotate /etc/cron.daily/logrotate /etc/logrotate.conf /etc/logrotate.d /usr/sbin/logrotate /usr/share/doc/logrotate-3.7.1 /usr/share/doc/logrotate-3.7.1/CHANGES /usr/share/man/man8/logrotate.8.gz /var/lib/logrotate.status # 呵呵!共有八個檔案啊! [root@linux ~]# rpm -V logrotate ..5....T c /etc/logrotate.conf # 上面的資訊是這樣的: S :file Size differs 檔案的容量大小是否被改變 M :Mode differs (includes permissions and file type) 檔案的類型或檔案的屬性,如是否可執行等參數已被改變 5 :MD5 sum differs MD5 這一種加密防駭的屬性已被改變 D :Device major/minor number mis-match 裝置名稱已被改變 L :readLink(2) path mis-match Link 屬性已被改變 U :User ownership differs 檔案的所屬人已被改變 G :Group ownership differs 檔案的所屬群組已被改變 T :mTime differs 檔案的建立時間已被改變所以,如果當一個檔案所有的資訊都被更動過,那麼他的顯示就會是:
SM5DLUGT c filename至於那個 c 代表的是『 Config file 』的意思,也就是檔案的類型,檔案類型有底下這幾類:
[root@linux ~]# rpm --import /usr/share/rhn/RPM-GPG-KEY
一般來說,您的 Linux distributions 都會釋出自己的 GPG Key 的,如果是 Red Hat 系統的話,
可以使用:
[root@linux ~]# locate GPG-KEY
來進行搜尋檔案的工作,至於這些金鑰的內容,我們可以這樣查詢喔:[root@linux ~]# rpm -qa | grep gpg libgpg-error-1.0-2 gpg-pubkey-4f2a6fd2-3f9d9d3b [root@linux ~]# rpm -qi gpg-pubkey-4f2a6fd2-3f9d9d3b Name : gpg-pubkey Relocations: (not relocatable) Version : 4f2a6fd2 Vendor: (none) Release : 3f9d9d3b Build Date: Sat Jun 25 22:13:00 2005 Install Date: Sat Jun 25 22:13:00 2005 Build Host: localhost Group : Public Keys Source RPM: (none) Size : 0 License: pubkey Signature : (none) Summary : gpg(Fedora Project <fedora@redhat.com>) Description : -----BEGIN PGP PUBLIC KEY BLOCK----- Version: rpm-4.4.1 (beecrypt-3.0.0) mQGiBD+dnTsRBACwnlz4AhctOLlVBAsq+RaU82nb5P3bD1YJJpsAce1Ckd2sBUOJD11NUCqH .....中間省略..... =mJAx -----END PGP PUBLIC KEY BLOCK-----這樣就能看到相關的資訊囉! ^_^
[root@linux ~]# rpm -e logrotate <==解安裝 logrotate 套件 [root@linux ~]# rpm --rebuilddb <==重建資料庫
--rebuild | 這個參數會將後面的 SRPM 進行『編譯』與『打包』的動作,最後會產生
RPM 的檔案,但是產生的 RPM 檔案並沒有安裝到系統上。當您使用 --rebuild 的時候,最後通常會發現一行字體: Wrote: /usr/src/RPM/RPMS/i386/pkgname.i386.rpm 這個就是編譯完成的 RPM 檔案囉!那麼這個檔案就可以用來安裝啦!安裝的時候請加絕對路徑來安裝即可! |
--recompile | 這個動作會直接的『編譯』『打包』並且『安裝』囉!請注意, rebuild 僅『編譯並打包』而已,而 recompile 不但進行編譯跟打包,還同時進行『安裝』了! |
/usr/src/redhat/SPEC | 這個目錄當中放置的是該套件的設定檔,例如這個套件的資訊參數、設定項目等等都放置在這裡; |
/usr/src/redhat/SOURCE | 這個目錄當中放置的是該套件的原始檔(*.tar.gz的檔案)以及 config 這個設定檔; |
/usr/src/redhat/BUILD | 在編譯的過程中,有些暫存的資料都會放置在這個目錄當中; |
/usr/src/redhat/RPMS | 經過編譯之後,並且順利的編譯成功之後,將打包完成的檔案放置在這個目錄當中。裡頭有包含了 i386, i586, i686, noarch.... 等等的次目錄。 |
[root@linux ~]# rpm -i /root/rp-pppoe-3.5-30.src.rpm # 這個過程不會顯示任何東西,他只會將 SRPM 的檔案解開後,放置到 # /usr/src/redhat 下! [root@linux ~]# find /usr/src/redhat/ -type f /usr/src/redhat/SOURCES/rp-pppoe-3.5-buildroot.patch /usr/src/redhat/SOURCES/adsl-stop /usr/src/redhat/SOURCES/adsl-start /usr/src/redhat/SOURCES/adsl-setup /usr/src/redhat/SOURCES/rp-pppoe-3.4-redhat.patch /usr/src/redhat/SOURCES/adsl-status /usr/src/redhat/SOURCES/rp-pppoe-3.5-firewall.patch /usr/src/redhat/SOURCES/adsl-connect /usr/src/redhat/SOURCES/rp-pppoe-3.5.tar.gz /usr/src/redhat/SPECS/rp-pppoe.spec # 主要含有原始碼與一個重要的設定檔啊! rp-pppoe.spec !好了,來看看我們的設定參數檔,亦即是在 /usr/src/redhat/SPECS 內的 *.spec 檔案囉!
[root@linux ~]# cd /usr/src/redhat/SPECS [root@linux SPECS]# vi rp-pppoe.spec # 1. 首先,這個部分在介紹整個套件的基本相關資訊!不論是版本還是釋出次數等。 Summary: A PPP over Ethernet client (for xDSL support). Name: rp-pppoe Version: 3.5 Release: 30 License: GPL Group: System Environment/Daemons Url: http://www.roaringpenguin.com/pppoe/ Source: http://www.roaringpenguin.com/rp-pppoe-%{version}.tar.gz Source1: adsl-connect Source2: adsl-setup .....中間省略..... # 2. 這部分則是在設定相依屬性需求的地方! Prereq: /sbin/chkconfig Prereq: /sbin/service Prereq: fileutils Requires: ppp >= 2.4.2 Requires: initscripts >= 5.92 Requires: iproute >= 2.6 ExcludeArch: s390 s390x %description PPPoE (Point-to-Point Protocol over Ethernet) is a protocol used by many ADSL Internet Service Providers. This package contains the Roaring Penguin PPPoE client, a user-mode program that does not require any kernel modifications. It is fully compliant with RFC 2516, the official PPPoE specification. # 3. 編譯前的預處理,以及編譯過程當中所需要進行的指令,都寫在這裡 # 尤其 %build 底下的資料,幾乎就是 makefile 裡面的資訊啊! %prep %setup -q %patch0 -p1 -b .config %patch1 -p1 -b .buildroot %patch2 -p1 -b .ipchains %build cd src autoconf CFLAGS="-D_GNU_SOURCE" %configure make install -m 0755 %{SOURCE1} scripts install -m 0755 %{SOURCE2} scripts install -m 0755 %{SOURCE3} scripts install -m 0755 %{SOURCE4} scripts install -m 0755 %{SOURCE5} scripts %install rm -rf $RPM_BUILD_ROOT .....中間省略..... # 4. 這裡列出,這個套件釋出的檔案有哪些的意思! %files %defattr(-,root,root) %doc doc/LICENSE scripts/adsl-connect scripts/adsl-setup scripts/adsl-init %doc scripts/adsl-start scripts/adsl-status scripts/adsl-stop %doc configs %config(noreplace) %{_sysconfdir}/ppp/pppoe-server-options %config(noreplace) %{_sysconfdir}/ppp/firewall* /sbin/* %{_sbindir}/* %{_mandir}/man?/* # 5. 列出這個套件的更改歷史紀錄檔! %changelog * Mon Aug 15 2005 Than Ngo <than@redhat.com> 3.5-30 - defaultroute should not overridden #152014 .....中間省略..... * Wed May 31 2000 Than Ngo <than@redhat.de> - adopted for Winston.注意到的是rp-pppoe.sepc這個檔案,這是主要的將SRPM編譯成RPM的設定檔,他的基本規則可以這樣看:
Summary | 主要的套件說明,例如上表中,我們說明了他是 ppp 的撥接用途啦! |
Name | 這個就是套件的名稱; |
Version | 這個是套件的版本資訊; |
Release | 這個是該版本打包的次數說明; |
License | 這個套件的授權模式,我們是使用 GPL 啦! |
Group | 這個套件的發展團體名稱; |
Source | 這個套件的來源,如果是網路上下載的套件,通常一定會有這個資訊來告訴大家這個原始檔的來源! |
Url | 這個原始碼的主要官方網站; |
Packager | 這個套件是經由誰來打包的呢? |
Vender | 發展的廠商哪; |
ExclusiveArch | 這個是說明這個套件的適合安裝的硬體,通常預設為 i386,當然,你也可以調整為 i586 啦等等的! |
Requires | 如果你這個套件還需要其他的套件的支援,那麼這裡就必需寫上來,則當你製作成 RPM 之後,系統就會自動的去檢查啦!這就是『相依屬性』的主要來源囉! |
[root@linux ~]# rpmbuild -bb rp-pppoe.spec <==編譯成RPM檔案 [root@linux ~]# rpmbuild -ba rp-pppoe.spec <==打包成SRPM檔案這個時候系統就會這樣做:
[root@linux ~]# cd /usr/src/redhat/SOURCES [root@linux SOURCES]# vi showvbird.sh #!/bin/bash # This file is just used to demo the RPM packaging. # the only thing is showing the hostname. HOST=`/bin/hostname` /bin/echo $HOST # 先隨便建立一個 shell script ,這個是自己的套件的意思啦! [root@linux SOURCES]# chmod 755 showvbird.sh [root@linux SOURCES]# tar -zcvf showvbird.tar.gz showvbird.sh # 注意喔!務必打包才行啊!上面的動作中,我們編輯了一個 shell script 檔案,檔名為 showvbird.sh,並且將他打包成為具有 gzip 壓縮的 tarball 檔案,也就是 showvbird.tar.gz 這樣的檔案才行!請注意,這個 showvbird.tar.gz 檔案『必需』放置在 SOURCES 目錄之下!
[root@linux SOURCE]# cd /usr/src/redhat/SPECS [root@linux SPECS]# vi showvbird.spec Summary: This is a demo RPM package. Name: showvbird Version: 1.0 Release: 1 License: GPL Group: VBird's Home Source: showvbird.tar.gz <==記得喔!這裡寫的是剛剛建立的 tarball Url: http://linux.vbird.org Packager: VBird %description This package is just a demo RPM. %prep %setup -c %install install -m 755 showvbird.sh /usr/local/bin/showvbird.sh %files /usr/local/bin/showvbird.sh好了!開始給他編譯並打包成為 RPM 檔案啦!
[root@linux SPECS]# rpmbuild -bb showvbird.spec .....中間省略...... Requires: /bin/bash Checking for unpackaged file(s): /usr/lib/rpm/check-files %{buildroot} Wrote: /usr/src/redhat/RPMS/i386/showvbird-1.0-1.i386.rpm最後這個被打包成功的檔案就被放置在 /usr/src/redhat/RPMS/i386/showvbird-1.0-1.i386.rpm 囉!然後給他安裝一下:
[root@linux SPECS]# rpm -ivh ../RPMS/i386/showvbird-1.0-1.i386.rpm Preparing... ########################################### [100%] 1:showvbird ########################################### [100%] [root@linux SPECS]# rpm -qi showvbird Name : showvbird Relocations: (not relocatable) Version : 1.0 Vendor: (none) Release : 1 Build Date: Mon Oct 3 11:08:30 2005 Install Date: Mon Oct 3 11:11:30 2005 Build Host: linux.site.tw Group : VBird's Home Source RPM: showvbird-1.0-1.src.rpm Size : 143 License: GPL Signature : (none) Packager : VBird URL : http://linux.vbird.org Summary : This is a demo RPM package. Description : This package is just a demo RPM. [root@linux SPECS]# which showvbird.sh /usr/local/bin/showvbird.sh [root@linux SPECS]# rpm -ql showvbird /usr/local/bin/showvbird.sh <==果然記錄起來了!自己的軟體呢!用很簡單的方式,就可以將自己的軟體或者程式給他修改與設定妥當!很不錯吧! 以後您就可以自行設定你的 RPM 囉!當然,也可以手動修改您的 SRPM 的來源檔內容囉!