Linux如何将文件或目录打成rpm包? -- fpm打包详解

👨‍🎓博主简介

  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • 前言
  • 说明 -- fpm参数及解析
  • 一、安装fpm命令
    • 1.1 安装 ruby 环境
    • 1.2 更换 gem 源为阿里源
    • 1.3 安装 fpm
  • 二、将文件打成rpm包
  • 三、安装、卸载rpm包
    • 3.1 安装rpm包
    • 3.2 查找刚刚安装rpm包
    • 3.3 卸载刚刚安装的rpm包
  • 四、错误整理
    • 2.1 ERROR: Error installing fpm: rexml requires Ruby version >= 2.5.0.
    • 2.2 /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- json (LoadError)

前言

  最近因为遇到一个服务器受系统限制,只能上传rpm包才能使用,而我们的服务都是文件,那么怎么将文件都打成rpm包呢???我也是找了好几个,终于找到了一个简单好用的打包方式,下面来给大家讲解一下部署及打包、安装;

本文已docker离线包目录为例子,将其打成rpm包,并在新的服务器上安装;

操作系统为:Centos 7.6

说明 – fpm参数及解析

  • fpm的功能就是将一种类型的包转换成另一种类型

  • fpm支持的源类型包:

原类型包解析
dir将目录打包成所需要的类型用于源码编译安装的软件包
rpm对rpm进行转换
gem对rubygem包进行转换;
python将python模块打包成相应的类型
  • fpm支持的目标类型包:
目标类型包解析
rpm转换为rpm包
deb转换为deb包
solari转换为solaris包
puppet转换成pupper包
  • fpm常用参数:
参数参数解析
-s指定源类型
-t指定目标类型,即想要制作什么包
-n指定包的名字
-v指定包的版本号
-c指定打包的相对路径
-d指定依赖于哪些包
-f第二次包时目录下如果有同名安装包存在,则覆盖它
-p制作的rpm安装包存放路径,不指定就在当前目录下
–post-install软件包安装完成之后所要运行的脚本
–post-uninstall软件包卸载完成之后所要运行的脚本
–pre-install软件包安装完成之前所要运行的脚本
–pre-uninstall软件包卸载完成之前所要运行的脚本
–prefix制作好的rpm包默认安装路径

一、安装fpm命令

1.1 安装 ruby 环境

fpm 是 ruby语法写的一种定制 rpm 包的工具,所以安装 fpm 之前,需要安装 ruby 环境。

官方地址:Download RubyGems | RubyGems.org | your community gem host

阿里源地址:rubygems镜像_rubygems下载地址_rubygems安装教程-阿里巴巴开源镜像站

yum -y install ruby rubygems ruby-devel  rpm-build rpmdevtools git rubygem-json

1.2 更换 gem 源为阿里源

# 查看默认源
[root@localhost ~]# gem sources
*** CURRENT SOURCES ***https://rubygems.org/# 移除默认源
[root@localhost ~]# gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources# 添加阿里源
[root@localhost ~]# gem sources -a https://mirrors.aliyun.com/rubygems/
https://mirrors.aliyun.com/rubygems/ added to sources# 再次查看是否更换成功
[root@localhost ~]# gem sources
*** CURRENT SOURCES ***https://mirrors.aliyun.com/rubygems/#可以看到已经更新成阿里源了

1.3 安装 fpm

gem install fpm

如下截图,及安装成功;

在这里插入图片描述

安装成功。

二、将文件打成rpm包

fpm -s dir -t rpm -n 软件名称 -v 版本号 --prefix=rpm安装的路径 ./打包文件名

注:执行fpm打包命令前,进入打包目标的上一级目录。

[root@localhost ~]# fpm -s dir -t rpm -n docker -v 1.0 --prefix=/root/docker/ nvidia-docker
Created package {:path=>"docker-1.0-1.x86_64.rpm"}

-s:指定要打成rpm包的源类型,目录:-s dir

