RPM包的概念以及制作过程

news2024/10/6 18:34:22

RPM包的概念以及制作过程

    • 1. 软件包管理工具的背景介绍
    • 2. RPM(Red-Hat Package Manager)
      • 2.1 rpm包的命名规范
      • 2.2 rpm的基础命令
      • 2.3 安装与卸载
    • 3. RPM包的制作
      • 3.1 源码包的制作
      • 3.2 .spec配置文件的构建
      • 3.3 rpmbuild命令编译验证
    • 4. 软件仓库制作
      • 4.1 安装createrepo_c工具
      • 4.2 构建仓库
      • 4.3 配置仓库
      • 4.4 配置yum源
      • 4.5 软件安装与验证
    • 5. 使用场景

1. 软件包管理工具的背景介绍

早期,人们需要通过下载软件源码,然后进行编译、安装等操作,这一系列过程十分繁琐。

为了方便用户能够在Linux系统中更加方便地安装软件,因此便又了软件包管理工具。

  • rpm:CentOS/Red Hat/Fedora均采用rpm工具,其对应的软件安装包后缀为.rpm
  • dpkg:Ubuntu/debian均采用dpkg工具,其对应的软件安装包后缀为.deb

当然,还有更高级的软件管理工具yum和apt,相比于前者,yum和apt能够自动解决安装软件包的直接依赖,能够极大程度地降低用户安装软件的难度和安装细节。

2. RPM(Red-Hat Package Manager)

2.1 rpm包的命名规范

标准的rpm包需要按照一定的规范来组织:

{name}-{version}-{release}.aarch64.rpm		# arm架构的二进制包
{name}-{version}-{release}.noarch.rpm		# 没有架构要求的二进制包
{name}-{version}-{release}.src.rpm			# 未编码的源码包

2.2 rpm的基础命令

rpm -qpi xxx 	# 查看指定rpm包的相关信息
rpm -Uvh xxx	# 如果该软件没有安装过则直接安装,如果已经安装,则升级到最新版本

在这里插入图片描述

  • 如果 xxx-1.8.rpm 这个软件包已经存在,并且版本号比当前已安装的 1.5 版本要新,那么 rpm 命令将会执行升级操作。这意味着它会卸载旧版本的 xxx,然后安装新的 1.8 版本。
    如果 xxx-1.8.rpm 这个软件包之前没有安装过,那么 rpm 命令会直接安装 1.8 版本的 xxx。

2.3 安装与卸载

# 1. rpm包的安装
rpm -ivh xxxxx.rpm
  • i:表示安装模式,告诉 rpm 命令要执行安装操作。
  • v:表示启用详细模式(verbose),在安装过程中显示更多的信息。
  • h:表示显示进度条(hash),在安装过程中显示进度条,以便你可以看到安装进度。
# 2. 卸载
rpm -e xxx		# -e 表示卸载指定软件

ps:命令会根据软件包的名称查找并卸载相应的软件包,不需要包含 .rpm 后缀
如果提供了完整的软件包文件名(包括 .rpm 后缀),rpm 命令可能会提示找不到该软件包,因为它会尝试查找与提供的完整文件名匹配的软件包名称。
所以,简单地提供软件包的名称即可。

ps:由于某些软件在安装的时候存在一定的依赖关系,比如安装A,需要提前安装B,安装B需要提前安装C。因此想要直接卸载C的话是不允许的,因为C已经被B所依赖。必须逐层卸载A,B,才会被允许卸载C。

在这里插入图片描述

3. RPM包的制作

3.1 源码包的制作

# 1. 创建源码文件夹mypkg-0.1
mkdir mypkg-0.1
# 2. 进入文件夹并创建源码文件main.c和编译文件Makefile
vim main.c
// 3. 随便写一段C程序
#include <stdio.h>
	int main(){
	printf(“Hello China! GOGOGO!);
	return 0;
}
# 4. 定义源码的编译方式
vim Makefile

# 5. 下面内容主要是定义对源程序代码的编译方式
all:
		gcc -g -o mypkg main.c
install:
		install -m 0755 -D mypkg $(DESTDIR)/usr/bin/mypkg
clean:
		rm -rf *.o
mkdir rpmbuild		# 6. 在~目录下创建rpmbuild文件,并进入该目录;
rpmdev-setuptree	# 7. 在该目录生产标准的rpm打包目录结构

