天天看點

nginx的rpm包制作

nginx prm包 詳細制作流程

1.準備工作

   1.1:我這裡準備了一台centos7的虛拟主機

   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,建立後裡面會有文法定義,把裡面的内容補全即可,因為我這裡用到了控制腳本,還需要加腳本階段,整體檔案如下:

[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}

%preun   #解除安裝前停止服務并從服務清單删除

if [ $1 == 0 ]; then

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

    /sbin/chkconfig --del %{name}

%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

繼續閱讀