工作中有如下情况需要将文件打包rpm:

  1. 避免重复工作,将源码程序打包为rpm
  2. 使用yum发布项目,项目打包为rpm
  3. 将自己写好的程序打包为rpm,提供给用户下载
  4. 其他

以前打包rpm是一个非常复杂的一件事情,自从有了fpm,打包rpm就和tar打包文件一样

一:搭建Epel和Base Yum 源

[root@localhost ~]# rz -E                                   //导入epel-release-latest-7.noarch.rpm包
z waiting to receive.**B0100000023be50                              
[root@localhost ~]# ls
anaconda-ks.cfg     nginx-1.16.0.tar.gz            模板     下载
date         original-ks.cfg       视频        音乐     nginx-1.15.9.tar.gz 
epel-release-latest-7.noarch.rpm    website-1.0.1-1.x86_64.rpm      图片    桌面
initial-setup-ks.cfg 公共 文档
[root@localhost ~]# rpm -ivh epel-release-latest-7.noarch.rpm                      //安装epel-release-latest-7.noarch.rpm
警告:epel-release-latest-7.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:epel-release-7-11 ################################# [100%]
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo    CentOS-fasttrack.repo    CentOS-Vault.repo
CentOS-CR.repo      CentOS-Media.repo        epel.repo
CentOS-Debuginfo.repo CentOS-Sources.repo epel-testing.repo
[root@localhost yum.repos.d]# yum clean all && yum makecache

二:安装ruby环境和gem命令FPM

[root@localhost yum.repos.d]# yum -y install rubygems ruby-devel

