本文共 4104 字,大约阅读时间需要 13 分钟。
创建 RPM
RPM 创建相当简单, 你只需要获得软件源码就可以尝试创建 创建 RPM 步骤通常分为: 1. 获得需要创建 RPM 的源码 2. 获得对应补丁 3. 创建 spec 文件 4. 确保一切文件放置在合适位置 5. 创建 RPM 通常操作, RPM 都会创建二进制与源码包spec 文件
我们会对 spec 文件进行讨论, spec 文件用于创建软件包, 用于描述如何创建软件并定义编译后, 定义二进 制文件安装位置, 定义文件列表等信息spec 文件需要按照标准格式进行命名, packagename-version-release.spec 假如你具有一个软件包的多个
版本, 确保你每个源码都具有完整的 spec 文件spec 文件命名规则例: eject-2.0.2-1.spec
Summary: A program that ejects removable media using software control. Name: sniffer Version: 2.1.4.9 Release: 3 Copyright: GPL Group: System Environment/Base Source: Patch: BuildRoot: $RPM_SOURCE_DIR%description
The sniffer program use to ...%prep
%setup -q%build
make%install
rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/usr/bin mkdir -p $RPM_BUILD_ROOT/usr/man/man1install -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
* 2012-03-03 <> - auto rebuild in the new build environment (release 3)
spec 文件中, 具有下面的一些语法标准, 你必须按照标准使用
Summary: 软件包的描述, 只能够使用一行
Name: 打算编译后的 RPM 软件包命名
Version: 打算编译后的 RPM 版本字符串
Release: 编译后的 RPM 版本发行号
Copyright: 版权, 常见有 GPL, BSD, MIT, public domain, distributable, 或 commercial.
Group: 组工具(能够被 YUM 调用)
Source: 通常定义软件下载来源, 便于以后更新
Patch: 描述补丁下载来源, 便于以后更新
注意: Patch, source 文件都需要存放到 SOURCE 目录中才能够被编译时发现
Group: 参考 /usr/share/doc/rpm*/GROUPS 文件, 代表软件属于软件库中的那个组
BuildRoot: 定义软件包编译, 安装的根目录
%description 不属于 header 部分, 用于综合描述软件功能, 你可以用于描述包信息, 允许使用多行信息
%prep 属于 spec 第二部分, 用于定义打补丁, 配置并编译源码 有一点需要注意: 这个章节中会执行 shell 脚本, 你只需要创建 sh 脚本, 并存放到 %prep 之后, 并调用 macro 宏编译 第一个 macro 是 %setup, 用于解压并进入到源码目录, 常见选项有
-n name 将会把 name 作为编译目录, 默认是 packagename-version 或者 {NAME}{VERSION}
-c 将会在解压软件后自动进入目录 -b 只用于在多个源码文件时候, 直接解压, 不进入目录 -a 进入目录后再解压源码 -T 假如这是第二个源码则需要使用, 意味着覆盖默认解压源码操作, 并需要 -b 0 或 -a 0 对主程序解压 -D 在解压后不删除软件包, 如果需要多次 %setup 配置时, 可以使用 第二个 macro 是 %patch 用于为源码进行打补丁, 可以参数如下不带参数, 则直接应用该补丁
-p 定义目录位置, 如 /u/howard/src/blurfl/blurfl.c 文件 -p0 -> /u/howard/src/blurfl/blurfl.c -p1 -> u/howard/src/blurfl/blurfl.c -p4 -> blurfl/blurfl.c -b 将会保留打补丁前文件为 filename.extension 假如上述宏定义正确, 你可以配置 sh 脚本, 脚本需要利用 %build 宏进行执行, 参考下面例子 之前已经描述对软件进行解压, 打补丁, 并进入到源码目录 当前部分中不需要任何宏定义, 你只需要定义有效脚本, 并由 sh 执行合法的命令(包括注释)你当前工作的目录会在源码的根目录中,假如需要, 你可以 cd 到子目录中
变量 RPM_OPT_FLAGS 调用 /usr/lib/rpm/rpmrc 变量, 用于定义机器架构, 该变量属于可选变量
安装 不需要使用任何宏定义, 你只需要定义安装时必须的命令, 可以对软件包进行安装, 或者对 makefile 打 补丁, 也可以调用 sh 脚本, 注意, 当前目录为源码根目录变量 RPM_BUILD_ROOT 由 header 部分中 Buildroot 进行定义, 推荐 使用 build root
清除系统
建议在生成软件包后, 清除编译目录, %clean 宏能够帮助你清除软件, 只需要利用命令清除编译目录就可以 注意: 不要把 RPM_BUILD_ROOT 设定为 /可选地 pre 与 post 安装与反安装脚本
你可以利用 %pre %post 存放脚本, 并在 RPM 安装前/后进行执行, 最常见的例子是在 RPM 安装后执行 ldconfig 命令, 导入合适的共享库, 下面描述可用的宏%pre 安装前脚本
%post 安装后脚本
%preun 执行 %pre 反安装脚本
%postun 执行 %post 反安装脚本
脚本需要使用 magic number 进行定义 #!/bin/sh.
文件 这个章节描述你必须列出二进制包文件, RPM 不知道 make install 时候需要安装什么文件 下面宏能够用于定义一些安装信息%doc 用于标记安装二进制时候并发源码包中的文档, 文档将会安装到 /usr/share/doc/name-ver-release
目录, 你可以利用 %doc 安装多个文件%config 用于标记软件包配置文件, 包括例如 sendmail.cf, passwd 等,假如你反安装软件包并希望删除
配置文件, 任何未改变过的文件都会被删除, 而改变过的则重命名为 xx.rpmsave 文件, 可以利用宏定义 多个配置文件%defattr 允许你定义文件默认属性, 属性定义为 (mode, owner, group) 如(644, oracle, dba)
%file -f <filename> 允许你列出源码目录中的任意文件, 例如你具有一个包, 那么可以创建包的文件列表
你只需要在这里包含文件列表, 而不需要列出文件Changelog
当软件包进行升级时的标记, 假如你修改一个存在的 RPM, 那么建议你进行升级标记 格式很简单, 每行都需要以 * 然后跟随一个日期, 你的姓名, EMAIL. 建议使用下面的方法定义时间date +"%a %b %d %Y"
余下部分是文字列, 没有固定格式, 你可以用于整理一些相关信息
源码树目录
第一件事, 你需要配置编译源目录, 你需要利用 /etc/rpmrc 文件, 但大部分人直接使用 /usr/src你需要创建下面的目录用于编译代码
BUILD 目录用于 RPM 编译
SOURCES 用于存放源码, 补丁, RPM 会自动从该目录自动寻找 SPECS 存放 SPEC 文件 RPMS 二进制软件编译后存放位置 SRPMS 源码 RPM 存放位置
编译测试
可能需要干净的源码编译, 而不使用 RPM, 解压源码, 改变目录命名为 $NAME.orig, 再次解压源码, 使用这个源码进行 编译, 进入到源码并按照下面步骤进行编译, 假如你需要作出修改, 打补丁, 必须在编译后清除源码目录, 确保以后其他 不需要的文件, 然后回到主目录, 然后执行下面信息创建自己的补丁diff -uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch
生成文件列表 现在源码用于编译, 并安装, 查看安装输出, 然后创建文件列表到 spec 文件中,利用软件包生成 RPM 当完成 SPEC 文件后, 你可以尝试创建软件包, 利用下面命令 rpm -ba foobar-1.0.spec -b能够与下面参数进行配合使用 p 代表只执行 spec 文件中 prep 部分 c 只执行 prep 与编译, 常用于你无法确保源码是否能够完整编译, i 执行 prep, compile, install b prep, compile, install 只创建一个二进制包 a 创建源码与二进制包
转载地址:http://oqnni.baihongyu.com/