nginx的rpm包制作

简介:

nginx prm包 详细制作流程

1.准备工作

   1.1:我这里准备了一台centos7的虚拟主机

   1.2:官网下载最新的稳定版nginx源码包,地址:http://nginx.org/nginx-1.10.2.tar.gz

   1.3:官网下载nginx的控制脚本,地址:https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/

   1.4:手动安装一遍,看看都需要哪些依赖,所需依赖:gcc-c++,pcre-devel,zlib-devel,openssl-devel

   1.5:了解RPM包的制作过程或结构

       1.5.1:准备rpmbuild车间,(BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS),了解这几个文件夹的作用,        使用普通用户进行,因为root用户权限太大,使用比较危险

       1.5.2:把源材料放入车间的SOURCES文件夹里,这是规定的固定的目录

       1.5.3:进入SPECS创建spec文件,需要spec文件来指挥如何使用源材料来制作成rpm包

       1.5.4:开始编译源代码生成rpm包

2.正式操作

   2.1:准备制作车间

       2.1.1:yum install rpmbuild   #安装rpmbuild制作软件

       2.1.2:useradd nginx  #新建一个nginx用户

       2.1.2:su - nginx        #切换到nginx用户登录

       2.1.3:rpmbuild -- showrc | grep _ropdir 查看工作车间的位置

       2.1.4:vim .rpmmacros 在里面填写nginx的家目录  %_topdir/home/nginx/rpmbuild  保存退出  #重新定义工作车间的          路径

       2.1.5:mkdir -pv rpmbuild/{BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS}  #进入自己的家目录创建车间        目录,再用rpmbuild -- showrc | grep _ropdir 查看是否为当前自定义的路径

   2.2:把源码包放入到SOURCES文件夹里面,然后新建个文件把控制脚本复制到里面进行保存,我这里用的test.nginx当控制脚本文件,如图:

 image2016-10-26%2015%3A39%3A47.png?versi

  2.3:进入SPECS目录创建spec文件,vim nginx.spec,创建后里面会有语法定义,把里面的内容补全即可,因为我这里用到了控制脚本,还需要加脚本阶段,整体文件如下:

[nginx@host-172-18-21-129 SPECS]$ cat nginx.spec

Name:nginx                      #软件名字

Version:1.10.2                 #版本号,需要与源码包一样,而且不可以使用-只能使用.

Release:        2%{?dist}   #制作版本号,这里宏是固定的,不用改

Summary:nginx test           #简介

Group:Applications/Internet   #组,可以使用cat /usr/share/doc/rpm-4.11.3/GROUPS 来查看组所使用的必须为这个里面的组

License:GPLv2                 #版权说明

URL:nginx.org                  #源码包的出处

Source0:nginx-1.10.2.tar.gz   #明确说明制作RPM包所使用的源文件,这里是我的nginx源码包

Source1:test.nginx                  #明确说明制作RPM包所使用的源文件,这里是我的控制脚本

BuildRequires:gcc-c++,pcre-devel,zlib-devel,openssl-devel   #制作RPM包的过程所依赖的软件包

Requires:gcc-c++,pcre-devel,zlib-devel,openssl-devel           #安装RPM包的过程所是依赖的软件包

%description    #描述

nginx web server test

%prep            #固定格式,不用管,这个是准备阶段

%setup -q

%build            #制作阶段,主要有configure和make

export DESTDIR=%{buildroot}

./configure \

    --sbin-path=/usr/sbin/nginx \

    --conf-path=/etc/nginx/nginx.conf \

    --error-log-path=/var/log/nginx/error.log \

    --http-log-path=/var/log/nginx/access.log \

    --pid-path=/var/run/nginx/nginx.pid \

    --lock-path=/var/lock/nginx.lock \

    --user=nginx \

    --group=nginx \

    --with-http_ssl_module \

    --with-http_flv_module \

    --with-http_stub_status_module \

    --with-http_gzip_static_module \

    --http-client-body-temp-path=/var/tmp/nginx/client/ \

    --http-proxy-temp-path=/var/tmp/nginx/proxy/ \

    --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \

    --with-pcre

