RPM 打包

1、准备环境

首先请准备一个Linux环境。
RPM打包使用的是rpmbuild命令,这个命令来自rpm-build包,这个是必装的。

yum install rpm-build -y

当然也可以直接安装rpmdevtools,这个工具还包含一些其他的工具,同时它依赖rpm-build,所以直接安装的话会同时把rpm-build装上。

yum install rpmdevtools -y

当然,根据不同的软件构建过程,还需要其他的编译打包工具,比如C语言的make、gcc,python的setuptools等,根据需要安装即可。

2、生成工作空间

RPM打包的时候需要编译源码,需要把编译好的配置文件、二进制命令文件之类的东西按照安装好的样子放到合适的位置,还要根据需要对RPM的包进行测试,这些都需要先有一个“工作空间”。rpmbuild命令使用一套标准化的“工作空间”:

rpmdev-setuptree

3、编辑SPEC文件

# 自定义宏
%define bindir /opt/jdbc

# 1.信息定义阶段
# 软件名字,要与spec的文件名一致
Name:         jdbc4postgresql
# 软件主版本号
Version:       1.0 
# 发行编号,每打包一次值递增,主版本号发布新版后需重置该值
Release:        1%{?dist}
# 一行简短的软件简介,结尾不要加标点
Summary:       my first 
# 软件许可
License:       GPL 
# 软件项目主页
# URL:           http://git.intra.weibo.com/openapi_rd/motan-go/
# 放置在SOUIRCES目录的软件源码包名,可以指定多个:source1、source2等
Source0:       %{name}-%{version}.jar 

# 安装软件包时所需的依赖包列表,可以指定版本如 bash >= 1.1.1
# Requires:       pcre-devel,openssl-devel
# 程序的详细多行描述,每行必须小于等于 80 个字符,空行表示开始新段
%description

# 2.准备阶段
%prep

# 3. 编译阶段
%build

# 4.安装阶段
%install
# 删除之前的残留文件
rm -rf %{buildroot}
mkdir -p %{buildroot}
rpm_app_dir=%{buildroot}/%{bindir}
mkdir -p $rpm_app_dir
cp -r %{_topdir}/SOURCES/* $rpm_app_dir

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

# rpm安装后执行的脚本
%post

# 卸载前执行的脚本
%preun

# 卸载后执行的脚本
%postun

# 5.清理阶段
%clean
# 删除buildroot目录
# rm -rf %{buildroot}

#  6.文件设置阶段
%files
#要打包的文件和目录,在执行完rpmbuild -bi后,参考%{rootbuild}下生成的文件和目录
%{bindir}/%{name}-%{version}.jar

#  变更日志 格式固定,生成请用命令: rpmdev-bumpspec --comment=COMMENT --userstring=NAME+EMAIL_STRING SPECFILES
%changelog

4、开始打RPM包

将需要打包的 jar 包放到工作空间目录/rpmbuild/SOURCES 下,SPEC文件放到工作空间目录 /rpmbuild/SPECS 下。执行命令:

rpmbuild -ba jdbc4postgresql.spec

rpmbuild命令会根据spec文件来生成rpm包,主要用到以下几个参数

rpmbuild  --help 
-bp 执行到%prep阶段结束
-bc 执行到%build阶段结束
-bi 执行到%install阶段结束 
-bl 检测%files文件是否有丢失
-ba 创建src.rpm和二进制包 
-bs 只创建src.rpm源码包 
-bb 只创建二进制rpm包

打包好的 RPM包
在这里插入图片描述

5、原理

rpmbuild 命令有一套标准化的“工作空间”

rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

各目录的具体作用:

默认位置默认位置名称名称
~/rpmbuild/SPECS%_specdirSpec 文件目录保存 RPM 包配置(.spec)文件
~/rpmbuild/SOURCES%_sourcedir源代码目录保存源码包(如 .tar 包)和所有 patch 补丁
~/rpmbuild/BUILD%_builddir构建目录源码包被解压至此,并在该目录的子目录完成编译
~/rpmbuild/BUILDROOT%_buildrootdir最终安装目录保存 %install 阶段安装的文件
~/rpmbuild/RPMS%_rpmdir标准 RPM 包目录生成/保存二进制 RPM 包
~/rpmbuild/SRPMS%_srcrpmdir源代码 RPM 包目录生成/保存源码 RPM 包(SRPM)

具体执行步骤:

  1. SPECS下是RPM包的配置文件,它会告诉rpmbuild命令如何去打包。
  2. 需要将源码放到%_sourcedir中。
  3. 进行编译,编译的过程是在%_builddir中完成的,所以会将源码复制到此目录下。
  4. 进行“安装”,这里有点类似于预先组装软件包,把软件包应该包含的内容(比如二进制文件、配置文件等)复制到%_buildrootdir中,并按照实际安装后的目录结构组装,比如二进制命令可能会放在/usr/bin下,那么就在%_buildrootdir下也按照同样的目录结构放置;
  5. 配置一些必要的操作,比如安装前的准备,安装后的卸载。
  6. 可选操作,检查软件是否正常运行。
  7. 最后,生成的RPM包放置到%_rpmdir,源码包放置到%_srpmdir下。

以上这些步骤都是配置在SPEC文件中的,详情:

阶段读取的目录写入的目录具体操作
%prep%_sourcedir%_builddir读取位于 %_sourcedir 目录的源代码和 patch ,解压源代码至 %_builddir 的子目录并应用所有 patch。
%build%_builddir%_builddir编译位于 %_builddir 构建目录下的文件。通过执行类似 ./configure && make 的命令实现。
%install%_builddir%_buildrootdir读取位于 %_builddir 构建目录下的文件并将其安装至 %_buildrootdir 目录。这些文件就是用户安装 RPM 后,最终得到的文件。通过执行类似 make install 的命令实现。
%check%_builddir%_builddir检查软件是否正常运行。通过执行类似 make test 的命令实现。很多软件包都不需要此步。
bin%_buildrootdir%_rpmdir读取位于 %_buildrootdir 最终安装目录下的文件,以便最终在 %_rpmdir 目录下创建 RPM 包。在该目录下,不同架构的 RPM 包会分别保存至不同子目录, noarch 目录保存适用于所有架构的 RPM 包。这些 RPM 文件就是用户最终安装的 RPM 包。
src%_sourcedir%_srcrpmdir创建源码 RPM 包(简称 SRPM,以.src.rpm 作为后缀名),并保存至 %_srcrpmdir 目录。SRPM 包通常用于审核和升级软件包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值