环境说明

系统版本    CentOS 6.9 x86_64

软件版本    fpm-1.4.0

1、安装ruby环境

fpm利用ruby编程语言开发,先安装ruby的环境

[root@m01 ~]# yum -y install ruby rubygems ruby-devel

2、更换Ruby Gems源

将官方的源更换为国内的源

gem sources --add https://mirrors.tuna.tsinghua.edu.cn/rubygems/ --remove http://rubygems.org/

验证:gem sources -l

https://mirrors.tuna.tsinghua.edu.cn/rubygems/

3、使用gem安装fpm

gem install fpm

若出现以下报错

yum install gcc gcc-c++ glibc -y先安装gcc编译器

再次安装gem install fpm

出现报错

出现这个报错,是因为fpm最新版只支持centos7,对于centos6只能使用旧版的fpm

官方网站:https://rubygems.org/

官方中文网站:https://gems.ruby-china.org/

gem install fpm -v 1.4.0    安装旧版本,-v指定版本为2015年最后一个版本

出现报错

[root@m01 ~]# gem install fpm -v 1.4.0

ERROR: Error installing fpm:

ffi requires Ruby version >= 1.9.

说明fpm的依赖包ffi默认也是安装最新版本

[root@m01 ~]# gem install ffi -v 1.9.10

Building native extensions. This could take a while...

Successfully installed ffi-1.9.10

1 gem installed

Installing ri documentation for ffi-1.9.10...

Installing RDoc documentation for ffi-1.9.10...

再次安装gem install fpm -v 1.4.0

使用gem dependency -r fpm    查看依赖

4、fpm的使用

4.1 参数说明

fpm (rpm包,deb包)

-s 指定源类型

-t 指定目标类型,即想要制作为什么包

-n 指定包的名字

-v 指定包的版本号

-C 指定打包的相对路径 Change directory to here before searching forfiles

-d 指定依赖于哪些包

-f 第二次打包时目录下如果有同名安装包存在,则覆盖它

-p 输出的安装包的目录,不想放在当前目录下就需要指定

--post-install 软件包安装完成之后所要运行的脚本;同--after-install

--pre-install 软件包安装完成之前所要运行的脚本;同--before-install

--post-uninstall 软件包卸载完成之后所要运行的脚本;同--after-remove

--pre-uninstall 软件包卸载完成之前所要运行的脚本;同--before-remove

4.2 制作nginx-1.12.2的rpm包

4.2.1 本地编译安装nginx-1.12.2

mkdir -p /service/tools

mkdir /application

cd /service/tools

wget http://nginx.org/download/nginx-1.12.2.tar.gz

tar zxvf nginx-1.12.2.tar.gz

yum install gcc gcc-c++ glibc pcre-devel zlib-devel openssl-devel -y

cd nginx-1.12.2

./configure --prefix=/application/nginx-1.12.2 --pid-path=/var/run/nginx.pid --user=nginx --group=nginx --with-http_ssl_module

make && make install

ln -s /application/nginx-1.12.2 /application/nginx

ln -s /application/nginx/sbin/nginx /usr/bin/

useradd -M -s /sbin/nologin -r -u 88 nginx

cd /application/nginx/conf/

grep -Ev '^$|#' nginx.conf.default >nginx.conf

4.2.2 编写脚本

安装后脚本:

[root@m01 scripts]# vim nginx_rpm.sh

#!/bin/bash

useradd -M -s /sbin/nologin -r -u 88 nginx

ln -s /application/nginx-1.12.2 /application/nginx

ln -s /application/nginx/sbin/nginx /usr/bin/

卸载后脚本

[root@m01 scripts]# vim nginx_remove.sh

#!/usr/bin

nginx -s stop

rm -fr /application/nginx1.12.2

rm -fr /application/nginx

rm -fr /usr/bin/nginx

4.2.3 打包

打包之前需要安装rpmbuild工具才能使用fpm进行打包

yum install rpm-build -y

开始打包

fpm -s dir -t rpm -n nginx -v 1.12.2 -d 'pcre-devel,openssl-devel' --post-install /service/scripts/nginx_rpm.sh --post-uninstall /service/scripts/nginx_remove.sh -f /application/nginx-1.12.2/

4.2.4 制作nginx-1.12.2的rpm包(带日志轮询和高亮显示)

下载官方nginx的rpm包

https://mirrors.aliyun.com/epel/6/x86_64/Packages/n/nginx-1.10.2-1.el6.x86_64.rpm

查看rpm包的内容(解压rpm包)

[root@m01 nginx]# rpm2cpio nginx-1.10.2-1.el6.x86_64.rpm | cpio -div    #解压官方的rpm包

[root@m01 nginx]# ls

etc nginx-1.10.2-1.el6.x86_64.rpm usr var

将官方的etc/logrotate.d/nginx

和usr/share/vim/vimfiles/{ftdetect,indent,syntax}/nginx.vim拷贝到本地系统中

[root@m01 nginx]# cp etc/logrotate.d/nginx /etc/logrotate.d/

[root@m01 nginx]# cp usr/share/vim/vimfiles/ftdetect/nginx.vim /usr/share/vim/vimfiles/ftdetect/

[root@m01 nginx]# cp usr/share/vim/vimfiles/indent/nginx.vim /usr/share/vim/vimfiles/indent/

[root@m01 nginx]# cp usr/share/vim/vimfiles/syntax/nginx.vim /usr/share/vim/vimfiles/syntax/

修改卸载后脚本

[root@m01 scripts]# vim nginx_remove.sh

#!/usr/bin

nginx -s stop

rm -fr /application/nginx1.12.2

rm -fr /application/nginx

