RPM包制作

news2025/1/22 18:10:21

如何准备编译制作一个RPM包

编译制作RPM包,主要包含如下几个步骤:

  • 规划好制作一个什么样的RPM包
  • 搜集相关的软件和压缩包、补丁
  • 创建SPEC文件
  • 制作RPM包
  • 测试验证RPM包

规划好制作一个什么样的RPM包

一般情况下,有如下几种情况会需要制作RPM包

  • 应用程序: 将应用程序制作为RPM包,通过官方文档下载源码包,并进行编译、安装等方式制作为RPM包,从而省去了反复编译的过程;同时,制作成RPM包的时候,也可以将应用程序添加到服务中,当安装之后,可以直接通过Service的方式来控制应用程序的启停操作。
  • 库文件: 直接将库文件进行封装、打包为RPM包,这种情况下,不需要有编译、安装的操作;
  • 系统配置文件: 有时候配置项比较多,配置文件较为复杂的情况下,可以直接将配置文件制作成RPM包;
  • 文档包: 说明文档较多的时候,可以对文档进行打包,制作成一个RPM包,例如: HTTP文档包、MySQL文档包、Java接口文档包,编译管理;
  • 二进制包、源码包,或者双方都包括: 可以事先规划好我们要制作一个编译好的RPM包(只能装在特定平台上)。或者是需要进行编译的RPM源码包,这种RPM源码包一般是src.rpm结尾,RPM源码包内部是由源码包tar.gz + SPEC文件组成,使用的时候直接在当前平台现编译,编译后在当前平台进行安装即可。 这种RPM包具有平台的普适性。缺点也很明显,就是需要使用者进行手动编译;

创建SPEC文件

SPEC文件是制作RPM的关键所在,SPEC文件中不仅定义了软件包的Name、Version、License、Vendor、URL、Summary、编译依赖、安装依赖等软件的基本信息,还定义了解压、编译、安装、升级时,具体要执行的动作,是否将软件添加到系统服务中, 以及卸载RPM前后,去哪些目录下删除对应的文件,是否要删除相关账号等。SPEC文件将成为RPM包能否制作成功的关键。

SPEC文件主要分为如下几个部分.

  • introduction section

介绍阶段: 软件的基本信息,主要包含rpm -qpi命令所显示的信息

  • Name: 软件 名称
  • Version:版本号, 2.1, 2.4等,不可以用_或者-
  • Release: 发行号,第几次制作RPM包,和版本不同
  • License: 版权信息
  • Group: 软件包数据什么组,必须在/usr/share/doc/rpm-4.11.3/GROUPS 中的组
  • URL: 从哪儿可以获取到该RPM包
  • Packager: 制作者和制作者的邮箱
  • Vendor: 软件提供商
  • Source: 制作rpm包使用的源文件.
  • BuildRoot: 以该目录为根,进行软件的安装工作.
  • BuildRequires: 定义依赖关系. 制作rpm过程所依赖的软件包.requires表示安装过程所依赖的软件包
  • Summary:一行内容简单介绍
  • Description:软件的详细信息描述
  • prep section

将源码包解压到BUILD下的相关过程;

  • build section

configure和make的相关过程;

  • install section

安装过程 make install DESTDIR="%{bildroot}"

  • 脚本段

定义安装和卸载前后执行的脚本,如创建、删除用户等;

  • %pre:安装前执行脚本;
  • %post:安装后执行脚本;
  • %preun:卸载前执行脚本;
  • %postun: 卸载后执行脚本;
  • clean section
  • 删除此前制作过程中buildroot目录下的文件内容;
  • files section

从BUILDROOT中把相关的文件归档合起来,用于最终生成RPM包。 files中列出的文件必须和BUILDROOT中安装的文件一一对应,file中列出来的,在BUILDROOT中必须有,BUILDROOT中安装的,在files中也必须被列出来,否则在制作的时候会失败;

  • change log

主要定义RPM包的修改日志,定义了X时间,X版本号,X进行修改;

制作RPM包

  • 设定好目录结构

