构建 RPM 相当容易,特别是当您能够让您尝试打包的软件自行构建时。这里我们假设您知道如何从源代码构建软件。如果您不知道,您可能不应该从本文档开始。
我们将从讨论 spec 文件开始。构建软件包需要 spec 文件。spec 文件是对软件的描述,以及关于如何构建它的说明和所有已安装二进制文件的文件列表。
这是一个小的 spec 文件 (eject-2.0.2-1.spec)
Summary: A program that ejects removable media using software control. Name: eject Version: 2.0.2 Release: 3 Copyright: GPL Group: System Environment/Base Source: http://metalab.unc.edu/pub/Linux/utils/disk-management/eject-2.0.2.tar.gz Patch: eject-2.0.2-buildroot.patch BuildRoot: /var/tmp/%{name}-buildroot %description The eject program allows the user to eject removable media (typically CD-ROMs, floppy disks or Iomega Jaz or Zip disks) using software control. Eject can also control some multi- disk CD changers and even some devices' auto-eject features. Install eject if you'd like to eject removable media using software control. %prep %setup -q %patch -p1 -b .buildroot %build make RPM_OPT_FLAGS="$RPM_OPT_FLAGS" %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/usr/bin mkdir -p $RPM_BUILD_ROOT/usr/man/man1 install -s -m 755 eject $RPM_BUILD_ROOT/usr/bin/eject install -m 644 eject.1 $RPM_BUILD_ROOT/usr/man/man1/eject.1 %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %doc README TODO COPYING ChangeLog /usr/bin/eject /usr/man/man1/eject.1 %changelog * Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com> - auto rebuild in the new build environment (release 3) * Wed Feb 24 1999 Preston Brown <pbrown@redhat.com> - Injected new description and group. [ Some changelog entries trimmed for brevity. -Editor. ] |
头部有一些您需要填写的标准字段。也有一些注意事项。字段必须按如下方式填写:
发行版: 这是同一软件包版本的发行号(即,如果我们制作了一个软件包,发现它有点问题,需要再次制作,则下一个软件包将是发行号 2)。
Source0: blah-0.tar.gz Source1: blah-1.tar.gz Source2: fooblah.tar.gz |
Patch0: blah-0.patch Patch1: blah-1.patch Patch2: fooblah.patch |
Amusements/Games Amusements/Graphics Applications/Archiving Applications/Communications Applications/Databases Applications/Editors Applications/Emulators Applications/Engineering Applications/File Applications/Internet Applications/Multimedia Applications/Productivity Applications/Publishing Applications/System Applications/Text Development/Debuggers Development/Languages Development/Libraries Development/System Development/Tools Documentation System Environment/Base System Environment/Daemons System Environment/Kernel System Environment/Libraries System Environment/Shells User Interface/Desktops User Interface/X User Interface/X Hardware Support |
BuildRoot: 这一行允许您指定一个目录作为构建和安装新软件包的“根目录”。您可以使用它来帮助测试您的软件包,然后再将其安装到您的机器上。
%description 它实际上不是头部项,但应该与头部的其余部分一起描述。每个软件包和/或子软件包都需要一个 description 标签。这是一个多行字段,应该用于提供软件包的全面描述。
这是 spec 文件中的第二个部分。它用于使源代码准备好构建。在这里,您需要执行任何必要的操作,以使源代码像需要设置的那样进行补丁和设置,以执行 make。
这些宏中的第一个是 %setup 宏。在其最简单的形式(没有命令行选项)中,它只是解包源代码并 cd 进入源代码目录。它还接受以下选项:
-b #将在 cd 进入目录之前 解 tar Source#(这与-c没有意义,所以不要这样做)。这仅在有多个源文件时有用。
-T此选项覆盖解 tar Source 的默认操作,并且需要-b 0或-a 0来解 tar 主源文件。当有辅助源时,您需要这个。
-D解包前不要删除目录。这仅在您有多个 setup 宏时有用。它仅应在第一个 setup 宏之后的 setup 宏中使用(但永远不要在第一个中使用)。
此部分实际上没有任何宏。您只需在此处放置您在解压源代码、打补丁并 cd 进入目录后构建软件所需的任何命令。这只是传递给 sh 的另一组命令,因此任何合法的 sh 命令都可以放在这里(包括注释)。
![]() | 您当前的工作目录在每个部分中都重置为源代码目录的顶层,因此请记住这一点。如果需要,您可以 cd 进入子目录。 |
您可以放入在二进制软件包的安装和卸载之前和之后运行的脚本。这样做的主要原因是执行诸如在安装或删除包含共享库的软件包后运行 ldconfig 之类的操作。每个脚本的宏如下: