RPM安裝包-Spec檔案參數詳解與樣本分析

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.