自定义rpm包,还是有逼格和实际生产环境的意义的。

(下面的文档有的代码由于博客排版的问题导致挤在了一起,需要自己判别)

安装FPM

fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。

# 安装ruby模块

yum -y install ruby rubygems ruby-devel

# 添加淘宝的Rubygems仓库,移除原生的Ruby仓库

gem sources --addhttps://gems.ruby-china.org/ --remove https://rubygems.org/

# 安装fpm,gem从rubygem仓库安装软件类似yum从yum仓库安装软件。首先安装低版本的json,高版本的json需要ruby2.0以上,然后安装低版本的fpm,够用。

gem install json -v 1.8.3

gem install fpm -v 1.3.3

# 上面的2步安装仅适合CentOS6系统,CentOS7系统直接使用gem install fpm一步搞定。

FPM参数

常用的几个参数如下,详细使用见fpm –help

-s          指定源类型

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

-n          指定包的名字

-v          指定包的版本号

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

-d          指定依赖于哪些包

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

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

--vendor   供应商

--description  注释信息

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

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

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

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

定制nginx的RPM包实例

1. 在打包机器上先安装一次nginx

yum -y install pcre-developenssl-devel

useradd nginx -M -s /sbin/nologin

tar xf nginx-1.8.0.tar.gz

cd nginx-1.8.0

./configure --user=nginx --group=nginx --prefix=/application/nginx-1.8.0 --with-http_ssl_module--with-http_stub_status_module

make && make install

ln -s /application/nginx-1.8.0/application/nginx

2. 编写脚本

mkdir /server/scripts/ -p

cd /server/scripts/

软件包卸载前、卸载后的脚本,可以根据情况是否编写,不编写问题也不大。但是rpm安装后的脚本是必须的。

vim nginx_post_install.sh   #编写一个rpm安装后需要执行的脚本

#!/bin/bash

useradd nginx -M -s /sbin/nologin

ln -s /application/nginx-1.8.0 /application/nginx

chmod +x /etc/init.d/nginx

chkconfig --add nginx

echo 'PATH=/application/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh

准备个启动脚本,如下:

vi /etc/init.d/nginx

#! /bin/sh

# chkconfig: 2345 55 25

# Description: Startup script fornginx webserver on Debian. Place in /etc/init.d and

PATH=/application/nginx/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

NAME=nginx

NGINX_BIN=/application/nginx/sbin/$NAME

CONFIGFILE=/application/nginx/conf/$NAME.conf

PIDFILE=/application/nginx/logs/$NAME.pid

case "$1" in

start)

echo -n "Starting $NAME... "

if netstat -tnpl | grep -q nginx;then

echo "$NAME (pid `pidof $NAME`)already running."

exit 1

fi

$NGINX_BIN -c $CONFIGFILE

if [ "$?" != 0 ] ; then

echo " failed"

exit 1

else

echo " done"

fi

;;

stop)

echo -n "Stoping $NAME... "

if ! netstat -tnpl | grep -q nginx;then

echo "$NAME is notrunning."

exit 1

fi

$NGINX_BIN -s stop

if [ "$?" != 0 ] ; then

echo " failed. Use force-quit"

exit 1

else

echo " done"

fi

;;

status)

if netstat -tnpl | grep -q nginx; then

PID=`pidof nginx`

echo "$NAME (pid $PID) isrunning..."

else

echo "$NAME is stopped"

exit 0

fi

;;

force-quit)

echo -n "Terminating $NAME..."

if ! netstat -tnpl | grep -q nginx;then

echo "$NAME is notrunning."

exit 1

fi

kill `pidof $NAME`

if [ "$?" != 0 ] ; then

echo " failed"

exit 1

else

echo " done"

fi

;;

restart)

$0 stop

sleep 1

$0 start

;;

reload)

echo -n "Reload service $NAME..."

if netstat -tnpl | grep -q nginx; then

$NGINX_BIN -s reload

echo " done"

else

echo "$NAME is not running,can't reload."

exit 1

fi

;;

configtest)

echo -n "Test $NAME configurefiles... "

$NGINX_BIN -t

;;

*)

echo "Usage: $0{start|stop|force-quit|restart|reload|status|configtest}"

exit 1

;;

esac

3. 打包

fpm -s dir -t rpm -n nginx -v 1.8.0 --vendor "OPS@Company" --description "Nginx for Company,Build in 2016/11/28" -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_post_install.sh -f /application/nginx-1.8.0 /etc/init.d/nginx

# 注意:我们可以操作前修改下主机名,这样打包出来的Build Host就会跟着改变。

4. 安装rpm包

rpm命令安装会报错,如下例:

rpm -ivh nginx-1.8.0-1.x86_64.rpm 但会在缺少pcre-devel时候报错,需要先yum安装依赖才能安装rpm包。

yum命令安装rpm

yum -y localinstall nginx-1.8.0-1.x86_64.rpm

