Linux下开源打包工具fpm的安装与使用

  • 一、fpm概述
  • 二、fpm的安装
    • 1、安装ruby环境
    • 2、安装fpm
  • 三、fpm的使用
    • 1、fpm常用参数
    • 2、举例要求
    • 3、准备目录
    • 4、编写脚本文件
    • 5、打成rpm包
    • 6、安装与卸载
  • 四、下载一键打包例子
  • 五、报错解决
    • 错误描述
    • 原因
    • 解决办法
      • (1)离线安装rvm
      • (2)升级2.6.3版ruby

一、fpm概述

fpm是linux下的一款开源打包工具,可以用非常简单的方式,帮助你快速构建rpmdebsolaris等包,支持如下操作系统:

  • OSX/macOS
  • Red Hat systems (Fedora 22 or older, CentOS, etc)
  • Oracle Linux 7.x systems
  • Debian-derived systems (Debian, Ubuntu, etc)

github地址:https://github.com/jordansissel/fpm
fpm官网帮助:https://fpm.readthedocs.io/en/latest/

fpm采用ruby语言开发,所以使用前,需要在你的机器上安装ruby环境。

二、fpm的安装

以下以centos7.3为例,进行说明。在其他系统下的fpm安装,也可参考官网安装步骤:https://fpm.readthedocs.io/en/latest/installing.html#

1、安装ruby环境

安装ruby-devel、gcc、make、rpm-build、rubygems、ruby共6个包,安装过程遇到询问yes/no,自动选择yes。命令如下:

yum -y install ruby-devel gcc make rpm-build rubygems ruby

2、安装fpm

RubyGems是Ruby的一个包管理器,功能上类似于apt-get、yum等,所以我们需要通过RubyGems来安装fpm。

由于国外的源很慢,或者直接不能访问,需要将Ruby Gems源更换为国内的源。

添加阿里云的源:

gem sources --add http://mirrors.aliyun.com/rubygems/

删除官方的源:

gem sources --remove https://rubygems.org/

查看当前源列表:

gem sources -l

安装1.4.0版fpm:

gem install fpm -v 1.4.0

如果安装过程出现错误,可参考第五章解决办法;没出现报错,请跳过第五章。

安装完毕,应该是如下这样:

查看fpm帮助:

fpm -help

说明,已经安装成功。

三、fpm的使用

fpm的使用也很简单,只要输入相应的参数值,就可以完成打包,并且支持rpm和deb,这样可以在不同的平台下使用相同的方式来打包,一劳永逸。

fpm打包是在终端中使用命令来完成的,支持很多的参数,使用形式,类似如下:

fpm -x yyy -z bbb -a jjjj

接下来,了解下fpm支持的命令参数。

1、fpm常用参数

FPM常用参数:

  • -s:指定源类型

  • -t:指定目标类型,即想要制作为什么包

  • -n:指定包的名字

  • -v:指定包的版本号

  • -C:指定打包的相对路径

  • -d:指定依赖于哪些包

  • -f:第二次包时目录下如果有同名安装包存在,则覆盖它;

  • -p:制作的rpm安装包存放路径,不想放在当前目录下就需要指定;

  • –post-install:软件包安装完成之后所要运行的脚本;同–offer-install

  • –pre-install:软件包安装完成之前所要运行的脚本;同–before-install

  • –post-uninstall:软件包卸载完成之后所要运行的脚本;同–offer-remove

  • –pre-uninstall:软件包卸载完成之前所要运行的脚本;同—before-remove

  • –prefix:制作好的rpm包默认安装路径;

支持的源类型包:

  • dir: 将目录打包成所需要的类型,可以用于源码编译安装的软件包
  • rpm: 对rpm进行转换
  • gem: 对rubygem包进行转换
  • python: 将Python模块打包成相应的类型

支持的目标类型包:

  • rpm: 转换为rpm包
  • deb: 转换为deb包
  • solaris: 转换为solaris包
  • puppet: 转换为puppet包

网上基本都能查到fpm相关资料,有些参数可能新版的fpm中,变成了不推荐使用。想要了解最新的参数,可以使用命令查看帮助。

fpm -help

下面,我们举个例子,来对fpm的使用加以说明。

2、举例要求

待打包的东西有2个:

  • 程序test,里面就是简单打印个hello world;
  • 测试文件1.txt。

我们想把它打成rpm包,并且安装到/opt/helloworldtest目录下,在安装完成后,自动将1.txt文件拷贝到根目录下;在卸载完成后,将根目录下的1.txt删除。

之所以在安装后,和卸载后,添加这个操作,是为了想在安装后添加桌面快捷方式,且在卸载后删除桌面快捷方式。为了简便,就直接用1.txt代替下吧,反正都是类似的,主要把fpm打的包,执行脚本原理解释清楚就行。

