RPM安装包的制作和使用


着急和便当
着急和便当 2022-09-29 09:55:46 52865
分类专栏: 资讯

博客主页:https://tomcat.blog.csdn.net
博主昵称:农民工老王
主要领域:Java、Linux、K8S
期待大家的关注?点赞?收藏⭐留言?
家乡

1 RPM简介

RPM是Red-Hat Package Manager的缩写,其中文意思是红帽软件包管理器,应用于Red-Hat、CnetOS、Fedora、OpenLinux、中科方德 等Linux操作系统。可以便捷地执行软件的安装、卸载、升级。我们通过YUM下载和安装的软件,就是通过RPM实现的打包和分发。
本文以一个释放文件到指定目录的RPM安装程包为例,讲解其制作流程和测试使用方法。

2 RPM安装包制作

2.1 环境准备

推荐在CentOS 7 环境下制作安装包。首先需要在root用户下运行yum install rpm-build -y命令以安装打包工具。

2.2 设置打包工作区

在root下运行命令mkdir -pv ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS,BUILDROOT}创建打包工作区的目录布局。下表是各个目录的具体用处。

目录用途
BUILD这是构建和编译安装包的临时目录。
RPM二进制 RPM 在此处创建,在不同的构架的子目录中,例如在子目录 x86_64 和 noarch 中。
SOURCES此处打包程序设置了压缩的源代码存档和补丁。rpmbuild 命令会在此处查找它们。
SPECS打包程序在此处放置 SPEC 文件。
SRPMS当 rpmbuild 用于构建 SRPM 而不是二进制 RPM 时,此处会创建生成的 SRPM。
BUILDROOT编译后生成的软件临时安装目录

2.3 准备打包源文件

  1. 创建 <软件名>-<软件版本>/<软件目标安装路径> 的文件夹。本示例的软件名是SampleFile,版本为1.1.0,期望在用户执行安装时,安装到/opt/wja/files文件夹,那么需要创建的文件夹就是SampleFile-1.1.0/opt/wja/files,这个文件夹是一个相对路径,因此可以在任意目录下运行 mkdir -p SampleFile-1.1.0/opt/wja/files完成创建;
  2. 将需要安装释放到用户计算机上的文件复制到上一步创建的文件夹中;
  3. 打包 <软件名>-<软件版本> 文件夹(包含文件夹本身这一层)为 <软件名>-<软件版本>.tar.gz 。本示例中应执行的命令为tar -zcf SampleFile-1.1.0.tar.gz SampleFile-1.1.0 ;
  4. 将打包好的文件 <软件名>-<软件版本>.tar.gz 复制到 /root/rpmbuild/SOURCES ,本案例应执行的命令为 mv SampleFile-1.1.0.tar.gz /root/rpmbuild/SOURCES/ ;

2.4 SPEC文件撰写

2.4.1 SPEC文件简介

您可以将 SPEC 文件理解为 rpmbuild 实用程序用来构建 RPM 的方法。SPEC 文件通过在在 Preamble 和 Body 部分中定义若干指令向构建系统提供必要的信息。Preamble 部分包含一系列元数据项目。Body 部分的指令实现具体的构建和安装。
下表展示了 Preamble 部分中的常用指令:

指令含义
Name软件包的基本名称,应该与 SPEC 文件名匹配。
Version软件的上游版本号。
Release本版软件的发布次数。通常,将初始值设置为 1%{?dist},并在软件包的每个新版本中递增它。构建新 Version 软件时,重置为 1。
Summary软件包的简短单行摘要。
License打包软件的许可证。
URL有关程序的更多信息的完整 URL。大多数情况下,这是被打包的软件的上游项目网站。
Source0上游源代码压缩存档的路径或 URL(未修补,补丁在别处处理)。这应该指向存档的可访问且可靠的存储,例如上游页面,而不是打包程序的本地存储。如果需要,可以添加更多 SourceX 指令,每次增加数量,例如 Source1、Source2 和 Source3 等。
Patch如有必要,适用于源代码的第一个补丁名称。
BuildArch如果软件包不依赖于构架,例如,如果完全使用解释的编程语言编写,请将其设置为 BuildArch: noarch。如果没有设置,软件包会自动继承构建它的机器的架构,例如 x86_64。
BuildRequires构建使用编译语言编写的程序所需的以空格分隔的软件包列表。BuildRequires 可能有多个条目,每个条目在 SPEC 文件中独立存在。
Requires软件在安装后需要运行的软件包列表,用逗号或空格分隔。Requires 可能有多个条目,每个条目在 SPEC 文件中独立存在。
Requires还可以约定软件的最低版本,例如:Requires: jre-headless >= 1.8
ExcludeArch如果某一部分软件无法在特定的处理器架构上运行,您可以在此处排除该体系结构。
ConflictsConflicts 颠倒 Requires。如果软件包与 Conflicts 匹配,则无法独立安装该软件包,具体取决于 Conflict 标签是安装在已安装的软件包中,还是安装的软件包中。
Obsoletes这个指令会根据 rpm 命令直接在命令行中使用,还是由更新或依赖性解析器执行更新而改变更新的工作方式。在命令行中使用时,RPM 将删除与正在安装的软件包过时的软件包匹配的所有软件包。当使用更新或依赖项解析程序时,包含匹配 Obsoletes: 的软件包会添加为更新并替换匹配的软件包。
Provides如果 Provides 添加到软件包中,则软件包可以由其名称以外的依赖项引用。