rm -fr /usr/bin/nginx

rm -fr /usr/share/vim/vimfiles/ftdetect/nginx.vim

rm -fr /usr/share/vim/vimfiles/indent/nginx.vim

rm -fr /usr/share/vim/vimfiles/syntax/nginx.vim

rm -fr /etc/logrotate.d/nginx

打包

[root@m01 scripts]# fpm -s dir -t rpm -n nginx -v 1.12.2 -d ' pcre-devel,openssl-devel ' --post-install /service/scripts/nginx_rpm.sh --post-uninstall /service/scripts/nginx_remove.sh -f /application/nginx-1.12.2/ /etc/logrotate.d/nginx /usr/share/vim/vimfiles/{ftdetect,indent,syntax}/nginx.vim

附:

1、查看nginx命令所需要的库文件并依赖于哪些rpm包

ldd /application/nginx/sbin/nginx|awk -F "[ ]+" 'NR>1{print $3}'|sed '/^$/d'|xargs rpm -qf|sort -n|uniq|sed -r 's#\-[1-9][0-9.]*.*$##g'

2、查看rpm包中的脚本

rpm -qp --scripts nginx-1.12.2-1.x86_64.rpm

3、查看rpm包中的内容

rpm -qlp xxx.rpm

4、解压rpm包

rpm2cpio xxx.rpm | cpio -div

博主原创文章,转载请务必注明出处

利用fpm定制rpm包的更多相关文章

  1. FPM定制RPM包实践

    1.1 快速部署方案 ✔ 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案. 解答: 1.tar 打包 先编译安装 打包-->分发-->解包(比如 ...

  2. 利用fpm制作rpm包

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

  3. FPM定制RPM包

    安装FPM FPM是ruby写的打包工具,ruby版本要大于1.8.5 #安装ruby环境和gem包管理器 [root@test88 ~]# yum install -y ruby rubygems ...

  4. Nginx与Lua利用fpm打成rpm包

    1.下载相关软件 需要软件有:Nginx,LuaJIT,ngx_devel_kit,ngx_lua等安装文件 安装Lua或者LuaJIT都是可以的,但是出于效率的考虑,推荐安装LuaJITshell& ...

  5. 自动化部署必备技能—部署yum仓库、定制rpm包

    部署yum仓库.定制rpm包 目录 第1章 扩展 - yum缓存 1.1 yum缓存使用步骤... 1 1.1.1 导言... 1 1.1.2 修改配置文件... 1 1.1.3 使用缓存... 1 ...

  6. 搭建yum仓库与定制rpm包

    笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 当我们自动化部署集群的时候,想要快速的安装所有服务,搭建yum仓库与定制rpm包是我们首先要做的 原创作品,转载请 ...

  7. FPM简介(定制rpm包)

    FPM简介 fpm是生成rpm包的工具.rpm包的制作,采用fpm工具完成,FPM非常易用,此命令可以把rpm包的安装.卸载做得更加优雅,在安装前可以做一些准备工作,安装后可以做一些收尾工作,在卸载前 ...

  8. fpm 制作 rpm 包

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

  9. linux系统之定制rpm包

    FPM打包工具 FPM的作者是jordansissel FPM的github:https://github.com/jordansissel/fpm FPM功能简单说就是将一种类型的包转换成另一种类型 ...

随机推荐

  1. BZOJ5301 [Cqoi2018]异或序列 【莫队】

    题目链接 BZOJ5301 题解 莫队水题 BZOJ400AC纪念 #include<algorithm> #include<iostream> #include<cst ...

  2. angular.extend(dst,src)的简单示例

    自我认为这个方法跟angular.copy(src,dst)有点相似.在angular.extend({},src)时,就可以画等号.这个src只代表一个对象.代码如下:(注意这个src可以有多个对象 ...

  3. urllib2.URLError: <ulropn error [Errno 10060] >

    在抓网页的时候,如果抓取频率很高,很容易出现这个错误: 意思是服务器拒绝响应.解决的方法为,隔段时间再试,不过这个方法不靠谱.靠谱的方法是增加一个延迟函数 import time time.sleep ...

  4. vue组件中使用iframe元素

    需要在本页面中展示vue组件中的超链接,地址栏不改变的方法: <template> <div class="accept-container"> <d ...

  5. vue中动态循环model

    vue动态循环model与angular有所不同,angular直接定义一个数组,然后传入循环列表的index即可. 而vue不仅需要定义一个数组,还需要通过接口读出循环的数组长度,然后在create ...

  6. classes could not be found: - android.support.v7.internal.app.WindowDecorActionBar问题的解决方法

    转载至----http://my.oschina.net/u/2425146/blog/546649?fromerr=aDYrFDVx.仅作个人收藏使用,有转载的朋友请连续原作者,谢谢 刚刚进入stu ...

  7. fatal error LNK1104: 无法打开文件“LIBC.lib”错误(转)

    原文转自 http://blog.csdn.net/qq1028850792/article/details/41546043 方法一: 用VS2005重新编译某个工程的发生了链接错误,现在把这个解决 ...

  8. undefined reference to XXX 问题原因

    原文地址:http://blog.csdn.net/cserchen/article/details/5503556 Linux下编译程序时,经常会遇到“undefined reference to ...

  9. 【linux高级程序设计】(第十五章)UDP网络编程应用 3

    UDP组播通信 组播IP地址: D类IP地址  1110.**********  224.0.0.1 ~ 239.255.255.255 组播MAC地址:低23位,直接对应IP地址, 从右数第24位为 ...

  10. hdu 畅通工程系列题目

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 并查集水. #include <stdio.h> #include <iost ...