?????博主簡介
????云計算領域優(yōu)質創(chuàng)作者
????華為云開發(fā)者社區(qū)專家博主
????阿里云開發(fā)者社區(qū)專家博主
??交流社區(qū):運維交流社區(qū) 歡迎大家的加入!
?? 希望大家多多支持,我們一起進步!??
??如果文章對你有幫助的話,歡迎 點贊 ???? 評論 ?? 收藏 ?? 加關注+??
前言
??最近因為遇到一個服務器受系統(tǒng)限制,只能上傳rpm包才能使用,而我們的服務都是文件,那么怎么將文件都打成rpm包呢???我也是找了好幾個,終于找到了一個簡單好用的打包方式,下面來給大家講解一下部署及打包、安裝;
本文已docker離線包
目錄為例子,將其打成rpm包,并在新的服務器上安裝;
操作系統(tǒng)為:Centos 7.6
說明 – fpm參數(shù)及解析
-
fpm的功能就是將一種類型的包轉換成另一種類型
-
fpm支持的源類型包:
原類型包 | 解析 |
---|---|
dir | 將目錄打包成所需要的類型用于源碼編譯安裝的軟件包 |
rpm | 對rpm進行轉換 |
gem | 對rubygem包進行轉換; |
python | 將python模塊打包成相應的類型 |
- fpm支持的目標類型包:
目標類型包 | 解析 |
---|---|
rpm | 轉換為rpm包 |
deb | 轉換為deb包 |
solari | 轉換為solaris包 |
puppet | 轉換成pupper包 |
- fpm常用參數(shù):
參數(shù) | 參數(shù)解析 |
---|---|
-s | 指定源類型 |
-t | 指定目標類型,即想要制作什么包 |
-n | 指定包的名字 |
-v | 指定包的版本號 |
-c | 指定打包的相對路徑 |
-d | 指定依賴于哪些包 |
-f | 第二次包時目錄下如果有同名安裝包存在,則覆蓋它 |
-p | 制作的rpm安裝包存放路徑,不指定就在當前目錄下 |
–post-install | 軟件包安裝完成之后所要運行的腳本 |
–post-uninstall | 軟件包卸載完成之后所要運行的腳本 |
–pre-install | 軟件包安裝完成之前所要運行的腳本 |
–pre-uninstall | 軟件包卸載完成之前所要運行的腳本 |
–prefix | 制作好的rpm包默認安裝路徑 |
一、安裝fpm命令
1.1 安裝 ruby 環(huán)境
fpm 是 ruby
語法寫的一種定制 rpm 包的工具,所以安裝 fpm
之前,需要安裝 ruby
環(huán)境。
官方地址: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/
#可以看到已經(jīng)更新成阿里源了
1.3 安裝 fpm
gem install fpm
如下截圖,及安裝成功;
安裝成功。
二、將文件打成rpm包
fpm -s dir -t rpm -n 軟件名稱 -v 版本號 --prefix=rpm安裝的路徑 ./打包文件名
注:執(zhí)行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。再次執(zhí)行 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 環(huán)境缺少一個名為 “json” 的 gem(Ruby庫)。要解決這個問題,你可以按照以下步驟來修復:
-
確保 Ruby 版本已安裝:首先,請確保你的系統(tǒng)上已經(jīng)安裝了 Ruby。你可以在終端中運行以下命令來檢查 Ruby 版本:
ruby -v
如果 Ruby 未安裝或者版本較舊,建議更新到較新的版本。
-
安裝 JSON Gem:要解決這個問題,你需要安裝
json
gem。在終端中執(zhí)行以下命令:gem install json
這將安裝
json
gem 到你的 Ruby 環(huán)境中。 -
檢查 Gemfile:如果你的項目使用了 Gemfile 來管理 gem 依賴,確保你在 Gemfile 中有
json
gem 的引用,并且運行bundle install
來安裝所需的 gem。 -
檢查 Ruby 環(huán)境:確保你的 Ruby 環(huán)境設置正確。有時,可能需要切換到正確的 Ruby 版本或環(huán)境。你可以使用工具如 RVM(Ruby Version Manager)或 rbenv 來管理不同的 Ruby 環(huán)境。
-
檢查加載路徑:確保 Ruby 可以找到
json
gem。有時,你可能需要在代碼中添加require 'json'
來明確指定加載這個 gem。文章來源:http://www.zghlxwxcb.cn/news/detail-818061.html
- 問題解決:
# 安裝json
gem install json
即可解決。文章來源地址http://www.zghlxwxcb.cn/news/detail-818061.html
到了這里,關于Linux如何將文件或目錄打成rpm包? -- fpm打包詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!