RPM 包製作

RPM是RedHat Package Manager(RedHat軟件包管理工具)的縮寫,是一種用於互聯網下載包的打包及安裝工具,它包含在某些Linux分發版中。它生成具有.RPM擴展名的文件。使用rpm安裝軟件和管理軟件非常的方便。而這節我們不是介紹如何使用rpm安裝或管理軟件,而是如何把源碼製作成rpm包。
下面我們以製作nginx的rpm開始介紹其製作方法。以下操作在centos-5 32系統進行。

製作nginx的rpm例子

1、建立目錄結構

/usr/src/redhat/SOURCES — 存放源代碼,補丁,圖標等文件。
/usr/src/redhat/SPECS — 存放用於管理rpm製作進程的spec文件。
/usr/src/redhat/BUILD — 解壓後的文件存放在這裏。
/usr/src/redhat/RPMS — 存放由rpmbuild製作好的二進制包。
/usr/src/redhat/SRPMS —存放由rpmbuild製作好的源碼包。

  1. mkdir -p /usr/src/redhat

  2. cd /usr/src/redhat

  3. mkdir SOURCES SPECS BUILD RPMS SRPMS

2、下載源碼包

下載源碼包到SOURCES目錄,不需要解壓。

  1. cd /usr/src/redhat/SOURCES

  2. wget http://nginx.org/download/nginx-1.2.1.tar.gz

3、創建Spec文件

  1. cd /usr/src/redhat/SPECS

  2. vi nginx.spec

內容如下:

  1. #

  2. # Example spec file for nginx

  3. #

  4. Summary: high performance web server

  5. Name: nginx

  6. Version: 1.2.1

  7. Release: 1.el5.ngx

  8. License: 2-clause BSD-like license

  9. Group: Applications/Server

  10. Source: http://nginx.org/download/nginx-1.2.1.tar.gz

  11. URL: http://nginx.org/

  12. Distribution: Linux

  13. Packager: zhumaohai <[email protected]>

  14.  

  15. %description

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

  17. a mail proxy server

  18. %prep

  19. rm -rf $RPM_BUILD_DIR/nginx-1.2.1

  20. zcat $RPM_SOURCE_DIR/nginx-1.2.1.tar.gz | tar -xvf -

  21. %build

  22. cd nginx-1.2.1

  23. ./configure --prefix=/usr/local/nginx

  24. make

  25. %install

  26. cd nginx-1.2.1

  27. make install

  28. %preun

  29. if [ -z "`ps aux | grep nginx | grep -v grep`" ];then

  30. killall nginx >/dev/null

  31. exit 0

  32. fi

  33. %files

  34. /usr/local/nginx

4、開始RPM製作

在製作RPM包之前需要安裝必要的工具,如rpmbuild,gcc等。

  1. yum install gcc rpm-build pcre-devel

  1. cd /usr/src/redhat/SPECS/

  2. rpmbuild -bb nginx.spec

一切順利的話,會生成nginx的rpm包,/usr/src/redhat/RPMS/i386/nginx-1.2.1-1.el5.ngx.i386.rpm。

5、測試rpm包

  1. rpm -ivh /usr/src/redhat/RPMS/i386/nginx-1.2.1-1.el5.ngx.i386.rpm

spec文件解釋

從以上的簡單例子可以看出,製作rpm包最重要的還是spec文件,下面解釋一下例子所用到的指令。
#:以#開頭是註釋,rpm會忽略它。
Summary:簡單描述軟件。
Name :定義rpm的名稱。
Version: 定義軟件版本
Release: 發行版本
License: 定義許可證
Group: 軟件分類
Source: 源碼下載地址
URL: 源碼相關網站
Distribution: 發行版系列
Packager: 打包人的信息

%description:軟件詳細描述,可多行
%prep :軟件編譯之前的處理,如解壓。
%build :開始編譯軟件,如make
%install :開始安裝軟件,如make install
%files :指定哪些文件需要被打包,如/usr/local/nginx
%preun :定義卸載之前的動作,如殺掉進程。
這裏只介紹了幾個常用的tag,更詳細的請參考:http://www.rpm.org/max-rpm/ch-rpm-inside.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章