欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > FPM工具制作RPM包

FPM工具制作RPM包

2024/10/25 19:31:01 来源:https://blog.csdn.net/weixin_50902636/article/details/142877459  浏览:    关键词:FPM工具制作RPM包

文章目录

    • 一、fpm工具介绍
      • 1、什么是fpm?
      • 2、fpm技术分析
      • 3、fpm应用场景
      • 4、fpm与rpmbuild的区别
    • 二、fpm安装及构建操作
      • 1、安装fpm工具
        • 1.1、安装ruby环境
        • 1.2、Ruby Gems源更换为国内的源
        • 1.3、删除官方源
        • 1.4、查看当前源列表
        • 1.5、安装fpm版本
          • 1.5.1、报错解决
      • 2、fpm常用参数
    • 三、fpm构建RPM包示例
    • 四、验证构建的RPM包

一、fpm工具介绍

1、什么是fpm?

FPM是一个用于快速构建软件包的工具,支持多种源文件格式和输出格式,包括gem、python module、pear、目录、rpm、deb、node packages等等。使用FPM工具,可以将已经编译和安装的软件快速打包成各种格式的安装包,方便在其他机器上进行部署和安装。同时fpm工具采用ruby语言开发,所以使用前需要在机器上安装ruby环境

2、fpm技术分析

FPM 使用 Ruby 编写,其核心机制是对输入的文件和目录进行处理,然后生成符合特定格式的包结构。
它的灵活性体现在支持多种输入类型和输出格式:输入类型: 可以是任意文件、目录、tar 包或者已存在的软件包。输出格式: 支持包括 Debian(.deb)、Red Hat (.rpm)、Solaris (.pkg)、RubyGems (.gem) 在内的多种包格式。
FPM 使用元数据来描述包的信息,例如作者、版本、依赖关系等。这些信息被嵌入到生成的包中,便于管理和查询

3、fpm应用场景

交付运维: 给甲方快速提供各种安装部署包,实现快捷交付和一键部署
支持多平台构建: 如果你需要在不同的操作系统上分发软件,FPM 可以帮你快速创建不同系统的安装包

4、fpm与rpmbuild的区别

特点fpmrpmbuild
用途支持将多种格式构建为RPM等不同的格式包专用于 构建RPM 包
语言RubyC
易用性简单易用复杂,需要更多配置
适用场景DevOps, CI/CD,快速交付高度定制化的 RPM 打包
支持的格式多种格式(包括 .deb, .rpm 等)仅支持 .rpm

二、fpm安装及构建操作

1、安装fpm工具

服务器操作系统 centos7.9
fpm工具安装官网https://fpm.readthedocs.io/en/latest/installing.html
1.1、安装ruby环境
[root@python2 ~]# yum -y install ruby-devel gcc make rpm-build rubygems ruby
1.2、Ruby Gems源更换为国内的源
RubyGems是Ruby的一个包管理器,功能上类似于apt-get、yum等,所以我们需要通过RubyGems来安装fpm。由于国外的源很慢,或者直接不能访问,需要将Ruby Gems源更换为国内的源。
[root@python2 ~]# gem sources --add http://mirrors.aliyun.com/rubygems/
1.3、删除官方源
[root@python2 ~]# gem sources --remove https://rubygems.org/
1.4、查看当前源列表
[root@python2 ~]# gem sources -l
*** CURRENT SOURCES ***
http://mirrors.aliyun.com/rubygems/
1.5、安装fpm版本
[root@python2 ~]# gem install fpm

在这里插入图片描述

1.5.1、报错解决
在安装fpm时遇到以上错误,提示ruby版本必须大于3.0,因此需要对ruby进行升级操作
1、查看当前ruby版本
[root@python2 ~]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]2、安装rvm
rvm是用来管理ruby的,而ruby的其中一个“程序”叫rubygems,也就是我们用它装fpm的,手工装各种库用gem。
所以,我们首先安装rvm,这个在线速度很慢,我这里使用离线安装。
2.1、下在rvm安装包
[root@python2 ~]# curl -sSL https://github.com/rvm/rvm/tarball/stable -o rvm-stable.tar.gz
2.2、解压安装rvm
[root@python2 ~]# tar -xzvf rvm-stable.tar.gz
[root@python2 ~]# cd rvm-rvm-6bfc921/
[root@python2 rvm-rvm-6bfc921]# ./install --auto-dotfiles
2.3、加载rvm
[root@python2 rvm-rvm-6bfc921]# source /usr/local/rvm/scripts/rvm

在这里插入图片描述

2.4、升级ruby
查看rvm可安装版本
[root@python2 rvm-rvm-6bfc921]# rvm list known
安装ruby 3.0.0
[root@python2 rvm-rvm-6bfc921]# rvm install 3.0.0
设置默认使用ruby版本,并验证ruby是否升级成功
[root@python2 rvm-rvm-6bfc921]# rvm use 3.0.0 --default
Using /usr/local/rvm/gems/ruby-3.0.0
[root@python2 rvm-rvm-6bfc921]# ruby -v
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]

在这里插入图片描述

在这里插入图片描述

2.5、再次安装fpm,并验证
[root@python2 rvm-rvm-6bfc921]# gem install fpm
[root@python2 rvm-rvm-6bfc921]# fpm -v
1.15.1

在这里插入图片描述

2、fpm常用参数

