歡迎您光臨本站 註冊首頁

大家來做 RPM

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  ○、前言
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
打造屬於自己的作業系統環境,這應該是許多 Linux 玩家的夢想, 如今,隨著 Red Hat Linux 與 RPM 系統漸受大家重視,實現夢想 的過程似乎不再那麽痛苦了。「前人種樹,後人乘涼」,您是否在 乘涼享受之餘,心中也曾升起一股熱忱,希望「好東西能和好朋友分享」? 期待本文有機會提供指引功能,透過拋磚引玉的效果,讓網路上更多的 Linux 同好,能夠一起貢獻心力。

一、準備工作
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
什麽是 RPM
如果您當真還不知道,或是不清楚「什麽是 RPM」,很抱歉,您應該另外先做完下列的功課:
1. 讀過 RPM-HOWTO 對於 RPM 的簡介部份,中譯的 RPM-HOWTO 一文 可由 http://www.linux.org.tw/CLDP/RPM-HOWTO.html 取得。 請先讀完前三章。
2. 實際安裝過 Red Hat Linux,這是提供 RPM 系統的最佳作業平台 ,並能讓您感受整個 RPM 運作的概況。

註:如果您事先已熟悉 Debian Linux 之 dpkg 系統,那麽請放心,RPM 應該會比 dpkg 來得容易,能夠熟悉 Debian Linux 的朋友,相信早已完全涵蓋上述的基本功夫。
帶著您的武器我們準備上路了,因此您必須檢查下列的「隨身武器」,要是缺了任何一項,很抱歉,請務必補齊:
1. 至少一個順手的編輯器,寫程式用的。
2. 熟悉 bash/ksh script 語法,其重要性真的難以言喻。
3. 熟悉諸如 grep、 sed、 awk、 install、 ldconfig 等工具程式的使用,多多益善。
4. 熟悉 rpm 程式之四大基本功能:install、 upgrade、 query、 verify
5. 基本 C 語言編譯技巧,至少包括 Makefile 寫作概念,diff、patch 的使用。

註:究竟該具備多少 C 語言的相關技巧,這點我也說不上來,嚴格地講,在下也是程式白痴一個。所以,視情況而定吧。如果您希望製作難度高的包裹檔案,那麽高超的編譯除錯技巧,勢必需要,如果原始碼的作者,早就寫好一份完美的 Makefile,那麽直接 make、make install,倒也全不費功夫。或許有人專精 Perl、Python、Tk/Tcl、Java 之類的語言,這原本也是好事,特別是在製作這類與「另類語言」相關的包裹檔案時,您應該會倍感親切。不過,再次強調,shell script 是 RPM 的基本語言,而 C 則是 RPM 的常態語言,像 Perl、Python、Tk/Tcl、Java 雖然也能解決幾乎所有問題,但考慮可攜性與程式體積,您不可不三思啊。而且,別小看 grep、sed、awk這些小型工具,它們與 bash 搭配的威力,應該可以滿足所有 RPM 製作時的需要。

二、參考資料
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
或許 RPM-HOWTO 應該是第一份需要參考的文件,不過在下建議「目的僅在獲得基本概念」,或者說,您若能從頭讀完本文件,八成也能夠了解 RPM-HOWTO 的內容,因為我已經嘗試在本文中,想像「以一種您能理解吸教收的方式」來重述 RPM-HOWTO 的要點。當然,您也可以抱怨中文版 RPM-HOWTO 譯得太糟糕,致使聰明如您有看沒有懂。這樣的說法,在下確實能夠體會,因為 RPM-HOWTO 也是由在下執筆中譯,老實說,當初譯完後的我,也不敢妄稱了解 RPM。
Maximum RPM 則是在下力薦的「寶典」,這應該是現存最詳盡完整的RPM 專書,深入淺出帶領讀者了解 RPM 系統。該書原本是 Red Hat公司的出版品,由 Ed Bailey 所撰寫,熱心慷慨的他,額外在網路上放了 PostScript 檔供人下載,且讓我們獻上最高的敬意吧。整份PostScript 檔若列印出來,共計四百餘頁,有心專研者,可以考慮印下,不然,則可以用 ghostscript 線上閱讀。如果您想直接購買書籍,可以前往 http://www.redhat.com/ 查詢。Http://www.rpm.org/ 與 RPM 之 mailing list,內行的都知道 :-)

三、製作 RPM 的流程大綱
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
建造 RPM 包裹檔案的基本步驟如下:
1. 確定您的 /etc/rpmrc 已經符合系統所需,完成設定。
2. 取回所要建造的 source code。
3. 進行所需的 source 檔案 patch 動作, 以使得我們能順利地build 整個程式。
4. 為包裹檔案撰寫一份 spec 檔案。
5. 確認每個檔案都在正確的目錄位置。
6. 使用 RPM 來 build 整個包裹檔案。

