RPM包製做

 

 

製做RPM包,能夠方便往後的維護。統一了標準html

  1. yum install rpmdevtools

    安裝後,使用 rpmdev-setuptree命令建立rpm包的目錄結構。默認是在$HOME下rmpbuild下,也能夠經過~/.rpmmacros配置。shell

  2. SPEC文檔是製做rpm包的核心。
  3. 下面是從fedora中copy過來的
  4. 新建一個 .spec 文件
    
    如今,您須要在 ~/rpmbuild/SPECS 目錄下,新建一個 SPEC 文件。文件應命名爲 "軟件包名.spec"。名稱根據軟件包名或通用名填寫便可。可是,必需要遵照 軟件包命名規定。
    
    模板和實例
    模板
    若是您首次建立 .spec 文件,vim 或 emacs 會自動生成模板:
    
     $ cd ~/rpmbuild/SPECS
     $ vim program.spec
    示例(僅供參考):
    
    Name:
    Version:
    Release:    1%{?dist}
    Summary:
    Group:
    License:
    URL:
    Source0:
    BuildRoot:    %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
    
    BuildRequires:
    Requires:
    
    %description
    
    %prep
    %setup -q
    
    %build
    %configure
    make %{?_smp_mflags}
    
    %install
    rm -rf %{buildroot}
    make install DESTDIR=%{buildroot}
    
    %clean
    rm -rf %{buildroot}
    
    %files
    %defattr(-,root,root,-)
    %doc
    
    %changelog

     

  5. 裏面的參數該怎麼寫:
  6. "#" 字符表示註釋,但須要避免註釋宏(以 % 開頭),由於它們會首先被替換展開。使用 %% 註釋宏。另外,還要避免在腳本命令的相同行中使用行內註釋。vim

    如下介紹了主要的標籤。注意 %{name}%{version} 和 %{release} 表明 Name, Version 和 Release 這三個標籤。只要更改標籤,宏就會使用新值。segmentfault

    • Name: 軟件包名,應與 SPEC 文件名一致。命名必須符合 軟件包命名規定
    • Version: 上游版本號。請查看 版本標籤規定。若是包含非數字字符,您可能須要將它們包含在 Release 標籤中。若是上游採用日期做爲版本號,請考慮以:yy.mm[dd] (例如 2008-05-01 可變爲 8.05) 格式做爲版本號。
    • Release: 發行編號。初始值爲 1%{?dist}。每次製做新包時,請遞增該數字。當上遊發佈新版本時,請修改 Version 標籤並重置 Release 的數字爲 1。具體參考打包規定中的 Release 標籤部分,以及 Dist tag
    • Summary: 一行簡短的軟件包介紹。請使用美式英語。請勿在結尾添加標點!
    • Group: 指定軟件包組,例如 "Applications/Engineering";執行 "less /usr/share/doc/rpm-*/GROUPS" 查看完整的組列表。任何包含文檔的子軟件包,使用 "Documentation" 組(如 kernel-doc)。注意 Fedora 17+ 後已廢除此標籤。Spec 文件參考手冊 有介紹
    • License: 受權協議,必須是開源許可證。請不要使用舊的 Copyright 標籤。協議採用標準縮寫(如 "GPLv2+")而且描述明確(如, "GPLv2+" 表示 GPL 2 及後續版本,而不是 "GPL" 或 "GPLv2" 這種不許確的寫法)。參考 Licensing 和 Licensing Guidelines。若是一個軟件採用多個協議,可使用 "and" 和 "or"(例如 "GPLv2 and BSD")來描述。
    • URL: 該軟件包的項目主頁。注意:源碼包 URL 請使用 Source0 指定。
    • Source0: 軟件源碼包的 URL 地址。"Source" 與 "Source0" 相同。強烈建議提供完整 URL 地址,文件名用於查找 SOURCES 目錄。若是可能,建議使用 %{name} 和 %{version} 替換 URL 中的名稱/版本,這樣更新時就會自動對應。下載源碼包時,須要 保留時間戳。若是有多個源碼包,請用Source1Source2 等依次列出。若是你須要添加額外文件,請將它們列在後面。更多特殊案例(如 revision control),請參考 Source URL
    • Patch0: 用於源碼的補丁名稱。若是你須要在源碼包解壓後對一些代碼作修改,你應該修改代碼並使用 diff 命令生成 patch 文件,而後放在 ~/rpmbuild/SOURCES 目錄下。一個 Patch 應該只作一種修改,因此可能會包含多個 patch 文件。
    • BuildArch: 若是你要打包的文件不依賴任何架構(例如 shell 腳本,數據文件),請使用 "BuildArch: noarch"。RPM 架構會變成 "noarch"。
    • BuildRoot: 在 %install 階段(%build 階段後)文件須要安裝至此位置。Fedora 不須要此標籤,只有 EPEL5 還須要它。默認狀況下,根目錄爲 "%{_topdir}/BUILDROOT/"。
    • BuildRequires: 編譯軟件包所需的依賴包列表,以逗號分隔。此標籤能夠屢次指定。編譯依賴 不會 自動判斷,因此須要列出編譯所需的全部依賴包。常見的軟件包可省略,例如 gcc。若是有必要,你能夠指定須要的最低版本(例:"ocaml >= 3.08")。若是你須要找到包含 /EGGS 文件的軟件包,可執行 "rpm -qf /EGGS"。若是你須要找到包含 EGGS 程序的軟件包,可執行 "rpm -qf `which EGGS`"。請保持最小依賴(例如,若是你不須要 perl 的功能,可以使用 sed 代替),但請注意,若是不包含相關依賴,某些程序會禁用一些功能;此時,你須要添加這些依賴。Package-x-generic-16.pngauto-buildrequires 軟件包可能會有幫助。
    • Requires: 安裝軟件包時所需的依賴包列表,以逗號分隔。請注意, BuildRequires 標籤是編譯所需的依賴,而 Requires 標籤是安裝/運行程序所需的依賴。大多數狀況下,rpmbuild 會自動探測依賴,因此可能不須要 Requires 標籤。然而,你也能夠明確標明須要哪些軟件包,或因爲未自動探測所需依賴而須要手動標明。
    • %description: 程序的詳細/多行描述,請使用美式英語。每行必須小於等於 80 個字符。空行表示開始新段落。使用圖形安裝軟件時會從新格式化段落;以空格開頭的行被視爲已格式化的格式,通常使用等寬字體顯示。參考 RPM Guide
    • %prep: 打包準備階段執行一些命令(如,解壓源碼包,打補丁等),以便開始編譯。通常僅包含 "%autosetup";若是源碼包須要解壓並切換至 NAME 目錄,則輸入 "%autosetup -n NAME"。查看 %prep 部分了解更多信息。
    • %build: 包含構建階段執行的命令,構建完成後便開始後續安裝。程序應該包含有如何編譯的介紹。查看 %build 部分了解更多信息。
    • %install: 包含安裝階段執行的命令。命令將文件從 %{_builddir} 目錄安裝至 %{buildroot} 目錄。查看 %install 部分了解更多信息。
    • %check: 包含測試階段執行的命令。此階段在 %install 以後執行,一般包含 "make test" 或 "make check" 命令。此階段要與 %build 分開,以便在須要時忽略測試。
    • %clean: 清理安裝目錄的命令。此階段在 Fedora 中是多餘的,僅針對 EPEL。通常只包含:
    rm -rf %{buildroot}
    
    • %files: 須要被打包/安裝的文件列表。查看 %files 部分了解更多信息。
    • %changelog: RPM 包變動日誌。請使用示例中的格式。注意,不是軟件自己的變動日誌。
    • ExcludeArch: 排除某些架構。若是該軟件不能在某些架構上正常編譯或工做,經過該標籤列出。
    • ExclusiveArch: 列出該軟件包獨佔的架構。

 

放置源代碼

把一個名爲devrpm-0.0.1.tar.gz的源碼壓縮文件放到rpmbuild根目錄下的SOURCES目錄下(注,確保此歸檔文件解壓後的目錄爲devrpm-0.0.1,不然會有問題)。架構

到此一個完整的rpm打包環境已經構建完成,下面咱們就能夠開始構建二進制和源代碼RPM包。app

構建RPM包

構建RPM包是有命令rpmbuild在SPEC的指導下完成。less

開始構建操做,首先進入到當前用戶的rpmbuild根目錄(即上面提到的目錄環境)。ide

#cd ~/rpmbuild/ 

執行如何命令,-ba表示build all,即生成包括二進制包和源代碼包的全部RPM包,下來若是正常的話,rpmbuild將正常退出,同時在RPMS目錄和SRPMS目錄中將生成對應的RPM包。測試

#rpmbuild -ba SPECS/hellorpm.spec

以上參考:https://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh-cn#.E6.A8.A1.E6.9D.BF.E5.92.8C.E5.AE.9E.E4.BE.8B字體

      http://segmentfault.com/a/1190000002539129

相關文章
相關標籤/搜索