使用rpmbuild创建rpm包

文件目录介绍

根目录,下面介绍需要用到的文件夹
/root/rpmbuild

使用rpmbuild创建rpm包_第1张图片

目录介绍

  • SOURCE目录

资源目录,存放需要打包的资源,如jar包,脚本,配置文件等

  • SPEC目录

打包脚本存放目录,如下图
使用rpmbuild创建rpm包_第2张图片

  • RPMS目录

打成的rpm包存放目录
如下图
使用rpmbuild创建rpm包_第3张图片

spec脚本介绍

%define summary your package description #软件包的内容概要
%define name YourPackageName  #定义rpm包的包名
%define version 8.0  #定义rpm包的版本号,软件的实际版本号
%define release 170505  #定义rpm包的版本号(svn提交的版本号)
%define arch noarch  # 指编译的目标处理器架构
%define group SFY
Summary: %{summary} #引用上面的定义,下同
Name: %{name}
Version: %{version}
Release: %{release}  # 发布序列号
License: Commercial #软件授权方式,通常就是GPL
Group: %{group}
BuildRoot: %{_builddir}
BuildArchitectures: %{arch}
AutoReqProv: no
Vendor: SFY AG 
Requires: unzip  #需要依赖的rpm包,安装此rpm包需要依赖unzip的rpm包
Prefix: /opt  #这个主要是为了解决今后安装rpm包时,并不一定把软件安装到rpm中打包的目录的情况。这样,必须在这里定义该标识,并在编写%install脚本的时候引用,才能实现rpm安装时重新指定位置的功能
Prefix: /var/opt
#下面为主体
%prep  #预处理脚本

%build  #开始构建包

%install  #开始把软件安装到虚拟的根目录中

# 下面的 $RPM_BUILD_ROOT 参数为必传参数,不然创建会失败
install -m 0755 -D /root/rpmbuild/SOURCES/ant_build/dom4j-1.6.1.jar $RPM_BUILD_ROOT/opt/sfy/jar/dom4j-1.6.1.jar #需要打进rpm包的jar包  
install -m 0640 -D /root/rpmbuild/SOURCES/config/yourconfig.properties $RPM_BUILD_ROOT/var/sfy/config/yourconfig.properties  #需要打进rpm包的配置文件



%clean #清理临时文件

%files #定义哪些文件或目录会放入rpm中
%defattr (-,root,root,-)# 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755,这里不能遗漏(指上面%install中所涉及的文件路径)
/opt/sfy/config/jar

%defattr (-,sfy-adm,sfy,-)#csi-adm, csi 为自定义的用户与用户组,及上面的
/var/sfy/config



%description #描述
 SFY TAS Connector package

%pre #安装此rpm包前需要检验环境
if [[ ! -f ${RPM_INSTALL_PREFIX}/sfy/install.info ]]
then
    echo "Could not find ${RPM_INSTALL_PREFIX}/sfy/install.info !"
    echo "Base packages has been installed somewhere else or the file has been removed!"
    exit 255
fi

%post
# Read installation info variables
eval `grep -v \* /var/sfy/install.info`

%preun

%postun

脚本执行命令:

rpmbuild -bb scriptname.spec

注意事项

spec脚本需要转dos字符,不然会报错
若引用的文件不存在也会报错
报错:
error: Installed (but unpackaged) file(s) found:
这里写图片描述
原因:在spec脚本的%defattr (-,root,root,-)中添加对应的路径
其他问题可参照连接
https://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh-cn

你可能感兴趣的:(linux,rpm,linux)