-t:知道要将目录制作成什么类型的文件,-t rpm

-n: 指定软件、包的名称

-v: 指定该包的版本号

–prefix:指定制作好的rpm包的安装路径,在新的服务器上安装会直接安装到此目录;

./:最后就是指定要打包的目录。

三、安装、卸载rpm包

首先要将打的rpm包上传到服务器上;

3.1 安装rpm包

rpm -ivh docker-1.0-1.x86_64.rpm

3.2 查找刚刚安装rpm包

rpm -qa | grep docker-1.0-1.x86_64

3.3 卸载刚刚安装的rpm包

rpm -e docker-1.0-1.x86_64

四、错误整理

2.1 ERROR: Error installing fpm: rexml requires Ruby version >= 2.5.0.

  • 报错信息:
# 安装fpm时报错
[root@localhost ~]# gem install fpm
ERROR:  Error installing fpm:rexml requires Ruby version >= 2.5.0.
  • 问题分析:

此问题报错说的是ruby 的版本必须>=2.5.0,我们可以先看看我们的ruby版本

[root@localhost ~]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]

可以看到是2.0.0版本,所以,需要升级一下ruby版本

  • 问题解决:
#1. 离线安装 rvm:
# rvm 是用来管理 ruby 的,而 ruby 的其中一个“程序”叫 rubygems,也就是我们用它装 fpm 的,手动装各种库用 gem。
[root@localhost ~]# curl -sSL https://github.com/rvm/rvm/tarball/stable -o rvm-stable.tar.gz#2. 解压 rvm 包:
[root@localhost ~]# tar -xzvf rvm-stable.tar.gz#3. 进入解压目录,安装 rvm:
[root@localhost ~]# cd rvm-rvm-6bfc921/
[root@localhost rvm-rvm-6bfc921]# ./install --auto-dotfiles#4. 重新加载 rvm:
[root@localhost rvm-rvm-6bfc921]# source /usr/local/rvm/scripts/rvm#5. 查看 rvm 可安装版本:
[root@localhost rvm-rvm-6bfc921]# rvm list known#6. 选择安装 ruby 2.6.3:
# 下载安装过程比较慢,请耐心等待
[root@localhost rvm-rvm-6bfc921]# rvm install 2.6.3#7. 设置默认使用 ruby 版本:
[root@localhost rvm-rvm-6bfc921]# rvm use 2.6.3 --default
Using /usr/local/rvm/gems/ruby-2.6.3
[root@nginx01 rvm-rvm-6bfc921]# ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

​ 可以看到 ruby 已升级至 2.6.3。再次执行 gem install fpm -v 1.3.3,就不会再报这个错误了,一会就安装完成了。

