RPM包製作:spec文件介紹

參考鏈接:
https://rpmbuildtut.wordpress.com/


spec文件參數介紹

spec文件可以理解爲安裝軟件包時的配置文件,配合rpmbuild命令使用。

運行rpmbuild命令時,通過讀取spec文件,按照spec中配置的參數,來安裝軟件包。

想寫出spec文件,需要了解spec文件中各個參數的具體含義。spec文件參數說明如下。

Name: 軟件包名稱
Version:軟件包主版本號
Release:軟件包次版本號	
Summary:摘要是對軟件包的簡短描述。

License: 授權協議,通用的是GPL。
URL: 在url下放置包的主頁。
Source0: 源目錄中tar源碼包的名稱。可以有很多個源碼。

BuildRequires:列出創建包所需包的列表。
Requires:創建包所需依賴。

%description:描述不應與摘要相同。描述要更具體一些,但是不應太長。並且不要在描述句尾加句號。

%prep:表示預操作字段。在install之前執行(準備源碼,唯一的操作是%setup -q)
%setup -q :表示構建BUILD環境,會解壓壓縮包到BUILD目錄下。

%preun	:在uninstall之前執行
%post 	:在install 之後執行
%postun:在uninstall之後執行

%build :表示通過直接調用源碼目錄中自動構建工具(比如說,configure文件)完成源碼編譯操作。
%configure:      
make:表示在源碼目錄中執行make命令。
%install  :安裝字段。

%files:文件說明字段。告訴make install指令,需要安裝那些文件。
%defattr(-,root,root,-) :設置默認權限
%doc:標記所有的文本文件。
%doc docs/LICENSE:安裝許可證。
%doc docs/README:安裝README。

%changelog:更新日誌。有固定格式(填錯會報錯)。比如說:
      *Sun Jul 13 2008 <bjlongo@ncsu.edu> 1
      --Initial Build.
      --Added setup.py file.
      --Fixed bin/vpd, src/vpd.py.

Copyright:軟件包版權規則,GPL(自由軟件),BSD,MIT,
                            Public Domain(公共域), Distributable(貢獻),
                            commercial(商業),Share(共享)等。

Group:用於對包進行分類。可以查看/usr/share/doc/GROUPS文件中所有組的完整列表。

Buildroot:構建和安裝包的位置

rpmbuild 命令的使用規則

首先使用命令:sudo yum -y install rpm-build安裝rpmbuild

[adams@localhost RPMS]$ sudo yum install rpm-build
[sudo] password for adams: 
已加載插件:langpacks, refresh-packagekit
軟件包 rpm-build-4.12.0.1-3.nd7.9.x86_64 已安裝並且是最新版本
無須任何處理
[adams@localhost RPMS]$

然後使用rpmbuild --help 命令,可以查看到rpmbuild運行時參數的詳細情況。

[adams@localhost ~]$ rpmbuild --help
用法: rpmbuild [選項...]

適用於 [ <specfile> | <tarball> | <source package> ] 的構建選項:
      -bp                        依據 <specfile>%prep (解壓縮源代碼並應用補丁) 開始構建
      -bc                        依據 <specfile>%build (%prep 之後編譯) 開始構建
      -bi                        依據 <specfile>%install (%prep、%build 後安裝) 開始構建
      -bl                        依據 <specfile> 檢驗 %files 區域
      -ba                        依據 <specfile> 構建源代碼和二進制軟件包
      -bb                        依據 <specfile> 構建二進制軟件包
      -bs                        依據 <specfile> 構建源代碼軟件包
      -tp                        依據 <tarball>%prep (解壓源代碼並應用補丁)開始構建
      -tc                        依據 <tarball>%build (%prep,之後編譯)開始構建
      -ti                        依據 <tarball>%install (%prep、%build 然後安裝)開始構建
      -ta                        依據 <tarball> 構建源代碼和二進制軟件包
      -tb                        依據 <tarball> 構建二進制軟件包
      -ts                        依據 <tarball> 構建源代碼軟件包
      --rebuild                  依據 <source package> 構建二進制軟件包
      --recompile                依據 <source package>%install (%prep、%build 然後安裝)開始構建
      --buildroot=DIRECTORY      重載構建根路徑
      --clean                    完成後移除構建樹
      --nobuild                  不執行任何構建步驟 
      --nodeps                   不檢驗構建依賴
      --nodirtokens              生成和 rpm v3 包管理(舊版本)兼容的軟件包頭
      --noclean                  構建過程中不執行 %clean 步驟
      --nocheck                  構建過程中不執行 %check 步驟
      --rmsource                 完成時移除源代碼
      --rmspec                   完成時移除 specfile
      --short-circuit            直接跳轉到指定步驟 (僅限 c,i)
      --target=CPU-VENDOR-OS     重載目標平臺