make %{?_smp_mflags}

%install     #安装阶段buildroot路径基本上都是固定的,可以自定义,buildroot:在tmpath下建3个子目录里面有                                                                                                                                                                             name,version,release

rm -rf %{buildroot}     #因为制作过程可能进行多次重复操作,所以我么定义每次都删一遍Buildrooot

make install DESTDIR=%{buildroot}  #表示安装到DESTDIR以buildoot为起点

 %{__install} -p -d -m 0755 %{buildroot}/var/run/nginx        #在buildroot路径下创建目录并给权限,-d是创建目录的

 %{__install} -p -d -m 0755 %{buildroot}/var/log/nginx

 %{__install} -p -D -m 0755 %{SOURCE1} %{buildroot}/etc/rc.d/init.d/nginx     #在{buildroot}/etc/rc.d/init.d/nginx 下安装source1源文件并指定权限

%clean      #清理段,当RPM包制作完成之后都会自动清理一遍buildroot

rm -rf %{buildroot}

%pre       #脚本段,安装前,在安装前添加一个nginx用户

if [ $1 == 1 ]; then     #$1=1表示安装,2表示卸载,0表示升级

    /usr/sbin/useradd -s /bin/false -r nginx 2>/dev/null || :

fi

%post     #安装后,添加到服务列表

if [ $1 == 1 ]; then

    /sbin/chkconfig --add %{name}

fi

%preun   #卸载前停止服务并从服务列表删除

if [ $1 == 0 ]; then

    /sbin/service %{name} stop >/dev/null 2>&1

    /sbin/chkconfig --del %{name}

fi

%files      #文件阶段,定义宏和权限

%defattr(-,root,root,-)   #定义默认权限

%doc LICENSE CHANGES README  #定义文档,下面这些文件当执行到rpmbulid -b

/usr/sbin/nginx

%dir /var/run/nginx

%dir /var/log/nginx

%dir /etc/nginx    #下面的配置文件 在执行到rpmbuild -bi  nginx.spec的时候会有错误提示,把里面的拷贝过来就成下面                                                                                                                                                                    的配置文件格式了

    /etc/nginx/fastcgi.conf

    /etc/nginx/fastcgi.conf.default

    /etc/nginx/fastcgi_params

    /etc/nginx/fastcgi_params.default

    /etc/nginx/koi-utf

    /etc/nginx/koi-win

    /etc/nginx/mime.types

    /etc/nginx/mime.types.default

    /etc/nginx/nginx.conf

    /etc/nginx/nginx.conf.default

    /etc/nginx/scgi_params

    /etc/nginx/scgi_params.default

    /etc/nginx/uwsgi_params

    /etc/nginx/uwsgi_params.default

    /etc/nginx/win-utf

/usr/local/nginx/html/50x.html

/usr/local/nginx/html/index.html

%attr(0755, root, root) /etc/rc.d/init.d/nginx    #明确定义这个脚本的单个属性,不走默认属性

%changelog      #以*号表示 周几 月份 日期 年份 编辑人员 邮箱 版本信息

* Tue Oct 25 2016 hui.shi -1.10.2-2

-add nginx.sys

* Mon Oct 24 2016 hui.shi -1.10.2-1

-test version

3.在写完spec文件之后,进行制作RPM包

  3.1:rpmbuild -bp nginx.spec   #执行到%prep阶段,查看是否正常,出现错误就解决报错

  3.2:rpmbuild -bc nginx.spec   #执行到%build阶段,查看是否正常,出现错误就解决报错

  3.3:rpmbuild -bi  nginx.spec   #执行到%install阶段,查看是否报错,出现错误就解决报错

  以上的报错都解决完之后可以直接进行制作rpm包了

  3.4: rpmbuild -ba nginx.spec  #制作二进制和源码格式的rpm包

制作完成的rpm包在 /home/nginx/rpmbuild/RPMS里

