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 #作者,可以不要
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