将生成以下6个文件夹(如果有的目录没有,那么自己手动创建即可):

  • BUILD:源码解压后存放的目录;
  • BUILDROOT:一个临时仓库。在打包的过程中,会先将软件文件复制进来,然后进行编译、安装、打包操作生产rpm文件,随后分发到RPMS和SPRMS文件夹下,随后被清空准备下一个软件的打包工作;
    • 好处:能够提供一种有效、可靠且一致的方式来创建、分发和安装软件。
  • RPMS:制作完成后的rpm包存放目录;
  • SOURCES:用于存放软件包的源代码、补丁文件以及其他构建所需的文件。
    在.spec文件中,通常使用 %setup 命令将软件包的源代码解压到 BUILD 目录,而这些源代码通常存放在 SOURCES 目录下。
  • SPECS:存放RPM规范文件(.spec文件)。.spec文件其中包含了构建RPM包的详细信息,包括软件包名称、版本、依赖关系、安装目录等等。
  • SRPMS:src格式的rpm文件。
btar -czvf mypkg-1.0.tar.gz mypkg-1.0/		# 8. 打包mypkg-1.0

3.2 .spec配置文件的构建

# 9. 进入/rpmbuild/SPECS/ ,生成.spec文件模版
rpmdev-newspec mypkg.spec
# 10. 对.spec文件进行内容补充(请灵活替换):
	# - URL随便写的
	# -  黄色字体的Name、Version需要对应外面的文件夹

在这里插入图片描述

3.3 rpmbuild命令编译验证

# 11. 同时生产二进制和src格式的rpm文件
rpmbuild -ba mypkg.spec
# 分别进入RPMS和SRPMS查看,可以发现rpm成功创建:
sudo rpm -ivh mypkg-0.1-1.el8.aarch64.rpm  # 12. 安装mypkg
mypkg			# 13. 执行程序

在这里插入图片描述

4. 软件仓库制作

4.1 安装createrepo_c工具

# 1. 工具安装
yum install createrepo_c

在这里插入图片描述

4.2 构建仓库

sudo mkdir /opt/myrepo 				# 2. 创建仓库文件夹
mv aarch64/ /opt/myrepo/aarch64		# 3. 将rpm文件都移入仓库

在这里插入图片描述

4.3 配置仓库

# 4. 
sudo createrepo /etc/myrepo

在该目录下创建一个repodata文件夹,是关于已有aarch64软件包的元数据,以便 yum 能够正确地识别和管理它们。

在这里插入图片描述

4.4 配置yum源

sudo vim /etc/yum.repo.d/myrepo.repo    # 5. 新建myrepo.repo配置文件

在这里插入图片描述

# 6. 重新生成 yum 软件包仓库的元数据缓存。
# 这个命令会从配置文件中指定的所有仓库中下载软件包的元数据,
# 并将这些元数据保存在本地,以加速后续的软件包查询和安装操作。
yum makecache 

在这里插入图片描述

4.5 软件安装与验证

sudo yum install mypkg		# 7. 使用yum install安装mypkg

在这里插入图片描述

mypkg					# 8. 执行软件

5. 使用场景

RPM(Red Hat Package Manager)包是一种常见的软件包管理格式,主要用于在基于 RPM 的 Linux 发行版中(如 Red Hat Enterprise Linux、Fedora、CentOS等)进行软件安装、升级和管理。RPM 包在多种场景下都有用武之地:

  • 软件安装和管理: RPM 包是一种用于分发、安装和管理软件的标准格式。通过使用 RPM 包,用户可以轻松地安装新软件,升级现有软件,或者卸载不再需要的软件。这种包管理方式简化了软件部署和维护过程。

  • 系统配置和工具: RPM 包不仅可以用于安装应用程序,还可以用于分发系统配置文件、工具和实用程序。这有助于在不同系统上保持一致的配置和工具集。

  • 库和依赖管理: 在开发中,RPM 包常用于分发共享库(动态链接库)以及它们的开发文件。它们还能够自动管理软件包之间的依赖关系,确保所需的库和工具能够正确地安装和链接。

  • 定制化分发: RPM 包可以被用于创建定制化的 Linux 发行版或系统映像。系统管理员可以将他们自己的软件和配置打包为 RPM 包,以便在不同系统上进行一致的部署。

  • 系统更新: RPM 包也用于分发系统更新、安全补丁和错误修复。系统管理员可以使用 RPM 包管理工具来升级系统中的软件包,以保持系统的安全性和稳定性。

  • 自动化和部署: 在自动化部署和配置管理方面,RPM 包可以通过脚本和配置文件进行批量安装和配置,从而简化大规模环境中的软件管理。