4.然后找到制作好的RPM包进行测试安装

rpm -ivh nginx包

然后systemctl start nginx.service来启动服务

netstat -tunlp 来查看是否启动正常

如果我们需要给这个nginx添加新功能,那就需要加原材料和重新修改spec文件来重新进行制作,然后用

rpm -Uvh nginx来升级软件



注意:第3阶段特别容易出现报错,主要的错误有 字母、标点、—和_的写错,sepc文件里面特别容易写错字,就慢慢排错吧


本文转自 Bruceweien 51CTO博客,原文链接:http://blog.51cto.com/bruceweien/1932377

相关文章
|
应用服务中间件 nginx
Centos7.3 卸载 Nginx(彻底卸载) 并重新安装 Nginx(RPM源yum安装)
Centos7.3 卸载 Nginx(彻底卸载) 并重新安装 Nginx(RPM源yum安装)
827 0
Centos7.3 卸载 Nginx(彻底卸载) 并重新安装 Nginx(RPM源yum安装)
|
1天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
8 0
|
1月前
|
NoSQL Java 应用服务中间件
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
|
缓存 负载均衡 监控
程序员的nginx技能包(6)——负载均衡具体实现策略及场景
背景 上篇讲了负载均衡详细的实现方法,其实已经基本够用了,但是还有一些更为复杂的负载均衡策略配置,今天结合使用场景介绍下。
110 0
程序员的nginx技能包(6)——负载均衡具体实现策略及场景
|
负载均衡 架构师 应用服务中间件
程序员的nginx技能包(5)——负载均衡,高大上架构的起源
背景 不管是否很大型的系统,采用负载均衡的意义都是相当滴重要。
103 0
程序员的nginx技能包(5)——负载均衡,高大上架构的起源
|
安全 Java 应用服务中间件
程序员的nginx技能包(4)——端口转发,节约是一种美德,规范是一种信仰
背景 场景1 给客户开发微信公众号后台程序,大家都知道微信公众号必须要求80/443端口,OK,如果客户要求云服务器托管,那就GG了。因为同时监听80端口的服务端只能有一个,每个客户都得给他配一台服务器,哈哈,简直不要太烧钱。 要知道节约是一种美德,必须得用nginx解决之。
233 0
程序员的nginx技能包(4)——端口转发,节约是一种美德,规范是一种信仰
|
前端开发 JavaScript 应用服务中间件
程序员的nginx技能包(3)——静态资源管理,资源井井有条,生活风花雪月
背景 每次新建项目,都要到处找各种静态资源,是不是很烦。 找那些公司logo图片… 找那些前端样式css… 找那些前端框架vue、jquery…
142 0
程序员的nginx技能包(3)——静态资源管理,资源井井有条,生活风花雪月
|
应用服务中间件 程序员 Linux
程序员的nginx技能包(2)——nginx安装、简单操作、helloworld欢迎页实现
本文介绍的是windows环境下nginx安装与第一个网页的配置使用,linux下差不多少,请诸位自行研究。 安装 nginx的安装总结成一句话,不用安装。 下载解压即可,点此下载。 此处下载的版本为1.15.7版本,此处我下载后解压到H盘根目录下。
310 0
程序员的nginx技能包(2)——nginx安装、简单操作、helloworld欢迎页实现
|
负载均衡 Java 应用服务中间件
程序员的nginx技能包(1)——nginx是啥,对程序员有啥用
nginx是啥 nginx就是个服务器,做Java Web的童鞋可能比较了解Tomcat、做dotNet Web的童鞋可能比较了解IIS、还有非常出名的apache服务器等等等等。
|
应用服务中间件 nginx Python
gunicorn +nginx+python3 部署flask项目(gevent+gevent)--依赖的包
gunicorn +nginx+python3 部署(gevent+gevent)--依赖的包 bind = ["0.0.0.0:5010"]workers = 4backlog = 2048worker_class = 'gevent'forwarded_allow_ips = "*"keepa...
1253 0