/etc/rpmrc 檔案
RPM 系統的控制檔,system-wide 的設定檔是 /usr/lib/rpmrc,而customized 的設定檔則是 /etc/rpmrc。一般而言,/usr/lib/rpmrc檔案的內容完全無須去更動,如果有任何新設定,請寫在 /etc/rpmrc裡頭,因為它會「蓋過」 /usr/lib/rpmrc 的設定值。下列是我的/etc/rpmrc 檔案範例:
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
# /etc/rpmrc #
# #
# Local customizations are made to override /usr/lib/rpmrc. #
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
distribution: Manhattan
require_distribution: 1
vendor: twLUG
require_vendor: 1
packager: Penelope Marr

其他額外的重要資訊
有關 RPM 包裹檔案的製作流程,事實上還有許多重要的細節,必須牢記在心,這部份請先行參考 RPM-HOWTO 里 [Building RPMs] 說明。

四、一個最簡單的範例
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
讓我們由一個 helloworld 的 RPM 包裹檔案學起吧,保證簡單到辣翻天。您可以照著整個範例,自行演練一番,由於它們既小又簡單,應該不致於對您的系統造成任何影響。

咱們「清純」的 source
假設狀況:
這個 helloworld-1.0-1.tgz 檔案里就只有兩個檔案,一個是 README,內容如下 ( 其實內容一點也不重要 ):Simple Example for RPM Package Building DEMO.一個是 helloworld.c ,內容如下 ( 因陋就簡啦,反正這也不重要 ):
main()
{
printf("Hello, World\n");
}
好的,你必須把這個 tgz 檔案放在 /usr/src/redhat/SOURCES 底下。

編寫 spec 檔案
必須在 /usr/src/redhat/SPECS 底下編寫 helloworld-1.0-1.spec,
內容範例:
Summary: Simple Example for RPM Building DEMO.
Name: helloworld
Version: 1.0
Release: 1
Copyright: Open Source
Group: Extensions/Chinese
Source: helloworld-1.0-1.tgz
Packager: Penelope Marr
%description
This package is used as a demo for RPM building only.
%changelog
* Thu Jul 16 1998 Penelope Marr
- build for the first time.
%prep
%setup -c
%build
make helloworld
%install
install -m 755 helloworld /usr/local/bin/helloworld
%files
%doc README
/usr/local/bin/helloworld

□ 啟動 rpm -ba ...
Example# cd /usr/src/redhat/SPECS
example# rpm -ba helloworld-1.0-1.spec 1> /tmp/out 2> /tmp/err

這種方式,可以方便我們更容易掌握相關資訊。

五、製作「可隨處安裝」的包裹檔案
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
所謂「relocatable package」,在下將之稱為「可隨處安裝的包裹檔案」,相關的詳細說明,可以參考 Maximum RPM 第十五章。由於多了 Prefix 的設定功能,使得這類的包裹檔案附加更大的彈性,非常實用,但同時,也額外增加包裹檔案製作的難度。
內容範例:
Summary: Simple Example for RPM Building DEMO.
Name: helloworld
Version: 1.0
Release: 2
Copyright: Open Source
Group: Extensions/Chinese
Source: helloworld-1.0-1.tgz
Packager: Penelope Marr
Prefix: /usr/local
%description
This package is used as a demo for RPM building only.
%changelog
* Fri Jul 17 1998 Penelope Marr
- make the relocatable package.
* Thu Jul 16 1998 Penelope Marr
- build for the first time.
%prep
%setup -c
%build
make helloworld
%install
install -m 755 helloworld /usr/local/bin/helloworld
%files
%doc README
/usr/local/bin/helloworld

□ 啟動 rpm -ba ...
Example# cd /usr/src/redhat/SPECS
example# rpm -ba helloworld-1.0-1.spec 1> /tmp/out 2> /tmp/err
example# rpm -ba helloworld-1.0-1.spec 1> /tmp/out 2> /tmp/err
這樣完成的 rpm 檔案,於安裝時,可以加 --prefix 參數,使得它安裝至我們希望的其他目錄下。
Example# rpm -Uvh -v --prefix /root helloworld-1.0-1.i386.rpm

六、進階技巧
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
「模仿」很重要,特別是仿效別人的精典之作,往往可以獲得不少經驗,觸發許多靈感。SRPM 檔案則是學習模仿的最佳工具,在下自個兒收集了超過一千八百個 SRPM 檔案,從別人的 spec 檔案中,確實可以□清許多盲點。
前面咱們只介紹了兩個簡單的範例,目的僅在引介 RPM 的製作流程,本身並沒有什麽難度。其他進階的技巧,諸如「其他有用的 spec 標籤」「多重包裹檔案的製作」「相依關係」「設定 Build Root」「增加 PGP簽證功能」「Subpackage 的製作」,每個項目都相當精采。充份了解後,不但可以製作包裹檔案,自娛娛人,還可以藉此了解 Red Hat Linux的架構,一兼二顧,摸蛤兼洗褲。

自製 RPM 讓 Linux 「個人化」「中文化」的理想,變得更容易且有系統,
希望您能從中收益良多


[火星人 ] 大家來做 RPM已經有518次圍觀

http://coctec.com/docs/linux/show-post-69995.html