自定义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 �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包。
其他
我们可以将其他的一些常用软件如redis、mongodb、redis等都这样定制好安装路径和配置文件,这样安装就方便多了。
原文链接:https://www.f2er.com/centos/379708.html