使用rpmbuild制作jdk的包_rpmbuild制作rpm包

rpmbuild制作rpm包

以制作lttng-ust软件的rpm包为例,进行讲解。

rpmbuild制作rpm包执行流程

rpmbuild 命令选项执行的动作

-bp nginx.spec制作到%prep段

-bc nginx.spec制作到%build段

-bi nginx.spec执行 spec 文件的 “%install” 阶段 (在执行了 %prep 和 %build 阶段之后)。这通常等价于执行了一次 “make install”

-bb nginx.spec制作二进制包(在执行了 %prep 和 %build 阶段之后)

-bs nginx.spec仅制作源码包

-bl nginx.spec从spec文件宏扩展%files段,检查并且验证每个文件是否存在

-ba nginx.spec表示既制作二进制包又制作src格式包(在执行了 %prep 和 %build 阶段之后)

spec文件简介

spec file由%开头的宏定义的域段落组成,我们可以在不同的段落写执行shell命令来完成编译,安装等功能。

%prep 预处理段,顾名思义,该段内容通常用来执行一些解压缩开源程序包的命令,为下一步的编译安装作准备。%prep和下面的%build,%install段一样,除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令,比如mkdir,cp。

%build 主要执行make命令。

%install 执行make install安装程序 ,可以指定PREFIX。也可以做其他shell 命令满足安装软件的需求。

%clean 安装完,清理临时文件或者编译的文件

%files 用于定义程序所包含的文件,可执行程序,配置文件,说明文档(doc),还可定义文件访问权限,owner 属组。

%changelog 操作日志,记录rpm变更的记录 谁,什么时间,做了什么内容。

%prerpm 安装前执行的脚本

%postrpm 安装后执行的脚本

%preun rpm卸载前执行的脚本

%postunrpm 卸载后执行的脚本

根据日志来看,上面的每个阶段相当于执行了一个shell脚本。

Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.nQjypc

...

Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.393q2l

...

Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.GMGUry

...

安装rpm工具

sudo yum install rpm-build rpmdevtools -y

创建rpm目录

rpmdev-setuptree

这六个目录的作用分别是:

BUILD : rpmbuild编译软件的目录

BUILDROOT : rpmbuild安装软件的目录

RPMS : rpmbuild创建binary RPM所存放的目录

SOURCES : 存放源代码的目录

SPECS : 存放spec文件的目录

SRPMS : rpmbuild创建souce RPM所存放的目录

制作源码包

从github下载lttng-ust-2.10.3.tar.gz源码包,解压并进入源码目录:

./bootstrap

./configure

make

make dist-gzip # 生成tar包

制作rpm包

将上一步生成的tar包拷贝到SOURCES目录下,然后进入到SPECS目录,执行以下命令:

rpmdev-newspec lttng-ust

生成一个lttng-ust.spec文件,如下图所示:

填写相关的内容,重点关注%file的内容:

%files

%defattr(-,root,root,-)

%{_bindir}

%{_libdir}

%{_datadir}

生成rpm包:

rpmbuild -ba lttng-ust.spec

在RPMS目录下查看rpm包的内容:

rpm -qpl lttng-ust-2.10.3-1.el7.centos.x86_64.rpm

制作rpm包的过程中,若出现错误Installed (but unpackaged) file(s) found,解决方案如下:

1. 修改/usr/lib/rpm/macros文件中下面的行:

%__check_files /usr/lib/rpm/check-files %{buildroot} #注释掉

2. 修改/usr/lib/rpm/macros文件中以下的行:

%_unpackaged_files_terminate_build 1 #把1改为0只警告

同一个spec文件同时生成多个rpm包

添加一个%package阶段,例如要多生成一个devel包,配置如下:

%package devel

Summary: The LTTng User Space Tracing (LTTng-UST) library allows any C/C++ application to be instrumented for and traced by LTTng.

%description devel

查看spec配置文件中相关宏的定义

rpm --eval "%{_bindir}"

常见的宏:

%{_sysconfdir} /etc

%{_prefix} /usr

%{_exec_prefix} %{_prefix}

%{_bindir} %{_exec_prefix}/bin

%{_lib} lib (lib64 on 64bit systems)

%{_libdir} %{_exec_prefix}/%{_lib}

%{_libexecdir} %{_exec_prefix}/libexec

%{_sbindir} %{_exec_prefix}/sbin

%{_sharedstatedir} /var/lib

%{_datadir} %{_prefix}/share

%{_includedir} %{_prefix}/include

%{_oldincludedir} /usr/include

%{_infodir} /usr/share/info

%{_mandir} /usr/share/man

%{_localstatedir} /var

%{_initddir} %{_sysconfdir}/rc.d/init.d

spec配置文件的写法

spec配置文件基础知识

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值