欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RPM包制作:spec文件介绍

程序员文章站 2022-05-29 11:06:04
...

参考链接:
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