RPM的打包环境,需要用普通用户、在家目录下创建rpmbuild,并在其下创建BUILD、RPMS、SOURCES、SPECS、SRPMS等目录结构,用于制作RPM包,每个目录都有特定的作用;

  • BUILD:源代码解压后,会将解压后的文件放入该目录,需要是空目录;
  • BUILDROOT:制作RPM包过程中,将该目录作为虚拟的根目录,用来进行软件包的安装工作。
  • RPMS:制作完成之后的RPM包放入该子目录中.
  • SOURCES:所有搜集的源材料位置,包括源码包,配置文件,补丁文件,说明文档等所有需要打包到RPM包的素材全都放入该目录;
  • SPECS:每一个RPM包的制作都必须有一个SPEC文件,作为制作RPM包的纲领性文件,以软件包的名字命名,以.spec结尾,如: nginx.spec
  • SRPMS: src.rpm格式的RPM包存放位置,RPM的源文件。
  • 将源码文件放到对应目录下
  • 将tar.gz的源码包,和相关要打包的补丁、配置文件等放到SOURCES目录下,所有SOURCES目录下的文件都要在SPEC中被使用,否则制作RPM包的时候会报错。
  • 创建SPEC文件
  • 通过源码 文件和SPEC文件生成RPM包

通过rpmbuild进行制作RPM包,可以通过参数控制,执行到特定的阶段后停止执行;

  • rpmbuild -bp 只执行到prep阶段
  • rpmbuild -bi 执行到install阶段
  • rpmbuild -bc 执行到build阶段
  • rpmbuild -bb 制作二进制格式的RPM包
  • rpmbuild -bs 制作源码格式的RPM包
  • rpmbuild -ba 同时制作二进制和源码包
  • rpmbuild -bl 检测有哪些文件在buildroot存在,但是却在制作的file段没包含

 

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

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

相关文章

MySQL中Innodb 存储引擎的Buffer Pool详解

MYSQL的InnoDB存储引擎为了提高性能,减少磁盘IO,而设计了缓冲池(Buffer Pool)。结构图如下: Buffer Pool 什么是Buffer Pool Buffer Pool即缓冲池(简称BP),BP以Page页为单位&#x…

详解Lombok 的使用,工作原理,优缺点

文章目录Lombok概述Lombok的安装Lombok的具体使用Lombok工作原理Lombok的优缺点Lombok概述 相信大家对于lombok应该都不陌生,Lombok是一个可以大幅减少java模板代码的工具。通俗一点来说,通过添加注解的方式,不需要为类编写常用几个方法&…

stm32f407VET6 系统学习 day05 复位, 时钟,看门狗, 滴答定时器

1. 复位 1.三种类型的复位,系统复位,电源复位,备份复位; 2.复位作用:让程序从头开始运行,恢复到一开始运行的状态 2.stm32 时钟源 1. 5个是时钟源 1.HSI高速内部时钟:RC振荡器,频率为16MHz,精度不高。可…

npm中dependencies与devDependencies的区别

这个问题的出现是我下载npm包中的依赖文件安装错地方了,导致上线项目有问题,顺便一起来看看它们的区别。 一、前言 说白了就是当初学的时候太菜,没注意到它们的区别,也没去查明白。哈哈哈 二、dependencies与devDependencies的区别…

【人工智能与机器学习】——深度学习(学习笔记)

📖 前言:长期以来,图像识别技术一直是人工智能研究领域的难题。近年来,随着算力的提升、物联网与大数据的出现、机器学习算法的快速发展,科学家们终于找到了有效的方法来实现图像识别,这就是基于人工神经网…

【OpenCV-Python】教程:8-2 图像修复 Image Inpainting

OpenCV Python 图像修复 【目标】 去除小噪声和笔画等; 【理论】 大多数人家里都会有一些旧照片,上面有一些黑点,一些笔画等。你想过把它修复回来吗?我们不能简单地在油漆工具中删除它们,因为它只会用白色结构取代黑色结构&a…

代码随想录拓展day4 143.重排链表;141. 环形链表;面试题 02.07. 链表相交

代码随想录拓展day4 143.重排链表;141. 环形链表;面试题 02.07. 链表相交 关于链表的一些应用,基本都用到了快慢指针的思路。对于单链表来说,确定边界,也就是遍历时的终止条件非常重要。 143.重排链表 143. 重排链表…

Web前端105天-day65-ToolChain

ToolChain01 目录 前言 一、Webpack 二、指南 总结 前言 ToolChain01学习开始 一、Webpack 官网:webpack 浏览器仅支持: html css 和 js 三种语言实际开发中: 会使用到其他的一些语言, 例如 TS, sass, scss 等.... 这些语言开发起来更加方便快捷, 但是浏览器不…

pinia 笔记

