制作rpm安装包时如何处理升级

news2024/11/15 21:44:45

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

目录

  • 升级命令
  • 执行顺序
  • 重要参数
  • 版本问题
  • 注意事项

升级命令

rpm安装包的升级命令为 rpm -Uvh ${安装包文件名} 。执行此命令后,会先安装新版本的rpm安装包,然后再卸载旧版本。
请添加图片描述如果在执行升级时,当前计算机的rpm数据库中没有该软件的任何版本,那么升级的执行效果将和新安装一样。

执行顺序

升级时,spec中各个阶段的脚本将按以下顺序运行:

%pretrans of new package
%pre of new package
(package install)
%post of new package
%triggerin of other packages (set off by installing new package)
%triggerin of new package (if any are true)
%triggerun of old package (if it’s set off by uninstalling the old package)
%triggerun of other packages (set off by uninstalling old package)
%preun of old package
(removal of old package)
%postun of old package
%triggerpostun of old package (if it’s set off by uninstalling the old package)
%triggerpostun of other packages (if they’re set off by uninstalling the old package)
%posttrans of new package

我们在制作rpm安装包,就需要根据这个执行顺序,考虑新旧两个版本安装包的spec文件的内容。

重要参数

在rpm安装过程中,每个阶段的脚本被调用时,会接收到一个参数$1。此参数的含义是在操作完成时留在系统上的此名称的包的数量。因此,对于安装、升级和卸载的常见情况,我们有:

installupgradeuninstall
%pretrans$1 == 1$1 == 2(N/A)
%pre$1 == 1$1 == 2(N/A)
%post$1 == 1$1 == 2(N/A)
%preun(N/A)$1 == 1$1 == 0
%postun(N/A)$1 == 1$1 == 0
%posttrans$1 == 1$1 == 2(N/A)

请注意,如果安装了同一软件包的多个版本,这些值会有所不同(这主要发生在可并行安装的软件包中,如内核和multilib软件包。但是,当有报错阻止了软件包升级完成时,也可能发生这种情况。)因此,以下代码算是一个最佳实践:

%pre
if [ $1 -gt 1 ] ; then
    # echo " 进入升级!"
    # 输入您的逻辑。
fi

对于%pre和%post脚本,应该检查$1是否大于1,而不是检查是否等于2。

在编写spec脚本时,此参数可以在升级流程中发挥较大的作用。

版本问题

版本的命名规则最好统一,推荐三段式的${主版本号}.${次版本号}.${修订号}。应该避免上个版本三段式,下个版本二段式。
如果在开发前期没有规划好,或者后期计划有变,出现三段式和二段式混用,rpm也能进行版本号的比较。需要注意的是,在rpm看来,任意${主版本号}.${次版本号}.${修订号}在主版本号和次版本号相同的情况下,都会比二段式的版本更加新,即使修订号为零,也是如此。
如下图所示,rpm认为4.0.0和4.0是不同的版本,且4.0.0是较新的版本。
在这里插入图片描述

注意事项

如果在升级时,不小心输入为安装指令,这种情况下会同时存在新旧两个版本的软件,如果这不是你所期望的,可以在安装命令运行完成后,再通过rpm -e 卸载旧版本。如果两个版本安装在同一个目录下,新旧文件混合在一起,其实也不用担心,在执行卸载时,rpm会按照软件包中的文件列表将文件逐个删除,如果其中有文件属于别的软件包(即两个软件包拥有一个名字相同的文件),则rpm并不删除。所以卸载不会导致新版本软件不可用。


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1272307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web前端tips:js继承——寄生组合式继承

上篇文章给大家分享了 js继承中的 寄生式继承 web前端tips:js继承——寄生式继承 今天给大家分享一下 js 继承中的 寄生组合式继承 寄生组合式继承 寄生组合式继承是一种结合了寄生式继承和组合式继承的方式,它的目标是减少组合式继承中多余的调用父…

力扣295. 数据流的中位数(java,堆解法)

Problem: 295. 数据流的中位数 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 由于该题目的数据是动态的我们可以维护两个堆来解决该问题 1.维护一个大顶堆,一个小顶堆 2.每个堆中元素个数接近n/2;如果n是偶数,两个堆中的数据个数…

最简单的链路追踪收集器

链路追踪可帮助您快速了解程序服务之间的调用关系,并快速洞悉内部发生的情况。主流的链路追踪系统有zipkin,jaeger,skywalking等,由于opentelemetry的存在,都具有opentelemetry的转换器。 我们利用opentelemetry来进行zipkin,jaeger,skywalk…

在编程中遇到的问题总结

IDEA空包粘黏问题 创建好目录以后会发现idea自动将空包合并在一起了,而且点击设置里面也没有Compact Middle Package Compact Middle Package如果不在设置的主面板上,则点击Tree Appearance,会发现Compact Middle Package在Tree Appearance里…

git-5

1.GitHub为什么会火? 2.GitHub都有哪些核心功能? 3.怎么快速淘到感兴趣的开源项目 github上面开源项目非常多,为了我们高效率的找到我们想要的资源 根据时间 不进行登录,是没有办法享受到高级搜索中的代码功能的,登录…

