当前位置: 首页 > news >正文

rpm打包

文章目录

  • rpm打包
    • 1. rpm打包步骤
      • 0)准备工作:安装打包工具rpm-build和rpmdevtools
        • (1)在线安装
        • (2)离线安装
      • 1)创建初始化目录
      • 2)准备打包内容
      • 3)编写打包脚本 spec文件
      • 4)打包
      • 5)安装

rpm打包

1. rpm打包步骤

0)准备工作:安装打包工具rpm-build和rpmdevtools

(1)在线安装

yum install rpm-build -y
yum install rpmdevtools -y

[释]: 打包主要用rpm-build,而rpmdevtools工具包里面自带的命令rpmdev-setuptree可以用于快速创建结构目录,比手动创建更快。
[注]: 如果yum下载不了,可参考我的另一篇博文 https://blog.csdn.net/Acegem/article/details/132555841?spm=1001.2014.3001.5501

(2)离线安装

到官网将离线包下载好。
Centos:https://pkgs.org
麒麟V10:https://update.cs2c.com.cn/NS/V10/V10SP1/os/adv/lic/base/aarch64/Packages/
将 rpm-build.rpm 和 rpmdevtools.rpm下载下来后,安装的时候如果报错缺失依赖,看情况可以考虑用命令忽略依赖强制安装:

rpm -ivh rpm-build.rpm --nodeps --force
rpm -ivh rpmdevtools --nodeps --force

1)创建初始化目录

首先要在当前用户的 {$HOME} 下创建目录:rpmbuild,再在该目录下创建目录:BUILD、RPMS、SOURCES、SPECS、SRPMS
整个过程可以借助 rpmdev-setuptree 快速实现。如下:

cd # 到主目录下
rpmdev-setuptree # 创建初始化目录

结果:
在这里插入图片描述
[注]: 默认创建位置是 {$HOME},如果想更改位置,可修改 ~/.rpmmacros 配置。配置默认初始内容:

在这里插入图片描述

2)准备打包内容

将要打包的内容放到 ~/rpmbuild/SOURCES 目录下。
例:
在这里插入图片描述

3)编写打包脚本 spec文件

cd ~/rpmbuild/SPECS
touch mytool.spec

mytool.spec 内容如下:

Name: mytool   # 软件名称
Version: 1.0   # 软件版本
Release: 0%{?dist}   # RPM版本,发布序列号,用来标明第几次打包
Summary: MyTool Master installer    # 描述
# Group: test    # 软件组。建议使用 Application/System
License: GPLv3+   # 协议
AutoReqProv: no  # 忽略依赖。简单粗暴,依个人习惯。
# 例:有时rpm -ivh安装时报错某依赖找不到,可能是打包的时候就找不到依赖包。这个语句可以使得忽略依赖关系。功能类似于:rpm -ivh 软件名 --nodepsBuildRoot: %(mktemp -ud %{_tempath}/%{name}-%{version}-%{release}-XXXXXX)    # 临时编译目录# 详细描述
%description -l zh_CN
"The mytool for test"# 安装前准备
%prep
echo "do not"# 安装
%install
cd %{_sourcedir}    # ~/rpmbuild/SOURCE
cp -ra * %{buildroot}  # 将 ~/rpmbuild/SOURCE 下的内容全都复制到 ~/rpmbuild/BUILDROOT# 定义打包文件列表
%files
/usr/local/MQ
/opt/QQ# 卸载后执行的指令
%postun
rm -rf /usr/local/MQ
rm -rf /opt/QQ

附:
spec常用参数

# 自定义宏
%define Name MyTool
%define Version 1.0# 软件包
Name: %{Name}  # 引用宏
Version: %{Version}  # 引用宏
Release: 1%{?dist}  # 引用宏(自带宏)
Summary: 一段软件简概  # 简单描述
License:  GPLv3+  # 协议
URL: 地址
buildroot: %{_topdir}/BUILDROOT  # 生成车间,即编译根目录。
Source0: %{Name}-%{Version}.tar.gz  # 指定源码编译的文件,默认路径:%{_topdir}/SOURCES
SOURCE1:  支持多个
BuildRequires: gcc, make, automake, binutils  # 软件依赖信息
Requires: bash >=2.0  # 软件依赖, >= 或 <= 表大于或小于特定版本# 详细描述
%description -l zh_CN   # 其中 -l zh_CN是参数,可省略
这是一段软件的详细描述# 安装前。如:执行脚本
%pre
useradd %{Name} -s /sbin/nologin# 安装前。默认将Source目录内源码包解压到BUILD目录,并在其目录下创建 %{Name}-%{Version}目录。
%prep
%setup -q -n %{Name}-%{Version}# 编译
%build
自定义命令# 安装
%install
自定义命令# 文件
%files# 清理制作时产生的缓存
%clean
rm -rf %{buildroot}# 安装后。
%post
自定义命令# 卸载前。
%preun
自定义命令# 卸载后
%postun
自定义命令# 日志
%changelog
自定义命令

