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 软件名

在这里插入图片描述

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

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

相关文章

基于Hugo 搭建个人博客网站

目录 1.环境搭建 2.生成博客 3.设置主题 4.将博客部署到github上 1.环境搭建 1&#xff09;安装Homebrew brew是一个在 macOS 操作系统上用于管理软件包的包管理器。类似于centos下的yum或者ubuntu下的apt&#xff0c;它允许用户通过命令行安装、更新和管理各种软件工具、…

8月《中国数据库行业分析报告》已发布,聚焦数据仓库、首发【全球数据仓库产业图谱】

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况&#xff0c;从2022年4月起&#xff0c;墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》&#xff0c;持续传播数据技术知识、努力促进技术创新与行业生…

用户体验地图是什么?UX设计心得分享

大家好&#xff0c;我是设计师l1m0身。本篇文章是关于UX设计中的用户体验地图。 对于新手设计师来说&#xff0c;建立用户体验地图会有一些难度。本篇文章中&#xff0c;我会以简单、易懂的语言分享UX设计师如何制作用户体验地图&#xff0c;希望对你的日常项目体验提升有所帮…

【计算机网络】http协议

目录 前言 认识URL URLEncode和URLDecode http协议格式 http方法 GET POST GET与POST的区别 http状态码 http常见header 简易的http服务器 前言 我们在序列化和反序列化这一章中&#xff0c;实现了一个网络版的计算器。这个里面设计到了对协议的分析与处…

华为---OSPF协议优先级、开销(cost)、定时器简介及示例配置

OSPF协议优先级、开销、定时器简介及示例配置 路由协议优先级&#xff1a;由于路由器上可能同时运行多种动态路由协议&#xff0c;就存在各个路由协议之间路由信息共享和选择的问题。系统为每一种路由协议设置了不同的默认优先级&#xff0c;当在不同协议中发现同一条路由时&am…

前端加密方式

前端加密 1.不可逆加密2.可逆加密a.对称加密b.非对称加密&#xff08;本文重点&#xff09;a.含义&#xff1a;b.过程理解&#xff1a;c.项目中使用&#xff1a; 总结&#xff1a;参考地址 目前搜索前端加密是可以看到有非常非常多的方法的&#xff0c;这里我们需要对其分类总结…

微服务主流框架概览

微服务主流框架概览 目录概述需求&#xff1a; 设计思路实现思路分析1.HSF2.Dubbo 3.Spring Cloud5.gRPC Service mesh 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a be…

Cannot read property ‘database‘ of undefined解决办法

PS&#xff1a;在最近项目部署的时候&#xff0c;后台遇到如下的报错&#xff0c;显示数据库未定义&#xff0c;研究了半天没有找到原因&#xff0c;但是能解决掉这个报错 TypeError: Cannot read property ‘database’ of undefined 我们查看下具体的文件目录 我们需要返回…

【链表OJ 11】复制带随机指针的链表

前言: &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&#x1f4a5; ✨✨刷题专栏:http://t.csdn.cn/UlvTc ⛳⛳本篇内容:力扣上链表OJ题目 目录 leetcode138. 复制带随机指针的链表 1. 问题描述 2.代码思路: 2.1拷贝节点插入到…

【LeetCode】328. 奇偶链表

328. 奇偶链表&#xff08;中等&#xff09; 思路 如果链表为空&#xff0c;则直接返回链表。 对于原始链表&#xff0c;每个节点都是奇数节点或偶数节点。头节点是奇数节点&#xff0c;头节点的后一个节点是偶数节点&#xff0c;相邻节点的奇偶性不同。因此可以将奇数节点和偶…

Unity AssetBundle(1):Assets打包和依赖(Dependencies)

对Unity5.x后的AssetBundle依赖机制有了一点理解&#xff0c;创建了一个项目验证 github:GeWenL / AssetBundlePro AbScene.unity 资源有哪些&#xff1f; Some common types of Asset assetbundle打包命令是 BuildPipeline.BuildAssetBundles ,格式有&#xff1a; 引用&…

基于JavaScript粒子流动效果

这是一个HTML文件&#xff0c;主要包含了一些CSS样式和JavaScript代码&#xff0c;用于创建一个动画效果。 在CSS部分&#xff0c;定义了一些基本的样式&#xff0c;包括页面的背景颜色、位置、大小等。特别的&#xff0c;定义了两种球形元素&#xff08;.ball_A 和 .ball_B&am…

windows10默认浏览器总是自动更改为Edge浏览器

在设置的默认应用设置中把默认浏览器改为chrome或其他之后他自动又会改回Edge。不得不说*软真的狗。 解决办法&#xff1a; 后来发现在Edge浏览器的设置中有这么一个选项&#xff0c;会很无耻的默认是Edge。把它关掉后重新设置就行了。

Ceph BlueStore 和双写问题

论开源分布式存储&#xff0c;Ceph大名鼎鼎。用同一个存储池融合提供块存储、对象存储、集群文件系统。在国内有近年使用量迅速攀升。 大型公司内部研发云虚拟化平台&#xff0c;常使用开源方案Openstack或者Kubernetes&#xff0c;配套的为虚机或容器提供块存储的开源方案&am…

CSS中如何隐藏元素但保留其占位空间(display:nonevsvisibility:hidden)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 隐藏元素但保留占位空间⭐ display: none;⭐ visibility: hidden;⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…

CSAPP的Lab学习——BombLab

文章目录 前言一、一号炸弹&#xff08;小试牛刀&#xff09;二、二号炸弹&#xff08;六重循环&#xff09;三、三号炸弹&#xff08;不同输入&#xff0c;不同答案&#xff09;四、四号炸弹&#xff08;判断语句的实现&#xff09;五、五号炸弹&#xff08;跳转&#xff0c;循…

CSS3常用的新功能总结

CSS3常用的新功能包括圆角、阴渐变、2D变换、3D旋转、动画、viewpor和媒体查询。 圆角、阴影 border-redius 对一个元素实现圆角效果&#xff0c;是通过border-redius完成的。属性为两种方式&#xff1a; 一个属性值&#xff0c;表示设置所有四个角的半径为相同值&#xff…

【javaweb】学习日记Day9 - Mybatis 基础操作

目录 一、删除 &#xff08;1&#xff09;在mapper接口执行sql删除语句 ① 注解后sql语句没有提示怎么办&#xff1f; &#xff08;2&#xff09;测试层 &#xff08;3&#xff09;开启mybatis日志 &#xff08;4&#xff09;预编译SQL 二、新增 &#xff08;1&#…

C#添加WebApi,配置Swagger

1、创建一个WebAPI项目 下载、安装、引入【Swashbuckle.AspNetCore】包 右击【解决方案】&#xff0c;然后点击【管理Nuget包】&#xff0c;搜索【Swashbuckle.AspNetCore】包 2、配置Swagger中间件 在【Startup.cs】文件中的【ConfigureService】类中添加如下代码。 在【Sta…

如何取消KEIL-MDK工程中出现的CMSIS绿色图标

如何取消KEIL-MDK工程中出现的CMSIS绿色图标&#xff1f;我以前经常遇到&#xff0c;不知道怎么搞&#xff0c;好像也不影响编译结果。以前问过其他人&#xff0c;但是不知道怎么搞&#xff0c;相信很多人也遇到过。水平有限&#xff0c;表达不清楚&#xff0c;见下图&#xff…