布局说明
最后更新于:2022-04-02 03:54:37
[TOC]
## 目录说明
| 目录 | 说明 | macros宏名 |
| --- | --- | --- |
| BUILD | 编译rpm包的临时目录 | %_builddir |
| RPMS | 存放由rpmbuild最终制作好的二进制包 | %_rpmdir |
| SOURCES | 所有源代码和补丁文件的存放目录 | %_sourcedir |
| SPECS | 存放SPEC文件的目录(重要) | %_specdir |
| SPRMS | 最终生成的二进制源码包所在目录 | %_srcrpmdir |
> 只有 root 权限才能编译
1. 把`%_sourcedir`的内容解压或复制到`%_builddir`
2. 把`%_builddir`的文件以**实际安装的目录结构**进行组装到`%_buildrootdir`(如:把而二进制放到 `/usr/bin/`,则在`%_buildrootdir`中也是`/usr/bin`)
3. 然后,需要配置一些必要的工作,比如在实际安装前的准备啦,安装后的清理啦,以及在卸载前后要做的工作啦等等,这样也都是通过配置在SPEC文件中来告诉`rpmbuild`命令;
5. 还有一步可选操作,那就是检查软件是否正常运行;
6. 最后,生成的RPM包放置到`%_rpmdir`,源码包放置到`%_srpmdir`下。
## .sepc 头配置
|SPEC指令|定义|
|---|---|
|Name| 包名,与SPEC文件名匹配。|
|Version | 软件的上游版本号。|
|Release| 此软件版本发布的次数。通常,将初始值设置为`1%{?dist}`,|
| Summary| 程序包的简短的单行摘要|
| License| 打包软件的许可证。通常为 `GPL`|
| URL| 项目网址|
| Group|软件分组如:如 `Group:Applications/Communications` 应用/通讯|
|Source0 |source来指定构建需要的源代码source0: tair-2.1.0-src.tar.gz例如:Source1,Source2,Source3,依此类推。 |
|Patch0 | 必要时将应用于源代码的第一个修补程序的名称。|
|BuildArch | 如果程序包不依赖于体系结构,例如,如果完全使用解释性编程语言编写,则将此设置为**BuildArch: noarch**。如果未设置,则软件包将自动继承构建该软件包的计算机的体系结构,例如x86_64。|
| BuildRequires| 以逗号或空格分隔的软件包依赖列表,如:buildRequires: tbsys >= 2.0 |
|Requires |以逗号或空格分隔,可指定各阶段的依赖如:Requires(post): tbsys,或Requires: tbsys |
|ExcludeArch | 如果某个软件不能在特定的处理器体系结构上运行,则可以在此处排除该体系结构。|
|exclusiveArch| 指定编译平台,如 `exclusiveArch: i386 x86-64`|
|excludeOs| 不包括此编译平台 excludeOs:windows |
|exclusiveOs| 指定编译平台 exclusiveOs:windows|
|buildroot|指定编译的buildroot 目录 如 buildroot: %{_tmppath}/%{name}-%{version}-root 安装到 /tmp目录下|
| Autoreq | `Autoreq:0`,禁用依赖检查`
## 打包阶段
|阶段|目录行为 | 具体动作|
|---|---|---|
|%pre | -| rpm 安装前制行的脚本|
|%post | - | rpm 安装后执行的脚本 |
| %preun | - | rpm 卸载前执行的脚本 |
| %postun | - |rpm 卸载后执行的脚本 |
| %prep|%_sourcedir -> %_builddir| 将 %_sourcedir 加压到 %_builddir |
|%build |%_builddir | ./configure && make` 编译 %_builddir 的文件 |
|%install | %_builddir -> %_buildrootdir |读取位于 %_builddir 构建目录下的文件并将其安装至 %_buildrootdir 目录 |
|%check | %_builddir | `make test`检查软件是否正常运行,很多软件包都不需要此步 |
|%clean | %_buildrootdir | 如:`rm -rf %{buildroot}`|
%description|- | 软件描述 |
|%files|- |rpm要包含的文件 ,如`/*` 表示所有文件 |
|%changelog |- | 修改日志 |
> 以上阶段如果没有操作的话,为空,但是不能有空行
### %prep
```
%setup -q -T -a 0 -a 7 -a 10 -c -n %{src_dir}
参数列表:
-T 禁止自动解压源码文件
-D 解压前不删除目录
-a 切换目录前,解压指定Source文件,例如-a 0表示解压Source0
-b 切换目录后,解压指定Source文件,例如-a 0表示解压Source0
-n 解压后目录名称与RPM名称不同,则通过该参数指定切换目录
-c 解压缩之前先生成目录
```
';