歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> CentOS 7基礎教程之 RPM打包

CentOS 7基礎教程之 RPM打包

日期:2017/2/28 13:46:13   编辑:Linux教程

CentOS 7基礎教程之 RPM打包

一、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目錄下。

更多CentOS相關信息見CentOS 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=14

Copyright © Linux教程網 All Rights Reserved