Linux 自定义 RPM 包

news2024/11/24 10:02:09

目录

一、定制 rpm 包概述

1.1 什么是定制 rpm 包

1.2 为什么要定制 rpm 包

1.3 如何定制 rpm 包

二、安装 FPM 工具

2.1 我在安装过程出现如下错误:ERROR:  Error installing fpm:childprocess requires Ruby version >= 2.4.0.

2.2 解决办法

2.3 再次执行安装 fpm

三、源码编译安装 nginx

四、使用 FPM

4.1 FPM 常用参数:

4.2 创建 NGINX 软件包脚本 

4.3 打成 rpm 包 

五、安装与卸载 RPM 包 

5.1 测试 rpm 安装

5.2 测试卸载 nginx


一、定制 rpm 包概述

1.1 什么是定制 rpm 包

将原本,使用源码安装的服务,打包成 rpm 包。

1.2 为什么要定制 rpm 包

        使用源码安装,步骤繁琐复杂,浪费时间,把源码包打成 rpm 包安装可以节省时间,提高工作效率,做好 rpm 包,可以将 rpm 包放入 yum 仓库中,方便安装。

1.3 如何定制 rpm 包

  • fpm 工具

  • rpmbuild 工具

本次以源码编译安装的 nginx 为例,使用 fpm 工具将其打成 rpm 包;使用的操作系统为  Centos 7.6。

二、安装 FPM 工具

fpm 是 ruby 语法写的一种定制 rpm 包的工具,所以安装 fpm 之前,需要安装 ruby 环境。

官方地址:Download RubyGems | RubyGems.org | your community gem host

阿里源地址:rubygems镜像_rubygems下载地址_rubygems安装教程-阿里巴巴开源镜像站

#1. 安装 ruby 环境
[root@nginx01 ~]# yum -y install ruby rubygems ruby-devel

#2. 查看 gem 默认的源
[root@nginx01 ~]# gem sources
*** CURRENT SOURCES ***

https://rubygems.org/

#3. 移除默认源
[root@nginx01 ~]# gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources

#4. 添加阿里源
[root@nginx01 ~]# gem sources -a https://mirrors.aliyun.com/rubygems/
https://mirrors.aliyun.com/rubygems/ added to sources
[root@nginx01 ~]# gem sources
*** CURRENT SOURCES ***

https://mirrors.aliyun.com/rubygems/

#5. 安装 fpm 1.3.3 版本
[root@nginx01 ~]# gem install fpm -v 1.3.3

2.1 我在安装过程出现如下错误:ERROR:  Error installing fpm:childprocess requires Ruby version >= 2.4.0.

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

2.2 解决办法

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

#1. 离线安装 rvm:
# rvm 是用来管理 ruby 的,而 ruby 的其中一个“程序”叫 rubygems,也就是我们用它装 fpm 的,手动装各种库用 gem。
[root@nginx01 ~]# curl -sSL https://github.com/rvm/rvm/tarball/stable -o rvm-stable.tar.gz

#2. 解压 rvm 包:
[root@nginx01 ~]# tar -xzvf rvm-stable.tar.gz

#3. 进入解压目录,安装 rvm:
[root@nginx01 ~]# cd rvm-rvm-6bfc921/
[root@nginx01 rvm-rvm-6bfc921]# ./install --auto-dotfiles

#4. 重新加载 rvm:
[root@nginx01 rvm-rvm-6bfc921]# source /usr/local/rvm/scripts/rvm

#5. 查看 rvm 可安装版本:
[root@nginx01 rvm-rvm-6bfc921]# rvm list known

#6. 选择安装 ruby 2.6.3:
# 下载安装过程比较慢,请耐心等待
[root@nginx01 rvm-rvm-6bfc921]# rvm install 2.6.3

