1 準備打包環境nginx
執行以下命令安裝rpmbuild和rpmdevtoolsweb
#yum install rpm-build
#yum install rpmdevtoolscentos
#yum install rpm-develide
執行以下命令來生成rpmbuild的工做目錄工具
#rpmdev-setuptree測試
工做目錄結構以下,ui
~/rpmbuild
~/rpmbuild/SOURCES #放置打包資源,包括源碼打包文件和補丁文件等
~/rpmbuild/SPECS #放置SPEC文檔
~/rpmbuild/BUILD #打包過程當中的工做目錄
~/rpmbuild/RPMS #存放生成的二進制包
~/rpmbuild/RPMS/i386 #存放生成的i386結構包
~/rpmbuild/SRPMS #存放生成的源碼包spa
提示:rpmdev-setuptree命令默認將再當前用戶主目錄下建立一個RPM構建根目錄結構,若是須要改變次默認位置,能夠修改配置文件:~/.rpmmacros中變量_topdir對應的值便可。orm
二、載源碼包到SOURCES目錄,不須要解壓server
cd SOURCES/
wget http://nginx.org/download/nginx-1.2.1.tar.gz
三、撰寫Spec文件
SPEC撰寫是打包RPM的核心,也算是最難的一步,好在咱們能夠從參照一個簡單的模板文件開始,在能夠實現基本功能的基礎上再一步一步的擴充文檔內容,直至徹底達到要求。下面是一個簡單的SPEC文檔,其中包括了一些說明信息(注:#後面的內容爲說明信息),該SPEC文檔是對一個測試的軟件項目hellorpm寫的,hellorpm軟件包編譯後僅有一個執行文件、一個手冊文件和一個項目說文件。
nginx.spec文檔的內容以下:
#
# Example spec file for nginx
#
#軟件包簡要介紹
Summary: high performance web server
#軟件包的名字
Name: nginx
#軟件包的主版本號
Version: 1.2.1
#軟件包的次版本號
Release: 1.el5.ngx
#受權協議
License: 2-clause BSD-like license
#軟件分類
Group: Applications/Server
Source: http://nginx.org/download/nginx-1.2.1.tar.gz
URL: http://nginx.org/
Distribution: Linux
Packager: Kevinli
#軟件包的內容介紹
%description
nginx [engine x] is a HTTP and reverse proxy server, as well as
a mail proxy server
#表示預操做字段,後面的命令將在源碼代碼BUILD前執行
%prep
rm -rf $RPM_BUILD_DIR/nginx-1.2.1
zcat $RPM_SOURCE_DIR/nginx-1.2.1.tar.gz | tar -xvf -
#BUILD字段,將經過直接調用源碼目錄中自動構建工具完成源碼編譯操做
%build
cd nginx-1.2.1
#調用源碼目錄中的configure命令
./configure --prefix=/usr/local/nginx
#在源碼目錄中執行自動構建命令make
make
#安裝字段
%install
cd nginx-1.2.1
#調用源碼中安裝執行腳本
make install DESTDIR=%{buildroot}
%preun
if [ -z "`ps aux | grep nginx | grep -v grep`" ];then
killall nginx >/dev/null
exit 0
fi
#文件說明字段,聲明多餘或者缺乏都將可能出錯
%files
#聲明/usr/local/nginx將出如今軟件包中
/usr/local/nginx
四、構建RPM包
開始構建操做,首先進入到當前用戶的rpmbuild根目錄
#cd ~/rpmbuild/
#rpmbuild -ba SPECS/nginx.spec
提示:-ba表示build all,即生成包括二進制包和源代碼包的全部RPM包,若是正常的話,rpmbuild將正常退出,同時在RPMS目錄和SRPMS目錄中將生成對應的RPM包。
問題:
系統 centos6.0 x86_64
在centos 6.0上使用rpmbuild製做rpm包會出現File not found: /root/rpmbuild/BUILDROOT/…的錯誤,看是centos 6中的rpmbuild topdir已經改變,爲了能兼容centos 5的spec文件,須要對topdir進行修改:
編輯/usr/lib/rpm/macros文件:
%_topdir %{getenv:HOME}/rpmbuild
修改成:
%_topdir %{_usrsrc}/redhat
另外還須要定義buildroot
在spec文件中的make install後面加上DESTDIR=%{buildroot},即:
make install DESTDIR=%{buildroot}
參考文檔: