用 RPM 打包软件,第 1 部分ITeye - 凯时娱乐

用 RPM 打包软件,第 1 部分ITeye

2019年02月28日14时39分28秒 | 作者: 向秋 | 标签: 部分,文件,装置 | 浏览: 2555


您应该看到 RPM 解包这个 tar 文件,编译并装置它。 在 Red Hat 7.1 上,作业目录将是 /usr/src/redhat/BUILD。

终究,RPM 将创立两个 RPM 文件。将在 /usr/src/redhat/SRPMS/indent-2.2.6-1.src.rpm 中创立一个源 RPM 文件,而在 /usr/src/redhat/RPMS/i386/indent-2.2.6-1.i386.rpm 中创立一个二进制 RPM 文件。

源 RPM 文件简略地绑缚了 spec 文件和构建软件包用到的一切源文件和补丁文件。假如您挑选分发它,则其他人能够很容易地用它重建您的软件。二进制 RPM 文件仅包含已编译的软件和怎么装置的信息。

下面总结了在您运转 rpm -ba filename.spec 时,RPM 都做些什么:

读取并解析 filename.spec 文件 运转 %prep 部分来将源代码解包到一个暂时目录,并运用一切的补丁程序。 运转 %build 部分来编译代码。 运转 %install 部分将代码装置到构建机器的目录中。 读取 %files 部分的文件列表,搜集文件并创立二进制和源 RPM 文件。 运转 %clean 部分来除掉暂时构建目录。

spec 文件有几个部分。榜首部分是未符号的;其它部分以 %prep 和 %build 这样的行开端。

头 
榜首部分(未符号)界说了多种信息,其格局相似电子邮件音讯头。

Summary 是一行关于该软件包的描绘。

Name 是该软件包的基名, Version 是该软件的版别号。 Release 是 RPM 自身的版别号 ― 假如修正了 spec 文件中的一个过错并发布了该软件同一版其他新 RPM,就应该增加发行版号。

License 应该给出一些答应术语(如:“GPL”、“Commercial”、“Shareware”)。

Group 标识软件类型;那些企图协助人们办理 RPM 的程序一般依照组列出 RPM。您能够在 /usr/share/doc/rpm-4.0.2/GROUPS 文件看到一个 Red Hat 运用的组列表(假定您装置的 RPM 版别是 4.0.2)。可是您还能够运用那些组名以外的称号。

Source0 、 Source1 等等给这些源文件命名(一般为 tar.gz 文件)。 %{name} 和 %{version} 是 RPM 宏,它们扩展成为头中界说的 rpm 称号和版别。因而,在这个实例中, Source0 被设置为 indent-2.2.6.tar.gz 。

不要在 Source 语句中包含任何途径。缺省情况下,RPM 会在 /usr/src/redhat/SOURCES 中寻觅文件。请将您的源文件仿制或链接到那里。(要使 spec 文件尽量可移植的话,应当尽量防止嵌入自己开发机器上的设想途径。其他开发人员就能够指示 RPM 在其他目录下查找源文件,而不必修正您的 spec 文件。)

描绘 
接下来的部分从 %description 行开端。您应该在这里供给该软件更多的描绘,这样任何人运用 rpm -qi 查询您的软件包时都能够看到它。您能够解说这个软件包做什么,描绘任何正告或附加的装备指令,等等。

Shell 脚本 
下面几部分是嵌入 spec 文件中的 shell 脚本。

%prep 担任对软件包解包。在最常见情况下,您只要用 %setup 宏即可,它会做恰当的工作,在构建目录下解包源 tar 文件。加上 -q项仅仅为了削减输出。

%build 应该编译软件包。该 shell 脚本从软件包的子目录下运转,在咱们这个比如里是 indent-2.2.6 目录,因而这常常与运转 make相同简略。

%install 在构建体系上装置软件包。这好像和 make install 相同简略,但一般要杂乱些。我将在下面解说这点。

文件列表 
%files 列出应该绑缚到 RPM 中的文件,并能够可选地设置答应权和其它信息。

在 %files 中,您能够运用 一次 %defattr 来界说缺省的答应权、一切者和组;在这个示例中, %defattr(-,root,root) 会装置 root 用户具有的一切文件,运用当 RPM 从构建体系绑缚它们时它们所具有的任何答应权。

能够用 %attr(permissions,user,group) 掩盖单个文件的一切者和答应权。

能够在 %files 顶用一行包含多个文件。

能够经过内行中增加 %doc 或 %config 来符号文件。 %doc 通知 RPM 这是一个文档文件,因而假如用户装置软件包时运用 excludedocs ,将不装置该文件。您也能够在 %doc 下不带途径列出文件名,RPM 会在构建目录下查找这些文件并在 RPM 文件中包含它们,并把它们装置到 /usr/share/doc/%{name}-%{version} 。以 %doc 的方式包含 README 和 ChangeLog 这样的文件是个好主意。

%config 通知 RPM 这是一个装备文件。在晋级时,RPM 将会企图防止用 RPM 打包的缺省装备文件掩盖用户细心修正过的装备。

正告:假如在 %files 下列出一个目录名,RPM 会包含该目录下的一切文件。一般这不是您想要的,特别关于 /bin 这样的目录。

这个最基本的 spec 文件有几个问题。最大的问题之一就是您终究在构建体系上实践装置了该产品。而这或许仅仅一个软件测验版别,您或许并不想在构建体系中装置它。

RPM 用一个名为 构建根(build root)的特性来处理这个问题。它的主意是设置您的 spec 文件,以将一切装置的文件仿制到一个虚拟目录树(从构建根开端);然后 RPM 从那里得到文件。

可是,这需求一些软件包的支撑。在包含 indent 在内的许多 GNU 软件包中,在 make install 的时分界说 DESTDIR 将会在一切装置途径之前增加 DESTDIR 值。

请注意 不要运用 ./configure prefix=$RPM_BUILD_ROOT 。这会在假定整个软件包文件的终究方位是构建根的情况下装置整个软件包。这关于 indent 或许没有关系,但任何需求在运转时找到其装置文件的程序都将失利,由于当 RPM 终究装置到用户体系后,这些文件就不再坐落构建根之下 ― 那仅仅您构建体系上的一个暂时目录。

请参阅更新的文件 ,如下所示。



版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯时娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2
  • 3

    linux 了解过的指令ITeye

    检查,文件,运用
  • 4

    epoll水平触发边际触发ITeye

    形式,数据,事情
  • 5

    OpenVPN 装置进程ITeye

    客户端,运转,装备
  • 6

    OpenVPN 装置进程ITeye

    客户端,运转,装备
  • 7

    ArchLinux无线网络装备ITeye

    无线,体系,网卡
  • 8
  • 9

    aliasITeye

    别号,设置,指令
  • 10

    vmware中装置centos6ITeye

    装置,文件,选项