一、RPM构建基础
1、安装工具
RPM打包使用的是 rpmbuild 命令,来自 rpm-build 包:
yum install -y rpm-build
也可以安装 rpmdevtools,这个工具部包含一些其他工具,依赖 rpm-build,所以直接安装会将 rpm-build 装上:
yum install -y rpmdevtools
2、工具使用
rpmbuild 命令使用一套标准化的「工作空间」 ,生成 %_topdir 工作目录 ~/rpmbuild,以及配置文件 ~/.rpmmacros:
rpmdev-setuptree这个命令就是安装 rpmdevtools 带来的。可以看到运行了这个命令之后,在 $HOME 家目录下多了一个叫做 rpmbuild 的文件夹,里边内容如下:
$ tree rpmbuild rpmbuild ├── BUILD ├── RPMS ├── SOURCES ├── SPECS └── SRPMS
rpmdev-setuptree 命令在当前用户 home/rpmbuild 目录里自动建立上述目录。
rpmbuild 默认工作路径的确定,通常由在 /usr/lib/rpm/macros 这个文件里的一个叫做 %_topdir 的宏变量来定义。如果用户想更改这个目录名,rpm 官方并不推荐直接更改这个目录,而是在用户家目录下建立一个名为 .rpmmacros 的隐藏文件(Linux下隐藏文件,前面的点不能少),然后在里面重新定义 %_topdir,指向一个新的目录名。
二、SPEC 文件及打包命令
1、SPEC文件
最重要的 SPEC 文件,命名格式一般是“软件名-版本.spec”的形式,将其拷贝到 SPECS 目录下。如果系统有 rpmdevtools 工具,可以用 rpmdev-newspec -o name.spec 命令来生成 SPEC 文件的模板,然后进行修改:
[root@localhost ~]# rpmdev-newspec -o myapp.spec Skeleton specfile (minimal) has been created to "myapp.spec". [root@localhost ~]# cat myapp-0.1.0.spec Name: myapp Version: Release: 1%{?dist} Summary: License: URL: Source0: BuildRequires: Requires: %description %prep %setup -q %build %configure make %{?_smp_mflags} %install rm -rf $RPM_BUILD_ROOT %make_install %files %doc
如果没有安装 rpmdevtools,也可以自己手动创建一个 spec 文件。
2、打包命令
在 rpmbuild/SPECS 目录下执行打包编译,切换到该目录下执行打包编译命令。
rpmbuild 命令选项:
rpmbuild 命令的选项 rpmbuild 命令有不少选项,用得比较多的有:
-bp 只解压源码及应用补丁 -bc 只进行编译 -bi 只进行安装到%{buildroot} -bb 只生成二进制 rpm 包 -bs 只生成源码 rpm 包 -ba 生成二进制 rpm 包和源码 rpm 包 --target 指定生成 rpm 包的平台,默认会生成 i686 和 x86_64 的 rpm 包,但一般我只需要 x86_64 的 rpm 包
只生成二进制格式的 rpm 包
rpmbuild -bb 软件名-版本.spec
用此命令生成软件包,生成的文件会在刚才建立的RPM目录下存在。
只生成 src 格式的 rpm 包
rpmbuild -bs 软件名-版本.spec
生成的文件会在刚才建立的SRPM目录下存在。
只需要生成完整的源文件
rpmbuild -bp 软件名-版本.spec
源文件存在目录 BUILD 下,这个命令的作用就是把 tar 包解开然后把所有的补丁文件合并而生成一个完整的具最新功能的源文件。
如果没有安装 rpmdevtools 的话,其实用 mkdir 命令创建这些文件夹也是可以的 mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}。
| 默认位置 | 宏代码 | 名称 | 用途 |
|---|---|---|---|
| ~/rpmbuild/SPECS | %_specdir | Spec 文件目录 | 保存 RPM 包配置(.spec)文件 |
| ~/rpmbuild/SOURCES | %_sourcedir | 源代码目录 | 保存源码包(如 .tar 包)和所有 patch 补丁 |
| ~/rpmbuild/BUILD | %_builddir | 构建目录 | 源码包被解压至此,并在该目录的子目录完成编译 |
| ~/rpmbuild/RPMS | %_rpmdir | 标准 RPM 包目录 | 生成/保存二进制 RPM 包 |
| ~/rpmbuild/SRPMS | %_srcrpmdir | 源代码 RPM 包目录 | 生成/保存源码 RPM 包(SRPM) |
| ~/rpmbuild/BUILDROOT | %_buildrootdir | 最终安装目录 | 保存 %install 阶段安装的文件 |