设为首页 收藏本站
查看: 1711|回复: 0

[经验分享] CentOS6.7上使用FPM打包制作自己的rpm包

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-29 08:39:18 | 显示全部楼层 |阅读模式
自定义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/



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

4. 安装rpm包

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

rpm -ivh nginx-1.8.0-1.x86_64.rpm

error: Failed dependencies:

      pcre-devel is needed by nginx-1.8.0-1.x86_64

      openssl-devel is needed by nginx-1.8.0-1.x86_64

但会报如上依赖错误,需要先yum安装依赖才能安装rpm包。



yum命令安装rpm包

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

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


其他

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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306919-1-1.html 上篇帖子: Openfire/Spark/Smack 下篇帖子: 查看gcc版本和引用头文件路径 制作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表