CentOS6.7上使用FPM打包制作自己的rpm包


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

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


安装FPM

fpmruby写的,因此系统环境需要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/

# 安装fpmgemrubygem仓库安装软件类似yumyum仓库安装软件。首先安装低版本的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 �Chelp

-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

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"

else

echo " done"

;;

stop)

echo -n "Stoping $NAME... "

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

echo "$NAME is notrunning."

$NGINX_BIN -s stop

echo " failed. Use force-quit"

status)

if netstat -tnpl | grep -q nginx; then

PID=`pidof nginx`

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

echo "$NAME is stopped"

exit 0

force-quit)

echo -n "Terminating $NAME..."

kill `pidof $NAME`

restart)

$0 stop

sleep 1

$0 start

reload)

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

$NGINX_BIN -s reload

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

configtest)

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

$NGINX_BIN -t

*)

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

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包。


其他

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

相关文章

linux下开机自启: 在/etc/init.d目录下新建文件elasticsear...
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以...
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用...
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一...
设置时区(CentOS 7) 先执行命令timedatectl status|grep &...
vim /etc/sysconfig/network-scripts/ifcfg-eth0 B...