目录

一、定制 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

六、制作 YUM 仓库

前期准备

制作步骤


一、定制 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
# 注册 nginx 服务
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# 启动 nginx 并设置开机自启
systemctl enable nginx.service --now# 设置环境变量
echo 'export PATH="/usr/local/nginx/sbin/:$PATH"' >> /etc/profile
echo 'nginx 安装成功! 请手动执行 "source /etc/profile" 或者重启终端, 使环境变量生效!'
  • 卸载后脚本:remove_nginx.sh
[root@nginx01 ~]# vim remove_gninx.sh
#!/bin/bashsystemctl 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 参数指定的名称。

六、制作 YUM 仓库

有些服务器要求使用内网环境,安装一些软件时,需要下载依赖,也可能某个依赖还会依赖其他软件包,如上面的 nginx,需要依赖些软件包。所以这个时候,我们可以搭建一个本地的 yum 仓库服务,在不能访问外网的环境下,本地安装软件。

前期准备

两台虚拟机,一台可以访问外网并且安装 nginx 提供 yum 仓库服务,另一台则测试本地安装 nginx。

制作步骤

  • 在可以访问外网的虚机下执行下面操作:
#1. 创建自制仓库目录
[root@nginx01 ~]# mkdir -p /diy_repo/nginx_repo#2. 下载 nginx 所需依赖
方法一(推荐):使用 yumdownloader 命令,yumdownloader 在 yum-utils 软件包里面
[root@nginx01 ~]# yum install yum-utils -y
[root@nginx01 ~]# yumdownloader --destdir=/diy_repo/nginx_repo --resolve openssl-devel pcre-devel zlib-devel# yumdownloader --destdir=指定下载的软件包存放路径 --resolve 要安装的软件包方法二:此方法下载软件包的同时也把软件安装了
[root@nginx01 ~]# yum install --downloadonly --downloaddir=/diy_repo/nginx_repo openssl-devel pcre-devel zlib-devel
# yum install --downloadonly --downloaddir=指定下载的软件包存放路径
# 注意:若系统已经安装了此软件,需要使用 reinstall 进行下载#3. 把上面制作的 nginx rpm 包也放在这个目录下
[root@nginx01 ~]# mv nginx-1.20.2-1.x86_64.rpm /diy_repo/nginx_repo/#4. 用 nginx 代理仓库服务
[root@nginx01 ~]# cd /usr/local/nginx/conf/
[root@nginx01 conf]# mkdir conf.dmkdir conf.d
[root@nginx01 conf]# vim nginx.confinclude /usr/local/nginx/conf/conf.d/*.conf;    # 把这行加到 http 模块里面server {[root@nginx01 conf]# cd conf.d/
[root@nginx01 conf.d]# vim diy_repo.conf
server{# 监听88端口listen 88;# 指定访问的 ipserver_name 192.168.78.135;# 配 URLlocation / {# 站点目录root /diy_repo/nginx_repo/;# 以列表形式展示(在站点目录下没有默认页面的情况)autoindex on;# 修改时间为当前系统时间(不使用格林威治时间)autoindex_localtime on;# 显示文件大小(显示单位)autoindex_exact_size off;}
}[root@nginx01 conf.d]# systemctl reload nginx.service#5. 安装仓库创建命令
[root@nginx01 conf.d]# yum install -y createrepo#6. 制作仓库
[root@nginx01 conf.d]# createrepo /diy_repo/nginx_repo/

在浏览器访问 ip:88

  • 在另一台用来测试的虚机执行下面操作:
#1. 压缩本地的仓库源(因为我这台可以访问外网,来模拟内网环境)
# 解压为 gunzip /etc/yum.repos.d/*.gz
[root@shell ~]# gzip /etc/yum.repos.d/*#2. 编写 yum 仓库文件
[root@shell ~]# vim /etc/yum.repos.d/local_nginx.repo
[nginx_test]
name=local_nginx
baseurl=http://192.168.78.135:88/nginx_repo/
gpgcheck=0
enabled=1#3. 生成缓存
[root@shell ~]# yum makecache#4. 安装 nginx;所需依赖也会一并安装上
[root@shell ~]# yum install -y nginx

至此,本地环境 yum 仓库制作成功!!!

