选择显示字体大小

大家来做 rpm

○、前言
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
打造属於自己的作业系统环境,这应该是许多 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 「个人化」「中文化」的理想,变得更容易且有系统,
希望您能从中收益良多   


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons