再跟大家分享一个我在奇虎这边做的一个nginx的rpm包的spec文件。后面我再分享一下php和mysql等大家用的比较普遍的软件的spec。大家在做rpm包的时候可以参考我的这个文档,后面还包含了一些针对内核的优化的一些参数特别是tcp的快速释放和重利用等,遇到问题我们可以一起讨论。可以加这个qq群325525293。下面我针对里面比较重要的内容做了解释。

%define _topdir  /qihoo/Centos/

%define _specdir %{_topdir}/SPEC

%define _rpmdir  %{_topdir}/

%define _srcrpmdir %{_topdir}/SRPMS

%define _sourcedir %{_topdir}/SOURCES

%define _tmppath   %{_topdir}/tmp

%define _builddir   %{_topdir}/BUILD

%define _prefix /usr/local/nginx

%define _docroot_dir /usr/local/nginx/html

Summary: qihoo custom nginx package

Name: qihoo-ops-nginx  #生成rpm的名称叫什么

Version: 1.6.1

Release: 1_qihoo.el6

Vendor: gehailong <gehailong@360.cn>

Source: nginx-%{version}.tar.gz   #source主要是引用一下自己定义好的脚本,配置文件之类的内容。

Source1: nginx.conf            #nginx在主配置文件里面做了很多优化,包括cpu抢占,各种缓存策略,tcp,进程数等。

Source2: sysctl.conf

Source3: root.tar.gz

#Source4: nginx-module.tar.gz

Source5: nginx.logrotate       #为了防止nginx日志文件逐渐增大,影响读写效率,对nginx日志定期进行切割。

Source6: nginx.init

Source7: fastcgi.conf

URL: http://w2.addops.bjt.qihoo.net:8360

License: GPL

Group: Applications/Internet

Buildroot:%{_tmppath}/%{name}-%{version}-root/

Requires: bash openssl-devel curl-develpcre pcre-devel openssl   #主要定义了nginx依赖的一些rpm包。就是在yum装的时候依赖的包。

Autoreq: no

%description

qihoo custom nginx RPM

%prep

%setup -q -n nginx-%{version}

%build   #这个阶段就是configure阶段。

./configure \

--prefix=%{_prefix} \

--with-http_stub_status_module \

--with-http_ssl_module \

make %{?_smp_mflags}   #make阶段

%install    #make install阶段

[ $RPM_BUILD_ROOT != "/" ]&& rm -rf $RPM_BUILD_ROOT

make DESTDIR=$RPM_BUILD_ROOT install  #下面是来指定我要生成什么样的目录和文件等。

mkdir -p$RPM_BUILD_ROOT/usr%{_prefix}/conf/vhosts

mkdir -p${RPM_BUILD_ROOT}%{_prefix}/modules

mkdir -p ${RPM_BUILD_ROOT}%{_prefix}/pid

mkdir -p ${RPM_BUILD_ROOT}%{_prefix}/conf/include

mkdir -p ${RPM_BUILD_ROOT}%{_docroot_dir}

%{__tar} -zxvf %{SOURCE3} -C$RPM_BUILD_ROOT%{_docroot_dir}

mkdir -p ${RPM_BUILD_ROOT}/home/q/php

mkdir -p ${RPM_BUILD_ROOT}/home/q/system

#%{__tar} -zxvf %{SOURCE4} -C${RPM_BUILD_ROOT}%{_prefix}/modules/

[ -f${RPM_BUILD_ROOT}%{_prefix}/conf/nginx.conf ] && \

rm -fr${RPM_BUILD_ROOT}%{_prefix}/conf/nginx.conf

cp -rf %{SOURCE1}${RPM_BUILD_ROOT}%{_prefix}/conf/

mkdir -p ${RPM_BUILD_ROOT}/etc/logrotate.d/

cp -rf %{SOURCE5}${RPM_BUILD_ROOT}/etc/logrotate.d/nginx