安装后的预期效果:

3、准备目录

首先我们需要建立3个目录,如下:

  • output,用于存放打好的包;
  • source,用于存放我们的可执行程序,这里是test程序和一个测试文件1.txt
  • sh,用于存放安装完成后执行的脚步install_after.sh,以及卸载完成后执行的脚本uninstall_after.sh

具体文件存放情况,如下:

使用fpm打包后,安装的原理,就是将source下的所有东西释放到安装目录下。

比如安装目录为/opt/helloworldtest,则其安装路径文件情况,如下:

4、编写脚本文件

install_after.sh内容如下:

#!/bin/sh
cp /opt/helloworldtest/1.txt /

uninstall_after.sh内容如下:

#!/bin/sh
rm /1.txt

把install_after.sh、uninstall_after.sh、test、1.txt这4个文件放到位后。就可以进行打包操作了。

5、打成rpm包

进入setupdir目录,即output、sh、source所在的目录:

输入如下命令,对source目录下进行打包rpm:

fpm -s dir -t rpm -n mytest -v 1.0.0 --iteration 1 -C source -f -p output --prefix /opt/helloworldtest --after-install sh/install_after.sh --after-remove sh/uninstall_after.sh

以上参数虽多,但是很简单,请看如下解释:

  • -s dir,将目录进行打包;
  • -t rpm,打成rpm包,也可以写deb,表示打成deb包;
  • -n mytest,包名为mytest,记住这个名字,卸载时,需要使用mytest名称;
  • -v 1.0.0,包的版本号为1.0.0;
  • –iteration 1,发布号为1,发布号主要是对软件存在的bug或漏洞进行修补,在软件功能上并没有变化;
  • -C source,打包的相对路径为source;
  • -f,多次打包时,输出目录下如果有同名安装包存在,则覆盖它;
  • -p output,输出的安装包的目录为output;
  • –prefix /opt/helloworldtest,指定包的安装路径为/opt/helloworldtest目录下;
  • –after-install sh/install_after.sh,软件包安装完成之后运行install_after.sh脚本;
  • –after-remove sh/uninstall_after.sh,软件包卸载完成之后运行uninstall_after.sh脚本。

最后,打包生成的rpm文件在output目录下。如下:

RPM包的组成格式:
mytest-1.0.0-1.x86_64.rpm|    |     |    |    |
软件名称|     |    |    |版本号   |    |  |发布号  |    |硬件平台 |扩展名
例子备注:mytest :软件名称1.0.0  :软件版本号1      :发布号主要是对软件存在的bug或漏洞进行修补,在软件功能上并没有变化x86_64 :指64位的PC架构,另外还有'i386' 'i686' 等32位的PC架构rpm    :扩展名

6、安装与卸载

测试,rpm安装:

rpm -i mytest-1.0.0-1.x86_64.rpm

测试,rpm卸载:

rpm -e mytest

此时使用的软件包名mytest,就是打包时,通过-n参数指定的名称。

经测试,安装、卸载均达到预期效果。

为了照顾不了解的小伙伴,所以尽可能的写的详细,似乎让人感觉反而复杂了。不过fpm的使用本来就很简单,其实就是一条命令的事儿。跟着做一遍,基本就很清楚了。

四、下载一键打包例子

为了最大简化操作,特意将打包命令写成脚本文件,实现一键打包(./make_rpm.sh)。

文章中打包的例子,提供压缩包下载:

链接: https://pan.baidu.com/s/1VPI5vBtPsjI6GsGC6cRdyg

提取码: tr8t

五、报错解决

错误描述

使用“gem install fpm -v 1.4.0”安装fpm时,报错“childprocess requires Ruby version >= 2.4.0”,如下:

原因

安装childprocess-4.0.0.gem包时,要求ruby版本必须>=2.4.0。我们使用命令“ruby -v”查看ruby版本,如下:

解决办法

升级ruby版本。详细步骤如下:

(1)离线安装rvm

rvm是用来管理ruby的,而ruby的其中一个“程序”叫rubygems,也就是我们用它装fpm的,手工装各种库用gem。

所以,我们首先安装rvm,这个在线速度很慢,我这里使用离线安装。

下载rvm包,大概一会,就可以下载完毕:

curl -sSL https://github.com/rvm/rvm/tarball/stable -o rvm-stable.tar.gz

解压rvm包:

tar -xzvf rvm-stable.tar.gz

进入解压目录:

cd rvm-rvm-cc69ed9

安装rvm:

./install --auto-dotfiles

加载rvm:

source /usr/local/rvm/scripts/rvm

(2)升级2.6.3版ruby

查看rvm可安装版本:

rvm list known

安装ruby 2.6.3:

rvm install 2.6.3

下载中,可能下载比较久,下载完毕,自动开始安装,如下:

设置默认使用ruby版本:

rvm use 2.6.3 --default

可以看到ruby已升级至2.6.3。

再次执行gem install fpm -v 1.4.0,就不会再报这个错误了,一会就安装完成了。

参考链接:

《用fpm来做rpm打包》

《fpm安装和使用fpm打包rpm》


若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

Linux下开源打包工具fpm的安装与使用(超详细)相关推荐

  1. Linux下的sniffer工具--Tcpdump的安装和使用

    在如今众多的黑客技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一.用过windows平台上的sniffer工具(例如,netxray和sniffer pro软件)的朋友可能都知道,在共享 ...

  2. Linux如何安装iperf软件,Linux 下网络性能测试工具 iperf 的安装和使用

    很久没写文章,iperf 也一直有用,感受不错就记录一下html 说明: OS :CentOS 6.4 x86_64 Server: 192.168.100.55 Client: 192.168.10 ...

  3. linux下qt的文件打包,【最详细最完整】在Linux 下如何打包免安装的QT程序?

    版权声明:嵌入式linux相关的文章是我的学习笔记,基于Exynos 4412开发板,一部分内容是总结,一部分是查资料所得,大家可以自由转载,但请注明出处! https://blog.csdn.net ...

  4. Linux下的parted工具的使用 GPT分区安装系统

    安装系统是安装前时候ctrl+atl+F2 fdisk -l parted select /dev/sdb mklabel msdos # 将GPT磁盘格式化为MBR磁盘 对大硬盘进行分区 xfs 和 ...

  5. Linux 下的 pstack 工具安装及简单应用

    作者 | JiekeXu 来源 | JiekeXu之路(ID: JiekeXu_IT) 转载请联系授权 | (微信ID:xxq1426321293) 大家好,我是 JiekeXu,很高兴又和大家见面了 ...

  6. Linux下C++开发工具介绍

    概述     就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, an ...

  7. arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析

    C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.如果crash的地方正是内存使用错误的地方,说明你人品好.如果crash的地方内存明显不是consistent的 ...

  8. linux下的bt工具bitorrent

    linux下的bt工具很少,而且性能也都不怎么高,azureus虽然是图形界面的,但是很占内存和cup,很容易dang机,而且他的bt工具都是命 令行的,给许多linuxfans带来了很多不便,所以我 ...

  9. Linux 下ffmpeg的环境搭建与安装

    Linux下ffmpeg的环境搭建与安装 背景 [FFmpeg是什么] 1· FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源软件.采用LGPL或GPL许可证,提供了录制.转 ...

最新文章

  1. C++深拷贝与浅拷贝
  2. 阿里巴巴领导抱怨家里有矿的应届生不好带!聪明效率高,但从不加班,也不做职业规划!画饼谈心也没用,怎么办?...
  3. 第一行冻结_EXCEL函数tips(4) 数据冻结和查找
  4. CSS之position
  5. (字符串)最长公共子序列(Longest-Common-Subsequence,LCS)
  6. 发现一个小坑的地方,unity的协程,想要停止,必须以字符串启动
  7. d3设置line长度_Graph Embedding之LINE算法解读
  8. Qt之模式、非模式、半模式对话框
  9. matplotlib: 有关 Backend 的说明
  10. 新浪微博API使用方法
  11. spring定时任务配置,以及不执行的解决办法
  12. Android__逆向__xpose使用
  13. 第三章 一元函数积分概念、计算及应用
  14. 13 个非常有用的 Python 代码片段,建议收藏!
  15. yolo3训练人脸检测模型
  16. 什么是NoSQL数据库
  17. npm安装electron时报Error: EPERM: operation not permitted, scandir.....
  18. 计算机磁盘管理找不到第二块硬盘,新加的硬盘没有显示怎么办?新加硬盘分区方法...
  19. 计算机英语感想1500,求助:求新概念计算机英语英文读书报告1500字,谢~
  20. Linux测试工具httpd-tools

热门文章

  1. 恢复IDEA中误删的文件
  2. BIOS内部模块详解
  3. .net 4.0 安装到IIS
  4. LDAP认证的两种方式
  5. Linux 安装cacti
  6. Office2016、visio2016安装的注意事项
  7. 记ePub.js使用过程中的那些事
  8. 电子计算机开关及清屏键,计算机清屏键是什么
  9. ps 画中间透明的边框图形
  10. 考研面试常问问题汇总(包含答案)