RPM包制作:spec文件介绍
参考链接:
https://rpmbuildtut.wordpress.com/
spec文件参数介绍
spec
文件可以理解为安装软件包时的配置文件,配合rpmbuild
命令使用。
运行rpmbuild
命令时,通过读取spec
文件,按照spec
中配置的参数,来安装软件包。
想写出spec
文件,需要了解spec
文件中各个参数的具体含义。spec
文件参数说明如下。
Name: 软件包名称
Version:软件包主版本号
Release:软件包次版本号
Summary:摘要是对软件包的简短描述。
License: 授权协议,通用的是GPL。
URL: 在url下放置包的主页。
Source0: 源目录中tar源码包的名称。可以有很多个源码。
BuildRequires:列出创建包所需包的列表。
Requires:创建包所需依赖。
%description:描述不应与摘要相同。描述要更具体一些,但是不应太长。并且不要在描述句尾加句号。
%prep:表示预操作字段。在install之前执行(准备源码,唯一的操作是%setup -q)
%setup -q :表示构建BUILD环境,会解压压缩包到BUILD目录下。
%preun :在uninstall之前执行
%post :在install 之后执行
%postun:在uninstall之后执行
%build :表示通过直接调用源码目录中自动构建工具(比如说,configure文件)完成源码编译操作。
%configure:
make:表示在源码目录中执行make命令。
%install :安装字段。
%files:文件说明字段。告诉make install指令,需要安装那些文件。
%defattr(-,root,root,-) :设置默认权限
%doc:标记所有的文本文件。
%doc docs/LICENSE:安装许可证。
%doc docs/README:安装README。
%changelog:更新日志。有固定格式(填错会报错)。比如说:
*Sun Jul 13 2008 <[email protected].edu> 1
--Initial Build.
--Added setup.py file.
--Fixed bin/vpd, src/vpd.py.
Copyright:软件包版权规则,GPL(*软件),BSD,MIT,
Public Domain(公共域), Distributable(贡献),
commercial(商业),Share(共享)等。
Group:用于对包进行分类。可以查看/usr/share/doc/GROUPS文件中所有组的完整列表。
Buildroot:构建和安装包的位置
rpmbuild 命令的使用规则
首先使用命令:sudo yum -y install rpm-build
安装rpmbuild
。
[[email protected] RPMS]$ sudo yum install rpm-build
[sudo] password for adams:
已加载插件:langpacks, refresh-packagekit
软件包 rpm-build-4.12.0.1-3.nd7.9.x86_64 已安装并且是最新版本
无须任何处理
[[email protected] RPMS]$
然后使用rpmbuild --help
命令,可以查看到rpmbuild
运行时参数的详细情况。
[[email protected] ~]$ rpmbuild --help
用法: rpmbuild [选项...]
适用于 [ <specfile> | <tarball> | <source package> ] 的构建选项:
-bp 依据 <specfile> 从 %prep (解压缩源代码并应用补丁) 开始构建
-bc 依据 <specfile> 从 %build (%prep 之后编译) 开始构建
-bi 依据 <specfile> 从 %install (%prep、%build 后安装) 开始构建
-bl 依据 <specfile> 检验 %files 区域
-ba 依据 <specfile> 构建源代码和二进制软件包
-bb 依据 <specfile> 构建二进制软件包
-bs 依据 <specfile> 构建源代码软件包
-tp 依据 <tarball> 从 %prep (解压源代码并应用补丁)开始构建
-tc 依据 <tarball> 从 %build (%prep,之后编译)开始构建
-ti 依据 <tarball> 从 %install (%prep、%build 然后安装)开始构建
-ta 依据 <tarball> 构建源代码和二进制软件包
-tb 依据 <tarball> 构建二进制软件包
-ts 依据 <tarball> 构建源代码软件包
--rebuild 依据 <source package> 构建二进制软件包
--recompile 依据 <source package> 从 %install (%prep、%build 然后安装)开始构建
--buildroot=DIRECTORY 重载构建根路径
--clean 完成后移除构建树
--nobuild 不执行任何构建步骤
--nodeps 不检验构建依赖
--nodirtokens 生成和 rpm v3 包管理(旧版本)兼容的软件包头
--noclean 构建过程中不执行 %clean 步骤
--nocheck 构建过程中不执行 %check 步骤
--rmsource 完成时移除源代码
--rmspec 完成时移除 specfile
--short-circuit 直接跳转到指定步骤 (仅限 c,i)
--target=CPU-VENDOR-OS 重载目标平台
所有 rpm 模式和可执行文件的通用选项:
-D, --define=“MACRO EXPR” 定义值为 EXPR 的 MACRO
--undefine=MACRO 未定义的 MACRO
-E, --eval=“EXPR” 打印 EXPR 的宏展开
--macros=<FILE:…> 从文件 <FILE:...> 读取宏,不使用默认文件
--noplugins don't enable any plugins
--nodigest 不校验软件包的摘要
--nosignature 不验证软件包签名
--rcfile=<FILE:…> 从文件 <FILE:...> 读取宏,不使用默认文件
-r, --root=ROOT 使用 ROOT 作为*目录 (default: "/")
--dbpath=DIRECTORY 使用 DIRECTORY 目录中的数据库
--querytags 显示已知的查询标签
--showrc 显示最终的 rpmrc 和宏配置
--quiet 提供更少的详细信息输出
-v, --verbose 提供更多的详细信息输出
--version 打印使用的 rpm 版本号
Options implemented via popt alias/exec:
--with=<option> enable configure <option> for build
--without=<option> disable configure <option> for build
--buildpolicy=<policy> set buildroot <policy> (e.g. compress man pages)
--sign generate GPG signature
帮助选项:
-?, --help 显示这个帮助信息
--usage 显示简短的使用说明
[[email protected] ~]$
具体操作过程:
需要使用工具创建spec
工作目录以及spec
文件。安装工具命令:sudo yum install rpmdevtools
[[email protected] RPMS]$ sudo yum install rpmdevtools
已加载插件:langpacks, refresh-packagekit
软件包 rpmdevtools-8.5-1.nd7.1.noarch 已安装并且是最新版本
无须任何处理
[[email protected] RPMS]$
创建spec工作目录
安装完工具之后,使用rpmdev-setuptree
命令建立spec
文件工作目录。
[[email protected] ~]$ ls
git neo 公共 模板 视频 图片 文档 下载 音乐 桌面
[[email protected] ~]$ rpmdev-setuptree
[[email protected] ~]$ ls
git neo rpmbuild 公共 模板 视频 图片 文档 下载 音乐 桌面
[[email protected] ~]$ tree rpmbuild/
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
5 directories, 0 files
[[email protected] ~]$
执行完rpmdev-setuptree
后,会在主目录下生成rpmbuild
目录,并附带五个子目录。
(也可以通过修改~/.rpmmacros
文件,来修改生成rpmbuild
目录的位置)。其中:
BUILD :用来存放创建rpm包过程中产生的文件/目录。
RPMS :用来存放生成的二进制文件。
SRPMS :用来存放生成的源码包。
SOURCES:用来存放打包资源,源文件和补丁文件。
SPECS :用来存放spec配置文件。
BUILDROOT:编译后生成的软件临时安装目录(运行spec文件后,生成的目录)
生成spec文件
进入刚才生成的SPEC目录,执行rpmdev-newspec
命令。
[[email protected] rpmbuild]$ ls
BUILD RPMS SOURCES SPECS SRPMS
[[email protected] rpmbuild]$ tree
.
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
5 directories, 0 files
[[email protected] rpmbuild]$ cd SPECS/
[[email protected] SPECS]$ rpmdev-newspec
newpackage.spec created; type minimal, rpm version >= 4.12.
[[email protected] SPECS]$ ls
newpackage.spec
[[email protected] SPECS]$
可以看到在SPEC目录下生成了newpackage.spec
文件。该文件原始内容如下:
[[email protected] SPECS]$ cat newpackage.spec
Name:
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
%changelog
* Thu Oct 10 2019 adams
-
[[email protected] SPECS]$
可以根据之前对spec文件中各个参数的描述进行配置。具体的spec文件配置,在附带的源码包中。
进入 /home/adams/rpmbuild
目录,执行 rpmbuild -ba SPECS/adams.spec
命令。则会在相应目录,生成相应文件。
可以看到在RPMS目录下生成了adams-spec-0.1.2-1.nd7.x86_64.rpm
包。(版本可能不一样)
上一篇: 光盘安装rpm包