下表展示了Body 部分中的常用指令 :

指令含义
%descriptionRPM 中打包的软件包的完整描述。这种描述可跨越多行,可分为几个段落。
%prep用于准备要构建的软件的命令或一系列命令,例如解压缩 Source0 中的存档。此指令可以包含 shell 脚本。
%build用于将软件构建到计算机代码的命令或一系列命令(用于编译语言)或字节代码(用于一些解释语言)。
%install将所需构建工件从 %builddir (构建进行的位置)复制到 %buildroot 目录中的命令或一系列命令(其中包含要打包的文件的目录结构)。
%check用于测试软件的命令或一系列命令。这通常包括单元测试等内容。
%files将在终端用户系统中安装的文件列表。
%changelog记录不同 Version 或 Release 构建之间软件包发生的更改。

2.4.2 SPEC文件示例

在/root/rpmbuild/SPECS/文件夹下创建SampleFile.spec文件(这里的文件名不影响打包流程,可以按需自定义),并将下列文本写入该文件中。

Name: SampleFile
Version: 1.1.0
Release: release
Summary: SampleFile RPM Setup File
Summary(zh_CN): SampleFile RPM 版
AutoReqProv: no
License: EULA
Group: Applications/System
Vendor: wja
Buildarch: x86_64
Source0: %{name}-%{version}.tar.gz
%description
This is just for importing some files.
%description -l zh_CN
这只是用于导入一些文件。

%prep
rm -rf $RPM_BUILD_ROOT/*

%setup -q

%install
echo "%{summary}正在构建"
install -d $RPM_BUILD_ROOT/
cp -a * $RPM_BUILD_ROOT/
exit 0

%pre
mkdir -p /opt/wja/files
diskMsg=$(df /opt/wja/files | grep /)
array=(${diskMsg// / })
freeMb=$((array[3]/1024))
needMb=100
if [[ $needMb -gt ${freeMb} ]] ;then
    output_red "当前计算机磁盘存储空间不足。仅剩余 ${freeMb} Mb。顺利安装运行 SampleFile 需要 $needMb Mb 磁盘空间。"
    echo "退出中……"
    exit 1
else
    echo "当前磁盘剩余${freeMb} Mb。"   >/dev/null 2>&1
fi

%post
output_green() {
  echo -e "\033[32m$1 \033[0m"
}

output_green "文件已经释放到/opt/wja/files"

%preun

%postun

%files
/opt/wja/files
%doc

%changelog
* Mon Feb 28 2022 wangjingan <wja91@qq.cn>
- first build
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

上述spec文件中的第26行exit 0是为了忽略install过程中可能出现的报错,保证不因报错而退出。Body部分的其他指令过程也可以在末尾使用 exit 0 用来忽略报错。

上述spec文件中的第33行needMb变量的值表示安装软件所需的磁盘空间。在用户安装过程中,安装程序会检测磁盘空间,如果小于这个值,就会提醒用户,并退出安装。因此needMb的值需要根据您的实际需要进行修改。

2.5 构建安装包

运行 rpmbuild -bb --nodigest --nosignature /root/rpmbuild/SPECS/<SPEC文件名> 执行安装包构建,在本示例中,应执行的命令为rpmbuild -bb --nodigest --nosignature /root/rpmbuild/SPECS/SampleFile.spec
/root/rpmbuild/RPMS/ x86_64 下就是构建好的安装包,可以按要求将其重命名。

3 RPM安装包使用命令

  • 安装:rpm -ivh <rpm文件名> ,例如:rpm -ivh SampleFile-1.1.0-release.x86_64.rpm
  • 卸载:rpm -e SampleFile-1.1.0-release.x86_64,如果您在安装后有将释放的文件移动或者删除,那么在卸载时可能会报错remove failed: No such file or directory,这是正常现象,不必管他。如果卸载过程中出现其他报错并退出,则用如下命令卸载:rpm -e --noscripts SampleFile-1.1.0-release.x86_64
  • 查看信息:rpm -qi SampleFile-1.1.0-release.x86_64
  • 查看释放的文件清单:rpm -ql SampleFile-1.1.0
  • 检查是否安装:rpm -qa | grep -i SampleFile-1.1.0-release.x86_64

如需转载,请注明本文的出处:农民工老王的CSDN博客https://blog.csdn.net/monarch91 。

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux17944 人正在系统学习中

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=10949
赞同 0
评论 0 条
着急和便当L1
粉丝 0 发表 17 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2950
【软件正版化】软件正版化工作要点  2872
统信UOS试玩黑神话:悟空  2833
信刻光盘安全隔离与信息交换系统  2728
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1261
grub引导程序无法找到指定设备和分区  1226
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  165
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  163
点击报名 | 京东2025校招进校行程预告  163
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  159
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
如何玩转信创开放社区—从小白进阶到专家 15
信创开放社区邀请他人注册的具体步骤如下 15
方德桌面操作系统 14
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
我有15积分有什么用? 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!