总之,RPM 包在 Linux 系统中扮演着关键的角色,用于分发和管理各种类型的软件和资源。无论是用于开发、系统管理还是定制化分发,RPM 包都是一个重要的工具。

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

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

相关文章

QChart:数据可视化(用图像形式显示数据内容)

1、数据可视化的图形有&#xff1a;柱状/线状/条形/面积/饼/点图、仪表盘、走势图&#xff0c;弦图、金字塔、预测曲线图、关系图、数学公式图、行政地图、GIS地图等。 2、在QT Creator的主页面&#xff0c;点击 欢迎》示例》右侧输入框 输入Chart&#xff0c;即可查看到QChar…

鲁棒优化入门(5)—Matlab+Yalmip求解鲁棒优化编程实战

之前的博客&#xff1a;鲁棒优化入门&#xff08;二&#xff09;——基于matlabyalmip求解鲁棒优化问题 去年发布了使用Yalmip工具箱求解鲁棒优化问题的博客之后&#xff0c;陆陆续续有朋友问我相关的问题&#xff0c;有人形容从学习这篇博客到求解论文中的鲁棒优化问题&#x…

redis--主从复制

redis主从复制 Redis 主从复制是一种用于实现数据复制和数据备份的机制&#xff0c;它允许将一个 Redis 服务器的数据复制到其他 Redis 服务器上。主从复制在 Redis 中通常用于构建高可用性架构、读写分离以及数据分析等场景。 主从复制的角色 主服务器&#xff08;Master&a…

互斥锁、自旋锁、读写锁和文件锁

互斥锁 互斥锁&#xff08;mutex&#xff09;又叫互斥量&#xff0c;从本质上说是一把锁&#xff0c;在访问共享资源之前对互斥锁进行上锁&#xff0c;在访问完成后释放互斥锁&#xff08;解锁&#xff09;&#xff1b;对互斥锁进行上锁之后&#xff0c;任何其它试图再次对互斥…

python中文热词统计demo

背景 老人家不识字&#xff0c;在城市生活不便&#xff0c;喜欢去基督教堂&#xff0c;但是听不懂&#xff0c;也难以和姊妹们(老头老太太们)交流。于是想教他识字&#xff0c;从哪里教起呢&#xff0c;不如从 《圣经》的常用字词开始吧&#xff0c;于是花了几分钟把《圣经》热…

LeetCode 周赛上分之旅 #40 结合特征压缩的数位 DP 问题

⭐️ 本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架&#xff0c;你的思考越抽象&#xff0c;它能覆盖的问题域就越广&#xff0c;理解难度…

构建 NodeJS 影院微服务并使用 docker 部署它(02/4)

一、说明 构建一个微服务的电影网站&#xff0c;需要Docker、NodeJS、MongoDB&#xff0c;这样的案例您见过吗&#xff1f;如果对此有兴趣&#xff0c;您就继续往下看吧。 图片取自网络 — 封面由我制作 这是✌️“构建 NodeJS 影院微服务”系列的第二篇文章。 二、对第一部分的…

8.3.tensorRT高级(3)封装系列-tensor封装,索引计算,内存标记及自动复制

目录 前言1. Tensor封装总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-tensor封装&#xff0c;索引计算&a…

cuOSD(CUDA On-Screen Display Library)库的学习

目录 前言1. cuOSD1.1 Description1.2 Getting started1.3 For Python Interface1.4 Demo1.5 Performance Table 2. cuOSD案例2.1 环境配置2.2 simple案例2.3 segment案例2.4 segment2案例2.5 polyline案例2.6 comp案例2.7 perf案例 3. cuOSD浅析3.1 simple_draw函数 4. 补充知…

MacBook上有Face ID的梦想还没破灭,但是为什么迟迟不来呢

