📄 rpm-howto.txt
字号:
* 进行所需的 source 档案 patch 动作, 以使得我们能顺利地 build 整个程 式。 * 为程式套件撰写一份 spec 档案。 * 确认每个档案都在正确的目录位置。 * 使用 RPM 来 build 整个程式套件。 如果一切操作正确, RPM 便能顺利 build 完成 binary 与 source 程式套件。 6.1 The rpmrc File 目前为止, RPM 系统唯一的设定档, 是透过 /etc/rpmrc 档案来管理。 其内容 □例如下: require_vendor: 1distribution: I roll my own!require_distribution: 1topdir: /usr/src/mevendor: Mickiesoftpackager: Mickeysoft Packaging Account <packages@mickiesoft.com>optflags: i386 -O2 -m486 -fno-strength-reduceoptflags: alpha -O2optflags: sparc -O2signature: pgppgp_name: Mickeysoft Packaging Accountpgp_path: /home/packages/.pgptmppath: /usr/tmp 档案中的 require_vendor 这一行叙述, 用以控制 RPM 是否须要找寻 vendor 那一行叙述, 而 verdor 的资讯可能来自 /etc/rpmrc 或是 spec 档案的 header 处。 如果您把上述的号码改为 0, 便能把这项寻找功能关闭。 这样的 设定方式, 同样适用於 require_distribution 与 require_group 的叙述上。 接下来, 我们看到 distribution 这一行, 您可以在此设定, 或是日後在 spec 档案的 header 处设定。 当我们在某个 distribution 上 build 程式套件 时, 就算不需要查询设定, 此行内容的设定正确, 也是能够带来许多便利。 vendor 那一行的作用, 和上述的 distribution 非常相似, 但其内容并不限定 ( 例如是 Joe's Software 或 Rock Music Emporium )。 RPM 目前支援「多平台架构」的程式套件 build 功能, 我们可以在 rpmrc 档案 里指定 ``optflags'' 变数, 当进行程式套件 build 动作时, 便可依据所需的 平台类型, 应用特定的变数内容。 我们将会在接下去的章节里, 说明如何使用 这些变数。 除了上述的 macro 设定外, 还有许多其他的设定方式, 您可以使用: rpm --showrc 来查看系统的 tag 与可供使用的 flag 有哪些。 6.2 The Spec File 在此我们将讨论 spec 档案的设定。 build 一个程式套件时, 我们需要使用到 spec 档案, 其内容为该程式套件的说明, 额外还包括一些指令, 用以指示整 个 build 的过程, 还有一份档案列表, 用以表示程式套件中的档案, 分别被 安装到哪里。 spec 档案的命名方式, 最好是遵循标准的惯例, 其格式应该为 package name-dash-version number-dash-release number-dot-spec。 这里我们举一个小型的 spec 档案为例 (vim-3.0-1.spec): Summary: ejects ejectable media and controls auto ejectionName: ejectVersion: 1.4Release: 3Copyright: GPLGroup: Utilities/SystemSource: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gzPatch: eject-1.4-make.patchPatch1: eject-1.4-jaz.patch%descriptionThis program allows the user to eject media that is autoejecting likeCD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.%prep%setup%patch -p1%patch1 -p1%buildmake RPM_OPT_FLAGS="$RPM_OPT_FLAGS"%installinstall -s -m 755 -o 0 -g 0 eject /usr/bin/ejectinstall -m 644 -o 0 -g 0 eject.1 /usr/man/man1%files%doc README COPYING ChangeLog/usr/bin/eject/usr/man/man1/eject.16.3 The Header 档案 header 的部份, 有几个特定的栏位内容, 您必须加以设定完成, 另外还 有几点注意事项。 您必须设定完成的栏位内容如下: * Summary: 以一行长度的描述, 来说明程式套件的内容。 * Name: 这个档案名称必须与您准备使用的 rpm 档名一致。 * Version: 这个版本名称必须与您准备使用的 rpm 档名一致。 * Release: 这个发行序号必须与您准备使用的 rpm 档名一致。 ( 也就是说, 如果我们完成一个程式套件, 但事後发现它有些小小的问题, 必须重新 build 一次, 此时新的程式套件, 其发行序号便是 2 号 )。 * Icon: 如果您使用了其他高阶的安装工具程式 ( 像是 Red Hat 的 ``glint'' 程式 ), 那麽这里可以指定其相对应的图示档, 它必须是一个 gif 档案, 而且必须位於 SOURCES 目录。 * Source: 这里指定了那些「未经处理过的 source 档案」的 HOME 目录, 当 您想要重新取得 source 档案, 或是检察是否有新版本时, 就需要用到这 个设定。 注意事项: 这里的档名, 「务必」与您系统上的档案名称一致 ( 也就是说, 下载 source 档案後, 不要去变更其档案名称 )。 同时, 您可以指定一个以上的 source 档案, 方式如下: Source0: blah-0.tar.gzSource1: blah-1.tar.gzSource2: fooblah.tar.gz 这些档案都会到 SOURCES 目录底下 ( 相关的目录结构说明, 会在後面的 "The Source Directory Tree" 章节里加以讨论 )。 * Patch: 如果您需要重新下载 patch 档案, 那麽其目录位置设定於此。 注 意事项: 这里的档名, 必须与您系统上使用的 patch 档案名称相符, 另 一方面, 和前述多个 source 档案的设定一样, 您也可以指定多个 patch 档案名称。 其格式□例如下: Patch0: blah-0.patchPatch1: blah-1.patchPatch2: fooblah.patch 这些档案都会到 SOURCES 目录底下。 * Copyright: 这里的设定, 用以说明程式套件采用何种版权声明。 像 GPL、 BSD、 MIT、 public domain、 distributable、 commercial 等, 都是您 可以指定的。 * BuildRoot: 您可以指定一个目录, 它会被当作是 build 与 install 新程 式套件的 ``root'' 目录, 如果您想在实际安装之前, 先行测试程式内容 , 可以善用此项设定。 * Group: 这里的设定, 用於高阶的安装工具程式 ( 例如 Red Hat 的 ``glint'' 程式 ) 当中, 用以说明程式所属的群组位置。 目前的群组架构 , 大致如下所述: Applications Communications Editors Emacs Engineering Spreadsheets Databases Graphics Networking Mail Math News Publishing TeXBase KernelUtilities Archiving Console File System Terminal TextDaemonsDocumentationX11 XFree86 Servers Applications Graphics Networking Games Strategy Video Amusements Utilities Libraries Window ManagersLibrariesNetworking Admin Daemons News UtilitiesDevelopment Debuggers Libraries Libc Languages Fortran Tcl Building Version Control ToolsShellsGames * %description 这个并非真的是 header 项目, 但您应该连同上述的项目一 同填写, 每个「程式套件」或「子程式套件」, 都应该有一个 description tag。 这里允许您输入多行内容, 使得程式套件能够具有一份 完整详尽的说明。 6.4 Prep 这里是 spec 档案的另一个段落章节, 用以设定让 source 档案就绪, 以供下 一步的 build 动作。 平常我们必须经过 setup, 才能实际进行 make 动作, 因此在本段落章节中, 我们将视需要进行 source 档案的 patch 与 setup。 有件事值得注意的: 接下来的段落设定, 实际上只是指明某段 shell scripts 的位置, 您可以将 shell scripts 的内容, 另外以 sh script 的方式加以存 档, 并将 script 程式名称置於 %prep tag 之後, 用以执行 source 档案的 unpack 与 patch 动作。 当然, 以原有之 macro 型式来做, 应该是方便许多 的。 第一个要说明的 macro 是 %setup。 如果我们采用其最简单的格式 ( 即不加任 何命令列参数的情况 ), 它会单纯地将 source 档案加以 unpack, 并 cd 进入 source 档案的目录。 除此之外, 您还可以使用下列的选项: * -n name 这个选项设定会把 build 的目录设为 name, 原预设值为 $NAME-$VERSION, 其他可能目录名称包括 $NAME, ${NAME}${VERSION}, 或是 tar 档案本身所用的目录。 ( 请注意到, 上述的 ``$'' 变数, 并不 是 spec 档案里的变数, 它们在这里只是用来代表一个□例名称, 您必须 在程式套件里, 使用实际的档案名称与版本名称 )。 * -c 在进行 untar 动作之前, 会先建立一个目录, 并 cd 进入该目录。 * -b # 在 cd 进入该目录之前, 会先将 Source# 进行 untar 动作 ( 这个选 项与 -c 选项并存时, 是没有意义的, 所以应避免同时使用 ), 而且这个 选项, 仅适用於多个 source 档案的场合。 * -a # 在 cd 进入该目录之後, 再将 Source# 进行 untar 动作。 * -T 这个选项会盖过原本预设的 untar 动作, 同时需要一个 -b 0 或是 -a 0 的选项来配合, 当您使用到两个以上的 source 档案时, 便需要此项功 能。 * -D 在解开程式套件之前, 不要删除该目录。 这个选项仅适用於使用两个以 上 setup macro 之场合, 而且只能用於第一个 setup macro 之後 ( 千万 别用於第一个之内 )。 接下来要说明的 macro 是 %patch。 它是用来协助自动处理 source 档案更新的 动作, 其相关的选项很多, 列表说明如下: * # 会引用 Patch# 当作其所需之更新档。 * -p # 有时 patch(1) 指令需配合指定 strip 的目录数目, 你可以在此选项 中加以设定。 * -P 其预设之动作是引用 Patch ( 或 Patch0 ), 当您使用两个以上的 %patch macro, 并且需要与第一个 macro 不同之 patch number 时, 这个 选项显得相当有用。 它会盖过原本的预设动作, 并且需要配合一个 0, 以 使得主要的 source 档案得以进行 untar 动作。 * 您也可以使用 %patch#, 而不必使用这样的指令: %patch # -P 这些应该就是全部所需要知道之 macro 说明, 了解它们之後, 您也可以透过 sh 之 script 格式, 设定不同的 setup 方法, 在 %build macro ( 在下一章 节中会提及 ) 之前, 您所设定之所有选项, 都是经由 sh 来执行, 您可以再 参考一下前述的□例, 或许可以适用於您的需要。 6.5 Build 这个章节里, 所述及的并非真正的 macro。 当您把 source 档案 untar, 并且 patch 完成, cd 进入目录之後, 开始准备 build 动作时, 便是在这里设定那 些控制 build 动作的指令。 而这些指令都还是传给 sh, 所以任何 sh 之指令 , 都可以在此指定 ( 包括 comments 在内 )。 在 spec 档案里的每一段落章节 设定中, 您的目前所在目录位置, 都会被重新设定为 source directory 的最 上层, 所以请牢记在心, 必要时, 您可以 cd 进入相关的子目录。 6.6 Install 这里所设定的, 同样也不是 macro, 基本上, 您只须要在此设定一些 install 所需之指令。 如果您打算在程式套件里, 提供完整的 make install 指令设定, 那麽请在本段落设定中完成, 不然, 您也可以更改 makefile 档案
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -