如何包装发布Kylix的软件!(50分)

  • 主题发起人 ★可乐∮
  • 开始时间

★可乐∮

Unregistered / Unconfirmed
GUEST, unregistred user!

雁孤行

Unregistered / Unconfirmed
GUEST, unregistred user!
现在流行的Linux版本一般都用rpm方式来安装软件,你可以看看下面这篇文章。
标题:大家来做 RPM 发布者:flyfox 发布时间:09月12日
详细信息:
+--------------+
| 大家来做 RPM |
+--------------+ Penelope Marr
○、前言
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
打造属於自己的作业系统环境,这应该是许多 Linux 玩家的梦想,
如今,随著 RPM 系统渐受大家重视,实现梦想
的过程似乎不再那麽痛苦了。「前人种树,後人乘凉」,您是否在
乘凉享受之馀,心中也曾升起一股热忱,希望「好东西能和好朋友
分享」? 期待本文有机会提供指引功能,透过抛砖引玉的效果,让
网路上更多的 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.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/Linux/SOURCES 底下。
□ 编写 spec 档案
必须在 /usr/src/Linux/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/Linux/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/Linux/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

 
V

Vinson

Unregistered / Unconfirmed
GUEST, unregistred user!
这么麻烦!
 
H

hz008

Unregistered / Unconfirmed
GUEST, unregistred user!
O

OopsWare

Unregistered / Unconfirmed
GUEST, unregistred user!
to 雁孤行:
Kylix编译出来的东西好像不能直接运行,还要给她写个象 startkylix.sh
一样的启动脚本吗?
 
S

shirong

Unregistered / Unconfirmed
GUEST, unregistred user!
Z

zyf23

Unregistered / Unconfirmed
GUEST, unregistred user!
F

fbc-gc

Unregistered / Unconfirmed
GUEST, unregistred user!
写startkylix.sh也不行!因为startkylix.sh是把kylix的bin目录export到lib_path里.所以
写了也没用,因为客户不一定装了kylix.所以要把你程序所缺的库文件和你的程序一起打包发布
真不明白,borland为什么没有实现当初的诺言!
 
J

jrq

Unregistered / Unconfirmed
GUEST, unregistred user!
F

felong11

Unregistered / Unconfirmed
GUEST, unregistred user!
R

roc

Unregistered / Unconfirmed
GUEST, unregistred user!
Linux下的InstallShield--KInstallBuilder
http://kylix.linuxaid.com.cn
 
顶部