所有 rpm 模式和可執行文件的通用選項:
  -D, --define=“MACRO EXPR”      定義值爲 EXPR 的 MACRO
      --undefine=MACRO           未定義的 MACRO
  -E, --eval=“EXPR”              打印 EXPR 的宏展開
      --macros=<FILE:>          從文件 <FILE:...> 讀取宏,不使用默認文件
      --noplugins                don't enable any plugins
      --nodigest                 不校驗軟件包的摘要
      --nosignature              不驗證軟件包簽名
      --rcfile=<FILE:>          從文件 <FILE:...> 讀取宏,不使用默認文件
  -r, --root=ROOT                使用 ROOT 作爲頂級目錄 (default: "/")
      --dbpath=DIRECTORY         使用 DIRECTORY 目錄中的數據庫
      --querytags                顯示已知的查詢標籤
      --showrc                   顯示最終的 rpmrc 和宏配置
      --quiet                    提供更少的詳細信息輸出
  -v, --verbose                  提供更多的詳細信息輸出
      --version                  打印使用的 rpm 版本號

Options implemented via popt alias/exec:
      --with=<option>            enable configure <option> for build
      --without=<option>         disable configure <option> for build
      --buildpolicy=<policy>     set buildroot <policy> (e.g. compress man pages)
      --sign                     generate GPG signature

幫助選項:
  -?, --help                     顯示這個幫助信息
      --usage                    顯示簡短的使用說明
[adams@localhost ~]$

具體操作過程:

需要使用工具創建spec工作目錄以及spec文件。安裝工具命令:sudo yum install rpmdevtools

[adams@localhost RPMS]$ sudo yum install rpmdevtools
已加載插件:langpacks, refresh-packagekit
軟件包 rpmdevtools-8.5-1.nd7.1.noarch 已安裝並且是最新版本
無須任何處理
[adams@localhost RPMS]$
創建spec工作目錄

安裝完工具之後,使用rpmdev-setuptree命令建立spec文件工作目錄。

[adams@localhost ~]$ ls
git  neo  公共  模板  視頻  圖片  文檔  下載  音樂  桌面
[adams@localhost ~]$ rpmdev-setuptree
[adams@localhost ~]$ ls
git  neo  rpmbuild  公共  模板  視頻  圖片  文檔  下載  音樂  桌面
[adams@localhost ~]$ tree rpmbuild/
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

5 directories, 0 files
[adams@localhost ~]$ 

執行完rpmdev-setuptree後,會在主目錄下生成rpmbuild目錄,並附帶五個子目錄。

(也可以通過修改~/.rpmmacros 文件,來修改生成rpmbuild目錄的位置)。其中:

BUILD 	:用來存放創建rpm包過程中產生的文件/目錄。
RPMS 	:用來存放生成的二進制文件。
SRPMS	:用來存放生成的源碼包。
SOURCES:用來存放打包資源,源文件和補丁文件。
SPECS 	:用來存放spec配置文件。
BUILDROOT:編譯後生成的軟件臨時安裝目錄(運行spec文件後,生成的目錄)
生成spec文件

進入剛纔生成的SPEC目錄,執行rpmdev-newspec 命令。

[adams@localhost rpmbuild]$ ls
BUILD  RPMS  SOURCES  SPECS  SRPMS
[adams@localhost rpmbuild]$ tree
.
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

5 directories, 0 files
[adams@localhost rpmbuild]$ cd SPECS/
[adams@localhost SPECS]$ rpmdev-newspec
newpackage.spec created; type minimal, rpm version >= 4.12.
[adams@localhost SPECS]$ ls
newpackage.spec
[adams@localhost SPECS]$ 

可以看到在SPEC目錄下生成了newpackage.spec文件。該文件原始內容如下:

[adams@localhost SPECS]$ cat newpackage.spec 
Name:           
Version:        
Release:        1%{?dist}
Summary:        

License:        
URL:            
Source0:        

BuildRequires:  
Requires:       

%description


%prep
%setup -q


%build
%configure
make %{?_smp_mflags}


%install
rm -rf $RPM_BUILD_ROOT
%make_install


%files
%doc



%changelog
* Thu Oct 10 2019 adams
- 
[adams@localhost SPECS]$ 

可以根據之前對spec文件中各個參數的描述進行配置。具體的spec文件配置,在附帶的源碼包中。

進入 /home/adams/rpmbuild 目錄,執行 rpmbuild -ba SPECS/adams.spec 命令。則會在相應目錄,生成相應文件。

可以看到在RPMS目錄下生成了adams-spec-0.1.2-1.nd7.x86_64.rpm 包。(版本可能不一樣)

發佈了248 篇原創文章 · 獲贊 23 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章