0:說明本文以centOS6.5下打包asterisk的安裝包為例來說明問題。請讀者諸君舉一反三。謝謝!1.環境的準備:
安裝環境時目前使用者要有系統管理許可權。但是在製作RPM包時請一定要用無系統管理許可權的使用者來進行操作。在開始一切的準備工作之前,請先保證您的工作環境下已經安裝了gcc和make。關於這兩個工具的安裝方法,這裡不再贅述。
1.1安裝組件
安裝rpm-build,用如下命令:
sudo yum install rpm-build
安裝redhat-rpm-config,用如下命令:
sudo yum install redhat-rpm-config
PS:如果工作人員認為有必要的話可以安裝rpmdev-newspec。這個小工具是用來產生.spec檔案模板的。因為不是必選工具所以關於它的安裝和使用方法在這裡就不再贅述。
1.2在使用者的主目錄下建立必須的檔案夾和檔案
用下面的命令建立必要的檔案夾,其中BUILD是用來儲存打包過程中產生的臨時檔案用的;RPMS用來儲存產生的二進位RPM包;SOURCES用來儲存打包用的源檔案(包括壓縮檔);SPECS用來儲存.spec指令碼;SRPMS用來儲存產生的原始碼rpm包。
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
用下面的命令產生rpmbuild所需要的宏檔案,這個檔案裡包含的是.spec中要引用的相對路徑。檔案裡的內容可以手動設定和編寫,格式符合要求即可。
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
2.製作.spec檔案
這裡用我們製作asterisk的二進位rpm包為例來說明製作.spec檔案的方法。所有的.spec檔案都可以參照和類比這種方式來製作。
2.1.spec檔案的格式
用如下命令產生asterisk.spec
cd ~/rpmbuild
vi ./SPECS/asterisk.spec
我將如下的內容輸入到了檔案中。
Name: asterisk
Version: 1.8.15
Release: 1%{?dist}
Summary: Design by wanzhao
Group: Applications/Internet
License: GPL
URL: www.wanzhao.com
Source0: certified-asterisk-1.8.15-current.tar.gz
%description
Design by Wanzhao
%prep
cd $RPM_BUILD_DIR
tar xzvf ../SOURCES/certified-asterisk-1.8.15-current.tar.gz
%build
cd $RPM_BUILD_DIR/certified-asterisk-1.8.15-cert5
./configure
make
%install
cd $RPM_BUILD_DIR/certified-asterisk-1.8.15-cert5
make install
make samples
cd ../BUILDROOT
cp -fr /etc/asterisk ./asterisk-1.8.15-1.x86_64/
%files
/asterisk/
%clean
rm -rf $RPM_BUILD_DIR/certified-asterisk-1.8.15-cert5
2.2asterisk內容說明
Name:
軟體包的名字,最終RPM軟體包是用該名字與版本號碼,釋出號及體系號來命名軟體包的。
Version:
軟體版本號碼。僅當軟體包比以前有較大改變時才增加版本號碼。
Release:
軟體包釋出號。一般我們對該軟體包做了一些小的補丁的時候就應該把釋出號加1。
Copyright:
軟體包所採用的著作權規則。具體有:GPL(自由軟體),BSD,MIT,Public Domain(公用域),Distributable(貢獻),commercial(商業),Share(共用)等,一般的開發都寫GPL。
Group:
軟體包所屬類別,具體類別有:
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硬體支援)
Source:
來源程式軟體包的名字。如果有多個檔案或部分可以寫作:Source0……;source1……;Source3……;……
%description:
軟體包詳細說明,可寫在多個行上。
%prep
這個段是預先處理段,通常用來執行一些解開來源程式包的命令,為下一步的編譯安裝作準備。%prep和下面的%build,%install段一樣,可以執行shell命令。如我們在就加入了tar命令、cd命令等。
% build段
本段是編譯段,所要執行的命令為產生軟體包服務,如./configure、make 命令。
%install段
本段是安裝段,其中的命令在安裝軟體包時將執行,如make install等命令。根據不同的軟體,命令會有所不同。
%files段
本段是檔案段,用於定義產生的rpm包所包含的檔案。所以要打到rpm包裡的檔案都要在這裡列出來。如果缺少這個段,則無法產生二進位的rpm檔案。
%clean段
本段是生來清理由前面的步驟產生的垃圾檔案的。同樣,這個段由shell命令組成。
3.打包
如果只打包二進位rpm包可以用下面的命令:
rpmbuild –bb ****.spec
如果只打包原始碼rpm包可以用如下命令:
rpmbuild –bs ****.spec
如果二進位rpm包和原始碼rpm包都需要,則用如下命令:
rpmbuild –ba ****.spec
4.參考資料:
http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment
http://tecadmin.net/create-rpm-of-your-own-script-in-centosredhat/
https://fedoraproject.org/wiki/How_to_create_a_GNU_Hello_RPM_package
http://www.ibm.com/developerworks/cn/linux/l-rpm/