RPM安装包-Spec文件參数具体解释与演示样例分析
spec文件是整個RPM包建立過程的中心,它的作用就如同編譯程序時的Makefile文件。
?
1.Spec文件參數
spec文件包括建立一個RPM包必需的信息,包括哪些文件是包的一部分以及它們安裝在哪個文件夾下。這個文件一般分為例如以下的幾節:
(1) Preamle(序言)
序言包括用戶請求包的信息時所顯示的內容。它能夠包括包的功能描寫敘述、包的軟件版本號、版權信息和所屬的包組等。Summary 是一行關于該軟件包的描寫敘述,Name 是該軟件包的基名,Version 是該軟件的版本號號,Release 是 RPM 本身的版本號號,假設修復了 spec 文件里的一個錯誤并公布了該軟件同一版本號的新 RPM,就應該添加發行版號。License 應該給出一些許可術語(如:"GPL"、"Commercial"、"Shareware"),Group 標識軟件類型。那些試圖幫助人們管理 RPM 的程序通常依照組列出 RPM。您能夠在usr/share/doc/rpm-4.0.4/GROUPS 文件看到一個 Red Hat 使用的組列表(如果您安裝的 RPM 版本號是 4.0.4)。可是您還能夠使用那些組名以外的名稱。Source0、Source1等等給這些源文件命名(通常為 tar.gz 文件)。%{name} 和 %{version} 是 RPM 宏,它們擴展成為頭中定義的 rpm 名稱和版本號。
要注意的是,你不要在 Source 語句中包括不論什么路徑。缺省情況下,RPM 會在 /usr/src/redhat/SOURCES 中尋找文件,請將您的源文件復制或鏈接到那里。(要使 spec 文件盡量可移植的話,應當盡量避免嵌入自己開發機器上的假想路徑。其它開發者就能夠指示 RPM 在別的文件夾下查找源文件,而不用改動您的 spec 文件。)
接下來的部分從 %description 行開始。您應該在這里提供該軟件很多其它的描寫敘述,這樣不論什么人使用 rpm -qi 查詢您的軟件包時都能夠看到它。您能夠解釋這個軟件包做什么,描寫敘述不論什么警告或附加的配置指令,等等。
(2) Prep節
Prep 節進行實際的打包準備工作,它是使用節前綴%prep表示的。一般而言,這一節的主要工作是檢查標簽語法是否正確,刪除舊的軟件源程序,對包括源程序的 tar文件進行解碼。假設包括補丁(patch)文件,將補丁文件應用到解開的源代碼中。它一般包括%setup與%patch兩個命令。%setup用于將軟件源代碼包解開,運行%patch可將補丁文件增加解開的源程序中。
%setup
-n newdir---------將壓縮的軟件源程序在newdir文件夾下解開。
-c ---------------在解開源程序之前先創建文件夾。
-b num------------在包括多個源程序時,將第num個源程序解壓縮。
-T----------------不使用缺省的解壓縮操作。
比如:
%setup -T -b 0
/*解開第一個源程序文件。*/
%setup -c -n newdir
/*創建文件夾newdir,并在此文件夾之下解開源程序。*/
%patch
%patchN-------這里N是數字,表示使用第N個補丁文件,等價于%patch -P N
-p0-----------指定使用第一個補丁文件,-p1指定使用第二個補丁文件。 -s------------在使用補丁時,不顯示不論什么信息。
-b name-------在增加補丁文件之前,將源文件名稱上增加name。若為指定此參數,則缺省源文件增加.orig。
-T------------將全部打補丁時產生的輸出文件刪除。
(3) Build節
這一節主要用于編譯源代碼,它是使用節前綴%build表示的。這一節一般由多個make命令組成。
(4) Install節
這一節主要用于完畢實際安裝軟件必須運行的命令,它是使用節前綴%install表示的。這一節通常是由make install指令構成,可是有時也會包括cp、mv、install等指令。
這一節還能指定在用戶安裝的系統上,包安裝時執行的腳本。這種腳本稱為安裝(卸載)腳本。它能夠指定包安裝前、包安裝后、包除去前、包除去后的系統必須執行的外殼程序段。在用戶安裝的系統上,為了驗證一個包是否已經安裝成功的驗證腳本也可由這一節指定。
(5) Clean節
這一節所描寫敘述的內容表示在完畢包建立的工作之后,自己主動運行此節下的腳本進行附加的清除工作,它是使用節前綴%clean表示的。一般而言,這一節的內容是簡單地使用rm -rf $RPM_BUILD_ROOT命令,不須要指定此節的其他內容。
(6) 文件列表
這一節指定構成包的文件的列表,它是使用節前綴%files表示的。此外,它還包括一系列宏控制安裝后的文件屬性和配置信息。
%files 列出應該捆綁到 RPM 中的文件,并可以可選地設置許可權和其他信息。在 %files 中,您可以使用 %defattr 來定義缺省的許可權、全部者和組;%defattr(-,root,root) 會安裝 root 用戶擁有的全部文件,使用當 RPM 從構建系統捆綁它們時它們所具有的不論什么許可權。
能夠用 %attr(permissions,user,group) 覆蓋個別文件的全部者和許可權。能夠在 %files 中用一行包含多個文件。能夠通過在行中加入 %doc 或 %config 來標記文件。%doc 告訴 RPM 這是一個文檔文件,因此假設用戶安裝軟件包時使用 --excludedocs,將不安裝該文件。您也能夠在 %doc 下不帶路徑列出文件名稱,RPM 會在構建文件夾下查找這些文件并在 RPM 文件里包含它們,并把它們安裝到 /usr/share/doc/%{name}-%{version}。以 %doc 的形式包含 README 和 ChangeLog 這種文件是個好主意。
%config 告訴 RPM 這是一個配置文件。在升級時,RPM 將會試圖避免用 RPM 打包的缺省配置文件覆蓋用戶細致改動過的配置。
注意:假設在 %files 下列出一個文件夾名,RPM 會包含該文件夾下的全部文件。通常這不是您想要的,特別對于 /bin 這種文件夾。
(7) 修改日志
這一節主要描寫敘述軟件的開發記錄,它是使用節前綴%changlog表示的。這個段的內容是為了開發者能具體的了解該軟件的開發過程,對于包的維護極有優點。
?
2.Spec文件演示樣例與解說
Name: ao_redpacket(CPM名稱) Version: 1(CPM版本號) Release: 5(RPM 本身的版本號號) License: Commercial(授權) Group: commodity(軟件類型) Summary: the main AO module of commodity on basic platform(描寫敘述) Vendor: Tencent(公司) Packager: timmyye(公布人) Prefix: /usr/local(前綴路徑) Provides: ao_redpacket(提供) Requires: platform.framework public_scripts(需求) Buildroot: /data/htdocs/rpm.paipaioa.com/rpm/data_32/rpm_build/commodity/ao_redpacket_1/build_directory(編譯路徑)%description(描寫敘述) the main AO module of commodity on basic platform%files(安裝后的文件屬性和配置信息) %defattr (-,appadmin,users)(缺省的許可權、全部者和組) %config /usr/local/c2csvc/svc/ao_redpacket/etc/* %dir /usr/local/c2csvc/svc/ao_redpacket %dir /usr/local/c2csvc/svc/ao_redpacket/etc /usr/local/c2csvc/svc/ao_redpacket/bin /usr/local/c2csvc/svc/ao_redpacket/no_itil /usr/local/c2csvc/svc/ao_redpacket/so /usr/local/c2csvc/so/ao_redpacket.so /data/applog/ao_redpacket /usr/local/c2csvc/svc/ao_redpacket/restart_itilid%pre
?
?
?
轉載于:https://www.cnblogs.com/mfrbuaa/p/4175219.html
總結
以上是生活随笔為你收集整理的RPM安装包-Spec文件參数具体解释与演示样例分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java Script基础(九) 下拉列
- 下一篇: 空气质量相关性分析