RPM包详解以及如何制作RPM包

news/2024/4/26 23:39:22/文章来源:https://blog.csdn.net/new9232/article/details/131314007

RPM包简介

  • RPM 全名 RedHat Package Managerment,一开始只是Red Hat Linux的软件包格式,它最初的名字为Red Hat软件包管理程序。从那以后,RPM逐渐称为许多其他Linux发行版所接受的一种软件包格式。Linux标准化规范将RPM作为其官方软件包格式。

RPM的主要优点

  • 使用广泛。许多Linux发行版至少都可以安装RPM软件包,或者将RPM作为它的标准软件包格式。
  • 能够只用一条命令来安装软件包。同样,删除或升级软件包也只需要一条命令。
  • 只需要处理一个文件。一个RPM软件包就保存在一个单独的文件中,这使得在不同系统之间传输软件包变得非常容易。
  • RPM自动处理软件包之间的依赖关系检查。RPM系统包含一个数据库,该数据库中记录了已安装的所有软件包的信息,包括每个软件包所提供的内容以及安装每个软件包的要求。
  • RPM软件包设计为由 “最干净” 的源代码而来,从而可以对它进行重新编译。RPM支持如patch这样的linux工具,可以在编译过程中为软件的源代码打上补丁。

RPM包目录结构

  • BUILD:rpmbuild命令在这个目录中建立软件
  • RPMS:制作完成后的RPM存放目录
  • SOURCES:存放应用程序源文件的目录
  • SPECS:存放SPEC文件的目录
  • SRPMS:rpmbuild命令将在这个目录中放置RPM源代码软件包
  • BUILDROOT:虚拟安装目录,在整个install的过程中临时安装到此目录,把这个目录当做根来使用。所有在这个目录下的文件才是真正的目录文件,最后SPEC文件中有清理阶段,这个目录下的内容将被删除。

SPEC文件介绍

  • RPM包的SPEC文件有许多配置信息,包含:软件基础信息、安装卸载前后执行的脚本、对源码包打补丁、解压、编译、安装等。
  • Name : 软件名称
  • Summary: 软件包的内容
  • Version: 软件版本号
  • Release: 发布序列号,为1表示第一次创建
  • Group: 软件分组,建议使用:Applications/System
  • License: 软件授权方式GPLv2
  • Source: 源码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用
  • BuildRoot: 这个是安装或编译时使用的临时目录,即模拟安装完以后生成的文件目录:%_topdir/BUILDROOT 后面可使用$RPM_BUILD_ROOT 方式引用。
  • URL: 软件的URI
  • Vendor: 打包组织或者人员
  • %description: 软件的详细说明
  • %define: 预定义的变量,例如定义日志路径: _logpath /var/log/weblog
  • %prep: 预备参数,通常为 %setup -q
  • %build: 编译参数 ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/……
  • %install: 安装步骤,此时需要指定安装路径,创建编译时自动生成目录,复制配置文件至所对应的目录中
  • %pre: 安装前需要做的任务,如:创建用户
  • %post: 安装后需要做的任务 如:自动启动的任务
  • %preun: 卸载前需要做的任务 如:停止任务
  • %postun: 卸载后需要做的任务 如:删除用户,删除/备份业务数据
  • %clean: 清除上次编译生成的临时文件,就是上文提到的虚拟目录
  • %files: 设置文件属性,包含编译文件需要生成的目录、文件以及分配所对应的权限

制作RPM包

  • 创建目录

    • 创建以下目录结构
      在这里插入图片描述
  • 制作spec文件。

    • 直接在SPECS下创建一个spec文件,无特殊需求可使用以下模板
    •   Name: smallwolfVersion: 1.0.0Release: 1%{?dist}Summary: this is small gray wolfBuildroot: %{_tmppath}/%{name}-%{version}-rootLicense: GPLURL: http://www.csdn.netSource0: %{name}-%{version}.tar.gz%descriptionThis package is small gray wolf%prep%setup -q%installrm -rf %{buildroot}mkdir -p %{buildroot}/opt/smallwolfrescp -r %{_builddir}/smallwolf-1.0.0/opt/smallwolfres/* %{buildroot}/opt/smallwolfres%postmkdir -p /opt/smallwolfreschmod 0755 /opt/smallwolfres%files/opt/smallwolfres%postunrm -rf /opt/smallwolfecho "clean /opt/smallwolf"%changelog* Wed Jul 4 2018 VBird Tsai <vbird@mail.vbird.idv.tw> 0.1- Build the program
  • 制作打包文件

    • 在SOURCES目录下压缩smallwolf-1.0.0目录 tar -zcvf smallwolf-1.0.0.tar.gz smallwolf-1.0.0/
    • 拷贝 SOURCES/smallwolf-1.0.0.tar.gz到rpmbuild/BUILD下
  • rpmbuild目录下执行 rpmbuild -bb SPECS/smallwolf.spec

    • 执行完该命令,如果成功,会在rpmbuild/RPMS/x86_64目录下生成一个rpm后缀的安装包

