製作nginx的spec分享

    再跟大家分享一個我在奇虎這邊做的一個nginxrpm包的spec文件。後面我再分享一下php和mysql等大家用的比較普遍的軟件的spec。大家在做rpm包的時候可以參考我的這個文檔,後面還包含了一些針對內核的優化的一些參數特別是tcp的快速釋放和重利用等,遇到問題我們可以一起討論。可以加這個qq325525293。下面我針對裏面比較重要的內容做了解釋。

%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 <[email protected]>

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

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章