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

[经验分享] 使用fpm制作nginx rpm包

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-17 10:39:40 | 显示全部楼层 |阅读模式
在使用saltstack部署的时候,我们依赖公司自己的rpm包,编译的参数,启动的脚本都是自己定制的,然后打成rpm包 放入公司自己的yum仓库里。制作rpm包的方式很多 checkinstall spec文件,fpm使用很简单,主要介绍下

1.安装fpm
1
2
3
4
yum -y install ruby rubygems ruby-devel rpm-build
gem sources -a http://ruby.taobao.org/
gem sources --remove http://rubygems.org/
gem install fpm



2.编译nginx并创建虚拟目录
1
2
3
4
5
6
mkdir -pv /opt/nginx/{etc/rc.d/init.d,sysconfig}
tar -zxvf nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure --prefix=/usr/local/nginx --pid-path=/usr/local/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_dav_module --with-http_flv_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-debug --http-client-body-temp-path=/usr/local/nginx/client --http-proxy-temp-path=/usr/local/nginx/proxy --http-fastcgi-temp-path=/usr/local/nginx/fastcgi --http-uwsgi-temp-path=/usr/local/nginx/uwsgi --http-scgi-temp-path=/usr/local/nginx/scgi
make
make install DESTDIR=/opt/nginx



3.查看下/opt/nginx的目录结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
├── after_install.sh
├── after_remove.sh
├── etc
│   ├── rc.d
│   │   └── init.d
│   │       └── nginx
│   └── sysconfig
└── usr
    └── local
        └── nginx
            ├── conf
            │   ├── fastcgi.conf
            │   ├── fastcgi.conf.default
            │   ├── fastcgi_params
            │   ├── fastcgi_params.default
            │   ├── koi-utf
            │   ├── koi-win
            │   ├── mime.types
            │   ├── mime.types.default
            │   ├── nginx.conf
            │   ├── nginx.conf.default
            │   ├── scgi_params
            │   ├── scgi_params.default
            │   ├── uwsgi_params
            │   ├── uwsgi_params.default
            │   ├── vhost
            │   └── win-utf
            ├── html
            │   ├── 50x.html
            │   └── index.html
            ├── logs
            └── sbin
                └── nginx



这里我把已经更改过的nginx配置存放到了里面,以及nginx的启动脚本放到了/opt/nginx/etc/rc.d/init.d/下面,两个shell脚本一个是在安装完成后创建nginx运行用户,和卸载rpm包之后执行的操作
1
2
3
4
5
6
root@saltstack. ~# cat /opt/nginx/after_install.sh
#!/bin/bash
useradd www
root@saltstack. ~# cat /opt/nginx/after_remove.sh
#!/bin/bash
rm -rf /usr/local/nginx



nginx启动脚本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
1 #!/bin/bash
  2 # chkconfig: 2345 80 12
  3 # processname: nginx
  4 # qq:455471484
  5 source /etc/init.d/functions
  6
  7
  8 [ -r "$SYSCONFIG" ] && source "$SYSCONFIG"
  9 RETVAL=0
10 start() {
11     echo -n $"Starting Nginx:"
12     daemon /usr/local/nginx/sbin/nginx
13     RETVAL=$?
14     echo
15     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nginx
16     return $RETVAL
17 }
18
19 stop() {
20    echo -n $"Stoping Nginx:"
21    daemon kill -QUIT `cat /usr/local/nginx/nginx.pid`
22    RETVAL=$?
23    echo
24    [ $RETVAL -eq 0 ] && rm -rf /var/lock/subsys/nginx
25    return $RETVAL
26 }
27
28 restart() {
29    echo -n $"Restart Nginx:"
30    daemon /usr/local/nginx/sbin/nginx -s reload
31    RETVAL=$?
32    echo
33    return $RETVAL
34
35 }
36
37
38 case "$1" in
39    start)
40       start
41       ;;
42    stop)
43       stop
44       ;;
45    restart|reload)
46       restart
47       ;;
48 esac
49 exit $RETVAL



虚拟目录下的东西在你打完fpm之后文件都会跟里面的一样,也就是说,如果你们公司有自己的配置文件模板,可以预先直接打到rpm包里面,下面就可以使用fpm命令进行build了。fpm提供了很多参数,可以--help看下根据需求~
4.打包命令:
1
fpm -f -s dir -t rpm -n qding-nginx --epoch 0 -v1.6.2 --iteration 1.el6 -C /opt/nginx/ -p /root/ -d 'openssl-devel' -d 'gcc' -d 'gcc-c++' -d 'pcre-devel' -d 'zlib-devel' --verbose --category 'Development/Languages' --description 'nginx applications' --url 'nginx.org' --license 'BSD' -m 'bianji' --no-rpm-sign --after-install /opt/nginx/after_install.sh  --after-remove after_remove.sh --workdir /opt/nginx/ etc usr



