1. 程式人生 > >手把手帶你定製自己的nginx rpm包

手把手帶你定製自己的nginx rpm包

注意: 大家在生產環境當中不要用yum remove刪除任何軟體,因為yum romove會把很多軟體的依賴都給刪除,如果其他軟體也有這個依賴,那啊哦~~就都不能用了。
  一定要用rpm -e

一、RPM的概述及用途

RPM包管理工具就是在linux中被廣泛使用的軟體包管理工具

1、用途:

(1) 快速安裝,刪除,升級和管理軟體,也支援線上安裝和升級軟體

(2)通過RPM包管理器能知道軟體包包含哪些檔案,也能知道系統中的某個檔案屬於哪個軟體包

(3)可以在查詢系統中的軟體包是否安裝以及其版本

(4)作為開發者可以把自己的程式打包為RPM包釋出,減少軟體安裝前的配置編譯所花費的時間

(5)依賴性檢查,檢視是否有軟體包由於不相容擾亂了系統

2、RPM的概念

(1)RPM包: 簡單來說,就是把已經編譯好的二進位制程式碼整合到一個檔案裡面,並且加入一些判斷,依賴或衝突的軟體包,安裝前或後自動執行的指令碼等

(2)相容性: 由於RPM包在製作的時候,實在特定的發行版本或硬體上編譯的,所以,不同發行版,或同一發行不同版本號的RPM包一般都是不能互相相容

(3)大部分的軟體作業在釋出原始碼的時候,也會提供rpm或.spec檔案,除非沒有.spec檔案,否則不建議自行編寫,並且在編寫的時候,應使用標準巨集,以提高可讀性。

3、rpm有兩種做法

(1) 在rpm裡面編譯 make make install
  編譯也就是說我們把原始碼傳入rpm包 在rpm包裡面編譯 編譯的好處在於我可以不用管安裝機器的版本,比如我可以在centos 6.3-6.8都可以使用 。

(2)我拿一臺機器上面安裝好了二進位制檔案打一個包,安裝到我們的rpm包裡面 。
  一般來說同一個版本的菜可以使用centos6.2 6.3,而且我們需要自己解決依賴關係 我們一般在初始化操作裡面解決我們的依賴關係 。

二、製作nginx的rpm包

目的:製作rpm包的目的就是把安裝的過程封裝起來,在執行rpm的時候會執行我們封裝好的操作.

注意:在製作之前我們首先得知道要什麼和準備做什麼,養成每次編譯或安裝後都進行echo $?檢查是否存在錯誤

1、rpm的命令安裝和rpm工作目錄
2、nginx的手動編譯(因為我們要自己定製化)和安裝
3、rpmbuild目錄下SOURCES中要存放我們需要製作nginx rpm包所需的資源
4、vim編譯nginx的spec檔案
5、打包並測試,完成rpm包製作完成

  下面我們開始製作rpm包,現有環境純淨centos6.5,只安裝有vim和lrzsz。

1、安裝rpm工具

(1)安裝 rpmbuild,rpmdevtools
yum install -y rpm-build rpmdevtools

  安裝完成後可使用rpm的各命令

(2)生成rpmbuild的工作目錄
rpmdev-setuptree

目錄結構:

  SOURCES ————存放原始碼,補丁,圖示等檔案

  SPECS ————存放用於管理rpm製作過程的spec檔案 打包 製作過程

  BUILD ————存放解壓後的檔案

  RPMS ————存放製作好的二進位制包

  SRPMS ————存放由rpmbuils製作好的原始碼包

(3)下載原始碼到SOURCES目錄下

  1. 編譯pcre

cd /opt  #跳轉到opt目錄

rz  #上傳nginx-1.10.3.tar.gz   pcre-8.10.tar.gz

tar xvf pcre-8.10.tar.gz   #解壓縮pcre-8.10.tar.gz

cd pcre-8.10/  #進入解壓的pcre資料夾中

./configure --prefix=/usr/local/services/pcre  #./configure對安裝的軟體進行配置,檢查當前的環境是否滿足要安裝軟體的依賴關係。--prefix=指定安裝路徑,不指定prefix,則可執行檔案預設放在/usr /local/bin,庫檔案預設放在/usr/local/lib,配置檔案預設放在/usr/local/etc。

make && make install  #在./configuration生成了Makefile之後執行編譯安裝

ldconfig #ldconfig是一個動態連結庫管理命令,ldconfig通常在系統啟動時執行,現安裝了一個新的動態連結庫時,就需要手工執行這個命令。

  2.編譯nginx

  groupadd www   #新增www使用者組

  useradd -g www www -s /dev/null  #新增使用者www

  mkdir -p /data/htdocs/www   #建立www目錄

  chmod +w /data/htdocs/www   #對目錄進行授權

  chown -R www:www /data/htdocs/www  #就是把www的使用者名稱和使用者組改成www和www(只修改了www的屬組).

  cd /opt #跳轉到opt目錄

  tar xvf nginx-1.10.3.tar.gz  #解壓nginx壓縮包

 ./configure --user=www --group=www --prefix=/usr/local/services/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/opt/pcre-8.10 
   #編譯這裡特別主要把--with-pcre=/opt/pcre-8.10加進

  make && make install   #執行編譯安裝

  mkdir -p /data/logs  #建立日誌目錄

  chmod +w /data/logs  #對目錄進行授權

  chown -R www:www /data/logs  #就是把logs的使用者名稱和使用者組改成www和www 

 3.安裝依賴

yum -y install gcc* openssl*  

 4.在SPEC目錄下建立spec檔案

cd ~/rpmbuild/SPECS

vim nginx.spec #建立nginx的spec檔案並進行編譯

  檔案內容如下:

Name:nginx  #軟體包名稱,後面可使用%{name}引用  

Version:1.10.3 #軟體的版本號,與原始碼包一致  

Release:1   #釋出序列號  

Summary:for centos6.5x86_64 #軟體包的內容概要  

Group:Development/Tools #軟體分組  

License:GPL     #軟體授權方式  

URL:http://www.baidu.com    #軟體的主頁  

Source0:%{name}-%{version}.tar.gz   #原始碼包  

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-BuildRoot   #這個安裝或編譯時使用的“虛擬目錄”  

Prefix: %{_prefix}  #為了解決今後安裝rpm包時,並不一定把軟體安裝到rpm中打包的目錄。必須在這裡定義該標識,並在編寫%install指令碼的時候引用,才能實現rpm包安裝時重新指定位置的功能。  

Prefix: %{_sysconfdir}  #%{_prefix}指/usr,而對其他的檔案,例如/etc下的配置檔案,則需要用%{sysconfdir}標識。  

%define wwwpath /data/htdocs/www #後面在使用這個地址時就可以直接引用%{wwwpath}  

%define logspath /data/logs #後面在使用這個地址時就可以直接引用%{logspath}  

%description    #軟體包詳述 doc  

nginx [engine x] is a HTTP and reverse proxy server, as well as a mail proxy server  

%prep   #軟體編譯之前的處理,如解壓。  

%setup -q   #開啟軟體包,加選項對軟體包進行解壓處理 去我們的SOURCE目錄去找到原始碼包並解壓  

%install 安裝軟體執行語句  

[ "RPM_BUILD_ROOT" != "/" ] && rm -rf "RPM_BUILD_ROOT"  ##檢視BUILDROOT目錄是否為空,不為空時刪除裡面的內容  

mkdir -p $RPM_BUILD_ROOT/%{_prefix}    #在BUILDROOT目錄中建立/usr目錄  

