CentOS 7基礎教程之 RPM打包
1、當目標機中不存在編譯環境時,可以先在本地環境中編譯打包,然後直接在目標機中用rpm -ivh *.rpm安裝即可。
2、當需要在目標機中安裝多個軟件或者增加多個文件時,可以將整體打成RPM包,方便使用。
$cd ~ #進入home目錄
$ sudo yum -y install rpmdevtools #安裝rpm打包所需的工具
$rpmdev-setuptree #生成rpm打包目錄
$cd rpmbuild/SPECS #進入SPECS目錄
$rpmdev-newspec test.spec #生成spec文件模板
$mv your_path/source.tar.gz ../SOURCES #將要打包的源碼以tar.gz的格式移動到SOURCES目錄
此時會在home目錄下生成一個rpmbuild目錄,此目錄下有五個子目錄
BUILD 編譯時所用的暫存目錄
RPMS 放打包好的二進制rpm包
SOURCES 放置源代碼和補丁文件
SPECS 放置spec文件
SRPMS 放置RPM源碼包
RPM打包的關鍵之處就在於spec文件的編寫
1、spec基本信息
Name: 軟件名稱
Version: 軟件版本
Release: 發布次數 如: 1%{?dist}
Summary: 軟件說明
Group: 軟件分組
License: 授權模式,例如 GPL,即自由軟件
URL: 源碼包的URL地址,可隨意填寫
Source0: 源碼包,可指定多個,下面可用%{SOURCE0}變量引用
BuildRoot: 編譯過程中的中間存檔目錄,考慮到多用戶的環境,一般定義為:
%{_tmppath}/%{name}-%{version}-%{release}-root ,
後面可使用$RPM_BUILD_ROOT 方式引用
BuildArch: 平台 %{_arch}
BuildRequires: 編譯過程依賴的工具
Requires: 打包生成的rpm包安裝時所依賴的軟件包
%description 說明文檔
%prep 准備部分,比如創建目錄,解壓源碼包等,可使用%setup內部函數
%build 在BUILD目錄編譯,可使用%configure內部函數,或者其他編譯工具,如cmake, perl等
%install 安裝到BUILDROOT虛擬目錄
%clean 清理文件
%files 將指定的文件添加到rpm包中,文檔類型可用%doc,配置文件可 用%config
%changelog 更新記錄.格式: 第一行 "* 日期 作者 " 第二行 "- 更新內容"
最終的生成的rpm名稱: {Name}-{Version}-{Relesae}-{BuildArch}.rpm
2、spec內部變量
在spec文件運行時,定義的宏會主動讀取/usr/lib/rpm/macros中的變量
RPM_BUILD_DIR ~/rpmbuild/BUILD
RPM_BUILD_ROOT ~/rpmbuild/BUILDROOT
3、spec文件示例(以git為例)
Name: git
Version: 2.10
Release: 1%{?dist}
Summary: this is the test code
License: GPL
URL: http://www.hao123.com
Source0: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-root
BuildRequires: automake
Requires: rpm
%description
%prep
%setup -q
%build
autoconf
./configure --prefix=/opt/git/
make %{?_smp_mflags}
%install
make DESTDIR=$RPM_BUILD_ROOT install
%clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
make clean
%files
%defattr (-,root,root)
/opt/git/
%changelog
4、生成RPM包
$rpmbuild -ba test.spec #生成RPM包
生成的RPM包在rpmbuild/RPMS目錄下。
更多CentOS相關信息見CentOS 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=14