上次说的,最近喜欢上了折腾Nginx。作为一个Web从业人员,越来越觉得Nginx太强大了。
于是便花了几天时间研究在Debian及CentOS下从源代码开始将Nginx打包成deb/rpm,这篇是记录CentOS 7 下将Nginx打包成rpm。
安装软件之前肯定是先要更新:
yum update
安装编译环境:
yum install gcc gcc-c++ rpm-build
安装Nginx所依赖的包:
yum install -y openssl-devel zlib-devel pcre-devel gd-devel
新建用户:
name=rpmbuild
useradd $name
echo “$name ALL=(ALL) NOPASSWD:ALL” >> /etc/sudoers
su – $name
进入SOURCES目录:
cd ~/SOURCES/
在新建的用户home目录创建接下来要用到的几个文件夹:
rpmdev-setuptree
这样在rpmbuild的home目录下面有了这几个目录:
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
到这个地址找到合适的源码包下载: nginx package
下载源码,当前(2016-06-16)最新为nginx-1.10.1-1.el7.ngx.src.rpm:
wget http://nginx.org/packages/centos/7/SRPMS/nginx-1.10.1-1.el7.ngx.src.rpm
解压:
rpm2cpio nginx-1.10.1-1.el7.ngx.src.rpm |cpio -dvi
里面应该有这么些个文件:
[root@790fde35905f SOURCES]# ls
COPYRIGHT nginx-debug.sysconf nginx.sysconf
logrotate nginx.conf nginx.upgrade.sh
nginx-1.10.1 nginx.init.in nginx.vh.default.conf
nginx-1.10.1-1.el7.ngx.src.rpm nginx.service njs-1c50334fbea6.tar.gz
nginx-1.10.1.tar.gz nginx.spec
nginx-debug.service nginx.suse.logrotate
开始编译:
rpmbuild -ba nginx.spec
如果没有意外的话,在~/rpmbuild/RPMS/x86_64下面应该生成了对应的rpm包:
nginx-1.10.1-1.el7.centos.ngx.x86_64.rpm
nginx-debuginfo-1.10.1-1.el7.centos.ngx.x86_64.rpm
nginx-module-geoip-1.10.1-1.el7.centos.ngx.x86_64.rpm
nginx-module-image-filter-1.10.1-1.el7.centos.ngx.x86_64.rpm
nginx-module-njs-1.10.1.0.0.20160414.1c50334fbea6-1.el7.centos.ngx.x86_64.rpm
nginx-module-perl-1.10.1-1.el7.centos.ngx.x86_64.rpm
nginx-module-xslt-1.10.1-1.el7.centos.ngx.x86_64.rpm
上面是按照Nginx默认的configure配置打包成的rpm,既然选择了自主打包而不是使用Nginx官方打包好的rpm,肯定是有些模块Nginx打包的不包含,自主打包也就是想把我们需要的模块加进Nginx而又不想在生产服务器安装一大堆包,所以,为了加进我们所需要的模块,我们可以更改上面哪个nginx.spec文件,加进我们所需要的模块,怎么加进去可以参考我先前的一篇文章Debian 8 下编译Nginx笔记。
进过我实际编译,暂时发现我所需要的两个额外模块Google Filter和PageSpeed中Google Filter可以正常编译进去,但是PageSpeed会报错,暂时没找到解决办法,有时间我再折腾一下。