nginx的rpm包制作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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当控制脚本文件,如图:

 技术分享

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

[[email protected] 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文件里面特别容易写错字,就慢慢排错吧


以上是关于nginx的rpm包制作的主要内容,如果未能解决你的问题,请参考以下文章

使用rpm-build制作nginx的rpm包

nginx之RPM包制作教程

nginx的rpm包制作

Fpm 之 Nginx rpm 包制作

nginx-1.8.0 rpm包制作

制作nginx的rpm包: