參考鏈接:
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
包。(版本可能不一樣)