cp -ar ./* $RPM_BUILD_ROOT%{_prefix} #將當前目錄中的所有檔案及屬性全部複製到這個目錄下  

%post   #rpm安裝後執行的指令碼  

mkdir -p %{wwwpath} #建立/data/htdocs/www目錄  

mkdir -p %{logspath}    #建立/data/logs目錄  

groupadd www #建立新的使用者組  

useradd -g www www -s /dev/null #建立新使用者到指定的使用者組及使用者目錄  

mkdir %{_prefix}/etc/local/services 

mv %{_prefix}/nginx %{_prefix}/local/services/ #將nginx檔案移動到/usr/local/services/目錄下  

mv %{_prefix}/index.html %{wwwpath} #將index.html檔案移動到/data/htdocs/www目錄下  

mv %{_prefix}/check.php %{wwwpath}  #將check.php檔案移動到/data/htdocs/www目錄下  

mv %{_prefix}/infor.php %{wwwpath}  #將infor.php檔案移動到/data/htdocs/www目錄下  

mv %{_prefix}/init/nginx %{_sysconfdir}/init.d/ #將/usr/init/nginx移動到/etc/init.d/目錄下  

ln -s %{_prefix}/local/services/nginx/sbin/* %{_prefix}/local/sbin/ #建立軟連結  

chmod +w %{wwwpath} #給/data/htdocs/www目錄賦予寫許可權  

chown -R www:www %{wwwpath} #修改/data/htdocs/www的所有者和所屬組的  

chmod +w %{logspath}    #給/data/logs目錄賦予寫許可權  

chmod +x %{_sysconfdir}/init.d/nginx #給/etc/init.d/nginx檔案賦予執行許可權 4 r 2 w 1 x  

chown -R www:www %{logspath}    #修改/data/logs的所有者和所屬組的  

chkconfig nginx on  #設定開機啟動  

sed -i "s/ytios_admin/hostname/g" /usr/local/services/nginx/conf/nginx.conf #將這個檔案中的ytios_admin替換為hostname  

%postun #解除安裝後執行的操作  

%{_sysconfdir}/init.d/nginx stop    #讓服務暫停  

sleep 2 #休眠2秒  

rm -f %{_prefix}/local/sbin/nginx #刪除/usr/local/sbin/nginx檔案  

%{_rm} -rf %{_prefix}/local/services/nginx #刪除/usr/local/services/nginx檔案  

%{_rm} -rf %{_sysconfdir}/init.d/nginx #刪除/etc/init.d/nginx檔案  

userdel www -r >/dev/null 2>&1 #刪除www這個使用者  

%files #定義那些檔案或目錄會放入rpm中 這裡會在虛擬根目錄下進行,千萬不要寫絕對路徑,而應用巨集或變量表示相對目錄  

%defattr(-,root,root) #指定包裝檔案的屬性 分別是(mode,owner,group) -表示預設值,對文字檔案是0644 可執行檔案為0755  

%{_prefix}/nginx  

%{_prefix}/index.html  

%{_prefix}/check.php  

%{_prefix}/infor.php  

%{_prefix}/init  

%clean #刪除臨時目錄  

[ "RPM_BUILD_ROOT" != "/" ] && rm -rf "RPM_BUILD_ROOT"  

rm -rf $RPM_BUILD_DIR/%{name}-%{version}  

%changelog #變更日誌  

 5.編譯RPM包

   在/root/rpmbuild/SOURCE建立資料夾以及把編譯好的檔案放進去  
   拷貝一個啟動指令碼 以及我們的測試檔案 

   cd /root/rpmbuild/SOURCE  

   mkdir nginx-1.10.3  

   cd nginx-1.10.3

   cp /usr/local/services/nginx ./ -ar  

   rz  #上傳check.php,index.html,infor.php這些都是自己的一些測試檔案大家要是想改修改可以按自己需求改

   mkdir init

   cd init

   rz  #上傳init資料夾下的nginx檔案  

   cd ..

   cd nginx/conf

   rz  #上傳fcgi.conf檔案  

   cd /root/rpmbuild/SPECE  #進入編譯目錄

   rpmbuild -bb nginx.spec  

做好的rpm包會存放在~/rpmbuild/RPMS/X86_64資料夾中

三、驗證工作成果

新建一臺centos的虛擬機器,然後將我們做好的rpm包拷貝到虛擬機器的/opt目錄下,別忘了安裝rpm。
1、安裝nginx rpm包
  通過命令rpm -ivh 來編譯我們的rpm包
  然後啟動nginx
  這裡寫圖片描述
2、開啟網址測試
  http://IP/index.html
  如果開啟是這樣那麼恭喜你製作成功啦!
  這裡寫圖片描述

在安裝過程中可能會出現一些依賴缺失下面放出我遇到的幾個
1 少了openssl
yum -y install openssl openssl-devel

2 ./configure: error: the HTTP rewrite module requires the PCRE library 安裝pcre-devel解決問題
yum -y install pcre-devel

3 ./configure: error: the HTTP gzip module requires the zlib library.
yum install -y zlib-devel

如果這篇很合你心意 請給個贊!

如有問題可在下方評論,看到一定會回答大家的啦!

相關推薦

手把手定製自己nginx rpm

注意: 大家在生產環境當中不要用yum remove刪除任何軟體,因為yum romove會把很多軟體的依賴都給刪除,如果其他軟體也有這個依賴,那啊哦~~就都不能用了。   一定要用rpm -e 一、RPM的概述及用途 RPM包管理工具就是在li

手把手自己的’比特幣‘(上)

使用區塊鏈進行交易的比特幣以及其他加密貨幣的交易記錄會被按時間順序儲存,並且是公開儲存。通俗的說,區塊鏈是一個公共資料庫,其中新資料儲存在稱為塊的容器中,並被新增到具有過去新增的資料的不可變鏈(因此是塊鏈)。在比特幣和其他加密貨幣的情況下,這些資料是一組交易記錄,當然,資料可以是任何型別的。比如,區塊鏈2.0

利用rpmbuild打包定製屬於自己RPM

       這個是自己寫在CSDN上寫的第一個技術部落格, 因為最近自己在研究rpm打包. 今天把它分享出來哈~~ rpm的優勢就是安裝和後期升級方便快捷,無需再次手動編譯原始碼。節省很多時間。. 這裡已Nginx

手把手畫一個 時尚儀表盤 Android 自己定義View

androi alias 屬性 extend 三角函數 blank xutils content 還在 拿到美工效果圖。咱們程序猿就得畫得一模一樣。 為了不被老板噴,僅僅能多練啊。 聽說你認為前面幾篇都so easy,那今天就帶你做個相對照較復雜的。

【 專欄 】- 手把手如何用nginx開發自己的伺服器

手把手教你如何用nginx開發自己的伺服器 博主希望能夠通過自己的nginx學習經驗,給希望學習nginx的同學一些參考的經驗,這個專欄的目的是教會完全不懂nginx的同學如何利用nginx去開發自己的web伺服器或者代理伺服器

6小時手把手快速做一個自己的Java學生資訊管理系統之Java學生資訊管理系統專案原始碼視訊教程

本視訊教程一共分為四個階段,每個階段都會是上一個階段的擴充套件,每一個階段的系統都可獨立作為一個完整的系統。第一階段是Java學生資訊管理系統,完成了學生資訊的管理、班級資訊的管理、教師資訊的管理、以及

手把手自制Linux系統之六 編譯核心及busybox完成系統定製

手把手帶你自制Linux系統之六 編譯核心及busybox完成系統定製 重新看了一下前面的幾章,發現其實前面的5章一直圍繞一個話題講解 — 如何利用CentOS現有資源組裝一個Linux。這種方式十分拙劣,Linux核心是固化的、initrd沒有充分精簡、命令需要一個一個

fpm定制nginx-rpm

定制 fpm 實驗環境介紹:[[email protected]/* */ ~]# uname -r2.6.32-573.el6.x86_64[[email protected]/* */ ~]# cat /etc/redhat-releaseCentOS release 6.

