FPM工具制作RPM包

news2024/10/16 16:08:21

文章目录

    • 一、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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kaggle竞赛——森林覆盖类型分类

目录 1. 竞赛简要2. 数据分析2.1 特征类型统计2.2 四个荒野区域数据分析2.3 连续特征分析2.4 离散特征分析2.5 特征相关性热图2.6 特征间的散点关系图 3. 特征工程3.1 特征组合3.2 连续特征标准化 4. 模型搭建4.1 模型定义4.2 绘制混淆矩阵和ROC曲线4.3 模型对比与选择 5. 测试…

详解安卓和IOS的唤起APP的机制,包括第三方平台的唤起方法比如微信

网页唤起APP是一种常见的跨平台交互方式&#xff0c;它允许用户从网页直接跳转到移动应用程序。 这种技术广泛应用于各种场景&#xff0c;比如让用户在浏览器中点击链接后直接打开某个应用&#xff0c;或者从网页引导用户下载安装应用。实现这一功能主要依赖于URL Scheme、Univ…

线性代数 行列式

一、行列式 1、定义 一个数学概念&#xff0c;主要用于 线性代数中&#xff0c;它是一个可以从方阵&#xff08;即行数和列数相等的矩阵&#xff09;形成的一个标量&#xff08;即一个单一的数值&#xff09; 2、二阶行列式 &#xff0c;像这样将一个式子收缩称为一个 2*2 的…

校车购票微信小程序的设计与实现(lw+演示+源码+运行)

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…

基于深度学习的细粒度图像分析综述【翻译】

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 基础信息0 摘要1 INTRODUCTION2 识别与检索 RECOGNITION VS. RETRIEVAL3 问题和…

腾讯云视立方TRTCCalling Web 相关

基础问题 什么是 TRTCCalling&#xff1f; TRTCCalling 是在 TRTC 和 TIM 的基础上诞生的一款快速集成的音视频的解决方案。支持1v1和多人视频/语音通话。 TRTCCalling 是否支持接受 roomID 为字符串? roomID 可以 string&#xff0c;但只限于数字字符串。 环境问题 Web …

QD1-P24 CSS 组合选择器

本节学习&#xff1a;CSS 组合选择器 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p24 组合选择器是使用多个基础选择器组合在一起来选择更具体的目标元素的方法。以下是几种常见的组合选择器&#xff1a; 下面四个选择器是本节学习内容 后代选择器&#xff08;De…

在线Ipv4转Ipv6工具

具体请前往&#xff1a;Ipv4到Ipv6在线转换工具--可将Ipv4换算为Ipv6地址和Ipv6的缩写格式

.NET 通过C#设置Excel工作表的页面设置

Excel文件数据准备就绪并需要以报告形式呈现时&#xff0c;调整Excel文件的页面设置变得尤为重要&#xff0c;不仅关乎文档的专业外观&#xff0c;还直接影响到打印或电子分享时的可读性和实用性。通过C#来自动化这一过程&#xff0c;不仅可以节省大量手动配置的时间&#xff0…

yum仓库安装rabbitmq

yum仓库安装rabbitmq 1、配置yum仓库 vim /etc/yum.repos.d/rabbitmq.repo # In /etc/yum.repos.d/rabbitmq.repo## ## Zero dependency Erlang ##[rabbitmq_erlang] namerabbitmq_erlang baseurlhttps://packagecloud.io/rabbitmq/erlang/el/7/$basearch repo_gpgcheck1 gpg…

C++调试方法(Vscode)(一) ——本地调试

初学者在调试一段代码的时候&#xff0c;经常出于不明原因&#xff0c;写出bug&#xff0c;导致程序崩溃。但是定位崩溃的地方时&#xff0c;往往采用简单而朴素的方法&#xff1a;即采用cout或者printf进行输出。这种方式既原始&#xff0c;又低效。一个合格的工程师应该是通过…

龙信科技:引领电子物证技术,助力司法公正

文章关键词&#xff1a;电子数据取证、电子物证、手机取证、计算机取证、云取证、介质取证 在信息技术飞速发展的今天&#xff0c;电子物证在司法领域扮演着越来越重要的角色。苏州龙信信息科技有限公司&#xff08;以下简称“龙信科技”&#xff09;作为电子数据取证领域的先…

电脑健康检查用什么软件好 电脑健康状况检查工具在哪里

随着信息技术的日益发展&#xff0c;电脑已成为人们生活和工作不可或缺的重要工具。但是长时间使用电脑也会给电脑自身带来一些隐患&#xff0c;影响电脑的运行效率和使用寿命。因此&#xff0c;定期对电脑进行健康检查尤为重要&#xff0c;这样才能发现和解决潜在的问题。关于…

创建XGBoost模型(回归任务)MATLAB

代码如下&#xff1a; % 导入数据 data readtable(data.xlsx);% 假设最后一列是目标值&#xff0c;前面列为特征 X data{:, 1:end-1}; % 特征 y data{:, end}; % 目标值% 划分训练集和测试集 cv cvpartition(height(data), HoldOut, 0.2); XTrain X(training(cv)…

kali系统网络配置

一、查看网络接口名称 ifconfig #网络接口配置网络接口名称为eth0&#xff0c;下面的lo为环回地址的网络接口。 二、配置网络接口文件 sudo vim /etc/network/interfaces在文件interfaces中加入以下信息&#xff08;本文采用静态IP地址&#xff09;&#xff0c;为表示与ifa…

5G RedCap:轻量级的5G,工业物联网的理想技术

随着工业物联网&#xff08;IIoT&#xff09;在制造、能源、物流等领域的深入应用&#xff0c;对无线通信技术的需求越来越多样化。5G技术为工业物联网带来了超高速、低延迟和海量连接的能力&#xff0c;但对于某些工业应用场景&#xff0c;完整的5G功能可能显得过于复杂或昂贵…

【CSS in Depth 2 精译_048】7.2 CSS 响应式设计中的媒体查询原则(中):页面断点(breakpoint)样式的添加

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第七章 响应式设计】&#xff08;概述&#xff09; 7.1 移动端优先设计原则&#xff08;上篇&#xff09; 7.1.1 创建移动端菜单&#xff08;下篇&#xff09;7.1.2 给视口添加 meta 标签&#xf…

嵌入式AI-STM32部署卷积神经网络的哈利波特魔法棒方案项目

项目标题-电子法棒-卷积神经网络轨迹识别方案 基于STM32部署卷积神经网络控制设备方案-AI项目-STM32部署卷积神经网络方案-红外信号复制方案-轨迹识别 先了解一下背景&#xff0c;STM32是一款微控制器&#xff0c;做AI一般都是拥有算力的微处理器&#xff0c;量产非常昂贵&am…

RTKLIB学习记录【postpos、execses_b、execses_r】

本文主要记录对RTKLIB源码中postpos、execses_b、execses_r 函数的源码解读&#xff0c;不涉及其中的天线、星历等文件读取的内容&#xff0c;且为个人理解&#xff0c;如果有误&#xff0c;欢迎交流讨论。 一、postpos 函数部分 /rxn2rtkp函数 → postpos函数传递参数&#x…

TCP IP网络编程

文章目录 TCP IP网络编程一、基础知识&#xff08;TCP&#xff09;1&#xff09;Linux1. socket()2.bind()2.1前提2.2字节序与网络字节序2.3 字节序转换2.4 字符串信息转化成网络字节序的整数型2.5 INADDR_ANY 3.listen()4.accept()5.connect()6.案例小结6.1服务器端6.2 客户端…