#7. 设置默认使用 ruby 版本:
[root@nginx01 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.3 再次执行安装 fpm

[root@nginx01 rvm-rvm-6bfc921]# gem install fpm -v 1.3.3

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

查看帮助命令:fpm -help

说明,已经安装成功。 

三、源码编译安装 nginx

NGINX 下载官网:nginx: download

源码编译安装 NGINX 步骤:Linux CentOS 7 下安装Nginx详细过程_Stars.Sky的博客-CSDN博客_centos7安装nginx

四、使用 FPM

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

4.1 FPM 常用参数:

  • -s:指定源类型
  • -t:指定目标类型,即想要制作为什么包
  • -n:指定包的名字
  • -v:指定包的版本号
  • -C:指定打包的相对路径
  • -d:指定依赖于哪些包
  • -f:第二次包时目录下如果有同名安装包存在,则覆盖它;
  • -p:制作的 rpm 安装包存放路径,不想放在当前目录下就需要指定;
  • –post-install:软件包安装完成之后所要运行的脚本;同 –affer-install
  • –pre-install:软件包安装完成之前所要运行的脚本;同 –before-install
  • –post-uninstall:软件包卸载完成之后所要运行的脚本;同 –affer-remove
  • –pre-uninstall:软件包卸载完成之前所要运行的脚本;同 —before-remove
  • –prefix:制作好的 rpm 包默认安装路径; 

支持的源类型包:

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

支持的目标类型包:

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

想要了解最新的参数,可以使用命令查看帮助:fpm -help

4.2 创建 NGINX 软件包脚本 

  • 安装后脚本:nginx_install.sh
[root@nginx01 ~]# vim nginx_install.sh
#!/bin/bash

echo '
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-Tookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target ' > /lib/systemd/system/nginx.service

systemctl enable nginx.service --now
  •  卸载后脚本:remove_nginx.sh
[root@nginx01 ~]# vim remove_gninx.sh
#!/bin/bash

systemctl disable nginx.service
rm -rf /lib/systemd/system/nginx.service
rm -rf /usr/local/nginx

4.3 打成 rpm 包 

[root@nginx01 ~]# fpm -s dir -t rpm -n nginx -v 1.20.2 -d 'pcre-devel,openssl-devel,zlib-devel' --post-install /root/nginx_install.sh --post-uninstall /root/remove_gninx.sh -f /usr/local/nginx

命令参数说明:

  • -s dir:将目录进行打包。
  • -t rpm:将目录打成 rpm 包。也可以写 deb,表示打成 deb 包。
  • -n nginx:包名为 nginx,记住这个名字,卸载时,需要使用 nginx 名称。
  • -v 1.20.2:包的版本号为 1.20.2。
  • -d 'pere-devel.openssl-devel,zlib-devel':指定安装此包需要的依赖有哪些。(本地仓库会自动去下载指定的依赖,不指定则不去下载安装依赖)
  • --post-install /root/nginx_install.sh:软件包安装完成之后运行 nginx_install.sh 脚本。
  • --post-uninstall /root/remove_nginx.sh:软件包卸载完成之后运行 remove_nginx.sh 脚本。
  • -f:多次打包时,输出目录下如果有同名安装包存在,则覆盖它。
  • /usr/local/nginx:指定需要被打包的路径。

最后,打包生成的 rpm 文件在当前命令执行的目录下(/root 目录)。如下:

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

五、安装与卸载 RPM 包 

5.1 测试 rpm 安装

把制作的包传到另一个机子:

# 使用 yum 本地安装会根据本地仓库去拉取所需的依赖
[root@shell ~]# yum -y localinstall nginx-1.20.2-1.x86_64.rpm 

# 也可以使用 rpm 管理安装,但是不能下载 nginx 所需的依赖。nginx 依然可以安装成功,但是没有依赖的话有部分功能用不了,如 https,因为没有 OpenSSL。如果是其他不需要安装依赖的 rpm 包,可以用下面命令安装:
rpm -ivh nginx-1.20.2-1.x86_64.rpm

# 可以直接查看 nginx 状态
[root@shell ~]# systemctl status nginx.service 

# 用 rpm 管理nginx
[root@shell ~]# rpm -ql nginx

[root@shell ~]# rpm -q --scripts nginx     # 查看脚本信息

5.2 测试卸载 nginx

[root@shell ~]# rpm -e nginx 

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

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

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

相关文章

SuperMap GIS的TIN地形数据优化

目录 一、优化背景 二、数据优化 2.1 去除无效值 2.1.1 栅格数据 2.1.2 瓦片数据 2.2 镶嵌数据集 2.3 生成优化 2.3.1 块存储瓦片 2.3.2 高精度 2.4 创建空间索引 一、优化背景 TIN指不规则三角网,是针对连续三维空间的不规则划分,其最小单元为不规则三角…

[附源码]Python计算机毕业设计高校课程思政案例库系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

【Vue路由】多级路由、路由传参、命名路由、params使用

文章目录多级路由案例实验总结路由传参案例实验总结命名路由路由的params参数多级路由 案例实验 我们尝试做出如下的效果&#xff1a; 首先项目结构&#xff1a; 我们直接看四个路由组件&#xff1a; About.vue <template><h2>我是About的内容</h2> </…

Android 音视频采集那些事

音视频采集 在整个音视频处理的过程中&#xff0c;位于发送端的音视频采集工作无疑是整个音视频链路的开始。在 Android 或者 IOS 上都有相关的硬件设备——Camera 和麦克风作为输入源。本章我们来分析如何在 Android 上通过 Camera 以及录音设备采集数据。 Camera 在 Andro…

web网页设计期末课程大作业:家乡旅游主题网站设计——河北8页HTML+CSS+JavaScript

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

【爬虫实战项目】Python爬虫批量旅游景点信息数据并保存本地(附源码)

前言 今天给大家介绍的是Python爬虫批量下载旅游景点信息数据&#xff0c;在这里给需要的小伙伴们代码&#xff0c;并且给出一点小心得。 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫&#xff0c;基本的是加请求头&#xff0c;但是这样的纯文本数据爬取的人会…

丰立智能在创业板上市:总市值达到33亿元,王友利夫妇为实控人

12月15日&#xff0c;浙江丰立智能科技股份有限公司&#xff08;下称“丰立智能”&#xff0c;SZ:301368&#xff09;在深圳证券交易所创业板上市。本次上市&#xff0c;丰立智能的发行价格为22.33元/股&#xff0c;发行数量为3010万股&#xff0c;募资总额约为6.72亿元&#x…

企业数字化进程中,商业智能 BI 如何降本增效

当下形势&#xff0c;不稳定性已是常态&#xff0c;国际形势复杂多变&#xff0c;疫情对各行各业的企业影响巨大&#xff0c;市场环境日新月异&#xff0c;要想在激烈的竞争中站稳脚跟&#xff0c;实现企业盈利&#xff0c;必须降本增效。你是否考虑过利用数字技术这些新手段让…

关于Revit中门窗插入问题技巧和门窗生成

一、Rvit中门窗插入时需要注意的问题和技巧 1.在平面中插入门窗时&#xff0c;在键盘中输入SM门窗会自动定义在墙体的中心位置&#xff0c;如图1所示。 2.空格键可以快速调整门开启的方向 3.在三维视图中插入门窗时&#xff0c;窗户的位置可以任意插入&#xff0c;而插入的门系…

基于springboot休闲娱乐代理售票系统设计与实现的源码+文档

摘要 网络的广泛应用给生活带来了十分的便利。所以把休闲娱乐代理售票管理与现在网络相结合&#xff0c;利用java技术建设休闲娱乐代理售票系统&#xff0c;实现休闲娱乐代理售票的信息化。则对于进一步提高休闲娱乐代理售票管理发展&#xff0c;丰富休闲娱乐代理售票管理经验…

math_常用放缩不等式及其变形@指数@对数@三角函数@一次函数

文章目录三角函数对数分式x>0x>0x>0x∈(0,12π)x\in(0,\frac{1}{2}\pi)x∈(0,21​π)正弦正切x∈(0,1)x\in(0,1)x∈(0,1)有界性正弦余弦反三角x∈Rx\in{R}x∈R指数和幂三角函数对数分式 x>0x>0x>0 sin⁡x<x(x>0)\sin{x}<x(x>0)sinx<x(x>0)…

[GYCTF2020]Easyphp

打开界面&#xff0c;一个登陆的窗口&#xff0c;想到sql注入 然后查看源码没有多余的提示 然后试了一下常见的www.zip成功下载文件 index.php发现了包含文件 <?php require_once "lib.php";if(isset($_GET[action])){require_once(__DIR__."/".$_…

数据结构 | 红黑树、平衡二叉树旋转、并查集

一、红黑树 1.1、红黑树的定义&#xff08;左根右&#xff0c;根叶黑&#xff0c;不红红&#xff0c;黑路同&#xff09; 前提&#xff0c;对于一棵二叉排序树(或者说二叉搜索树)&#xff0c;如果满足以下定义则是红黑树&#xff1a; ①每个结点或是红色&#xff0c;或是黑色的…

2022-12-15 工作记录--React-用swiper实现多行交错、同速、跑马灯效果的弹幕式轮播(坑)

React-用swiper实现多行交错、同速、跑马灯效果的弹幕式轮播&#xff08;坑&#xff09; 激动的心呀呀呀&#xff01;٩(๑>◡<๑)۶ 历时昨天一下午滴时间昨晚凌晨一点多&#x1f31b;还爬起来思考&#x1f914;这个问题&#xff08;眼睛一闭着&#x1f634;&#xff0c…

2471. 逐层排序二叉树所需的最少操作数目-层次遍历+选择排序

2471. 逐层排序二叉树所需的最少操作数目-层次遍历选择排序 给你一个 值互不相同 的二叉树的根节点 root 。 在一步操作中&#xff0c;你可以选择 同一层 上任意两个节点&#xff0c;交换这两个节点的值。 返回每一层按 严格递增顺序 排序所需的最少操作数目。 节点的 层数…

虚拟机的垃圾收集(一)

虚拟机就好比是一个有限空间的一个房子&#xff0c;在我们生活中&#xff0c;也会产生各种各样的垃圾&#xff0c;虚拟机也不例外&#xff0c;垃圾满了会造成内存溢出等问题&#xff0c;那虚拟机是怎么进行垃圾回收的呢?让我们来揭开这神秘的面纱 1.概述 程序计数器、虚拟机…

融一亿但被质疑的5ire为何大家有分歧

5ire是由印度裔企业家 Pratik Gauri 和 Prateek Dwivedi 以及 Web3 金融家 Vilma Mattila 于 2021 年 8 月创立的区块链项目&#xff0c;官方在2022年7月公布以15亿美元估值获得一亿美元融资&#xff0c;机构为英国企业集团 SRAM & MRAM Group &#xff0c;成为印度的第 10…

[附源码]Python计算机毕业设计高校教材管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

电影《海贼王:红发歌姬》观后感

上周&#xff0c;北京已经开始陆续解封了&#xff0c;电影院也可以进入了&#xff0c;只要持有48小时核算就行&#xff0c;于是去看了这部电影《海贼王&#xff1a;红发歌姬》&#xff0c;去看之前&#xff0c;看了预告片&#xff0c;讲述路飞小时候的玩伴乌塔&#xff0c;长大…

NLP创业破局,如何摘取更高处的果实

点击蓝字关注我们AI TIME欢迎每一位AI爱好者的加入&#xff01;2022年&#xff0c;云从科技、商汤科技先后登陆资本市场&#xff0c;计算机视觉四小龙中的旷视科技、依图科技也在摩拳擦掌。反观NLP领域&#xff0c;相关企业的发展速度、融资规模、上市进程仿佛都要略逊一筹&…