代表路径的宏列表

%{_sysconfdir}        /etc
%{_prefix}            /usr
%{_exec_prefix}       %{_prefix}
%{_bindir}            %{_exec_prefix}/bin
%{_libdir}            %{_exec_prefix}/%{_lib}
%{_libexecdir}        %{_exec_prefix}/libexec
%{_sbindir}           %{_exec_prefix}/sbin
%{_sharedstatedir}    /var/lib
%{_datarootdir}       %{_prefix}/share
%{_datadir}           %{_datarootdir}
%{_includedir}        %{_prefix}/include
%{_infodir}           /usr/share/info
%{_mandir}            /usr/share/man
%{_localstatedir}     /var
%{_initddir}          %{_sysconfdir}/rc.d/init.d
%{_var}               /var
%{_tmppath}           %{_var}/tmp
%{_usr}               /usr
%{_usrsrc}            %{_usr}/src
%{_lib}               lib (lib64 on 64bit multilib systems)
%{_docdir}            %{_datadir}/doc
%{buildroot}          %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
$RPM_BUILD_ROOT       %{buildroot}

4)打包

cd ~/rpmbuild/SPECS/
rpmbuild -bb mytool.spec

未报错的日志结尾会出现 exit 0,具体信息如下:
在这里插入图片描述此时,会在 ~/rpmbuild/RPMS/ 目录下生成 rpm 包文件。如下:
在这里插入图片描述
注: 可输入

rpm -qpl mytool-1.0-0.ky10.ky10.x86_64.rpm

来查看rpm包的内容:
在这里插入图片描述
说明包是没问题的。

5)安装

rpm -ivh mytool-1.0-0.ky10.ky10.x86_64.rpm

在这里插入图片描述

可看到rpm包中的MQ和QQ被成功安装在了 /usr/local 和 /opt 下。
在这里插入图片描述
附:

# 查找软件的安装路径
rpm -ql 软件名
# 查找软件的相关信息
rpm -qi 软件名

在这里插入图片描述

相关文章:

rpm打包

文章目录 rpm打包 1. rpm打包步骤0&#xff09;准备工作&#xff1a;安装打包工具rpm-build和rpmdevtools&#xff08;1&#xff09;在线安装&#xff08;2&#xff09;离线安装 1&#xff09;创建初始化目录2&#xff09;准备打包内容3&#xff09;编写打包脚本 spec文件4&…...

匠心新品:大彩科技超薄7寸WIFI线控器发布,热泵、温控器、智能家电首选!

一、产品介绍 此次发布一款7寸高清全新外壳产品&#xff0c;让HMI人机界面家族再添一新成员。该产品相比其他外壳有以下5个大改动&#xff1a; 1 表面玻璃盖板使用2.5D立体结构&#xff1b; 2 液晶盖板采用一体黑设计&#xff0c;且液晶屏与触摸板是全贴合结构&#xff1b; …...

华为云云服务器评测|使用云耀云服务器L实例部署Portainer工具

华为云云服务器评测&#xff5c;使用云耀云服务器L实例部署Portainer工具 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点1.3 云耀云服务器L实例使用场景 二、本次实践介绍2.1 本次实践简介2.2 Portainer简介 三、购买云耀云服务器L实例3.1 登录…...

C++并发编程:构建线程安全队列(第一部分:粗粒度锁)

C并发编程&#xff1a;构建线程安全队列&#xff08;第一部分&#xff1a;粗粒度锁&#xff09; 引言 在多线程编程中&#xff0c;线程之间的数据共享和通信是一个非常重要的问题。在这篇博客中&#xff0c;我们将讨论如何用C实现一个基础但非常实用的线程安全队列。这个队列…...

C++设计模式-更新中

单例模式 这个类实现了单例模式。单例模式是一种设计模式&#xff0c;旨在确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。 在 ConnectionManager 类中&#xff0c;它通过以下方式实现了单例模式&#xff1a; 构造函数 ConnectionManager() 被声明为…...

Hydra工具的使用

目录 Hydra初识 Hydra使用 hydra破解mysql 前言 不固定用户名密码爆破 hydra破解ssh 以用户名为密码登录 hydra破解rdp 将爆破密码的结果输出到文件中 Hydra初识 前言&#xff1a; hydra是一款开源的暴力破解工具&#xff0c;支持多种服务破解原理&#xff1a;使用户…...

Pytorch学习:卷积神经网络—nn.Conv2d、nn.MaxPool2d、nn.ReLU、nn.Linear和nn.Dropout

