首页 » 技术分享 » RPM包制作:spec文件介绍

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 <bjlongo@ncsu.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

[adams@localhost RPMS]$ sudo yum install rpm-build
[sudo] password for adams: 
已加载插件:langpacks, refresh-packagekit
软件包 rpm-build-4.12.0.1-3.nd7.9.x86_64 已安装并且是最新版本
无须任何处理
[adams@localhost RPMS]$

然后使用rpmbuild --help 命令,可以查看到rpmbuild运行时参数的详细情况。

[adams@localhost ~]$ 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                    显示简短的使用说明
[adams@localhost ~]$

具体操作过程:

需要使用工具创建spec工作目录以及spec文件。安装工具命令:sudo yum install rpmdevtools

[adams@localhost RPMS]$ sudo yum install rpmdevtools
已加载插件:langpacks, refresh-packagekit
软件包 rpmdevtools-8.5-1.nd7.1.noarch 已安装并且是最新版本
无须任何处理
[adams@localhost RPMS]$
创建spec工作目录

安装完工具之后,使用rpmdev-setuptree命令建立spec文件工作目录。

[adams@localhost ~]$ ls
git  neo  公共  模板  视频  图片  文档  下载  音乐  桌面
[adams@localhost ~]$ rpmdev-setuptree
[adams@localhost ~]$ ls
git  neo  rpmbuild  公共  模板  视频  图片  文档  下载  音乐  桌面
[adams@localhost ~]$ tree rpmbuild/
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

5 directories, 0 files
[adams@localhost ~]$ 

执行完rpmdev-setuptree后,会在主目录下生成rpmbuild目录,并附带五个子目录。

(也可以通过修改~/.rpmmacros 文件,来修改生成rpmbuild目录的位置)。其中:

BUILD 	:用来存放创建rpm包过程中产生的文件/目录。
RPMS 	:用来存放生成的二进制文件。
SRPMS	:用来存放生成的源码包。
SOURCES:用来存放打包资源,源文件和补丁文件。
SPECS 	:用来存放spec配置文件。
BUILDROOT:编译后生成的软件临时安装目录(运行spec文件后,生成的目录)
生成spec文件

进入刚才生成的SPEC目录,执行rpmdev-newspec 命令。

[adams@localhost rpmbuild]$ ls
BUILD  RPMS  SOURCES  SPECS  SRPMS
[adams@localhost rpmbuild]$ tree
.
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

5 directories, 0 files
[adams@localhost rpmbuild]$ cd SPECS/
[adams@localhost SPECS]$ rpmdev-newspec
newpackage.spec created; type minimal, rpm version >= 4.12.
[adams@localhost SPECS]$ ls
newpackage.spec
[adams@localhost SPECS]$ 

可以看到在SPEC目录下生成了newpackage.spec文件。该文件原始内容如下:

[adams@localhost 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
- 
[adams@localhost SPECS]$ 

可以根据之前对spec文件中各个参数的描述进行配置。具体的spec文件配置,在附带的源码包中。

进入 /home/adams/rpmbuild 目录,执行 rpmbuild -ba SPECS/adams.spec 命令。则会在相应目录,生成相应文件。

可以看到在RPMS目录下生成了adams-spec-0.1.2-1.nd7.x86_64.rpm 包。(版本可能不一样)

转载自原文链接, 如需删除请联系管理员。

原文链接:RPM包制作:spec文件介绍,转载请注明来源!

0