1、前提php
談到 RPM 包,可能咱們不少人都會說,RPM 包不就是執行 yum –y insyall 命令以後安裝內容麼,是的,沒說錯,但是,咱們只知道安裝的時候用 yum –y install ,可是咱們是否知道 RPM 包是怎麼來的麼?咱們都清楚,當咱們在 Linux 服務器中安裝軟件時,有兩種方式,一種是用 RPM 包安裝,另一種是本身編譯源碼包來安裝,衆所周知,編譯源碼包安裝是異常的麻煩,而咱們用 RPM 安裝確實很簡單的事,只需一條命令就 OK 了。但咱們所用的 RPM 包可都是別人封裝好的,說句很差聽的話,誰知道它裏面有沒有病毒呢?因而,在一些比較注重安全的企業中,通常都會用本身封裝的 RPM 包進行安裝。到這裏,也許有人會問,還有這種操做?對,沒錯,確實有這種操做,下面,咱們就來一步步的說明 RPM 包的製做過程。html
2、準備工做mysql
俗話說,兵馬未動,糧草先行,這句話一樣適合與咱們的運維行業,活幹的漂不漂亮,得看你工具準備的是否齊全,工具齊全,就算你是剛入門的菜鳥,不少時候也會事半功倍,工具準備的不齊全,就算是深刻運維大坑的老鳥,不少時候也會事倍功半。nginx
那麼製做 RPM 包呢,首先咱們就得最好製做前的準備:web
一、安裝 rpmdevtools 開發工具sql
[root@localhost ~]# yum -y install rpmdevtools
二、瞭解 rpmbuild 的用法數據庫
既然安裝了 rpmdevtools 開發工具,咱們就得知道它怎麼用。其實咱們在製做 RPM 包的過程當中能用到的命令也就是 rpmbuild ,所在此,咱們瞭解下 rpmbuild 的用法:vim
①、rpmbuild 的參數選項,以下表:安全
②、查詢宏bash
在 RPM 報紙作過程當中,會涉及到不少不少的宏,那麼咱們怎麼樣知道這些宏都表明了什麼呢?咱們可使用 rpmbuild –showrc 命令來查看,以下圖:
帶%的所有爲宏,固然咱們可能看不懂,其實不要緊,大部分都沒用到,咱們只須要了解個別幾個就行,還有知道宏是用來幹什麼的就行。
③、宏變量的替換
若是咱們不想使用 rpmbuild 系統自帶的宏變量,那麼咱們能夠對 rpmbuild 宏進行自定義,修改家目錄下的 .rpmmacros 文件來實現,如圖
④、建立工做目錄
rpmbuild 必需要在特定的目錄中工做,因此,咱們得先建立 rpmbuild 的工做目錄,使用 rpmdev-setuptree 命令建立,會在家目錄下生成名爲 rpmbuild 的目錄,再執行 tree rpmbuild 來查看目錄結構。
[Xiaoyu@localhost ~]$ rpmdev-setuptree [Xiaoyu@localhost ~]$ tree rpmbuild rpmbuild ├── BUILD #源代碼解壓後的存放目錄 ├── BUILDROOT #RPM 包製做過程當中臨時安裝目錄 ├── RPMS #製做完成後的普通 RPM 包的存放目錄 ├── SOURCES #全部收集的額外軟件包的存放目錄(包括配置文件、補丁包等等) ├── SPECS #spec文件的存放目錄 └── SRPMS #製做完成後的 src 格式的 RPM 包的存放目錄
3、RPM 包的製做過程
製做 rpm 包通常包含下面 4 個步驟:
一、設置好製做 rpm 包的目錄結構(務必不能使用管理源進行,若是製做過程當中,某個命令寫錯了,那結果多是災難性的)
二、將源文件放到特定的所規劃好的目錄當中
三、準備製做過程當中所須要的其餘文件,並放進特定的所規劃好的目錄當中
四、建立一個 spec 文件,spec 文件將決定如何對源文件進行編譯
六、編譯源代碼,生成 rpm 包
4、spec 文件解析
spec 文件作爲咱們製做 RPM 包靈魂文件,若是而歐美讓你不知道 spec 文件怎麼寫,那咱們將沒法制做 RPM 包,下面,咱們就來說下 spec 文件的組成。
spec 文件分爲 7 個部分
一、軟件包信息說明段(The introduction section)
字段說明,如上圖:
Name:軟件包名稱,可使用 %{name} 的方式引用
Version:軟件包的版本號,務必使用 xx.yy,不能使用橫線,後面也可以使用 %{version} 的宏來進行引入
Release: 1%{?dist} ,軟件的發佈版本,dist 這個宏是能夠判斷的,若是 dist 這個宏有定義,就會在軟件包中帶上,若是沒有定義,就不會帶
Summary:軟件包的簡單描述,能夠寫製做者我的 信息
Group:軟件包的屬組,這個組不能隨便亂寫,在不一樣的系統上有不一樣的組,可使用 cat /usr/share/doc/rpm-4.11.3/GROUPS 來查看有哪些組,如圖
[Xiaoyu@localhost SPECS]$ cat /usr/share/doc/rpm-4.11.3/GROUPS Amusements/Games(娛樂/遊戲) Amusements/Graphics(娛樂/圖形) Applications/Archiving(應用/文檔) Applications/Communications(應用/通信) Applications/Databases(應用/數據庫) Applications/Editors(應用/編輯器) Applications/Emulators(應用/仿真器) Applications/Engineering(應用/工程) Applications/File(應用/文件) Applications/Internet(應用/英特網) Applications/Multimedia(應用/多媒體) Applications/Productivity(應用/產品) Applications/Publishing(應用/印刷) Applications/System(應用/系統) Applications/Text(應用/文本) Development/Debuggers(開發/調試器) Development/Languages(開發/語言) Development/Libraries(開發/函數庫) Development/System(開發/系統) Development/Tools(開發/工具) Documentation(文檔) System Environment/Base(系統環境/基礎) System Environment/Daemons(系統環境/守護) System Environment/Kernel(系統環境/內核) System Environment/Libraries(系統環境/函數庫) System Environment/Shells(系統環境/接口) User Interface/Desktops(用戶界面/桌面) User Interface/X(用戶界面/X窗口) User Interface/X Hardware Support(用戶界面/X硬件支持)
License:受權方式,一般是GPL(自由軟件)或者GPLv2,BSD,這裏必定要寫清楚,不然可能會侵權
URL:通常寫這個 RPM 能夠從哪一個地址下載到
Source0:源代碼包的名字,也就是咱們製做的這個 RPM 包的原始的語言文件,格式:%{name}-%{version}.tar.gz,也能夠在前面加連接地址
BuildRoot:軟件的臨時安裝根目錄,臨時安裝完成以後打包 RPM 包時會今後目錄選擇文件進行打包,打包完成以後在清理階段會將此目錄刪除
BuildRequires:定義依賴關係,製做 RPM 包的過程所依賴的其餘的軟件包
Requires:定義依賴關係,安裝這個 RPM 包因此來的其餘的軟件包,定義依賴關係的時候,還能夠指定版本號,好比:libpng-devel >= 1.0.20 zlib、bzip2 = %{version}, bzip2-libs =%{version}、perl(Carp)>=3.2
依賴包的格式
Packager:軟件報的製做者,通常寫 做者+<郵箱>
Vendor:製做者所屬的公司或者提供商
%description:詳細的描述信息,能夠寫多段,使用空白行隔開
二、準備階段(The prep section)
%prep:設定 RPM 包的宏、工做環境等等
%setup:解壓軟件包並進入目錄,這個紅還有相關的選項可用,例如,在源代碼解壓後,假設 %setup 宏產生的目錄爲 %{name}-%{version},若是當初打包的源代碼中的目錄不是按照這種格式命名的,可使用-n選項來指定切換目錄:
%setup -q 將 tar 命令的頻繁輸出關閉。
%setup -n newdir 將壓源代碼程序軟件包在 newdir 目錄下解壓。
%setup -c 在解壓源代碼程序軟件包以前先建立目錄。
%setup -bnum 在包含多個源代碼程序軟件包時,將第num個源程序解壓縮。
%setup -T 不使用缺省的解壓縮操做。
三、編譯階段(The build section)
%configure:是系統內置的宏
make %{?_smp_mflages}:%{?_smp_mflages} 判斷有沒有 smp 對稱的多處理器的標誌位,,若是有則使用,不然就不使用
也能夠是
自定義 configure 和使用系統自帶的 make 宏
四、安裝階段(The install section)
直接 make install 安裝
DESTDIR=%{buildroot}:表示安裝到什麼地方,以誰爲起點
也能夠是
%{__rm} -rf %{buildroot}:每次製做過程可能會重複多遍,大多數狀況下,每一遍重複會把上次安裝的刪除,本次在從新安裝,爲了不以前安裝的影響本次安裝,因此先刪除
若是不須要編譯,這裏留空,也可使用 install 命令或者 copy 命令,install 命令比 copy 命令功能更強大、更易用,更容易作精確控制。關於 install 命令的使用,能夠參考 man install 手冊。
五、腳本段(The script section)
%pre:安裝前,在 RPM 包的安裝命令執行以前就要執行的腳本
%post:安裝後,在 RPM 包的安裝完成以後就要執行的腳本
%preun:卸載以前,卸載工做開始以前要執行的腳本
%postun:卸載以後,卸載完成以後要執行的腳本
BUILDROOT/ :全部在 BUILDROOT/ 路徑下生成的文件除了 debug 文件以外通通都必需要作進 RPM 包
六、清理階段(The clean section)
該段無關緊要,就是刪除此前的製做過程所用到的 buildroot
七、文件段(The files section),用於明肯定義 RPM 包應該包含那些文件
全部 files 字段都必須以 %files 開頭,files 字段底下的內容爲包含進來的文件,例如:
%defattr(-, root, root, 0755):定義這些文件的默認權限
%doc:明確說明這些文件是作爲文檔使用的
%config:定義配置文件的路徑及名稱
/usr/local/bin/mysql:定義想包含的 buildroot 路徑下的文件,若是想包含目錄下全部文件,則寫目錄便可
八、版本日誌段(The cheange log)
*:修改時間已經版本號
-:定義修改者
5、編寫 SPEC 文件(這裏咱們以製做 nginx 的 RPM 包爲例)
[Xiaoyu@localhost ~]$ cd rpmbuild/SPECS [Xiaoyu@localhost ~]$ vim nginx.spec
這裏只截取部分截圖,以供參考,下面貼上最終 nginx.spec 文件
Name: nginx Version: 1.14.2 Release: 7%{?dist} Summary: Http Server. Group: Applications/Internet License: BSD URL: http://nginx.org Source0: http://nginx.org/download/%{name}-%{version}.tar.gz Source1: nginx BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: pcre-devel,zlib-devel,openssl-devel,libxslt-devel,gd-devel Requires: pcre,openssl,gd Requires(pre): shadow-utils Requires(post): chkconfig Requires(preun): chkconfig,initscripts Provides: webserver Packager: situxiaoyu Vendor: situxiaoyu@xxx.com %description This guide gives a basic introduction to nginx and describes some simple tasks that can be done with it. It is supposed that nginx is already installed on the reader’s machine. If it is not, see the Installing nginx page. This guide describes how to start and stop nginx, and reload its configuration, explains the structure of the configuration file and describes how to set up nginx to serve out static content, how to configure nginx as a proxy server, and how to connect it with a FastCGI application. %prep %setup -q %build ./configure \ --prefix=/usr/local/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/usr/local/nginx/config/nginx.conf \ --error-log-path=/var/log/wwwlogs/nginx_error.log \ --http-log-path=/var/log/wwwlogs/nginx_access.log \ --pid-path=/usr/local/nginx/var/run/nginx.pid \ --lock-path=/usr/local/nginx/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_degradation_module \ --with-http_v2_module \ --with-http_sub_module \ --with-pcre make %{?_smp_mflags} %pre if [ $1 == 1 ];then useradd -s /bin/false -r nginx 2>/dev/null || : fi %post if [ $1 == 1 ];then chkconfig --add %{name} service %{name} start fi %preun if [ $1 == 0 ];then service %{name} stop >/dev/null 2>&1 chkconfig --del %{name} userdel nginx groupdel nginx fi %postun %{__rm} -rf /usr/local/nginx %{__rm} -rf /etc/init.f/nginx %{__rm} -rf /var/log/wwwlogs %{__rm} -rf /var/log/nginx %{__rm} -rf /var/run/nginx %install %{__rm} -rf %{buildroot} make install DESTDIR=%{buildroot} install -p -d -m 0755 %{buildroot}/var/log/wwwlogs install -p -d -m 0755 %{buildroot}/var/run/nginx install -p -d -m 0755 %{buildroot}/var/log/nginx install -p -d -m 0755 %{buildroot}/usr/local/nginx/var/run install -p -d -m 0755 %{buildroot}/usr/local/nginx/var/lock install -p -D -m 0755 %{SOURCE1} %{buildroot}/etc/rc.d/init.d/nginx install -p -D -m 0755 %{SOURCE1} %{buildroot}/etc/init.d/nginx %clean %{__rm} -rf %{buildroot} %files %defattr(-, root, root, 0755) %doc LICENSE CHANGES README %{_sbindir}/%{name} %dir /var/run/nginx %dir /var/log/nginx %dir /usr/local/nginx/config %config(noreplace) /usr/local/nginx/config/fastcgi.conf %config(noreplace) /usr/local/nginx/config/fastcgi_params %config(noreplace) /usr/local/nginx/config/koi-utf %config(noreplace) /usr/local/nginx/config/koi-win %config(noreplace) /usr/local/nginx/config/mime.types %config(noreplace) /usr/local/nginx/config/nginx.conf %config(noreplace) /usr/local/nginx/config/scgi_params %config(noreplace) /usr/local/nginx/config/uwsgi_params %config(noreplace) /usr/local/nginx/config/win-utf %config(noreplace) /usr/local/nginx/config/fastcgi.conf.default %config(noreplace) /usr/local/nginx/config/fastcgi_params.default %config(noreplace) /usr/local/nginx/config/mime.types.default %config(noreplace) /usr/local/nginx/config/nginx.conf.default %config(noreplace) /usr/local/nginx/config/scgi_params.default %config(noreplace) /usr/local/nginx/config/uwsgi_params.default #%attr(0755, root, root) %{_initrddir}/%{name} %attr(0755, root, root) /etc/rc.d/init.d/nginx %attr(0755, root, root) /etc/init.d/nginx /usr/local/nginx/html/50x.html /usr/local/nginx/html/index.html %changelog * Mon Dec 17 2018 nginx.org <situxiaoyu@xxx.com> - 1.14.2-1 - Install version
說明:此文件可根據我的安裝需求進行自定義修改
6、構建RPM包(咱們先進行分段執行)
一、執行 rpmbuild -bp nginx.spec(執行到%prep段),提示咱們沒有安裝依賴包(rpmbuild 命令會自動檢查依賴關係)
咱們根據提示,安裝所需的依賴包
[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel libxslt-devel gd-devel
二、依賴包安裝完後,在執行一次 rpmbuild -bp nginx.spec 命令,發現正常了,沒有報錯
[Xiaoyu@localhost SPECS]$ rpmbuild -bp nginx.spec
三、上面執行正常,咱們再執行 rpmbuild -bc nginx.spec 命令(執行到%build段),結果又報錯了,以下圖:
[Xiaoyu@localhost SPECS]$ rpmbuild -bc nginx.spec
如上圖:
通常狀況下,咱們不會太在乎圖中 1 的部分的 nginx 選項問題,而是直接查找 二、3 部分的錯誤緣由。可是,在這裏,若是咱們沒有認真看的話,是很難肯定爲何會報錯,其實仔細看一下,發現之因此報錯,就是由於咱們寫的 nginx 編譯參數無效,刪掉該無效參數便可。
四、刪除報錯中提示的參數,咱們再執行 rpmbuild -bc nginx.spec 命令,發現一切正常,以下圖:
五、既然上一步沒有問題了,咱們就開始進行下一步,執行 rpmbuild -bi nginx.spec 命令
發現上圖所示錯誤,同第三步同樣的分析方法,只是這裏是找不到文件或目錄,咱們再檢查下 nginx.spec 文件,發現咱們的 %build 段 --sbin-path 路徑定義錯了,改爲 --sbin-path=/usr/bin/nginx 便可
六、再次執行 rpmbuild -bi nginx.spec 命令
如上圖,又報錯了,提示存在未打包的文件,根據提示,未打包的均爲配置文件,咱們將提示中的文件所有添加到 nginx.spec 文件的 files 段中去,以下圖
%dir:表示後面的內容是一個目錄
%config:表示該文件爲配置文件,文件被覆蓋爲新版本文件,原修改後的文件保存爲*.rpmsave
noreplace:表示文件不被覆蓋,新rpm包裏的文件被保存爲 *.rpmnew
七、添加完畢後,再執行一次上面的 rpmbuild -bi nginx.spec 命令
結果如上圖,提示沒有打包 /usr/local/nginx/html/50x.html、/usr/local/nginx/html/index.html 這兩個文件,那麼咱們再把這兩個文件添加到 nginx.spec 文件的 files 段中去
如上圖,添加完後保存退出,從新執行 rpmbuild -bi nginx.spec 命令
我滴個乖乖,此次終於成功了,不容易啊,懷着激動的當心情,咱們開始進行下一步,打包 RPM 包。
既然都已經成功了,那咱們就開是打包 RPM 包吧,執行 rpmbuild -bb nginx.spec 命令
如上圖所示,順利完成,到 RPMS 目錄中查看一下是否有生成 RPM 包
[Xiaoyu@localhost SPECS]$ cd ../RPMS/x86_64/ [Xiaoyu@localhost x86_64]$ ll
如 上圖,發現有生成兩個包,一個帶 debuginfo ,一個不帶,其實咱們能用到的是沒帶 debuginfo 的那個包,帶 debuginfo 的包是用來調試的,咱們在此能夠忽略。
八、RPM 包既然已經生成了,那咱們安裝一下唄,看看咱們本身製做的 RPM 包可否安裝成功
[root@localhost x86_64]# rpm -ivh nginx-1.14.2-1.el7.x86_64.rpm
惋惜啊,如上圖,安裝成功,可是啓動報錯,根據報錯內容,咱們大概能知道 2 個問題
①、沒有服務啓動的腳本文件
②、啓動服務的命令有誤(命令有誤,是由於沒有啓動腳本)
既然知道存在這兩個問題,咱們就好下手了,再次編輯 nginx.spec 文件
首先,如上兩圖,添加 source 源,而且安裝(注意:這裏再引用 Source 的時候,必需要大寫,這是約定的,若是不大寫,則會報錯。固然,安裝可沒必要寫兩條,有其中一條就行。),再以下圖,將兩個文件添加到 files 段中。
%attr:表示定義單個文件的屬性,若是不寫,就繼承了默認屬性
其次切換到 SOURCES 目錄下編寫服務啓動的腳本文件(此時,還腳本文件能夠隨便命名,可是安裝後,必須爲 nginx。)
[root@localhost SOURCES]# vim nginx #! /bin/sh # chkconfig: 2345 55 25 # Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and # run 'update-rc.d -f nginx defaults', or use the appropriate command on your # distro. For CentOS/Redhat run: 'chkconfig --add nginx' ### BEGIN INIT INFO # Provides: nginx # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO # Author: licess # website: https://lnmp.org PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=nginx NGINX_BIN=/usr/sbin/$NAME CONFIGFILE=/usr/local/nginx/config/$NAME.conf PIDFILE=/usr/local/nginx/var/run/$NAME.pid if [ -s /bin/ss ]; then StatBin=/bin/ss else StatBin=/bin/netstat fi case "$1" in start) echo -n "Starting $NAME... " if $StatBin -tnpl | grep -q nginx;then echo "$NAME (pid `pidof $NAME`) already running." exit 1 fi $NGINX_BIN -c $CONFIGFILE if [ "$?" != 0 ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Stoping $NAME... " if ! $StatBin -tnpl | grep -q nginx; then echo "$NAME is not running." exit 1 fi $NGINX_BIN -s stop if [ "$?" != 0 ] ; then echo " failed. Use force-quit" exit 1 else echo " done" fi ;; status) if $StatBin -tnpl | grep -q nginx; then PID=`pidof nginx` echo "$NAME (pid $PID) is running..." else echo "$NAME is stopped." exit 0 fi ;; force-quit|kill) echo -n "Terminating $NAME... " if ! $StatBin -tnpl | grep -q nginx; then echo "$NAME is is stopped." exit 1 fi kill `pidof $NAME` if [ "$?" != 0 ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop sleep 1 $0 start ;; reload) echo -n "Reload service $NAME... " if $StatBin -tnpl | grep -q nginx; then $NGINX_BIN -s reload echo " done" else echo "$NAME is not running, can't reload." exit 1 fi ;; configtest) echo -n "Test $NAME configure files... " $NGINX_BIN -t ;; *) echo "Usage: $0 {start|stop|restart|reload|status|configtest|force-quit|kill}" exit 1 ;; esac
說明:此配置文件必須按照 spec 文件的設置來修改。
最後再切換到 SPECS 目錄,執行一次 rpmbuild -bb nginx.spec 命令
九、再次安裝咱們上一步生成的 RPM 包
[root@localhost x86_64]# rpm -ivh nginx-1.14.2-1.el7.x86_64.rpm
如上圖,成功了,查看下 nginx 進程和端口是否存在
如上圖,端口和服務均存在,安裝正常。
十、Nginx 的 RPM 包整合 php
在實際環境中,咱們每每要將 nginx 和 php 搭配使用,也就是傳說的 lnmp 環境,可是咱們以前所製做的 nginx 的 RPM 包是不能鏈接 php 的,由於咱們沒有對 php 的環境進行相關定義,所以咱們須要從新制做 RPM 包,在本次製做中咱們加入 params 文件。
編輯 params 文件
[Xiaoyu@localhost SPECS]$ vim ../SOURCES/nginx.params fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name;
從新編輯 nginx.spec 文件,在特定的爲止加入如下內容
Source2: nginx.params %install mv %{buildroot}/usr/local/nginx/config/fastcgi_params %{buildroot}/usr/local/nginx/config/fastcgi_params.oldinstall -p -D -m 0644 %{SOURCE2} %{buildroot}/usr/local/nginx/config/fastcgi_params %files %config(noreplace) /usr/local/nginx/config/fastcgi_params.old %attr(0655, root, root) /usr/local/nginx/config/fastcgi_params
最終完整版的 nginx.spec 文件粘貼以下:
Name: nginx Version: 1.14.2 Release: 2%{?dist} Summary: Http Server. Group: Applications/Internet License: BSD URL: http://nginx.org Source0: http://nginx.org/download/%{name}-%{version}.tar.gz Source1: nginx Source2: nginx.params BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: pcre-devel,zlib-devel,openssl-devel,libxslt-devel,gd-devel Requires: pcre,openssl,gd Requires(pre): shadow-utils Requires(post): chkconfig Requires(preun): chkconfig,initscripts Provides: webserver Packager: situxiaoyu Vendor: situxiaoyu@.com %description This guide gives a basic introduction to nginx and describes some simple tasks that can be done with it. It is supposed that nginx is already installed on the reader’s machine. If it is not, see the Installing nginx page. This guide describes how to start and stop nginx, and reload its configuration, explains the structure of the configuration file and describes how to set up nginx to serve out static content, how to configure nginx as a proxy server, and how to connect it with a FastCGI application. %prep %setup -q %build ./configure \ --prefix=/usr/local/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/usr/local/nginx/config/nginx.conf \ --error-log-path=/var/log/wwwlogs/nginx_error.log \ --http-log-path=/var/log/wwwlogs/nginx_access.log \ --pid-path=/usr/local/nginx/var/run/nginx.pid \ --lock-path=/usr/local/nginx/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_degradation_module \ --with-http_v2_module \ --with-http_sub_module \ --with-pcre make %{?_smp_mflags} %pre if [ $1 == 1 ];then useradd -s /bin/false -r nginx 2>/dev/null || : fi %post if [ $1 == 1 ];then chkconfig --add %{name} service %{name} start fi %preun if [ $1 == 0 ];then service %{name} stop >/dev/null 2>&1 chkconfig --del %{name} userdel ngix groupdel nginx fi %postun %{__rm} -rf /usr/local/nginx %{__rm} -rf /etc/init.f/nginx %{__rm} -rf /var/log/wwwlogs %{__rm} -rf /var/log/nginx %{__rm} -rf /var/run/nginx %install %{__rm} -rf %{buildroot} make install DESTDIR=%{buildroot} install -p -d -m 0755 %{buildroot}/var/log/wwwlogs install -p -d -m 0755 %{buildroot}/var/run/nginx install -p -d -m 0755 %{buildroot}/var/log/nginx install -p -d -m 0755 %{buildroot}/usr/local/nginx/var/run install -p -d -m 0755 %{buildroot}/usr/local/nginx/var/lock install -p -D -m 0755 %{SOURCE1} %{buildroot}/etc/rc.d/init.d/nginx install -p -D -m 0755 %{SOURCE1} %{buildroot}/etc/init.d/nginx mv %{buildroot}/usr/local/nginx/config/fastcgi_params %{buildroot}/usr/local/nginx/config/fastcgi_params.old install -p -D -m 0644 %{SOURCE2} %{buildroot}/usr/local/nginx/config/fastcgi_params %clean %{__rm} -rf %{buildroot} %files %defattr(-, root, root, 0755) %doc LICENSE CHANGES README %{_sbindir}/%{name} %dir /var/run/nginx %dir /var/log/nginx %dir /usr/local/nginx/config %config(noreplace) /usr/local/nginx/config/fastcgi.conf %config(noreplace) /usr/local/nginx/config/fastcgi_params %config(noreplace) /usr/local/nginx/config/fastcgi_params.old %config(noreplace) /usr/local/nginx/config/koi-utf %config(noreplace) /usr/local/nginx/config/koi-win %config(noreplace) /usr/local/nginx/config/mime.types %config(noreplace) /usr/local/nginx/config/nginx.conf %config(noreplace) /usr/local/nginx/config/scgi_params %config(noreplace) /usr/local/nginx/config/uwsgi_params %config(noreplace) /usr/local/nginx/config/win-utf %config(noreplace) /usr/local/nginx/config/fastcgi.conf.default %config(noreplace) /usr/local/nginx/config/fastcgi_params.default %config(noreplace) /usr/local/nginx/config/mime.types.default %config(noreplace) /usr/local/nginx/config/nginx.conf.default %config(noreplace) /usr/local/nginx/config/scgi_params.default %config(noreplace) /usr/local/nginx/config/uwsgi_params.default #%attr(0755, root, root) %{_initrddir}/%{name} %attr(0755, root, root) /etc/rc.d/init.d/nginx %attr(0755, root, root) /etc/init.d/nginx %attr(0655, root, root) /usr/local/nginx/config/fastcgi_params /usr/local/nginx/html/50x.html /usr/local/nginx/html/index.html %changelog * Tue Dec 18 2018 nginx.org <situxiaoyu@xx.com> - 1.14.2-2 - Install version * Mon Dec 17 2018 nginx.org <situxiaoyu@xx.com> - 1.14.2-1 - Install version
通過以上不停的嘗試踩坑與填坑,我想咱們應該可以製做簡單 RPM 包了,孰能生巧,作的多了,咱們也就天然明白了
7、總結
RPM 包的製做,關鍵在於 spec 文件的編寫,對於 spec 文件如何編寫,咱們剛開始不會,能夠照着例子邊寫邊測,通常來講,若是有問題,測試時系統都能給出比較明確的錯誤緣由,只要咱們仔細的去發現,當不能被表象所迷惑。