文章目录 1. torch.nn.Conv2d2. torch.nn.MaxPool2d3. torch.nn.ReLU4. torch.nn.Linear5. torch.nn.Dropout 卷积神经网络详解&#xff1a;csdn链接 其中包括对卷积操作中卷积核的计算、填充、步幅以及最大值池化的操作。 1. torch.nn.Conv2d 对由多个输入平面组成的输入信号…...

水果库存系统(SSM+Thymeleaf版)

不为失败找理由&#xff0c;只为成功找方法。所有的不甘&#xff0c;因为还心存梦想&#xff0c;所以在你放弃之前&#xff0c;好好拼一把&#xff0c;只怕心老&#xff0c;不怕路长。 文章目录 一、前言二、系统架构与需求分析1、技术栈1.1 后端1.2 前端 2、需求分析 三、设计…...

如何在VueJS应用程序中设置Toast通知

通知是开发者提升应用程序互动性和改善用户体验的强大工具。通过利用通知&#xff0c;开发者可以在用户与应用程序互动的同时&#xff0c;有效地向用户传达重要事件。 通知在应用程序中起着至关重要的作用&#xff0c;可以及时通知用户有关各种操作和事件的信息。它们可以用于通…...

css让元素保持等比例宽高

使用新属性 aspect-ratio: 16/9; 代码示例 <style>div {width: 60%;/* 等比例宽高 */aspect-ratio: 16/9;background-color: red;margin: auto;}</style> </head><body><div></div> </body>示例 aspect-ratio兼容性...

骨传导和入耳式哪个危害大一点?入耳式和骨传导哪种好?

骨传导和入耳式这两种耳机虽然都存在一定的危害&#xff0c;但是入耳式耳机对人体的危害要更大一点。 入耳式耳机直接塞进耳朵这种佩戴方式&#xff0c;会阻塞外部声音的进入&#xff0c;长时间使用可能会导致耳道感染&#xff0c;还可能对听力造成损伤&#xff0c;而骨传导耳…...

介绍OpenCV

OpenCV是一个开源计算机视觉库&#xff0c;可用于各种任务&#xff0c;如物体识别、人脸识别、运动跟踪、图像处理和视频处理等。它最初由英特尔公司开发&#xff0c;目前由跨学科开发人员社区维护和支持。OpenCV可以在多个平台上运行&#xff0c;包括Windows、Linux、Android和…...

Android中的view绘制流程,简单理解

简单理解 Android中的View类代表用户界面中基本的构建块。一个View在屏幕中占据一个矩形区域、并且负责绘制和事件处理。View是所有widgets的基础类&#xff0c;widgets是我们通常用于创建和用户交互的组件&#xff0c;比如按钮、文本输入框等等。子类ViewGroup是所有布局&…...

商城开发:店铺管理系统应具备哪些功能?

电子商务的迅猛发展&#xff0c;越来越多的企业选择在线商城作为业务拓展的重要渠道。而要实现一个成功的在线商城&#xff0c;一个强大而高效的店铺管理系统是不可或缺的。店铺管理系统作为商城的核心管理工具&#xff0c;应具备一系列功能&#xff0c;以提供卓越的用户体验和…...

小白学go基础04-命名惯例对标识符进行命名

计算机科学中只有两件难事&#xff1a;缓存失效和命名。 命名是编程语言的要求&#xff0c;但是好的命名却是为了提高程序的可读性和可维护性。好的命名是什么样子的呢&#xff1f;Go语言的贡献者和布道师Dave Cheney给出了一个说法&#xff1a;“一个好笑话&#xff0c;如果你…...

使用iCloud和Shortcuts实现跨设备同步与自动化数据采集

在如今的数字时代&#xff0c;跨设备同步和自动化数据采集对于提高工作效率和便利性至关重要。苹果的iCloud和Shortcuts App为我们提供了强大的工具&#xff0c;可以实现跨设备同步和自动化数据采集的功能。本文将详细介绍如何利用iCloud和Shortcuts App实现这些功能&#xff0…...

Spring框架-基于STOMP使用Websocket

文章目录 前言一、范例演示1.注解方式2.XML方式二、可能出现错误错误: WebSocket代理中断错误: 缺少EventExecutor类错误: 缺少Publisher类错误: 缺少Scheduler类错误: WebSocket调用失败总结前言 Spring框架提供了多种WebSock消息机制,不仅包含了模拟SockJS,还提供了基…...

kafka-- 安装kafka manager及简单使用

一 、安装kafka manager 管控台&#xff1a; # 安装kafka manager 管控台&#xff1a; ## 上传 cd /usr/local/software ## 解压 unzip kafka-manager-2.0.0.2.zip -d /usr/local/ cd /usr/local/kafka-manager-2.0.0.2/conf vim /usr/local/kafka-manager-2.0.0.2/conf/appl…...

