Linux下软件部署安装管理----rpmbuild打包rpm包部署安装

article/2025/10/16 8:54:10

来源:微信公众号「编程学习基地」

文章目录

    • 1.安装rpmbuild
    • 2.rpm包制作
      • 打包rpm包
    • 3.rpm包安装
    • 4.rpm包卸载

1.安装rpmbuild

yum install rpmbuild
yum install rpmdevtools

创建rpm包管理路径,生成rpm相关目录

RPM打包的时候需要编译源码,还需要把编译好的配置文件,二进制命令文件之类的东西按照安装好的样子放到合适的位置,还要根据需要对RPM的包进行测试,这些都需要先有一个“工作空间”。rpmbuild命令使用一套标准化的“工作空间”:

[root@ ~]# rpmdev-setuptree
[root@ ~]# ls
rpmbuild
[root@iZbp1gjp1hwnsngz9ayrlnZ ~]# cd rpmbuild/
[root@iZbp1gjp1hwnsngz9ayrlnZ rpmbuild]# ls
BUILD  RPMS  SOURCES  SPECS  SRPMS

rpmdev-setuptree这个命令就是安装rpmdevtools带来的。

手动创建

如果没有安装rpmdevtools的话,其实用mkdir命令创建这些文件夹也是可以的。

#使用下面的目录手动目录
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

2.rpm包制作

下载源码

这里直接下载官方例子的源码,是个压缩包

wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
mv hello-2.10.tar.gz /root/rpmbuild/SOURCES/

编辑SPEC文件

vim soft.spec

模板如下

Name:     hello
Version:  2.1
Release:  1%{?dist}
Summary:  The "Hello World" program from GNU
Summary(zh_CN):  GNU "Hello World" 程序
License:  GPLv3+
URL:      http://ftp.gnu.org/gnu/hello    
Source0:  http://ftp.gnu.org/gnu/hello/%{name}-%{version}.tar.gz%description
The "Hello World" program, done with all bells and whistles of a proper FOSS 
project, including configuration, build, internationalization, help files, etc.%description -l zh_CN
"Hello World" 程序, 包含 FOSS 项目所需的所有部分, 包括配置, 构建, 国际化, 帮助文件等.%prep
%setup -q%build
%configure
make %{?_smp_mflags}%install
make install DESTDIR=%{buildroot}%files
%doc%changelog
* Sun Dec 4 2016 Your Name <youremail@xxx.xxx> - 2.10-1
- Update to 2.10
* Sat Dec 3 2016 Your Name <youremail@xxx.xxx> - 2.9-1
- Update to 2.9

本示例最终的完整SPEC

Name:     hello
Version:  2.10
Release:  1%{?dist}
Summary:  The "Hello World" program from GNU
Summary(zh_CN):  GNU "Hello World" 程序
License:  GPLv3+
URL:      http://ftp.gnu.org/gnu/hello
Source0:  http://ftp.gnu.org/gnu/hello/%{name}-%{version}.tar.gzBuildRequires:  gettext
Requires(post): info
Requires(preun): info%description
The "Hello World" program, done with all bells and whistles of a proper FOSS
project, including configuration, build, internationalization, help files, etc.%description -l zh_CN
"Hello World" 程序, 包含 FOSS 项目所需的所有部分, 包括配置, 构建, 国际化, 帮助文件等.%prep
%setup -q%build
%configure
make %{?_smp_mflags}%install
make install DESTDIR=%{buildroot}
%find_lang %{name}
rm -f %{buildroot}/%{_infodir}/dir%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
fi%files -f %{name}.lang
%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello%changelog
* Sun Dec 4 2016 Your Name <youremail@xxx.xxx> - 2.10-1
- Update to 2.10
* Sat Dec 3 2016 Your Name <youremail@xxx.xxx> - 2.9-1
- Update to 2.9

打包rpm包

rpmbuild -ba soft.spec

看一下打包好的rpm包

