BBS水木清华站∶精华区

发信人: stable (xixi), 信区: Linux        
标  题: [转载]大家来做 RPM 
发信站: BBS 水木清华站 (Thu Dec 30 16:51:27 1999) 
 
  
 作者  fuse (保险丝), 信区: UNIX_PALACE 
 标题  [转载] [doc] 大家来做 RPM 
 时间  笑书亭 (Fri Jul 24 07:23:47 1998), 站内信件 
─────────────────────────────────────── 
【 以下文字转载自 Linux 讨论区 】 
【 原文由 marr.bbs@bbs.cs.nccu.edu.tw 所发表 】 
                +--------------+ 
                | 大家来做 RPM | 
                +--------------+    Penelope Marr <marr@nccu.edu.tw> 
○、前言 
 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
 
  打造属於自己的作业系统环境,这应该是许多 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 <marr@nccu.edu.tw> 
 
 □ 其他额外的重要资讯 
 有关 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 <marr@nccu.edu.tw> 
 %description  
 This package is used as a demo for RPM building only. 
 %changelog 
 * Thu Jul 16 1998 Penelope Marr <marr@nccu.edu.tw> 
 - 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 <marr@nccu.edu.tw> 
 Prefix: /usr/local 
 %description 
 This package is used as a demo for RPM building only. 
 %changelog 
 * Fri Jul 17 1998 Penelope Marr <marr@nccu.edu.tw> 
 - make the relocatable package. 
 * Thu Jul 16 1998 Penelope Marr <marr@nccu.edu.tw> 
 - 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 「个人化」「中文化」的理想,变得更容易且有系统, 
 希望您能从中收益良多。 
 -- 
 "The only way you can compete against a monopoly is  
  to change the rules on which the game is played." 
              ---  Robert F. Young 
-- 
※Origin: 猫空行馆 bbs.cs.nccu.edu.tw ◆From: ccs.cc.nccu.edu.tw 
-- 
※ 转载:.笑书亭 bbs.zju.ml.org.[FROM: 210.32.151.168] 
 
-- 
※ 修改:·linuxrat 於 Dec 30 17:01:25 修改本文·[FROM: 202.112.168.252] 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 162.105.138.50] 

BBS水木清华站∶精华区