1. 查看变量:
rpmbuild --showrc
2. spec 文件
头部
多行的部分, 如 %changelog 或 %description 由指令下一行开始, 空行结束.
一些不需要的行 (如 BuildRequires 和 Requires) 可使用 '#' 注释.
BuildRequires: <=== 在本机编译 rpm 包时需要的辅助工具, 以逗号分隔. 假如, 要求编译 myapp 时, gcc 的版本至少为 4.4.2, 则可以写成 gcc>=4.2.2. 还有其他依赖的话则以逗号分别继续写道后面.
Requires: <=== 编译好的 rpm 软件在其他机器上安装时, 需要依赖的其他软件包, 也以逗号分隔, 有版本需求的可以
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%{_tmppath} 代表的路径为 /var/tmp
%install 阶段
- rm -rf $RPM_BUILD_ROOT
- make install DESTDIR=$RPM_BUILD_ROOT
$RPM_BUILD_ROOT 等于前面定义的 BuildRoot 变量, 也可以写成 %{buildroot}, 必须全部用小写, 不然要报错.
%files 阶段
主要用来说明会将 %{buildroot} 目录下的哪些文件和目录最终打包到 rpm 包里:
- %files
- %defattr(-,root,root,-)
- %doc
- %defattr(文件权限, 用户名, 组名, 目录权限)
如果不牵扯到文件, 目录权限的改变则一般用 %defattr(-,root,root,-) 这条指令来为其设置缺省权限.
所有需要打包到 rpm 包的文件和目录都在这个地方列出, 例如:
- %files
- %{
- _bindir
- }/*
- %{
- _libdir
- }/*
- %config(noreplace) %{
- _sysconfdir
- }/*.conf
在安装 rpm 时, 会将可执行的二进制文件放在 / usr/bin 目录下, 动态库放在 / usr/lib 或者 / usr/lib64 目录下, 配置文件放在 / etc 目录下, 并且多次安装时新的配置文件不会覆盖以前已经存在的同名配置文件. 这里在写要打包的文件列表时, 既可以以宏常量开头, 也可以为 "/" 开头, 没任何本质的区别, 都表示从 %{buildroot} 中拷贝文件到最终的 rpm 包里; 如果是相对路径, 则表示要拷贝的文件位于 %{_builddir} 目录, 这主要适用于那些在 %install 阶段没有被拷贝到 %{buildroot} 目录里的文件, 最常见的就是诸如 README,LICENSE 之类的文件.
如果不想将 %{buildroot} 里的某些文件或目录打包到 rpm 里, 则用:
%exclude dic_name 或者 file_name
关于 %files 阶段有两个特性要牢记:
1. %{buildroot} 里的所有文件都要明确被指定是否要被打包到 rpm 里. 什么意思呢? 假如,%{buildroot} 目录下有 4 个目录 a,b,c 和 d, 在 %files 里仅指定 a 和 b 要打包到 rpm 里, 如果不把 c 和 d 用 exclude 声明是要报错的;
2. 如果声明了 %{buildroot} 里不存在的文件或者目录也会报错.
来源: http://www.bubuko.com/infodetail-2970732.html