再跟你們分享一個我在奇虎這邊作的一個nginx的rpm包的spec文件。後面我再分享一下php和mysql等你們用的比較廣泛的軟件的spec。你們在作rpm包的時候能夠參考個人這個文檔,後面還包含了一些針對內核的優化的一些參數特別是tcp的快速釋放和重利用等,遇到問題咱們能夠一塊兒討論。能夠加這個qq羣325525293。下面我針對裏面比較重要的內容作了解釋。php
%define _topdir /qihoo/Centos/html
%define _specdir %{_topdir}/SPECmysql
%define _rpmdir %{_topdir}/nginx
%define _srcrpmdir %{_topdir}/SRPMSsql
%define _sourcedir %{_topdir}/SOURCES緩存
%define _tmppath %{_topdir}/tmpbash
%define _builddir %{_topdir}/BUILD運維
%define _prefix /usr/local/nginxcurl
%define _docroot_dir /usr/local/nginx/htmltcp
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