深圳-海岸城购物中心数据分析

做数据分析的时候&#xff0c;如果要对商场进行分析&#xff0c;可以从这些数据纬度进行分析&#xff0c;如下图所示&#xff1a; 截图来源于数位观察&#xff1a;https://www.swguancha.com/...

vue3 + elementplus Cannot read properties of null (reading ‘isCE‘)

使用命令行直接下载的element-plus&#xff0c;使用时会报错。 卸载掉&#xff0c;然后在项目根目录下&#xff0c;使用vue ui安装依赖&#xff0c; 即可使用...

别再踩坑了!AgentScope调用本地MCP服务,用StdIOStatefulClient才是正确姿势

深度解析AgentScope集成MCP服务的正确实践&#xff1a;从协议匹配到高效调试 在AI应用开发领域&#xff0c;服务集成是构建复杂系统的关键环节。当开发者尝试将AgentScope与MCP服务结合时&#xff0c;往往会遇到各种意料之外的连接问题。这些问题的根源通常不在于代码逻辑本身&…...

OpenWrt固件下载与配置教程:R5S设备从入门到精通

OpenWrt固件下载与配置教程&#xff1a;R5S设备从入门到精通 【免费下载链接】openwrt openwrt编译更新库X86-R2C-R2S-R4S-R5S-N1-小米MI系列等多机型全部适配OTA自动升级 项目地址: https://gitcode.com/GitHub_Trending/openwrt5/openwrt GitHub_Trending/openwrt5/op…...

Pixel Dream Workshop 在电商领域的应用:一键生成商品场景图

Pixel Dream Workshop 在电商领域的应用&#xff1a;一键生成商品场景图 1. 电商商品图的痛点与机遇 电商行业有个公开的秘密&#xff1a;商品图片的制作成本往往比想象中高得多。我们曾合作过的一家服装电商&#xff0c;每月仅模特拍摄费用就超过20万元&#xff0c;这还不包…...

4步打造高效能开源路由器:OpenWrt固件安装指南

4步打造高效能开源路由器&#xff1a;OpenWrt固件安装指南 【免费下载链接】openwrt openwrt编译更新库X86-R2C-R2S-R4S-R5S-N1-小米MI系列等多机型全部适配OTA自动升级 项目地址: https://gitcode.com/GitHub_Trending/openwrt5/openwrt OpenWrt固件安装是提升R5S设备性…...

开源视频下载工具downkyi:高效管理B站资源的全流程指南

开源视频下载工具downkyi&#xff1a;高效管理B站资源的全流程指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&…...

【SpringAI篇04】:从内存到MySQL,构建可重启的智能对话系统

1. 为什么需要从内存存储升级到数据库持久化 刚开始接触SpringAI开发时&#xff0c;很多开发者都会选择默认的内存存储方案。这种方案简单直接&#xff0c;不需要额外配置数据库&#xff0c;特别适合快速原型开发。但当你真正要把应用部署到生产环境时&#xff0c;就会发现内存…...

消息队列的缓冲作用:不止于临时暂存

在分布式系统架构中&#xff0c;消息队列常被提及的一个核心价值是“解耦”。然而&#xff0c;除了降低系统间的直接依赖之外&#xff0c;消息队列还承担着另一个关键角色——缓冲。很多人直观地感受到“消息队列能起到缓冲效果”&#xff0c;但这种缓冲究竟意味着什么&#xf…...

Llama-3.2V-11B-cot设计稿理解效果:从UI草图到前端代码描述

Llama-3.2V-11B-cot设计稿理解效果&#xff1a;从UI草图到前端代码描述 最近在尝试一些新的AI工具时&#xff0c;我偶然接触到了Llama-3.2V-11B-cot这个模型。它有一个听起来挺有意思的能力&#xff1a;能“看懂”设计稿。作为一个经常在设计和开发之间做“翻译”的人&#xf…...

SVN检出报错大全:从E170011到E120106的实战解决手册(附cleanup的正确用法)

SVN检出报错实战指南&#xff1a;从E170011到E120106的深度解析与解决方案 引言&#xff1a;SVN检出报错的常见场景与应对思路 在团队协作开发中&#xff0c;版本控制系统扮演着至关重要的角色。作为集中式版本控制的代表&#xff0c;SVN&#xff08;Subversion&#xff09;至今…...

TCGA数据下载神器gdc-client实战:Win10系统闪退问题一网打尽

TCGA数据高效下载指南&#xff1a;gdc-client在Win10系统的深度优化与故障排除 1. 为什么选择gdc-client下载TCGA数据&#xff1f; 对于生物信息学研究者来说&#xff0c;获取TCGA&#xff08;癌症基因组图谱&#xff09;数据是开展肿瘤基因组学研究的第一步。然而&#xff0c;…...