利用fpm定制rpm包
环境说明
系统版本 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包的更多相关文章
- FPM定制RPM包实践
1.1 快速部署方案 ✔ 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案. 解答: 1.tar 打包 先编译安装 打包-->分发-->解包(比如 ...
- 利用fpm制作rpm包
使用fpm制作rpm包 安装如下 [root@web01 ~]# yum install -y gcc zlib zlib-devel wget http://ruby.taobao.org/mirr ...
- FPM定制RPM包
安装FPM FPM是ruby写的打包工具,ruby版本要大于1.8.5 #安装ruby环境和gem包管理器 [root@test88 ~]# yum install -y ruby rubygems ...
- Nginx与Lua利用fpm打成rpm包
1.下载相关软件 需要软件有:Nginx,LuaJIT,ngx_devel_kit,ngx_lua等安装文件 安装Lua或者LuaJIT都是可以的,但是出于效率的考虑,推荐安装LuaJITshell& ...
- 自动化部署必备技能—部署yum仓库、定制rpm包
部署yum仓库.定制rpm包 目录 第1章 扩展 - yum缓存 1.1 yum缓存使用步骤... 1 1.1.1 导言... 1 1.1.2 修改配置文件... 1 1.1.3 使用缓存... 1 ...
- 搭建yum仓库与定制rpm包
笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 当我们自动化部署集群的时候,想要快速的安装所有服务,搭建yum仓库与定制rpm包是我们首先要做的 原创作品,转载请 ...
- FPM简介(定制rpm包)
FPM简介 fpm是生成rpm包的工具.rpm包的制作,采用fpm工具完成,FPM非常易用,此命令可以把rpm包的安装.卸载做得更加优雅,在安装前可以做一些准备工作,安装后可以做一些收尾工作,在卸载前 ...
- fpm 制作 rpm 包
支持的 源类型包 ① dir : 将目录打包成所需要的类型, 可用于源码编译安装软件包 ② rpm : 对 rpm 包进行转换 ③ gem : 对 rubygem 包进行转换 ④ python : 将 ...
- linux系统之定制rpm包
FPM打包工具 FPM的作者是jordansissel FPM的github:https://github.com/jordansissel/fpm FPM功能简单说就是将一种类型的包转换成另一种类型 ...
随机推荐
- Leetcode 4. Median of Two Sorted Arrays(二分)
4. Median of Two Sorted Arrays 题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays/ Descr ...
- jQuery UI-Draggable 参数集合
·概述 在任何DOM元素启用拖动功能.通过单击鼠标并拖动对象在窗口内的任何地方移动. 官方示例地址:http://jqueryui.com/demos/draggable/ 所有 ...
- 让chrome支持本地Ajax请求
Chrome的安全机制不能支持ajax的本地访问, 例如: 在JavaScript里面访问 URL:file:///E:/test.html,Chrome 浏览器报错:XMLHttpRequest c ...
- npm下载包失败的几个原因
1. 可能是由于网络问题导致下载包失败,因为qiang,所以,直接使用npm有些情况会导致下载包失败,使用cnpm源或者yarn下载等方法可以解决这个问题. 2. 这个包不存在,检查一下包的拼写或者路 ...
- noip 瑞士轮 ————归并排序解法
背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长 ...
- wchar_t类型的几个函数
wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式. 在Windows下,wchar_t占2个字节(byte):在Linux下,wchar_t占4个字节 wchar_t类型主要用在国际 ...
- log4j2配置文件动态指定日志文件名称
按照习惯性思维,log4j2中xml中取系统属性应该和log4j一样,但是结果却并不是我们想的这样,存在一定的差别,log4j中的配置可参考 log4j配置文件动态指定日志文件名称 . 现在就来看看到 ...
- UVA 11925:Generating Permutations(冒泡排序 Grade D)
VJ题目链接 题意:n个数(n<300),是一个1~n的某个排列.有两种操作:操作1把前两个数换位置,操作2把第一个数移动到最后.问给出一个排列,问通过怎样的操作,能把1,2,3,...,n变到 ...
- yum安装jdk环境变量配置
系统版本 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) #安装之前先查看一下有无系统自带jdk rpm ...
- (2)OLEDB数据库操作
1.首先要引入 System.Data.OracleClient.dll 2.引入命名空间 using System.Data.OleDb; OleDb类 https://msdn.microsof ...