RPM包安装和卸载

  • 安装
  • rpm -ivh smallwolf-1.0.0-1.el8.x86_64.rpm
  • 安装成功后,在对应目录下就有了我们的程序
    在这里插入图片描述

  • 卸载

  • rpm -e --nodeps smallwolf

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI工程师:未来时代的主流工程师

自从以ChatGPT为主的人工智能&#xff08;AI&#xff09;大模型层出不穷&#xff0c;越来越多人开始意识到AI的潜力&#xff0c;甚至预测“所有行业都将通过AI来进行重塑”&#xff0c;正是基于该原因&#xff0c;各国各企业如火如荼建设AI事业&#xff0c;作为把AI造出来的AI工…

感受C++模版的所带来的魅力,扎实基础,扩展思维

一、泛型编程思想 首先我们来看一下下面这三个函数&#xff0c;如果学习过了 C函数重载 和 C引用 的话&#xff0c;就可以知道下面这三个函数是可以共存的&#xff0c;而且传值会很方便void Swap(int& left, int& right) {int temp left;left right;right temp; } …

【JavaEE】HTTPS及其安全机制

目录 1、什么是HTTPS 2、HTTPS的基本工作过程 2.1、使用对称密钥进行加密 2.2、使用非对称密钥进行加密 2.3、中间人攻击 2.4、证书 1、什么是HTTPS HTTPS是在HTTP协议的基础上引入了一个加密层&#xff08;SSL&#xff09;。HTTP协议内容都是按照文本的方式传输的&#x…

爬虫之Scrapy

一 介绍 Scrapy一个开源和协作的框架&#xff0c;其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的&#xff0c;使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛&#xff0c;可用于如数据挖掘、监测和自动化测试等领域&#x…

Spring Security 构建基于 JWT 的登录认证

一言以蔽之&#xff0c;JWT 可以携带非敏感信息&#xff0c;并具有不可篡改性。可以通过验证是否被篡改&#xff0c;以及读取信息内容&#xff0c;完成网络认证的三个问题&#xff1a;“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全&#xff0c;使用它需要采用 …

利用集合框架实现-超市会员管理系统

借助集合框架来实现超市会员管理系统&#xff0c;实现以下功能&#xff1a; 1.开卡 2.积分累计 3.查询剩余积分 4.积分兑换 5.修改密码 6.退出 -------------------------------------------------------------------------------------------------- 展示&#x…

图像处理学习笔记(一)

目录 图像处理学习笔记&#xff08;一&#xff09;一、基础知识1、彩色图像&#xff08;1&#xff09;RGB&#xff08;2&#xff09;HSV&#xff08;3&#xff09;HSI&#xff08;4&#xff09;CMYK&#xff08;5&#xff09;YUV&#xff08;6&#xff09;YCbCr 2、灰度图像3、…

14款奔驰R400升级ACC自适应巡航系统,增加您的行车安全性

有的时候你是否厌倦了不停的刹车、加油&#xff1f;是不是讨厌急刹车&#xff0c;为掌握不好车距而烦恼&#xff1f;如果是这样&#xff0c;那么就升级奔驰原厂ACC自适应式巡航控制系统&#xff0c;带排队自动辅助和行车距离警报功能&#xff0c;感受现代科技带给你的舒适安全和…

Python实现Excel文件拷贝图片到另一个的Excel文件(保持原有图片比例)