我使用的参数说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
FPM参数详解
Usage: fpm [options]
  
-p, --package PACKAGEFILE        管理的软件包
  
-n, --name PACKAGENAME           定义生成的软件包的名字
  
-v, --version VERSION            定义生成的软件包的版本
  
    --iteration ITERATION        为软件包设置 iteration值 ('release' for RPM).
  
    --epoch EPOCH                为软件包设置 epoch值
  
-d, —depends DEPENDENCY          设置软件包的依赖关系
  

-C DIRECTORY                     在搜索files前先进入该目录
  
-t PACKAGE_TYPE                  设置目标包的类型
  
-s SOURCE_TYPE                   设置需要转换的包类型
--after-remote           卸载后执行脚本
--after-install 安装后执行脚本



执行以下,这个输出还是很友好的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
fpm -f -s dir -t rpm -n qding-nginx --epoch 0 -v1.6.2 --iteration 1.el6 -C /opt/nginx/ -p /root/ -d 'openssl-devel' -d 'gcc' -d 'gcc-c++' -d 'pcre-devel' -d 'zlib-devel' --verbose --category 'Development/Languages' --description 'nginx applications' --url 'nginx.org' --license 'BSD' -m 'bianji' --no-rpm-sign --after-install /opt/nginx/after_install.sh  --after-remove after_remove.sh --workdir /opt/nginx/ etc usr
Setting workdir {:workdir=>"/opt/nginx/", :level=>:info}
Setting from flags: category=Development/Languages {:level=>:info}
Setting from flags: description=nginx applications {:level=>:info}
Setting from flags: epoch=0 {:level=>:info}
Setting from flags: iteration=1.el6 {:level=>:info}
Setting from flags: license=BSD {:level=>:info}
Setting from flags: maintainer=bianji {:level=>:info}
Setting from flags: name=qding-nginx {:level=>:info}
Setting from flags: url=nginx.org {:level=>:info}
Setting from flags: version=1.6.2 {:level=>:info}
Converting dir to rpm {:level=>:info}
Force flag given. Overwriting package at /root/qding-nginx-1.6.2-1.el6.x86_64.rpm {:level=>:warn}
Reading template {:path=>"/usr/lib/ruby/gems/1.8/gems/fpm-1.3.3/templates/rpm.erb", :level=>:info}
Running rpmbuild {:args=>["rpmbuild", "-bb", "--define", "buildroot /opt/nginx/package-rpm-build20150415-14369-365eos/BUILD", "--define", "_topdir /opt/nginx/package-rpm-build20150415-14369-365eos", "--define", "_sourcedir /opt/nginx/package-rpm-build20150415-14369-365eos", "--define", "_rpmdir /opt/nginx/package-rpm-build20150415-14369-365eos/RPMS", "--define", "_tmppath /opt/nginx/", "/opt/nginx/package-rpm-build20150415-14369-365eos/SPECS/qding-nginx.spec"], :level=>:info}
Executing(%prep): /bin/sh -e /opt/nginx/rpm-tmp.fFuA4s {:level=>:info}
Executing(%build): /bin/sh -e /opt/nginx/rpm-tmp.HMWMva {:level=>:info}
Executing(%install): /bin/sh -e /opt/nginx/rpm-tmp.N2vnXR {:level=>:info}
Processing files: qding-nginx-1.6.2-1.el6.x86_64 {:level=>:info}
Wrote: /opt/nginx/package-rpm-build20150415-14369-365eos/RPMS/x86_64/qding-nginx-1.6.2-1.el6.x86_64.rpm {:level=>:info}
Executing(%clean): /bin/sh -e /opt/nginx/rpm-tmp.lyFWXl {:level=>:info}
Created package {:path=>"/root/qding-nginx-1.6.2-1.el6.x86_64.rpm"}



build成功之后可以在/root/下看到qding-nginx这个Rpm包。。。之后放入yum仓库里就可以提供使用啦。。。。。。。


运维网声明 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-58083-1-1.html 上篇帖子: Nginx配合keepalived实现LVS负载均衡--生产环境实际案例 下篇帖子: Nginx之一:Nginx的编译安装 制作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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