【centos7常用技巧】RPM打包
阿新 • • 發佈:2019-01-01
一、RPM打包的目的
1、當目標機中不存在編譯環境時,可以先在本地環境中編譯打包,然後直接在目標機中用rpm -ivh *.rpm安裝即可。
2、當需要在目標機中安裝多個軟體或者增加多個檔案時,可以將整體打成RPM包,方便使用。
二、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原始碼包
三、spec檔案簡要說明
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目錄下。