Python实现Excel文件拷贝图片到另一个的Excel文件&#xff08;保持原有图片比例&#xff09; 1、前言1.1 成功拷贝但是比例错误1.2 直接报错 2、解决办法3、号外 1、前言 今天朋友给我一个需求&#xff0c;需要把xlsx文件中的图片拷贝到另一个xlsx中&#xff0c;但是试过网上比…

Apache(httpd) 搭建笔记

Apache 搭建笔记 安装Apache HTTP服务器&#xff1a;启动Apache服务并设置开机自启 配置SSL证书配置Apache的SSL虚拟主机&#xff1a;重启Apache服务以使更改生效&#xff1a; 多站点配置第一个虚拟主机配置第二个虚拟主机创建每个站点的根目录&#xff1a; 强制跳转http>&g…

Midjourney助力交互设计师设计网站主页

Midjourney的一大核心优势是提供创意设计&#xff0c;这个功能也可以用在网站主页设计上&#xff0c;使用Midjourney prompt 应尽量简单&#xff0c;只需要以"web design for..." or "modern web design for..."开头即可 比如设计一个通用SAAS服务的初创企…

阿里云AliYun物联网平台使用-客户端API获取设备传感数据

一、前言 上一篇文章中&#xff0c;已经实现了虚拟数据上云&#xff0c;本文我们将进行上位机客户端的开发&#xff0c;即通过调用阿里云IOT物联网云平台的SDK&#xff0c;开发能获取传感器的遥感数据。 二、云平台操作 调用API需要用户的AccessKey Secret&#xff0c;这意味着…

因创始人被捕,Multichain停运!华人加密项目信任何在?

Multichain作为第四大加密货币桥梁&#xff0c;允许用户在八个区块链之间转移加密货币&#xff0c;并持有近16亿美元的投资者存款。对于运行在Fantom区块链上的DeFi而言&#xff0c;多链极为重要。 然而&#xff0c;跨链协议MultiChain5月下旬爆出“出金延迟或暂停”的灾情&…

产业大模型刚开卷,京东跑进“最后半公里”

点击关注 文&#xff5c;姚 悦 编&#xff5c;王一粟 “京东一直在探索哪些产品、技术、场景可以真正把大模型用起来&#xff0c;在我们内部的场景中反复验证后&#xff0c;才决定在7月份对外发布&#xff0c;现在我们在零售、健康、物流、金融等业务场景里已经积累了一些经…

Java使用JNI实现C文件的调用

1.使用IDEA新建工程 构建最基本的maven类型就行&#xff0c;文件结构如下&#xff1a; 其中最主要的类如下&#xff1a; package org.linx;public class TestJNI {static {/*** 加载jni库&#xff0c;有一个重要的点就是生成的为libnative.so&#xff0c;下面加载代码需要消…

【Maven三】——maven生命周期和插件

系列文章目录 Maven之POM介绍 maven命令上传jar包到nexus 【Maven二】——maven仓库 maven生命周期和插件 系列文章目录前言一、什么是生命周期&why1.三套生命周期2.clean生命周期3.default生命周期4.site生命周期5.命令行与生命周期 二、插件目标三、插件绑定1.内置绑定2…

将媒体公司资产迁移到 Amazon S3 的技术方案

随着媒体公司的发展&#xff0c;他们在仓库中积累了大量的旧磁带和未数字化的视频。这些资产可能很有价值&#xff0c;但以目前的形式很难访问和货币化。此外&#xff0c;将这些资产存储在仓库中既有风险又昂贵。 媒体企业可以通过将其资产迁移到云存储来解决这些问题&#xf…

【C++】面试基础搬运

c/c c三大特性 封装 最开始接触代码是C语言&#xff0c;那么开始写一些逻辑代码的时候会很麻烦&#xff0c;因为你要在函数中定义变量&#xff0c;然后按顺序写对应的逻辑&#xff0c;接着可以将逻辑封装成函数。当时会感觉很麻烦&#xff0c;因为很散装&#xff0c;知道后面…

Nacos报错Could not resolve placeholder ‘order.name‘ in value “${order.name}“怎么解决?

出现这个原因有两个&#xff1a; 1.首先在Nacos配置中心&#xff0c;写入yml配置文件的数据和后端服务在取数据的时候名称不一致 如下图&#xff0c;现在我的配置中心为order-service 看看其中的文件内容信息&#xff1a; 再看看后端是怎么取的&#xff1a; 看出上面错误了吗…