Glove学习笔记

global vectors for word representation B站学习视频 1、LSA与word2vec 我们用我们的见解,构建一个新的模型,Glove,全局向量的词表示,因为这个模型捕捉到全局预料的统计信息。 LSA:全局矩阵分解word2vec:局部上下文…

基于Linux下搭建NextCloud构建自己的私有网盘

NextCloud是什么 Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步、共享、版本控制、团队协作等功能。它的客户端覆盖了Windows、Mac、Android、iOS、Linux 等各种平…

《opencv实用探索·五》opencv小白也能看懂的图像腐蚀

1、图像腐蚀原理简单理解: 腐蚀是形态学最基本的操作,都是针对白色部分(高亮部分)而言的。即原图像中高亮部分被蚕食,得到比原图更小的区域。 2、图像腐蚀的作用: (1)去掉毛刺&…

在idea中写sql语句,向数据库添加数据时,添加的字符串却显示???,解决方法

这是字符编码的问题 如何解决: 在idea的配置数据库的地方修改下边:mysql8版本和5版本差距不大。 在URL后加?useUnicodetrue&characterEncodingUTF8 例如 原来:String url “jdbc:mysql://localhost:3306/stu”; 改变后:St…

Android的启动模式

Android的四种启动模式:standard、singleTop、singleTask和singleInstance。 1.standard Android默认的启动模式是standard,每启动一个Activity,它都会在返回栈中入栈,并处于栈顶,不管这个返回栈是否存在这个activit…

软件工程--需求工程--学习笔记(超详细)

软件需求工程是软件开发周期的第一个阶段,也是关系到软件开发成败最关键阶段,本章讲解需求的基础知识和需求工程的关键活动。这些知识对于结构化方法、面向对象方法、面向服务方法等都是适用的 本文参考教材:沈备军老师的《软件工程原理》 目…

JenKins快速安装与使用,Gitlab自动触发Jenkins

一、JenKins 0.准备,配置好环境 1)Git(yum安装) 2)JDK(自行下载) 3)Jenkins(自行下载) 1.下载安装包 进官网,点Download下方即可下载。要下…

ROS2+STM32小车红外对射光电计数器模块资料

数据:一个周长内有20个孔洞或者20个分隔。外径:6.8cm 图片不是实物图,是示意图 因为没有串口,所以不可能会发送出数字的,就是通过电压变化次数来计算距离或者其他数据 有遮挡时,输出高电平,无遮…

Java实现堆

堆是一种基于完全二叉树的数据结构,它分为大根堆和小根堆。在大根堆中,每个节点的值都大于或等于其子节点的值;而在小根堆中,每个节点的值都小于或等于其子节点的值。 在Java中,我们可以使用数组来表示堆。由于完全二…

AIGC(生成式AI)试用 14 -- 画画

AIGC,内容生成,多多少少都可以达成,好与坏就看你如何引导、如何生成。 画画?本不想让写文本的去生成图片,但忍不住诱惑,小试一把,毕竟文档也是会要个插图的。 CSDN创作助手显然为文字生成而…

【PPT模板合集】关于自制内容的PPT模板合集,包括原创的PPT及改良内容的PPT,适合科研/比赛/工作

【PPT模板合集】关于自制内容的PPT模板合集,包括原创的PPT及改良内容的PPT,适合科研/比赛/工作 零、前言一、校园层面的PPT模板1.1 各种毕业答辩1.2 夏令营答辩1.3 奖学金答辩1.4 比赛/项目答辩 二、学术层面的PPT模板2.1 学术汇报2.2 会议海报类型 三、…

“学习Python能用来做什么?”

文章目录 前言01 Web开发为什么需要Web框架应该使用哪种Python Web框架Django和Flask有什么区别如何选择 02 数据科学机器学习是什么将Python用于机器学习数据分析和数据可视化使用Python进行数据分析/可视化如何用Python学习数据分析/可视化 03 脚本什么是脚本? 04…

STM32---时钟树

写在前面:一个 MCU 越复杂,时钟系统也会相应地变得复杂,如 STM32F1 的时钟系统比较复杂,不像简单的 51 单片机一个系统时钟就 可以解决一切。对于 STM32F1 系列的芯片,其有多个时钟源,构成了一个庞大的是时…

Linux下的文件IO之系统IO

1. 知识点 读入写出,切记以我们程序为中心向文件或者别的什么东西读入写出(输入流输出流) 人话就是 文件向我们程序就是读入 程序向文件或者别的什么就是写出 2. open打开文件 open.c /****************************************************…

算法:Java计算二叉树从根节点到叶子结点的最大路径和

要求从根节点到叶子结点的最大路径和,可以通过递归遍历二叉树来实现。对于二叉树中的每个节点,我们都可以考虑包含该节点的最大路径和。在递归的过程中,我们需要不断更新全局最大路径和。 具体的思路 递归函数设计: 设计一个递归函…