前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工具|学习RPM打包

工具|学习RPM打包

作者头像
用户1278550
发布2019-11-12 20:08:14
1.6K0
发布2019-11-12 20:08:14
举报
文章被收录于专栏:idbaidba

一 前言

本文可能偏运维一些,适合有需求打rpm包的朋友。

不同公司有不同的规范来约束各种linux系统软件安装的路径以及相关配套设施。因此我们可以基于各自的 规范 使用rpm 将各种软件的二进制文件打包来满足各自的定制化需求。本文通过 安装vmtouch软件包,来介绍RPM的相关知识。

二 RPM 基础介绍

首先一图胜千言 ,我们通过下图来了解RPM的文件系统以及核心 spec 文件对其他文件的相关依赖关系。

2.1 初始化rpmbuild

安装 rpmbuild 并准备相关目录文件

sudo yum install make gcc rpmbuild mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

各个目录的用途如下:

代码语言:javascript
复制
BUILD          编译rpm包的临时目录 
BUILDROOT   编译后生成的软件临时安装目录
RPMS          最终生成的可安装rpm包的所在目录
SOURCES    所有源代码和补丁文件的存放目录
SPECS         存放SPEC文件的目录(重要)
SRPMS         软件最终的rpm源码格式存放路径

在*NIX系统中建议为了防止系统函数库或其他文件损坏,不要使用root身份去制作rpm软件包。可以使用一个通用的用户 比如 app。

打包之前需要将源代码以及相关脚本放到 SOURCES 目录中。spec 文件的 Source0 会使用源码文件 vmtouch-1.3.1.tar.gz (注意解压缩之后的文件一定要是 vmtouch-1.3.1,否则会编译报错 )

代码语言:javascript
复制
git clone https://github.com/hoytech/vmtouch.git
mv  vmtouch vmtouch-1.3.1
tar -zcvf vmtouch-1.3.1.tar.gz vmtouch

然后 将 vmtouch-1.3.1.tar.gz 放到 SOURCES。(注意解压缩之后的文件一定要是 vmtouch-1.3.1,否则会编译报错 )

三 spec 文件语法

spec file是rpm打包最核心组件,其内容包含软件包的相关信息,如软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。本文以 vmtouch.spec 文件为例,介绍 spec的基础语法结构

代码语言:javascript
复制
%define  oname   vmtouch
%define  _target_os Linux
%define  _prefix /usr/local
Name:        vmtouch
Version: 1.3.1
Release: 1%{?dist}
Summary:    vmtouch is a tool for learning about and controlling the file system cache of unix and unix-like systems.
Group: Development/Tools
License:    BSD
URL:        https://github.com/hoytech/vmtouch
Source0:    vmtouch-%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{oname}-%{version}-%{release}-XXXXXX)
%description
vmtouch is a tool for learning about and controlling the file system cache of unix and unix-like systems. It is BSD licensed so you can basically do whatever you want with it.
%prep
%setup -q -n %{oname}-%{version}
%build
make
%install
rm -rf %{buildroot}
make PREFIX=%{buildroot}%{_prefix} install
#cp %{buildroot}%{_prefix}/bin/vmtouch /usr/bin/
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
%{_prefix}
%attr(0755,root,root)
%{_prefix}/bin/*
%doc
%changelog
*  Mon Nov 04 2019 <yangyidba> 1.3.1-1
   vmtouch 1.3.1

其中 spec file 由 %开头的宏定义的 域段落 组成。我们可以在不同的段落写执行shell命令来完成编译,安装等功能,本文重点讲核心部分。

文件头 定义了软件的相关名字,版本,介绍,软件包所采用的版权规则,源代码路径。

需要注意的是安装软件依赖的其他基础组件 ,比如安装redis 要使用

BuildRequires: zlib-devel #制作rpm包时,所依赖的基本库 Requires: zlib gcc tcl jemalloc #安装rpm包时,所依赖的软件包

%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卸载后执行的脚本

四 打包

spec文件编写完成,我们就可以使用 rpmbuild 打包. 包分为两种一种是标准的 RPM包,直接生成二进制文件的。另外一种是SRPM 包,带有源代码的。

rpmbuild -ba program.spec

-ba 参数 会创建两个包:RPM 会保存至 ~/rpmbuild/RPMS,SRPM 会保存至 ~/rpmbuild/SRPMS。

如果只想创建 RPM, 可以执行:

rpmbuild -bb vmtouch.spec

如果只想创建 SRPM(不需要执行 %prep 或 %build 或其他阶段),请执行:

rpmbuild -bs vmtouch.spec

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二 RPM 基础介绍
    • 2.1 初始化rpmbuild
    • 三 spec 文件语法
    • 四 打包
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档