2.2 /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:54:in `require’: cannot load such file – json (LoadError)

  • 报错信息:
[root@localhost ~]# gem install fpm
/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- json (LoadError)
  • 问题分析:

这个错误通常表示你的 Ruby 环境缺少一个名为 “json” 的 gem(Ruby库)。要解决这个问题,你可以按照以下步骤来修复:

  1. 确保 Ruby 版本已安装:首先,请确保你的系统上已经安装了 Ruby。你可以在终端中运行以下命令来检查 Ruby 版本:

    ruby -v
    

    如果 Ruby 未安装或者版本较旧,建议更新到较新的版本。

  2. 安装 JSON Gem:要解决这个问题,你需要安装 json gem。在终端中执行以下命令:

    gem install json
    

    这将安装 json gem 到你的 Ruby 环境中。

  3. 检查 Gemfile:如果你的项目使用了 Gemfile 来管理 gem 依赖,确保你在 Gemfile 中有 json gem 的引用,并且运行 bundle install 来安装所需的 gem。

  4. 检查 Ruby 环境:确保你的 Ruby 环境设置正确。有时,可能需要切换到正确的 Ruby 版本或环境。你可以使用工具如 RVM(Ruby Version Manager)或 rbenv 来管理不同的 Ruby 环境。

  5. 检查加载路径:确保 Ruby 可以找到 json gem。有时,你可能需要在代码中添加 require 'json' 来明确指定加载这个 gem。

  • 问题解决:
# 安装json
gem install json

即可解决。

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

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

相关文章

【江科大】STM32:串口HEX/文本数据接收和发送(代码部分)(下)

串口发送 #include "stm32f10x.h" // Device header#include<stdio.h> #include<stdarg.h> void Serial_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPI…

latex画边框框加粗的表格

示例代码 \begin{table}[H]% 这四个距离分别控制toprule和buttomrule的上、下空白间距&#xff0c;如果不是0的话以后竖线和横线连不起来\abovetopsep0pt\aboverulesep0pt\belowrulesep0pt\belowbottomsep0pt\centering% \heavyrulewidth是\toprule和\bottomrule的默认宽度&am…

如何做好培训管理?推荐使用这款培训管理系统(内附详细步骤+免费模板)

本文将为大家讲解&#xff1a;1、如何做好培训管理&#xff1f;2、如何使用零代码平台搭建培训管理系统&#xff1f; 培训管理&#xff0c;作为企业人力资源管理的核心环节&#xff0c;对于确保员工具备完成任务所需的专业知识和技能发挥着至关重要的作用。它不仅是提升员工绩…

北斗卫星为野外科考人员提供安全保障

北斗卫星为野外科考人员提供安全保障 自第二次青藏高原综合科学考察研究启动以来&#xff0c;青海不断提升科考服务保障能力&#xff0c;推动科考全程信息化&#xff0c;有效促进科考成果转化。 为保障科考人员的人身安全&#xff0c;青海省青藏科学考察服务中心开发了基于北…

第08章_面向对象编程(高级)(static,单例设计模式,理解mian方法,代码块,final,抽象类与抽象方法,接口,内部类,枚举类,注解,包装类)

文章目录 第08章_面向对象编程(高级)本章专题与脉络1. 关键字&#xff1a;static1.1 类属性、类方法的设计思想1.2 static关键字1.3 静态变量1.3.1 语法格式1.3.2 静态变量的特点1.3.3 举例1.3.4 内存解析 1.4 静态方法1.4.1 语法格式1.4.2 静态方法的特点1.4.3 举例 1.5 练习 …

UI设计中的插画运用优势(下)

6. 插画赋予设计以美学价值&#xff0c;更容易被接受 即使所有人都在分析和争论产品的可用性和易用性&#xff0c;大家在对美的追求上&#xff0c;始终保持着一致的态度。一个设计是否具备可取性&#xff0c;是否能够通过甲方、客户和实际用户&#xff0c;是每个设计人都需要面…

高频一体式读写器的应用及其原理

高频一体式读写器作为一款读写设备&#xff0c;将RFID读写模块和天线集于一体&#xff0c;通过天线与RFID标签进行无线通信&#xff0c;实现对标签的识别和内存数据的读出或写入操作。具备安全、准确、快速、扩展、兼容性强等特点&#xff0c;具备非接触识别、远距离识别、环境…

Laravel 10.x 里如何使用ffmpeg

原理上很简单&#xff0c;就是使用命令行去调用ffmpeg&#xff0c;然后分析一下输出是不是有错误。 安装 首先安装 symfony/process&#xff0c;主要用于包装一下&#xff0c;用来代替 exec, passthru, shell_exec and system 。 composer require symfony/process composer…

PowerShell install 一键部署grafana

grafana 前言 Grafana 是一款开源的数据可视化和监控仪表盘工具。它提供了丰富的数据查询、可视化和报警功能,可用于实时监控、数据分析和故障排除等领域。 通过 Grafana,您可以连接到各种不同的数据源,包括时序数据库(如 Prometheus、InfluxDB)和关系型数据库(如 MySQ…

linux性能优化-磁盘I_O优化

1.文件系统 1.1.文件系统的工作原理 文件系统是在磁盘的基础上&#xff0c;提供了一个用来管理文件的树状结构。 接下来我们就看看Linux 文件系统的工作原理。 1.1.1索引节点和目录项 在 Linux 中一切皆文件 ,文件系统,本身是对存储设备上的文件&#xff0c;进行组织管理的…

【Linux】—— 共享内存

本期我将要带大家学习的是有关进程间通信的另一种方式——共享内存。共享内存是一种用于进程间通信的高效机制&#xff0c;允许多个进程访问和操作同一块内存区域。 目录 &#xff08;一&#xff09;深刻理解共享内存 1.1 概念解释 1.2 共享内存原理 1.3 共享内存数据结构 …

基于SpringBoot的药品管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

数据治理能解决AI疲劳问题吗?

这篇文章强调了AI疲劳开始的两个阶段&#xff0c;并介绍了数据质量报告等数据治理措施如何能够推动构建值得信赖和健壮的模型。 数据治理和AI疲劳听起来像是两个不同的概念&#xff0c;但两者之间有着内在的联系。为了更好地理解它&#xff0c;让我们从它们的定义开始。 数据治…

JS 将字符串‘10.3%‘ 经过运算加2转换为 ‘12.3%‘

文章目录 需求分析 需求 已知 字符串 a ‘10.3%’&#xff0c;现需将转换为 字符串’12.3%’ 分析 去掉百分号&#xff0c;将字符串转换为数字 const aNumber parseFloat(10.3%); const resultNumber aNumber 2;将结果转换为带百分号的字符串 const resultString re…

灰度图像的自动阈值分割

第一种&#xff1a;Otsu &#xff08;大津法&#xff09; 一、基于cv2的API调用 1、代码实现 直接给出相关代码&#xff1a; import cv2 import matplotlib.pylab as pltpath r"D:\Desktop\00aa\1.png" img cv2.imread(path, 0)def main2():ret, thresh1 cv2.…

【CentOS】Linux 在线帮助文档命令:help、man 命令与文档汉化

目录 1、Linux 的命令行模式 2、help 命令 3、man 命令 4、man 命令输出文档汉化 注&#xff1a;本文档使用 Linux 版本为 CentOS 7.9 [swadianlocalhost ~]$ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) 1、Linux 的命令行模式 一般情况下&#xff0…

喜讯 | 华院计算摘得“2023大数据产业年度创新技术突破”奖

2024年1月17日&#xff0c; 由数据猿和上海大数据联盟主办&#xff0c;上海市经济和信息化委员会、上海市科学技术委员会指导的“第六届金猿季&魔方论坛——大数据产业发展论坛”在上海市四行仓库举行。论坛以“小趋势大未来”为主题&#xff0c;围绕大数据产业的各个领域展…

MySQL-SQL-DQL

DQL-介绍 DQL-语法 基本查询 1、查询多个字段 2、设置别名 3、去除重复记录 条件查询 1、语法 2、条件 聚合函数 1、介绍 2、常见的聚合函数 3、语法 分组查询 1、语法 2、where与having区别 排序查询 1、语法 2、排序方式 分页查询 1、语法 DQL-执行顺序

ubuntu 安装protobuf

apt 安装 sudo apt install protobuf-compiler 编译安装 – 方式1 资料链接&#xff1a;ubuntu环境 安装ncnn_ubuntu ncnn_jbyyy、的博客-CSDN博客 git clone https://github.com/google/protobuf.git cd protobuf git submodule update --init --recursive ./autogen.sh …

关于php8的数据类型转换

目录 1、数据类型介绍 1.1 简单数据类型&#xff1a; 1.2 复合数据类型&#xff1a; 1.3 特殊数据类型&#xff1a; 2、数据类型转换 2.1 自动转换&#xff1a; 2.2 强制&#xff08;手动&#xff09;转换&#xff1a; 3、验证数据类型途径 &#xff08;1&#xff09;var…