1、安装 npm i pinia -S2、创建store基本结构 1、在src下创建store文件夹并创建app.js文件,同时编写基本代码结构 // 引入实例化store的函数 import { defineStore } from "pinia";// 实例出一个名为app的store,那appStore是什么?它代表当前…

【SpringMVC】SpringMVC实现文件上传

1.一般的文件上传 1.1 文件上传的必要前提 form 表单的 enctype 取值必须是&#xff1a;multipart/form-data(默认值是:application/x-www-form-urlencoded) enctype:是表单请求正文的类型 method 属性取值必须是 Post 提供一个文件选择域<input type"file" /&…

代码随想录二刷day2

代码随想录复习 文章目录代码随想录复习209.长度最小的子数组&#xff08;滑动窗口&#xff09;76.最小覆盖子串904.水果成篮59.螺旋矩阵2螺旋矩阵1209.长度最小的子数组&#xff08;滑动窗口&#xff09; 209.长度最小的子数组 复习一下滑动窗口&#xff0c;滑窗的复杂度还是…

MySQL时间查询讲解+实战教学(查询本月、上个月、下个月等等的数据)

MySql时间查询 MySql查询当前时间 查询 年-月-日 时:分:秒 select now() 查询 年-月-日 select DATE(CURDATE()) 查询 年-月 select date_format(NOW(),%Y-%m) 查询当前年 select YEAR(CURDATE()) 查询当前月 select MONTH(CURDATE()) 查询当前日 select DAYOFMONTH(NOW()) 查…

【论文简述】Efficient Multi-view Stereo by Iterative Dynamic Cost Volume(CVPR 2022)

一、论文简述 1. 第一作者&#xff1a;Shaoqian Wang、Bo Li 2. 发表年份&#xff1a;2022 3. 发表期刊&#xff1a;CVPR 4. 关键词&#xff1a;MVS、深度学习、动态代价体、GRU、迭代优化 5. 探索动机&#xff1a;由于正则化步骤需要较多的GPU内存和处理时间&#xff0c…

大话JMeter4|不同的并发数可以自动化做压测吗?

1080709 23.5 KB 上节课爱画漫画的小哥哥用漫画形式向大家展示了JMeter的进阶用法&#xff1a;如何搭建InfluxDB&#xff0c;使用更炫酷的Grafana。 看到很多小伙伴觉得看的不过瘾&#xff0c;在强烈的催促下&#xff0c;小哥哥的新文章又出来了。这次小哥哥又给我们带来怎样的…

vue + nodejs + npm

node.js下载 1、如图所示&#xff1a; 2、建立node_cache、node_global文件夹&#xff1a; 然后运行以下2条命令 npm config set prefix “D:\node-v14.15.0-win-x64\node_global” npm config set cache “D:\node-v14.15.0-win-x64\node_cache” 执行npm list -global查看&…

编译原理——求短语、直接短语(简单短语)、素短语、句柄

先介绍一下短语、直接短语&#xff08;简单短语&#xff09;、素短语、句柄怎么求&#xff1a;这个图是核心 然后通过一些例题&#xff0c;实战一下&#xff1b; 根据上面介绍的概念、求法&#xff0c;应用一下即可&#xff1b; 例题1 短语&#xff1a;注意对于每一个子树&a…

数字孪生技术助力高炉数字化建设的可行性

随着数字孪生等新一代信息技术的快速发展&#xff0c;数字化转型已成为企业重塑竞争优势的关键举措。依托数字孪生技术&#xff0c;对炼铁高炉进行物联网、数字化信息系统建设&#xff0c;实现了高炉运行状态的数字化监测与预警&#xff0c;数字孪生系统凭借在数字化、模型化、…

利用WordPress搭建属于自己的网站

怎么用WordPress给自己搭建了一个网站&#xff1f;可能很多人都想拥有属于自己的网站&#xff0c;这篇文章就找你怎么利用WordPress搭建属于自己的网站。如果你也正好有搭建个人网站的想法&#xff0c;那么本文会给你一个参考&#xff0c;我尽量写的比较详细&#xff0c;给自己…

【Ctfer训练计划】——(五)

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

Java on VS Code 11月更新|VS Code Java 开发者超200万!

作者&#xff1a;Nick Zhu - Senior Program Manager, Developer Division at Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;我们很高兴与大家分享一个好消息&#xff0c;现在 Visual Studio Code 上已有超过 200 万 Java 开发者&#xff0c;这离不开长期以来社区以…