[root@localhost yum.repos.d]# gem update --system                  //升级rubygems版本,此处会报错
Updating rubygems-update
Fetching: rubygems-update-3.0.6.gem (100%)Fetching: rubygems-update-3.0.6.gem
ERROR: Error installing rubygems-update:
rubygems-update requires Ruby version >= 2.3.0.                       //他报多少版本的错误就安装多少版本的
ERROR: While executing gem ... (NoMethodError)
undefined method `version' for nil:NilClass

[root@localhost ~]# gem install rubygems-update -v 2.3.0
Fetching: rubygems-update-2.3.0.gem (100%)
Successfully installed rubygems-update-2.3.0
Parsing documentation for rubygems-update-2.3.0
Installing ri documentation for rubygems-update-2.3.0
1 gem installed                                                                                  //安装成功

[root@localhost yum.repos.d]# gem update --system

...

......

.........

RubyGems system software updated                                             //升级成功

[root@localhost ~]# gem sources -a http://mirrors.aliyun.com/rubygems/           //添加国内阿里云的源
http://mirrors.aliyun.com/rubygems/ added to sources

[root@localhost ~]# gem sources -l                        //查看yum源
*** CURRENT SOURCES ***

https://rubygems.org/                                                 //国外原始源
http://mirrors.aliyun.com/rubygems/                           //新增的阿里源

[root@localhost ~]# gem sources --remove https://rubygems.org/                         //移除国外原始源
https://rubygems.org/ removed from sources
[root@localhost ~]# gem sources -l
*** CURRENT SOURCES ***

http://mirrors.aliyun.com/rubygems/

[root@localhost ~]# gem install fpm                //安装FPM工具

三:编译Nginx

[root@localhost ~]# rz -E               //导入nginx包

[root@localhost ~]# ls
anaconda-ks.cfg      nginx-1.15.9.tar.gz    nginx.sh    公共    视频    文档    音乐
initial-setup-ks.cfg    original-ks.cfg    模板     图片    下载     桌面

[root@localhost ~]# tar xf nginx-1.15.9.tar.gz -C /usr/src

[root@localhost ~]# cd /usr/src/nginx-1.15.9/
[root@localhost nginx-1.15.9]# yum -y install pcre-devel zlib-devel make rpm-build

[root@localhost nginx-1.15.9]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install

四:打包Nginx生成RPM包

此处做shell脚本的主要原因是为了让用户下载完nginx包时系统自动完成nginx服务的启动从而提高用户体验

[root@localhost nginx-1.15.9]# cd
[root@localhost ~]# vim nginx.sh

#!/bin/bash

useradd -M -s /sbin/nologin nginx                                //创建用户
ln -s /usr/local/nginx/sbin/nginx /sbin/ //做软连接
echo "www.source.com" > /usr/local/nginx/html/index.html //修改主页
nginx //启动nginx服务

[root@localhost ~]# fpm -s dir -t rpm -n nginx -v 1.15.9 -d 'pcre-devel,zlib-devel' -f --post-install /root/nginx.sh /usr/local/nginx
Created package {:path=>"nginx-1.15.9-1.x86_64.rpm"}

-s    表示对一个目录进行打包

-t      表示要打包成的类型

-n     表示软件包的名字

-v     表示要打包成的版本

-d     表示要指定的依赖包

-f      表示要指定的文件

/usr/local/nginx     表示指定的位置

[root@localhost ~]# rm -rf /usr/local/nginx/
[root@localhost ~]# rm -rf /usr/src/nginx-1.15.9/
[root@localhost ~]# rm -rf /usr/src/nginx-1.16.0/
[root@localhost ~]# rm -rf /usr/local/sbin/nginx
[root@localhost ~]# killall -9 nginx
[root@localhost ~]# userdel -r nginx
userdel:未找到 nginx 的主目录“/home/nginx”
[root@localhost ~]# ls
anaconda-ks.cfg nginx-1.15.9.tar.gz original-ks.cfg 视频 下载
initial-setup-ks.cfg nginx-1.16.0.tar.gz 公共 图片 音乐
nginx-1.15.9-1.x86_64.rpm nginx.sh 模板 文档 桌面
[root@localhost ~]# rpm -ivh nginx-1.15.9-1.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:nginx-1.15.9-1 ################################# [100%]

[root@localhost ~]#

基于FPM制作RPM软件包!的更多相关文章

  1. Linux基于FPM制作RPM包(以Nginx为例)

    1.搭建Epel  Yum源  安装在线yum源 [root@localhost ~]# rpm -ivh epel-release-latest-.noarch.rpm //安装扩展源 [root@ ...

  2. 利用fpm制作rpm包

    使用fpm制作rpm包 安装如下 [root@web01 ~]# yum install -y gcc zlib zlib-devel wget http://ruby.taobao.org/mirr ...

  3. fpm制作rpm包

    一.前言 在企业中我们有事安装软件包.部分都是源码安装,如nginx安装路径都已经固化了,但实际业务中,我们都是把软件包安装到固定目录下,不满足需要,这是其一.其二,编译安装很耗时,比如mysql,特 ...

  4. fpm 制作rpm包

    使用fpm命令制作rpm包并安装 工作中有如下情况需要将文件打包rpm: 避免重复工作,将源码程序打包为rpm 使用yum发布项目,项目打包为rpm 将自己写好的程序打包为rpm,提供给用户下载 其他 ...

  5. 基于FPM制作nginx RPM包

    目录 环境 配置 FPM安装 环境 系统 其它 CentOS 7.5 需提前配置好epel 配置 [root@localhost ~]# yum clean all && yum ma ...

  6. fpm 制作 rpm 包

    支持的 源类型包 ① dir : 将目录打包成所需要的类型, 可用于源码编译安装软件包 ② rpm : 对 rpm 包进行转换 ③ gem : 对 rubygem 包进行转换 ④ python : 将 ...

  7. linux制作RPM包

    制作rpm包 1.制作流程1.1 前期工作 1)创建打包用的目录rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS} 建议使用普通用户,在用户家目录中创建 2)确定好制 ...

  8. 制作RPM包

    RPM包制作过程 1.1 前期工作 1)创建打包用的目录rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS} 建议使用普通用户,在用户家目录中创建 2)确定好制作的对象 ...

  9. FPM制作Nginx的RPM软件包

    FPM制作Nginx的rpm软件包 FPM相关参数-s:指定源类型-t:指定目标类型,即想要制作为什么包-n:指定包的名字-v:指定包的版本号-C:指定打包的相对路径-d:指定依赖于哪些包-f:第二次 ...

随机推荐

  1. C++的四种转换(const_cast、static_cast、dynamic_cast、reinterpreter_cast)

    static_cast 相当于C语言中的强制转换:(类型)表达式或类型(表达式),用于各种隐式转换 非const转const.void*转指针.int和char相互转换 用于基类和子类之间的指针和引用 ...

  2. Diskpart手动创建EFI、MSR引导分区

    当给电脑加新硬盘时候,并且需要把新硬盘当作系统盘,有几种方法来为新硬盘创建引导分区: 可以选择用U盘刻录微软原版系统镜像,直接从U盘启动,然后直接创建分区,直接装,会自动为硬盘创建好几个引导分区. 进 ...

  3. 线性筛-euler,强大O(n)

    欧拉函数是少于或等于n的数中与n互质的数的数目 φ(1)=1(定义) 类似与莫比乌斯函数,基于欧拉函数的积性 φ(xy)=φ(x)φ(y) 由唯一分解定理展开显然,得证 精髓在于对于积性的应用: ){ ...

  4. bugku 细心

    打开链接会看到提醒404 显示不能访问 然后用御剑 扫描一下 然后会发现另一个 网址 然后打开 发现 有一个/result.php然后改一下 网址会发现 另一个网页 然后利用提示 将链接的后缀名改成? ...

  5. Mongodb学习笔记(二)Capped Collection固定集合

    一.Capped Collection固定集合 简单介绍 capped collections是性能出色的有着固定大小的集合(定容集合),以LRU(Least Recently Used最近最少使用) ...

  6. 寒假安卓app开发学习记录(2)

    今天属实是头疼的一天.开始的时候是简单了解了一下安卓的系统架构,了解到大概分为四个部分. 然后看了两节创建安卓项目的课程,准备去实践一下的时候突然发现我的eclipse里竟然没有Android选项.查 ...

  7. Go常量

    1. 常量 package main import "fmt" func main() { /* 常量: 1.概念:同变量类似,程序执行过程中数值不能改变 2.语法: 显式类型定义 ...

  8. QT写的一个小工具:阿里云MQTT连接参数生成器.

    一.工具介绍. 最近在研究MQTT协议联网的一些问题,现在主流的物联网平台都支持MQTT协议. 在做阿里云平台连接测试的时候,连接参数的生成没有好用的工具, 所以就自己写了一个. 这个工具主要用于阿里 ...

  9. mvc 部分页

    在一些复杂的项目中,我们经常会遇到一个页面存在很多模块,存在页面交互或者加载数据过多等问题,这种时候,我们很可能会考虑到通过使用部分页来解决这个问题(ps:当然还有很多的解决方案,在这里只是简单介绍这 ...

  10. HTML-based script和URL-based script使用规则

     选择哪种模式应该根据实际需要来进行,下面是一些常见的参考原则: 1.基于浏览器的应用程序推荐使用HTML-based script 2.不是基于浏览器的应用程序推荐使用URL-based scrip ...