苹果公司详细介绍了Face ID与Touch ID相比的优势&#xff0c;尤其是在安全方面。因此&#xff0c;令人惊讶的是&#xff0c;该功能还没有进入MacBook&#xff0c;尤其是在显示方面。值得庆幸的是&#xff0c;一项新专利表明&#xff0c;在某个时候&#xff0c;这可能是一种可能…

《修图大杀器》PS beta 25.0最新版安装(无需魔法)和Draggan(拖拽式修图)安装

个人网站&#xff1a;https://tianfeng.space 文章目录 psbeta下载安装1.注册2.安装ps beta2.安装神经网络滤镜3.使用 Draggan下载安装 psbeta下载安装 链接&#xff1a;https://pan.baidu.com/s/1XbxSAFoXh0HDz6YbkrAzDg 提取码&#xff1a;e8pn 1.注册 https://account.a…

C++--深入类和对象(下)

续接上篇&#xff0c;接着来谈我们的类和对象的深入的知识&#xff0c;话不多说&#xff0c;我们即刻出发...... 目录 1.友元 1.1友元函数 输出流运算符的重载 1.2友元类 2.再谈构造函数 2.1构造函数体赋值和初始化列表 构造函数体赋值为何不能叫做初始化&#xff1f; …

一个模型解决所有类别的异常检测

文章目录 一、内容说明二、相关链接三、概述四、摘要1、现有方法存在的问题2、方案3、效果 五、作者的实验六、如何训练自己的数据1、数据准备2、修改配置文件3、代码优化修改4、模型训练与测试 七、结束 一、内容说明 在我接触的缺陷检测项目中&#xff0c;检测缺陷有两种方法…

TMS320C54X 的软件编程

1、DSP 编程工具与流程 DSP 的设计目标是进行数字信号处理&#xff0c;在硬件设计的基础上选择好一定的优化算法并 通过编程在 DSP 芯片上实现是 DSP 技术的核心内容。对 DSP 进行编程&#xff0c;目前最有效的语言 工具仍是 DSP 汇编语言&#xff0c;同时为方便用户用高级语言…

每日一题之数值的整数次方

数值的整数次方 描述&#xff1a; 实现函数 double Power(double base, int exponent)&#xff0c;求 base 的 exponent 次方。 注意&#xff1a; 1.保证base和exponent不同时为0。 2.不得使用库函数&#xff0c;同时不需要考虑大数问题 3.有特殊判题&#xff0c;不用考虑小数…

mysql+jdbc+servlet+java实现的学生在校疫情信息打卡系统

摘 要 I Abstract II 主 要 符 号 表 i 1 绪论 1 1.1 研究背景 1 1.2 研究目的与意义 2 1.3 国内外的研究情况 2 1.4 研究内容 2 2 系统的开发方法和关键技术 4 2.1 开发方法 4 2.1.1 结构化开发方法 4 2.1.2 面向对象方法 4 2.2 开发技术 4 2.2.1 小程序开发MINA框架 4 2.2.2 …

[Spring]事务相关

事务隔离级别 Spring 提供了以下五种事务隔离级别&#xff0c;用于控制多个事务之间的相互影响&#xff1a; DEFAULT&#xff08;默认隔离级别&#xff09;&#xff1a; 使用底层数据库的默认隔离级别。通常为数据库的默认隔离级别&#xff0c;如 MySQL 是 REPEATABLE READ&am…

逆向退货售后设计

一&#xff0c;项目背景 退货售后流程&#xff1a;涉及订单&#xff0c;票&#xff0c;款 二&#xff0c;方案一 三&#xff0c;方案二

残差网络实现

代码中涉及的图片实验数据下载地址&#xff1a;https://download.csdn.net/download/m0_37567738/88235543?spm1001.2014.3001.5501 代码&#xff1a; import torch import torch.nn as nn import torch.nn.functional as F #from utils import load_data,get_accur,train i…

只需5分钟,了解常见的四种限流算法

一、计数器算法 在指定周期内累加访问次数&#xff0c;当访问次数达到设定的阈值时&#xff0c;触发限流策略&#xff0c;当进入下一个时间周期时进行访问次数的清零。如图所示&#xff0c;我们要求3秒内的请求不要超过150次&#xff1a; 但是&#xff0c;貌似看似很“完美”的…