別怕,手把手撕、拉、扯下SpringMVC的外衣

ons mvc springmvc test stp 實的 per war sdi 提到框架,就不得不提一下看源碼,我們平時總是想求大神帶我們飛,然而看源碼就是一個向大神學習的最直接的一種方式,然而我們每次鼓起勇氣看源碼前是這樣的但是一點開源碼,頓時代碼如洪流湧入,你的內心

Android性能優化:手把手全面了解 內存泄露 & 解決方案

new t 簡單介紹 新建 cti 接口 stat you bit ray . 簡介 即 ML (Memory Leak)指 程序在申請內存後,當該內存不需再使用 但 卻無法被釋放 & 歸還給 程序的現象2. 對應用程序的影響 容易使得應用程序發生內存溢出,即 OO

手把手入坑H5與小程序直播開發視頻課程直播的工作原理教程

直播 H5 微信 第1章 課程介紹對於課程整體以及直播行業的現狀進行介紹第2章 直播工作原理所謂知其然也要知其所以然,只會用別人總結好的東西很難有質的進步,只有深諳背後的工作原理才能進一步吃透到進階。本章從直播協議入手到工作原理詳解,步步為營,化繁為簡,極易吸收。第3章 Video詳解video

Fpm 之 Nginx rpm 制作

fpm nginxFpm 之 Nginx rpm 包制作 一、下載nginx編譯安包機器上 wget http://nginx.org/download/nginx-1.12.2.tar.gz 二、安裝nginx的編譯所需的依賴包 yum -y install pure lib gcc-c++ openss

