前言
本文已docker离线包
目录为例子,将其打成rpm包,并在新的服务器上安装;
操作系统为:Centos 7.6
说明 – fpm参数及解析
-
fpm的功能就是将一种类型的包转换成另一种类型
-
fpm支持的源类型包:
- fpm支持的目标类型包:
- fpm常用参数:
一、安装fpm命令
1.1 安装 ruby 环境
fpm 是 ruby
语法写的一种定制 rpm 包的工具,所以安装 fpm
之前,需要安装 ruby
环境。
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安装的路径 ./打包文件名
[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"}
三、安装、卸载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库)。要解决这个问题,你可以按照以下步骤来修复:
-
确保 Ruby 版本已安装:首先,请确保你的系统上已经安装了 Ruby。你可以在终端中运行以下命令来检查 Ruby 版本:
ruby -v
如果 Ruby 未安装或者版本较旧,建议更新到较新的版本。
-
安装 JSON Gem:要解决这个问题,你需要安装
json
gem。在终端中执行以下命令:gem install json
这将安装
json
gem 到你的 Ruby 环境中。 -
检查 Gemfile:如果你的项目使用了 Gemfile 来管理 gem 依赖,确保你在 Gemfile 中有
json
gem 的引用,并且运行bundle install
来安装所需的 gem。 -
检查 Ruby 环境:确保你的 Ruby 环境设置正确。有时,可能需要切换到正确的 Ruby 版本或环境。你可以使用工具如 RVM(Ruby Version Manager)或 rbenv 来管理不同的 Ruby 环境。
-
检查加载路径:确保 Ruby 可以找到
json
gem。有时,你可能需要在代码中添加require 'json'
来明确指定加载这个 gem。
- 问题解决:
# 安装json
gem install json
即可解决。