tree /root/rpmbuild/*RPMS
/root/rpmbuild/RPMS
└── x86_64├── hello-2.10-1.el7.x86_64.rpm└── hello-debuginfo-2.10-1.el7.x86_64.rpm
/root/rpmbuild/SRPMS
└── hello-2.10-1.el7.src.rpm

3.rpm包安装

rpm -ivh xxx.rpm --nodeps --force

– nodeps 👉 有些时候我们的包会有别的依赖如果依赖没有安装就会导致我们这个包安装失败。所以可以使用这个参数

– force 👉有的时候我们的操作系统已经安装了这个软件并且版本高于我们要安装的,使用这个参数可以强行安装我们指定的这个

加上后面两句,可以覆盖当前版本,老换新也可以。

rpm -ivh /root/rpmbuild/RPMS/x86_64/hello-2.10-1.el7.x86_64.rpm

运行

[root@iZbp1gjp1hwnsngz9ayrlnZ rpmbuild]# rpm -ivh /root/rpmbuild/RPMS/x86_64/hello-2.10-1.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...1:hello-2.10-1.el7                 ################################# [100%]
[root@iZbp1gjp1hwnsngz9ayrlnZ rpmbuild]# hello
Hello, world!

4.rpm包卸载

查看程序对应的rpm包名

rpm -q 'xxx'
rpm -qf 'xxx/bin/xxxx.xx'
rpm -qf mediaHttpServer

卸载rpm包安装的程序

rpm -e 'xxxxxx'
rpm -e nvr-2.0-8913_zfs.el7.aarch64

注: 也可使用--erase代替-e,效果相同

删除的不是rpm包,是卸载rpm包安装的程序,包名不带.rpm后缀

参考:https://blog.csdn.net/YangzaiLeHeHe/article/details/109188096

https://blog.csdn.net/arv002/article/details/123546081?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-9-123546081-blog-109188096.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.6&utm_relevant_index=12


http://chatgpt.dhexx.cn/article/8sTKGx0Y.shtml

相关文章

rpmbuild打包rpm

一、rpmbuild及rpm rpm rpm命令 是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序&#xff0c;由于它遵循GPL规则且功能强大方便&#xff0c;因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现&#xff0c;让Linux易于安…

RPMB详解

这里写自定义目录标题 RPMB详解1. 简介1.1. 概述1.2. 基本原理 2. 命令需求3. 用于RPMB访问的数据帧4. RPMB的组成5. mac计算6. 访问流程6.1. 写认证密钥&#xff08;write Authentication Key&#xff09;6.2. 读计数器值&#xff08;Reading of the Counter Value&#xff09…

python项目使用setuptools和rpmbuild构建rpm包

python项目使用setuptools和rpmbuild构建rpm包 文章目录 python项目使用setuptools和rpmbuild构建rpm包一、setuptools二、使用rpmbuild&#xff0c;编写.spec文件构建rpm包三、使用pyinstaller四、参考文献&#xff1a; 一、setuptools 作为 Python 标准的打包及分发工具&…

rpm(基本命令、Makefile、建立rpmbuild编包)

文章目录 一、rpm基本命令介绍1.安装软件2、升级软件3、查询软件包的详细信息4、查询某个文件是属于那个rpm包的5、查该软件包所包含的文件6、查看软件包所依赖的软件7、查看某个包是否被安装8、卸载 二、rpm命令实践三、把c语言程序和makefile内容&#xff0c;编译情况和执行情…

rpmbuild制作rpm 包

什么是rpm包&#xff1f; rpm 相当于windows中的安装文件&#xff0c;它会自动处理软件包之间的依赖关系。 rpm优点&#xff1a; 包管理系统简单&#xff0c;通过几个命令就可以实现包的安装、升级、卸载。 安装速度比源码包快的多。缺点&#xff1a; 经过编译&#xff0c…

项目打包rpm包(rpmbuild)

这里以python项目为例&#xff0c;通过rpmbuild工具打包成rpm包&#xff0c;并进行安装验证 rpmbuild打包 rpm流程 构建rpmbuild打包目录 rpmbuild 默认变量配置文件 将我们的python项目和依赖包压缩成xx.tar.gz格式&#xff0c;并copy到SOURCE目录 我们这里以datalake-demo…

前向星和链式前向星

链接&#xff1a;https://blog.csdn.net/ACdreamers/article/details/16902023 我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的…

关于链式前向星

最近看了许多题目都用了比较奇怪的东西… 后面才发现是神奇的链式前向星….. 听名字就觉得很牛啊&#xff01; 然而其实很简单…… 组成:begin,next,to,w,与一个用来标记的e begin[n]数组&#xff1a;代表编号为n的点,最后一条边的储存位置 next[n]:是用来保存从同一个点…

链式前向星(加快图的搜索)

存储一个图通常有两种方式&#xff1a;邻接矩阵和邻接表。如果一个图中的边非常少&#xff0c;那么邻接矩阵就比较稀疏&#xff0c;浪费空间&#xff0c;如果点非常多&#xff0c;则矩阵的内存有可能会爆掉。用向量实现的邻接表在点非常多的时候同样比较慢&#xff0c;在一些题…

链式前向星存储图

第七天链式前向星存图 图片如下所示 本代码存的是有向图&#xff0c;图示为无向图。 #include<iostream> using namespace std; const int maxn 100; struct node//to 边的终点编号&#xff0c;w 权值&#xff0c; next 以 x 为起点的上一条边的编号 {int to,w,next;…

链式前向星存图 详细解析

文章目录 链式前向星完整代码 链式前向星 链式前向星是一种图的存储方式&#xff0c;相比于 邻接矩阵和邻接表 &#xff0c;链式前向星是一种静态链表存储&#xff0c;用边集数组和邻接表相结合&#xff0c;可以快速访问一个顶点的所有邻接点。 在某些算法题中使用还很频繁&a…

C++之链式前向星

链式前向星 基本定义以及实现链式前向星实现DFSBFS 基本定义以及实现 (若果有一定了解&#xff0c;可以跳过第一部分&#xff0c;直接看第二部分) 我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按…

图的存储 —— 链式前向星

图的存储 —— 链式前向星 链式前向星采用了一种静态链表存储方式&#xff0c;将边集数组和邻接表相结合&#xff0c;可以快速访问一个节点的所有邻接点&#xff0c;在算法竞赛中被广泛应用。 链式前向星有如下两种存储结构。 边集数组&#xff1a;edge[]&#xff0c;edge[i…

简述链式前向星

一、前言 我们常见的存图数据结构有两种&#xff0c;一种是邻接矩阵&#xff0c;另一种是邻接表。而在邻接矩阵中&#xff0c;空间复杂度为 O ( n 2 ) O(n^2) O(n2)&#xff0c;在稀疏图的情况下&#xff0c;相较于邻接表浪费了许多空间。而常规的邻接表是用链表进行操作&…

链式前向星 详解

链式前向星 链式前向星是一种类似于邻接表的存图方式&#xff0c;同样适用于有向 图和无向图。 他建立的是边与边之间的联系 它将边里的所有边都进行编号 int cnt; //边的编号 struct edge{ //边的结构体int from,to,w,next; //from是边的起点&#xff08;这个可有可无&a…

用链式前向星存储图

图最常用的存储结构主要是邻接矩阵和邻接表。当顶点数太大时&#xff0c;用二维数组表示的邻接矩阵可能超内存&#xff08;MLE&#xff09;&#xff0c;而用邻接表的编码工作量较大&#xff0c;此时&#xff0c;使用vector数组或链式前向星模拟邻接表是不错的选择。因vector数组…

链表、链式前向星

讲链表的时候就卡在这里了&#xff0c;最短路又卡在链式前向星上了&#xff0c;毕竟是图论基础&#xff0c;觉得还是有必要写一写防止下次再懵。 链表都是头插法&#xff01;&#xff01;即每次我们给他插一个头。 普通链表 先初始化令head-1,idx-1. void add_tohead(int x…

链式前向星(详细讲述)

在dalao的压迫下本蒟蒻发个博客&#xff0c;给大家讲一下链式前向星&#xff08;新手&#xff0c;写错了轻喷&#xff09; 首先说明一点链式前向星适合于稀疏图&#xff0c;而邻接矩阵则更适合稠密图&#xff0c;所以最好看好数据范围再决策使用哪个方法&#xff0c;当然有些题…

链式前向星与邻接表对比

本文图片及数据 对于这样一张有向图&#xff1a; 输入边的顺序如下&#xff1a; 1 2 2 3 3 4 1 3 4 1 1 5 4 5 对于邻接表来说是这样的&#xff1a; 1 -> 2 -> 3 -> 5 2 -> 3 3 -> 4 4 -> 1 -> 5 5 ->^ 对于链式前向星来说是这样的&…

链式前向星存图(有图详解)

链式前向星:既然是链式那么肯定和链表相关,前向星是每次指向都向前 链式前向星存图是以边为中心,并不是以结点为中心,它记录的是边的一些属性,包括边边的id、头节点、尾结点、权值、边的指向! 边的指向是遍历图的时候需要按照一定顺序去遍历,而不能胡乱的去遍历,那么就需要这些…