spec文件知识整理

rpmbuild目录下各个文件的用途:

spec文件一般包含以下部分:

==================================文件头====================================================

Name: hellorpm                                      #名字为源码tar.gz 包的名字

Version: 1.0.0                                          #版本号,一定要与tar.gz包的一致哦

Release: 1%{?dist}                                 #释出号,也就是第几次制作rpm

Summary: helloword                               #软件包简介,最好不要超过50字符

License: GPL                                            #许可,GPL还是BSD等 

URL:                                                           #可以写一个网址,也可以不要

Packager: abel                                          #作者,可以不要

扫描二维码关注公众号,回复: 4500133 查看本文章

Source0: %{name}-%{version}.tar.gz                                               

 #定义用到的source,也就是你的源码包,可以有多个,用Source1、Source2等表示

BuildRoot: %_topdir/BUILDROOT

#这个是安装或编译时使用的“虚拟目录”,该参数非常重要,因为在执行make install的过程中,需要把软件安装到这个路径中,在打包(即%files段)的时候,依赖“虚拟目录”为“根目录”进行操作。这个参数可以不必定义,系统默认此参数为:/root/rpmbuild/BUILDROOT/%{name}-%{version}-%{release}.x86_64,后面引用可以直接使用$RPM_BUILD_ROOT。

BuildRequires: gcc,make

#编译时的包依赖

Requires: python-apscheduler >= 2.1.2-1.el7,python-daemon >= 1.6-1.el7

#软件运行依赖的软件包,也可以指定最低版本如 bash >= 1.1.1

%description               #描述,随便写         

%package                    #定义一个子包,需要生成两个rpm包需要此项,只生成一个时不需要此项。举例如下:

%package devel
Summary: Header files and libraries for developing apps which will use bzip2.
Group: Development/Libraries
description devel
Header files 

当定义一个子包时,必须至少包含Summary:,Group:,description选项。%package后面可以加-n选项也可以不加,如果在%package时用-n选项,那么在description时也要用,如:description -n my-telnet-server,如果在%package时用-n选项,那么在%files时也要用,如:%files -n my-telnet-server

====================================预处理====================================================

%prep           #标志预处理开始

%setup     

#这个宏用来解压源代码(即Source的tar包),并将当前目录改为源代码解压之后产生的目录(即cd)。注意%setup默认解压后产生的目录是%{name}-%{version},所以打tar包的时候要注意目录的命名。如果tar包目录不是这种方式命名的,也可以用-n 选项来指定要切换到的目录。有以下选项可用。

                 %setup-q---------将 tar 命令的繁复输出关闭。

                %setup -nnewdir---------将压缩的软件源程序在newdir目录下解开。

                %setup -c---------------在解开源程序之前先创建目录。

                %setup -bnum------------在包含多个源码包(Source1、Source2等)时,将第num个源程序解压缩。

                %setup -T----------------不使用缺省的解压缩操作。
%patch 打补丁
通常补丁都会一起在源码tar.gz包中,或放到SOURCES目录下。一般参数为:
%patch -p1 使用前面定义的Patch补丁进行,-p1是忽略patch的第一层目录
%Patch2 -p1 -b xxx.patch 打上指定的补丁,-b是指生成备份文件

==================================编译安装=========================================================

%build                                                        #编译制作阶段,主要目的就是编译,如果不用编译就为空

make %{?_smp_mflags}                          #make后面的意思是:如果就多处理器的话make时并行编译

%install                                                       #开始把软件安装到虚拟的根目录中 (即$RPM_BUILD_ROOT)

#这个很重要,因为如果这里的路径不对的话,则下面%file中寻找文件的时候就会失败.需要说明的是,这里的%install主要就是为了后面的%file服务的。如果之后打rpm包,需要放在/usr/bin下,就需要在虚拟根目录中创建一个/usr/bin的目录,然后把需要的文件copy到这里。

如:install -d $RPM_BUILD_ROOT/usr/bin/

        install -m 755 a.out $RPM_BUILD_ROOT/usr/bin/

#下面的几步pre、post、preun、postun 没必要可以不写

%pre                  #rpm安装前制行的脚本

%post                #安装后执行的脚本

%preun             #卸载前执行的脚本

%postun           #卸载后执行的脚本

%clean             #清理段,删除buildroot rm -rf %{buildroot}

=================================打包=======================================================

%files                #定义那些文件或目录会放入rpm包中,如果前面有%package加了-n选项,这里也得加-n选项。

%defattr (-,root,root,-) #设定默认权限,如果下面没有指定权限,则继承默认 /etc/hello/word/helloword.c #将你需要打包的文件或目录写下来

###  7.chagelog section  改变日志段

%changelog  
 

猜你喜欢

转载自blog.csdn.net/lzg_zone/article/details/83863509
今日推荐