mkdir -p ${RPM_BUILD_ROOT}/etc/init.d/

cp -fr %SOURCE6${RPM_BUILD_ROOT}/etc/init.d/nginx

rm -fr${RPM_BUILD_ROOT}%{_prefix}/conf/fastcgi.conf

cp -rf %{SOURCE7}${RPM_BUILD_ROOT}%{_prefix}/conf/

mkdir$RPM_BUILD_ROOT%{_prefix}/conf/vhosts/

touch$RPM_BUILD_ROOT%{_prefix}/conf/vhosts/blank.conf

rm -fr $RPM_BUILD_ROOT%{_prefix}/*temp

%files #注意这个阶段是把前面已经编译好的内容要打包了,其中exclude是指要排除什么不打包进来。

%defattr(-,root,root,755)

%{_prefix}

%{_docroot_dir}

%attr(0655,root,root)   %config %{_sysconfdir}/init.d/nginx

%attr(0655,root,root)   %config %{_sysconfdir}/logrotate.d/nginx

/home

%exclude %dir /home

%pre #pre是指在安装前要做什么操作,也就是先把nginx用户建立好。

if [ "$1" -eq "1" ];then

/usr/sbin/useradd -c "nginx"  \

-s /sbin/nologin -r -d %{_docroot_dir} nginx 2> /dev/null || :

fi

%post  #是指安装完成后的操作包括哪些操作。

if [ "$1" -eq "1"];then

/sbin/chkconfig --add nginx

/sbin/chkconfig --level 35 nginx on

chown -R nginx:nginx %{_docroot_dir} %{_prefix}

echo '# Add    #下面主要是内核参数的优化,包括tcp的快速释放和重利用等。

net.ipv4.tcp_max_syn_backlog = 65536

net.core.netdev_max_backlog =  32768

net.core.somaxconn = 32768

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000927000000

net.ipv4.tcp_max_orphans = 3276800

#net.ipv4.tcp_fin_timeout = 30

#net.ipv4.tcp_keepalive_time = 120

net.ipv4.ip_local_port_range = 1024  65535' >> /etc/sysctl.conf

sysctl -p 2>&1 /dev/null

fi

if [ "$1" -eq "2"];then

if [ -f /var/lock/subsys/nginx ]; then

%{_sysconfdir}/init.d/nginx restart

fi

fi

rm -fr %{_prefix}/*temp

%preun  #这是卸载前的准备工作。

if [ "$1" -eq "0"];then

%{_sysconfdir}/init.d/nginx stop > /dev/null 2>&1

/sbin/chkconfig --del nginx

fi

%postun #这是卸载的过程,注意卸载前把需要备份的内容手工备份一遍,防止造成后悔一辈子的事情,有时候运维真的伤不起!!!

/usr/sbin/userdel  nginx

rm -fr %{_prefix}

%clean

转载于:https://blog.51cto.com/gehailong/1548961

制作nginx的spec分享相关推荐

  1. 制作nginx和php的rpm包

    rpm包的制作真几把烦,制作php的rpm花了我3天时间,因为是根据线上环境来做的,依赖的第三方库太多,本来想把所有的第三方库做进php包,后来发现在rpmbuild -bb的时候非常耗时,而且乱七八 ...

  2. CentOS下使用rpm-build制作nginx的RPM包

    一.RPM包的分类 RPM有五种基本的操作功能:安装.卸载.升级.查询和验证. linux软件包分为两大类: (1)二进制类包,包括rpm安装包(一般分为i386和x86等几种) (2)源码类包,源码 ...

  3. 电脑PHP动画制作画板,HTML_html5教程制作简单画板代码分享,HTML5制作简单画板 复制代码代 - phpStudy...

    html5教程制作简单画板代码分享 HTML5制作简单画板 复制代码代码如下: http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min ...

  4. 使用美图秀秀制作电子喜帖:分享幸福新方法

    使用美图秀秀制作电子喜帖:分享幸福新方法 不知不觉我们都长大了,毕业了.工作了,要结婚了......随着我们的成长,亲朋好友也都遍布各地.那么,如何将结婚喜帖送达他们手上是个难题:邮寄传统的纸质喜帖很 ...

  5. php图形 验证码代码,PHP制作图形验证码代码分享,php图形验证码代码_PHP教程

    PHP制作图形验证码代码分享,php图形验证码代码 效果: myvcode.class.php:封装创建验证码的类 /* * file:myvcode.class.php * 验证码类,类名Vcode ...

  6. Docker 3.2.5:基于 Dockerfile 制作 Nginx 镜像

    3.2.5:基于 Dockerfile 制作 Nginx 镜像(编译版) 准备基础镜像 使用制作好的 centos-init 作为基础镜像: 编写 Dockerfile 进入相应的 Dockerfil ...

  7. 好用的头像制作logo免费生成器分享

    在手机上制作头像和logo已经成为了一种流行的趋势,许多应用程序也相继推出了相应的功能.最近就有个小伙伴私聊平时喜欢使用手机来进行一些设计和绘画,有没有什么好用的手机直接logo方法呢?那么下面就介绍 ...

  8. ArcGIS创建地理处理包!让你制作的工具自由分享

    喜欢就关注我们吧! 0 前言 当用模型做好工具 分享到其他电脑 出现的模型不可用的情况 就如我们上期制作分享 的提取四至点的工具 有这个红叉的情况 因为他用到了子模型 所以发生路径不一致的情况 只要编 ...

  9. dockerfile php-fpm,1、使用dockerfile制作nginx+php-fpm镜像,实现lnmp。

    步骤:制作centos基础镜像,nginx+php-fpm镜像放一起from centos基础镜像 制作centos基础镜像Dockerfile vi /docker/centos/Dockerfil ...

最新文章

  1. 分布式系统原理 之4 Quorum 机制
  2. 【转】The test form is only available for requests from the local machine 解决方法
  3. Chrome下的语音控制框架MyVoix.js使用篇(二)
  4. js根据给定的日期计算当月有多少天
  5. hiBurn下载-hitool烧写鸿蒙2.0系统到Hi3861V100-从哪里找到芯片列表文件更新芯片列表-HarmonyOS
  6. 如何提升代码的安全性 —— 代码混淆
  7. 局域网远程桌面无法连接到远程计算机,局域网无法远程连接桌面怎么解决
  8. 史上最全SpringCloud2.0视频教程
  9. java 常用报表控件_常用的Java开源报表工具汇总
  10. smartupload java_java组件smartupload实现上传文件功能
  11. Amaze UI后台管理模板 v2.7.2
  12. 设置代理后谷歌浏览器无法使用代理
  13. 思维正好,何不踏歌之“丑数”
  14. (五)RewriteBase 与RewriteCond 语法说明
  15. 创业者两大特征:喜欢折腾与坚持不懈
  16. 文章标题 execution(* cn.sxt.dao.impl.*.*(..))解释
  17. xshell 基本操作
  18. 计算机专业要求屏幕吗,台式电脑需要剪辑的话,显示屏是选择曲屏好还是直屏好呢?...
  19. IT企业内部系统运营推广的六种方法
  20. 14岁男孩倒卖土地赚1700万 网友急回家跪求父母买土地

热门文章

  1. Hadoop群集设置
  2. jquery extend中
  3. mysql参数优化和硬件优化等分享
  4. 催化剂概念在管理领域的应用——来自项目管理群的讨论
  5. 转 db_file_multiblock_read_count
  6. Python 函数(参数组合)
  7. 安装php的mongodb扩展
  8. 使用python标准库urllib2访问网页
  9. encodeURL() vs encodeRedirectURL()
  10. 关于整合SK框架的一些个小注意