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

这篇具有很好参考价值的文章主要介绍了Linux如何将文件或目录打成rpm包? -- fpm打包详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👨‍🎓博主简介

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


前言

  最近因为遇到一个服务器受系统限制,只能上传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

如下截图,及安装成功;

Linux如何将文件或目录打成rpm包? -- fpm打包详解,《Linux从入门到精通》,linux,运维,服务器,rpm

安装成功。

二、将文件打成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

即可解决。文章来源地址https://www.toymoban.com/news/detail-818061.html

到了这里,关于Linux如何将文件或目录打成rpm包? -- fpm打包详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux chown命令教程:如何改变文件或目录的所有者和组(附案例详解和注意事项)

    chown (change owner)命令在Linux中用于改变文件或目录的所有者和组。每个文件都与一个所有者用户或组相关联。正确配置文件和文件夹权限非常重要。 chown 命令在所有主流的Linux发行版中都可以使用,包括但不限于Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora和R

    2024年04月27日
    浏览(48)
  • 解决Springboot项目打成jar包后获取resources目录下的文件失败的问题

    前几天在项目读取resources目录下的文件时碰到一个小坑,明明在本地是可以正常运行的,但是一发到测试环境就报错了,说找不到文件,报错信息是:class path resource [xxxx] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:xxxx.jar!/BOOT-INF/classes!xxxx。 看了

    2024年02月11日
    浏览(58)
  • 解决Springboot项目打成jar包后获取resources目录下的文件报错的问题

    前几天在项目读取resources目录下的文件时碰到一个小坑,明明在本地是可以正常运行的,但是一发到测试环境就报错了,说找不到文件,报错信息是:class path resource [xxxx] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:xxxx.jar!/BOOT-INF/classes!xxxx。 看了

    2024年02月11日
    浏览(55)
  • 系列二十九、Spring Boot打成jar包后,resources目录下的资源文件获取不到

            在做公司业务开发时,有一个地方是使用EasyExcel模板技术进行文件上传,测试环境是OK的,但是和前后端联调验证测试通过后,上传到生产环境就不行了,后来也是花费了很多时间才找出其中的问题,以下为解决方案。  

    2024年02月02日
    浏览(51)
  • Linux 下使用 tar 命令打包指定目录下的所有文件,不包含路径方法

    一,问题描述 例如:需要打包/data/android_data/VMRK02ejyijtyww20 文件夹到/data/testtar/目录下 一般我们使用命令如下命令 当我们解VMRK02ejyijtyww20.tar压缩包后发现,把路径也打包进去了, 即/data/android_data/VMRK02ejyijtyww20;而大多数情况,我们解压后只需要的是VMRK02ejyijtyww20文件夹 二、打包

    2024年02月16日
    浏览(54)
  • Linux下软件部署安装管理----rpmbuild打包rpm包部署安装

    来源:微信公众号「编程学习基地」 创建rpm包管理路径,生成rpm相关目录 RPM打包的时候需要编译源码,还需要把编译好的配置文件,二进制命令文件之类的东西按照安装好的样子放到合适的位置,还要根据需要对RPM的包进行测试,这些都需要先有一个“工作空间”。rpmbuil

    2024年01月23日
    浏览(45)
  • 如何更改 Linux 文件和目录权限?

    在Linux系统中,文件和目录权限是安全性和访问控制的关键组成部分。正确设置文件和目录的权限可以确保只有授权的用户能够读取、写入或执行这些文件和目录。 本文将详细介绍如何在Linux系统中更改文件和目录的权限。 在Linux系统中,每个文件和目录都有一组权限,用于

    2024年02月06日
    浏览(48)
  • 【Linux实践室】Linux文件打包和解压缩实战指南:tar打包命令操作详解(文末送书)

    🌈个人主页: 聆风吟_ 🔥系列专栏: Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 有时,我们会在Linux系统中将多个文件打包成一个单独的文件,通过本节的学习,我们将学会如何在Linux系统中将多个文件/目录打包生成一个文件。 本节任务:使用

    2024年04月29日
    浏览(45)
  • Linux中如何修改文件或目录的权限?

    ​ 在Linux系统中,文件权限是非常重要的一个概念,它能够决定谁可以访问文件,以及可以执行哪些操作,正确地设置文件权限可以确保系统的安全性和稳定性,那么如何设置文件权限呢?以下是详细的内容: 在 Linux 系统中,可以使用 `chmod` 命令来修改文件或目录的权限。

    2024年02月07日
    浏览(48)
  • 【linux升级ssh】 利用rpmbuild工具对ssh打包为rpm包进场安装升级

    rpmbuild命令用于创建软件的二进制包和源代码包。 官方文档:rpm.org - RPM Reference Manual rpmbuild 中文手册:rpmbuild 中文手册 [金步国] 使用rpmbuild将tar包打成rpm包 执行如下命令来生成rpmbuild的工作目录 SPEC撰写是打包RPM的核心,也算是最难的一步,好在我们可以从参照一个简单的模

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包