这个命令会自动先安装rpm包的依赖,然后再安装rpm包。

其他

我们可以将其他的一些常用软件如redis、mongodb、redis等都这样定制好安装路径和配置文件,这样安装就方便多了。

本文转自 lirulei90 51CTO博客,原文链接:http://blog.51cto.com/lee90/1877420,如需转载请自行联系原作者

CentOS6.7上使用FPM打包制作自己的rpm包相关推荐

  1. tengine php fpm,FPM打包工具制作Tengine为RPM包详解

    目录 1.Tengine编译安装 2.FPM制作Tengine为RPM包 3.总结 1.Tengine编译安装[root@php ~]# cat /etc/issue CentOS release 6 ...

  2. 用fpm制作mysql的rpm包_Fpm 之 Mysql-5.7.21 rpm 包制做

    Fpm 之 Mysql-5.7.21 rpm 包制做 1.首先将mysql-5.7.21编译安装包,安装到自定义的目录 1. 下载安装包 wget http://downloads.sourcefor ...

  3. php-rpm.conf,制作PHP的RPM包教程

    有时候为了方便源码包的安装,我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包,当有了源码包就可以直接编译得到二 进制安装包和其他任意包.spec file是制作rpm包最核 ...

  4. CentOS下使用rpm-build制作nginx的RPM包

    一.RPM包的分类 RPM有五种基本的操作功能:安装.卸载.升级.查询和验证. linux软件包分为两大类: (1)二进制类包,包括rpm安装包(一般分为i386和x86等几种) (2)源码类包,源码 ...

  5. 制作nginx的RPM包,一不小心就会犯的错

    使用RPM包和源码包安装软件各自的优缺点: RPM包:安装简单,但无法自定义配置,为保证稳定性.兼容性软件版本都相对陈旧: 源码包:可以较快获得软件最新版本, 可根据需要自定义配置(如安装目录,用户, ...

  6. linux yum仓库制作,yum仓库搭建之RPM包制作

    常见的软件安装方式有以下几种 1.yum安装,可自动解决依赖,但不能自定义软件安装位置 2.编译安装,可指定安装路径,指定装模块,但编译参数冗长,且耗时较长,不能解决依赖问题. 3.rpm安装,安装速 ...

  7. fpm制作mysql rpm包_FPM简介(定制rpm包)

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

  8. RPM包制作及yum仓库搭建

    RPM包制作 rpm包的制作是通过fpm软件来生成的,所以首先要安装fpm软件.又因为fpm的软件是ruby开发的,所以安装fpm的话首先要安装ruby等包 FPM功能简单说就是将一种类型的包转换成另 ...

  9. 定制RPM包(FPM和原生rpmbuild)

    例子: Redis打包(FPM工具) Nginx打包RPM(FPM工具) Nginx(SPEC文件打包) Redis(SPEC文件打包) 一.FPM工具进行打包 1. 更新yum软件源 yum upd ...

最新文章

  1. static和global的区别
  2. Quasar Akka Vertx Norbert 比较
  3. 本周 AI 论文良心推荐,你想 pick 谁?
  4. combox 增加请选择_娱乐测试:选择四种花束中的一种,测试你对婚姻的看法
  5. OpenCV与图像处理学习十三——Harris角点检测(含代码)
  6. GitLab 添加组员到指定小组
  7. 视频时帧率达到15,人眼就感觉是连续的
  8. 安全优雅的RESTful API签名实现方案(手机端)
  9. Maxima函数的不完全列表
  10. mysql 查看校对集_mysql 查看字符集和校对规则
  11. php导出数据库为excel文件,phpexcel导出数据库成excel文件
  12. WIN10环境英伟达9系显卡tensorflow安装记录及调试过程 CUDA8.0+tensorflow-gpu1.4+CuDNN6.0
  13. 【VPD】使用Oracle VPD(Virtual Private Database)限制用户获取数据的范围
  14. Android学习——Shortcut
  15. 短距离无线通讯-ZigBee
  16. 里程碑:SpaceX首次成功实现海上回收火箭
  17. RTK Query(RTKQ)
  18. notebook pip install 只有星号_世界上最小的船,只有四个红细胞那么长
  19. leetcode之美团公司算法
  20. Visual Studio2012打包软件InstallShield Limited Edition安装教程

热门文章

  1. python函数 global_Python global全局变量函数详解
  2. 服务器php只显示文本,服务器上的php echos文件是文本而不是二进制文件
  3. I/O复用之 EPOLLONESHOT 事件
  4. 860. 柠檬水找零 golang
  5. LeetCode 21. 合并两个有序链表 golang
  6. 模线性方程(中国剩余定理+扩展中国剩余定理)
  7. 关于源文件用不同的编码方式编写,会导致执行结果不一样的现象及解决方法
  8. 三级嵌入式选择知识点整理
  9. 互斥量(mutex)
  10. python入门23 pymssql模块(python连接sql server增删改数据 )