在Linux下使用RPM构建SPEC包

准备系统

切记!不要使用 root 用户来执行打包操作。因为这十分危险,所有二进制文件都会在打包前安装至系统中,因此您应该以普通用户身份打包,以防止系统被破坏。
创建名为 makerpm 的用户,添加至 ‘mock’ 用户组,设置好密码并通过该用户登录:

-/usr/sbin/useradd makerpm
usermod -a -G mock makerpm
passwd makerpm

然后,您可以通过这个临时用户开始打包操作。
使用以下命令在用户家目录下,创建标准的打包工作目录结构:

$ rpmdev-setuptree

rpmdev-setuptree程序将创建 ~/rpmbuild 目录,以及一系列预设的子目录(如 SPECSBUILD),你将使用它们作为打包目录。另外,还会创建~/.rpmmacros 文件,它用于设置各种选项。
如果想在项目中的文件夹中创建,可以这样进行:
例如项目位置为/root/test,此时需要将rpmbuild目录放在/root/test/Dev/Package/

$ cd /root/test/Dev/Package
$ mkdir rpmbuild
$ cd rpmbuild
$ mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

查看rpm宏变量$ rpm --showrc|grep _topdir

_builddir %{_topdir}/BUILD
_rpmdir %{_topdir}/RPMS
_sourcedir %{_topdir}/SOURCES
_specdir %{_topdir}/SPECS
_srcrpmdir %{_topdir}/SRPMS
_topdir %{_usrsrc}/redhat

该配置文件路径 /usr/lib/rpm/macros
由于我们将rpm默认的路径更改为我们自己项目中的路径,此时需要对%{_topdir}重新定义
关于rpmbuild默认工作路径的确认,通常是由在/usr/lib/rpm/macros这个文件里的一个叫做%_topdir的宏变量来定义。如果用户想要更改这个目录名,rpm官方并不推荐直接更改这个目录,而是在用户家目录下建立一个名为.rpmmacros的隐藏文件,然后在里面重新定义%_topdir,指向一个新的目录名。此时针对于项目,.rpmmacros文件里的内容为:

%_topdir $HOME/test/Dev/Package/rpmbuild

查看当前用户家目录 echo $HOME

制作源码包

例如,现在需要将项目test下的Bin Client Runtime Vendor Client.sh,移除 Bin/Interpreter下的Windows Unix再打包为源码包

cd test
tar -zcvf ClientInstaller-3.0.0.tar.gz –exclude=Bin/Interpreter/Windows –exclude=Bin/Interpreter/Unix Bin Client Runtime Vender Client.sh
cp ClientInstaller-3.0.0.tar.gz Dev/Package/rpmbuild/SOURCES/

编写.SPEC文件

$ cd SPEC
$ vim ClientInstaller.spec

这样就生成了SPEC文件的模板,然后在上面修改即可。
下面为完整的例子

#软件包的名称
Name: Client
#软件包的版本
Version: 3.0.0
#软件包发布序列号,1表示第几次打包
Release: 1%{?dist}
#软件包的概要信息,不要超过50个
Summary: Just to test how to make a spec file
#软件包分组,属于哪个组建议使用标准分组
Group: Applications/Archiving
#软件授权方式
License: commercial
#源代码软件包的官方地址或源码包的下载地址
URL: http://www.test.com.cn
#源代码软件包的名字
Source0: %{name}-%{version}.tar.gz
#$_topdir: /root/capsheafDrc/Capsheaf/Dev/Package/Rpmbuild
#$_topdir configuration file: /root/.rpmmacros
#install使用的虚拟目录,安装后就在该目录下打包
BuildRoot: %_topdir/BUILDROOT
#Notice: 79 char max per line!
#软件包详细描述信息
%description
test DRC Client
# /***准备段***/
#安装前的准备工作,一般用于解压源码包
%prep
#%setup是宏命令,可自动完成解压功能,说明:预处理一般是将源码包解压,有两种情况:一就是同事编译多个源码包,二就是源码的tar包的名称于解压出来的目录不一致,此时需要-n参数指定一下,如:%setup -q -n %{Source0},有时候解压出来的tar.gz与包名不符合,这时候需要指定-n参数,如%setup -q -n nagios,后面不加版本号 %setup -c 是创建一个目录并且进入该目录解压源码包
%setup -c %{name}-%{version}
# /***编译段***/
#源码编译,如: ./configure && make命令
%build
# /*** 安装段 ***/
#源码安装,如:make install 命令
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT/
cp -a * $RPM_BUILD_ROOT/
# /* 清理段*/
#清理临时文件
%clean
rm -rf $RPM_BUILD_ROOT
# /***文件段***/
#定义那些文件或目录放入RPM当中 %file是在虚拟根目录(BuildRoot)下进行,千万不要写绝对路径,应该使用宏或者变量表示相对路径
%files
/Bin/*
/Client/*
/Runtime/.gitkeep
/Vendor/*
/Client.sh
#要打包的文档文件,默认是在/usr/share下
%doc
#RPM包软件的每次修改记录到这里
%changelog
* Wed Dec 05 2018 xxx@xxx.com.cn 3.0.0
- Initial RPM release

制作rpm包

cd /root/test/Dev/Package/rpmbuild/SPECS
$ rpmbuild -ba test.spec

参考文献 https://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh-cn#RPM_.E5.9F.BA.E7.A1.80.E7.9F.A5.E8.AF.86

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值