Linux 自定义 RPM 包及制作 YUM 仓库相关推荐

  1. 【自制yum仓库一】自定义RPM包

    当我们需要自己制作yum仓库的时候,第一步应该是准备rpm包.一般rpm包的来源有两种办法:1.通过别人的镜像拉取rpm包 :2.自己通过源码包来制作rpm包:下面来讲怎么通过源码包自定义RPM包. ...

  2. linux如何运行rpm包,如何制作RPM包

    安装制作rpm工具rpmbuild yum install -y rpm-build 创建用户 注意: 创建rpm包一定不要使用root用户,因为root用户权限比较大,如果脚本编写错误的话,可能会导 ...

  3. Linux Qt rpm包制作

    前言 Linux系统的软件一般有.deb和.rpm格式的安装包,即Linux系统用的是"Red-Hat Package Manager"红帽软件包管理器,就可以打包.rpm的安装包 ...

  4. 9-10 rpm程序包管理和YUM仓库

    程序包管理: 常见的软件包管理器 Debian系列:dpkg (DebianPackager) 管理 以.deb 结尾的软件包. "Debian"的"Linux &quo ...

  5. Linux 中RPM包的安装

    Linux 中RPM包的安装 在linux的使用过程中,会用到各种各样的服务,所以就会安装许多软件包. 所以就总结了下边的两种安装方式: 1. 二进制安装 软件包的安装及相关命令: rpm -ivh ...

  6. fpm定制化RPM包之nginx rpm包的制作

    fpm定制化RPM包之nginx rpm包的制作 1.安装ruby模块 # yum -y install ruby rubygems ruby-devel 2.添加阿里云的Rubygems仓库,国外资 ...

  7. Linux安装RPM包、查看本机ip和端口、手动配置ip、中标麒麟无法显示ip地址的详细解决方法

    文章目录 安装rmp Linux安装RPM包.DEB包后,软件在哪 RPM包安装去向(例:包名=>redis) 查看本机ip 查看所有端口 手动配置ip 中标麒麟无法显示ip地址的详细解决方法 ...

  8. 使用fpm简单制作自定义rpm包

    我的环境是centos7.2的 一.安装FPM工具 yum -y install ruby rubygems ruby-devel gem sources list   查看gem包管理源仓库地址 g ...

  9. Yum卸载软件并删除依赖,下载离线rpm包,制作拷贝rpm包dockerfile

    前景:四层代理的软件包拷贝到容器yum仓库里 1.查找安装历史 ~]# yum history Loaded plugins: fastestmirror, langpacks ID | Login ...

最新文章

  1. OCP-052 053部分答案解析
  2. BPMF论文辅助笔记: 固定U,更新θU 部分推导
  3. torch.gather(input, dim, index, *, sparse_grad=False, out=None) → Tensor
  4. 高性能Mysql--Schema与数据类型优化
  5. 你和985硕博研究生,差了这些东西
  6. Python 生成账号密码算法
  7. 作者:熊刚,男,博士,现任中国科学院自动化研究所研究员,中国科学院云计算中心自动化所东莞研究院首席科学家等职务。...
  8. 异常org.hibernate.proxy.HibernateProxy.Forgot to register a type adapter
  9. 数据结构和算法 D2
  10. 227 用栈模拟汉诺塔问题
  11. cad vba 打开文件对话框_CADvba开发手册.doc
  12. 远程办公安全解决方案
  13. 硬编码支持情况(一)
  14. Arcgis教程:如何批量统计网格内的线段长度。
  15. WPA2/WPA3混合与WPA3的hostapd配置区别
  16. 把Nodejs做成CentOS系统服务并开机启动
  17. 图像超分辨率论文笔记
  18. 提取文本中的金额,提取货币,Python实现与在线使用
  19. C语言初阶数据结构(四)栈(详细图解,简单上手,通俗易懂)
  20. 开山之作造假!Science大曝Nature重磅论文学术不端,恐误导全球16年

热门文章

  1. ABB定位器提供灵活且经济高效的阀门自动化解决
  2. FastReID阅读笔记
  3. matlab校正系统使相角裕度不小于45,4验算已校正系统的相角裕度.PPT
  4. win10系统如何恢复回收站删除文件
  5. 矿山井下IT配电系统绝缘监测研究及应用
  6. drivername表示什么_driver是什么意思_driver的翻译_音标_读音_用法_例句_爱词霸在线词典...
  7. 如何巧妙运用技巧涨粉
  8. 2020湖湘杯-CTF-MISC-颜文字
  9. lampiao靶机实验实战演练
  10. Xiyou_Linux兴趣小组面试题详解