手把手擼一套Android簡易ORM框架

ORM概念 實體模型建立 註解列 ID 主鍵 自增長 資料表的列

一分鐘理解閉--js面向物件程式設計

上一篇《簡單粗暴地理解js原型鏈--js面向物件程式設計》沒想到能攢到這麼多贊,實屬意外。分享是個好事情,尤其是分享自己的學習感悟。所以網上關於原型鏈、閉包、作用域等文章多如牛毛,很多文章寫得很深入很專業,而我卻喜歡用更簡單方式來解說簡單的事情。 什麼是閉包?  先看一段程式碼:

手把手抓取智聯招聘的“資料分析師”崗位!

前言 很多網友在後臺跟我留言,是否可以分享一些爬蟲相關的文章,我便提供了我以前寫過的爬蟲文章的連結(如下連結所示),大家如果感興趣的話也可以去看一看哦。在本文中,我將以智聯招聘為例,分享一下如何抓取近5000條的資料分析崗資訊。 往期爬蟲連結 上海歷史天氣和空氣質量資料獲取(Pyth

手把手搭建百萬PV網站架構

簡介 PV( page view),即頁面瀏覽量,或點選量;通常是衡量一個網路新聞頻道或網站甚至一條網路新聞的主要指標。對PV的解釋是,一個訪問者在24小時(0點到24點)內到底看了你網站幾個頁面。這裡需要強調:同一個人瀏覽你網站同一個頁面,不重複計算PV量,點100次也算1次。說白了pV就是一個訪問者打開

【AI實戰】手把手訓練自己的目標檢測模型(SSD篇)

目標檢測是AI的一項重要應用,通過目標檢測模型能在影象中把人、動物、汽車、飛機等目標物體檢測出來,甚至還能將物體的輪廓描繪出來,就像下面這張圖,是不是很酷炫呢,嘿嘿 在動手訓練自己的目標檢測模型之前,建議先了解一下目標檢測模型的原理(見文章:大話目標檢測經典模型RCNN、Fast RCN

手把手玩轉 Git

目前國內開發人員普遍都開始使用 Git 進行專案的版本管理,如果說你還在使用 SVN 並且對 Git 一無所知的話,那我的這個 Chat 將會幫助到你。 我將手把手教你入門,並且巡迴漸進的帶入到工作的實際應用中。 在本場 Chat 中我將分享: Git 由來和 Git 的作用以及 Git

Android:手把手 深入讀懂 Retrofit 2.0 原始碼

前言 在Android開發中,網路請求十分常用 而在Android網路請求庫中,Retrofit是當下最熱的一個網路請求庫 Github截圖 今天,我將手把手帶你深入剖析Retrofit v2.0的原始碼,希望你們會喜歡 請儘量在PC端

手把手做專案,3周學會小程式

初衷 自微信小程式出道以後不斷升溫,各行各業都在嘗試使用小程式。所以小編特此把自己編寫小程式過程中遇到的問題,心得,和技巧分享給大家,希望可以幫助在路上和準備上路的“碼”友。 “極客衝頂”是小編在業餘時間編寫的一款答題小程式,期間遇到了很多問題,特此歸納總結,做了一系列的文章分享給大家。為了大家更好的理解小