rpm 卸载_工具|学习RPM打包

一 前言

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

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

二 RPM 基础介绍

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

2acba010a543ab7bf1e3cdfd685eea1c.png

2.1 初始化rpmbuild

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

sudo yum install make gcc rpmbuild

mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

各个目录的用途如下:

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,否则会编译报错 )

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的基础语法结构

%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 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

五 参考文章

https://blog.csdn.net/get_set/article/details/53453320

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值