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