RPM包的组成格式:
promethues-2.44.0-1.el7.x86_64.rpm|        |      |    |     |    |
软件名称    |      |    |     |    |版本号    |    |   |    |发布号  |     |    |硬件平台  架构  |扩展名
例子备注:promethues: 软件名称2.44.0: 软件版本号1: 发布号主要是对软件存在的bug或漏洞进行修补,在软件功能上并没有变化el7: 发布序号x86_64: 指64位的PC架构,另外还有'i386' 'i686' 等32位的PC架构rpm: 扩展名
fpm命令常用参数:-f: 强制覆盖[覆盖同名rpm包]-n: 指定的rpm包名-p: 指定的rpm包文件放置位置-v: 指定的rpm包版本-d: 指定依赖的软件  ([-d 'name'] or [-d 'name > version'] 例子: -d 'libstdc++ >= 4.4.3')-a: 指定系统架构,如果是noarch则为'-a all' 或者 '-a native' [x86_64] 当软件不区分64位或32位的时候可以 noarch-s: 指定INPUT的数据类型 (["-s dir"] 省略数据类型)-m: 指定打包人员[Packager]  ([ -m 'user'])-C: 指定打包的相对路径,类似于buildroot. 譬如-C /tmp/apr/ 而打包机器的数据包路径是/tmp/apr/{opt,usr,etc} 那安装这个rpm包后,在本地的数据就是/opt/,/usr/,/etc/-t: 指定需要制作成什么包,可选项有(deb,rpm,solaris,etc)支持的源类型:"dir" "rpm" "gem" "python" "empty" "tar" "deb" "cpan" "npm" "osxpkg" "pear" "pkgin" "virtualenv" "zip"支持的目标类型:"rpm" "deb" "solaris" "puppet" "dir" "osxpkg" "p5p" "puppet" "sh" "solaris" "tar" "zip"--description: 软件包描述--conflicts: 指定冲突软件--url: 指定站点[惯例都是添加软件的官网 例如: --url "http://www.cnblog.com/roach57" ]--verbose: 安装过程详细打印--after-install: 包安装之后执行的脚本 也可写作 --post-install FILE--before-install: 包安装之前执行的脚本 --after-remove: 包卸载之后执行的脚本--before-remove: 包卸载之前执行的脚本--after-upgrade: 包更新之后执行的脚本[仅支持 deb 和 rpm 这两种包]--before-upgrade: 包更新之前执行的脚本--iteration: 发布序号[就是rpm包里面的release]--epoch: 纪元  [不知道干嘛用的]--no-rpm-sign: 不使用rpm签名   Signature--license: 证书许可 [可选项有 'BSD(开源软件)' 'GPLv2(自由软件)' 'MIT' 'Public Domain(公共域)' 'Distributable(贡献)' 'commercial(商业)' 'Share(共享)等',一般的开发都写'BSD'或'GPL']--vendor: 供应商名称 [ --vendor 'roach57@163.com']--no-depends: 代表没有任何依赖包,-d是对立的,不能共用--config-files: 指定配置文件,可以指定目录[递归]--directories: 指定包目录--category: 软件所属的类别[这是个什么软件]下面有个对应的表格:[参考这个文件 /usr/share/doc/rpm-x.x.x/GROUPS ]--prefix: 指定RPM安装路径

三、fpm构建RPM包示例

fpm构建prometheus RPM包示例
1、下载Prometheus二进制包
[root@python1 ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.44.0/prometheus-2.44.0.linux-amd64.tar.gz
2、解压安装包并重新授权
[root@python1 ~]# mkdir /opt/monitor
[root@python1 ~]# tar xf prometheus-2.44.0.linux-amd64.tar.gz -C /opt/monitor/
[root@python1 monitor]# mv prometheus-2.44.0.linux promethues
[root@python1 monitor]# chown -R root.root prometheus
[root@python1 prometheus]# chmod 755 prometheus.yml 
[root@python1 prometheus]# mkdir data                           #该目录用于存储数据至磁盘
[root@python1 monitor]# ll
total 0
drwxr-xr-x 6 root root 269 Oct 11 16:55 prometheus
3、添加RPM安装前、安装后、卸载前、卸载后执行脚本
4、执行fpm构建
[root@python1 prometheus]# fpm -f -s dir -t rpm -n prometheus -v 2.44.0 --iteration 1.el7 \
-C /opt/monitor/prometheus \
--prefix /opt/monitor/prometheus \ 
-p /tmp/ \
--description 'prometheus_2.44.0_rpm' \
--after-remove /opt/monitor/prometheus/remove_after.sh \
--before-remove /opt/monitor/prometheus/stop.sh \
--before-install /opt/monitor/prometheus/install_before.sh \
--after-install  /opt/monitor/prometheus/start.sh
Force flag given. Overwriting package at /tmp/prometheus-2.44.0-1.el7.x86_64.rpm {:level=>:warn}
Created package {:path=>"/tmp/prometheus-2.44.0-1.el7.x86_64.rpm"}
5、安装构建好的RPM包,如下图所示

在这里插入图片描述

四、验证构建的RPM包

[root@python2 ~]# rpm -K prometheus-2.44.0-1.el7.x86_64.rpm 
prometheus-2.44.0-1.el7.x86_64.rpm: sha1 md5 OK
[root@python2 ~]# rpm -qpi prometheus-2.44.0-1.el7.x86_64.rpm 
Name        : prometheus
Version     : 2.44.0
Release     : 1.el7
Architecture: x86_64
Install Date: (not installed)
Group       : default
Size        : 231295049
License     : unknown
Signature   : (none)
Source RPM  : prometheus-2.44.0-1.el7.src.rpm
Build Date  : Fri 11 Oct 2024 09:31:48 PM CST
Build Host  : python1
Relocations : /opt/monitor/prometheus 
Packager    : <root@python1>
Vendor      : none
URL         : http://example.com/no-uri-given
Summary     : prometheus_2.44.0_rpm
Description : prometheus_2.44.0_rpm

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com