• Fedora 打包教學


    源贴地址:http://www.fedoraforum.org.cn/showthread.php?t=96


    閲讀注意事項

    * 本指南是以 Fedora 8 為基礎,並不保證能在其他版本上實作。
    * 如果沒有注明需要管理目帳號的命令,一律以個人帳號執行。
    * 一切因為依照以下操作步驟而引致任何損失,本文所有參與編輯者恕不負責。

    前言

    這不是一篇完整的 RPM 打包參考文,而是一篇中文的打包導引文。您不能期望單純的從這篇文章中找到所有打包應用到的知識與技巧,這裏提供的只是概略筆者以自己經驗歸納出的打包過 程;世上高手何其多,網上文檔何其精,筆者非常鼓勵大家多參考多思考多實作。請緊學習包含吸收知識與實踐,缺一不可,邊做邊學才能算是實務、才能算是學 習;多看文檔、虚心發問、享受過程、累積成果。
    推薦參考文章

    * Maximum RPM
    * Packaging Guidelines
    * Valid RPM Macros
    * Jason Corley's RPM Macros Table

    事前準備工作

    1. 安裝 rpmbuild、rpmdevtools、rpmlint 包。 rpmbuild 是執行打包的工具包, rpmdevtools 是提高打包後勤工作效率的工具包, rpmlint 為檢查 spec 規格檔案正確性的工具包。
    2. 執行 rpmdev-setuptree ,打包用檔案系統 rpmbuild/{BUILD,RPMS SOURCES,SPECS,SRPMS} 會在 ~/ 被自動建立。
    3. 移到 ~/rpmbuile/SPECS/ ,執行 rpmdev-newspec 。一個新的 spec 規格檔案會被自動建立,它是一個純文字檔,裏面包含各種對 RPM 安裝包詳細設定;設定包括軟件本身的資訊、編譯/安裝/移除步驟、修改記錄等等内容。
    4. [請進入下一部分]

    編輯 spec 規格檔案

    以下是剛打包的 emesene RPM 的 .spec 檔案。因為它不可能包含所有會用到的東西,所以只可以作為參考;在裏面作了大量的注解,應該可以幫助瞭解大致結構:

    定義這些路徑的原因是省略 SPEC 檔接下來會用到的篇幅。

    代码:
    %define appdir  %{_datadir}/%{name}
    %define menudir %{_datadir}/applications
    %define icondir %{_datadir}/pixmaps
    %define podir %{appdir}/po

    Name: emesene
    Version: 0.99
    Release: 3%{?dist}
    Summary: Instant messaging client for Windows Live Messenger (tm) network

    Group: Applications/Internet
    License: GPLv2+
    URL: http://emesene.org
    Source0: http://downloads.sourceforge.net/eme...ne-r806.tar.gz
    Source1: emesene.desktop
    Patch0: emesene-0.1-2.exec.patch
    BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
    BuildArch: noarch

    BuildRequires: desktop-file-utils, gettext
    Requires: gtk2
    Requires: gnome-python2-extras
    Requires: python

    %description
    emesene is an instant messaging client for Windows Live Messenger (tm) network.

    %prep
    %setup -q -n emesene -a0
    %patch0 -p1


    %build
    %{nil}


    一些 %{__abc} 的是系統常用工具的macro,這樣做能令系統在安裝該 RPM 時才找出工具的位置,防止工具儲存位置的更改。

    代码:
    %install
    %{__rm} -rf $RPM_BUILD_ROOT
    %{__install} -d $RPM_BUILD_ROOT%{appdir}
    %{__install} -d $RPM_BUILD_ROOT%{menudir}
    %{__install} -d $RPM_BUILD_ROOT%{icondir}
    %{__install} -d $RPM_BUILD_ROOT%{_bindir}

    %{__cp} -R emesene/* $RPM_BUILD_ROOT%{appdir}
    %{__cp} $RPM_BUILD_ROOT%{appdir}/emesene $RPM_BUILD_ROOT%{_bindir}/
    %{__cp} emesene/themes/default/trayicon.png $RPM_BUILD_ROOT%{icondir}/emesene.png
    desktop-file-install --dir $RPM_BUILD_ROOT%{menudir}/ %{SOURCE1}

    %{__chmod} 755 $RPM_BUILD_ROOT%{appdir}/Controller.py

    %{__mv} $RPM_BUILD_ROOT%{podir}/ar/LC_MESSAGES/emesen.po $RPM_BUILD_ROOT%{podir}/ar/LC_MESSAGES/emesene.po
    %{__mv} $RPM_BUILD_ROOT%{podir}/ar/LC_MESSAGES/emesen.mo $RPM_BUILD_ROOT%{podir}/ar/LC_MESSAGES/emesene.mo


    %clean
    %{__rm} -rf $RPM_BUILD_ROOT


    %files
    %defattr(-,root,root,-)
    %doc emesene/docs
    %doc emesene/COPYING
    %dir %{appdir}
    %dir %{podir}
    %lang(ar) %{podir}/ar
    %lang(de) %{podir}/de
    %lang(es) %{podir}/es
    %lang(fi) %{podir}/fi
    %lang(fr) %{podir}/fr
    %lang(hu) %{podir}/hu
    %lang(it) %{podir}/it
    %lang(nl) %{podir}/nl
    %lang(pt) %{podir}/pt
    %lang(pt_BR) %{podir}/pt_BR
    %lang(sv) %{podir}/sv
    %lang(tr) %{podir}/tr
    %lang(zh_CN) %{podir}/zh_CN
    %lang(zh_TW) %{podir}/zh_TW
    %{appdir}/[A-Za-oq-z] *
    %{appdir}/plugins_base
    %{_bindir}/emesene
    %{menudir}/emesene.desktop
    %{icondir}/emesene.png


    %changelog

    * Thu Jan 31 2008 Caius Chance <cchance@redhat.com> - 0.99-3.fc9
    - Fixed locale 'sv' files appearing twice.

    * Tue Jan 29 2008 Caius Chance <cchance@redhat.com> - 0.99-2.fc9
    - Refined .spec file regarding 'file' section in spec. (rhbz#238379)

    * Mon Jan 14 2008 Caius Chance <cchance@redhat.com> - 0.99-1.fc9
    - Sync to upstream perferred version number, refined .spec file. (rhbz#238379)

    * Mon Jan 07 2008 Caius Chance <cchance@redhat.com> - 1.0-2.fc9
    - Updated .spec file by package reviewer's feedback. (rhbz#238379)

    * Fri Dec 21 2007 Caius Chance <cchance@redhat.com> - 1.0-1.fc9
    - Updated .spec file by package reviewer's feedback. (rhbz#238379)

    * Sat Dec 15 2007 Caius Chance <cchance@redhat.com> - 0.1-2.fc9
    - Corrected executable file path parameters.

    * Fri Dec 14 2007 Caius Chance <cchance@redhat.com> - 0.1-1.fc9
    - Adopted from community as new package.


    包裝 SRPM 測試源碼包

    1. 在 ~/rpmbuild/SPECS 執行 rpmbuild -ba 你的軟件名稱.specs ,測試包裝 RPM 和 SRPM 包(也可以只執行 rpmbuild -bs 你的軟件名稱.specs 只測試 SRPM 包)
    2. 如有包裝期間有錯誤回饋或發生其他問題,可以檢查 ~/rpmbuild/SOURCES 內的檔案、 .spec 檔、或執行 rpmbuild -bp 你的軟件名稱.specs 後檢查 ~/rpmbuild/BUILD 內的檔案。
    3. 其實有比較懶惰的辦法(在從 cvs 伺服器 check out 出來文件夾內以 make [command] 做相同的動作,只是要有全部重新 check out 的心理準備);請在 cvs check out 出來的文件夾內輸入 make help 獲得更多資訊。
    4. [請進入下一部分]

    新包審批程序

    一個軟件進入 Fedora 的 repository 讓公眾更新是需要經過一系列的審批程序的。

    1. 確保 SRPM 源碼準備好。(用 rpmlint 檢查 .spec 規格檔)
    2. 在 Red Hat 的 Bugzilla 系統建立一個新的 Bug 檔案。
    3. 經過 Fedora 審批人確保 SRPM 源碼包符合標準後,會在 Bug 內授與一個審批通過的 fedora‑review ACK+ 。
    4. 最後包裝人可以向有關有 cvs 管理權限的人員要求(把 fedora‑cvs flag 調成 + ),在 Fedora repository 建立一該軟件的 tree。
    5. [請進入下一部分]
    匯入 SRPM 源碼包

    1. 進入從 cvs 那裏 check out 的文件夾 e.g. ~/src/fedora/rpms/你的軟件名稱/common/ ,執行 ./cvs-import.sh 你的SRPM檔案名稱 ,將源碼和相關檔案匯入到本地的 cvs 文件夾。
    2. [請進入下一部分]

    正式編譯 RPM 安裝包

    1. 檢查所有檔的正確性。

    2. 確定所有相關檔案都經已上傳至 cvs 伺服器(或其他伺服器):(所有來自作者/官方網站的源碼包,最好是自動包裝過程中從來源服務器實時下載;否則由於源碼檔案有可能過大,不適合上傳到 cvs 伺服器影響效率。應該把它們上傳至個別設置的源碼檔案眝存伺服器: make upload FILES=[源碼包檔案名稱] (如要清除伺伺器上舊有的源碼檔碼檔案,第一個上傳的檔案要執行以下命令: make new-sources FILES=[源碼包檔案名稱] ),再把 source 和 .cvsignore 兩個檔案 check in 到 cvs 伺服器上。)

    3. 執行 make tag 建立新的 tag 標簽。tag 標簽用於標示所有 RPM 安裝包有關的檔案,附有 checksum 以對照檔案的狀態。如果希望保留發行版本號 (n-v-r 的 r),除第一次建立 tag 標簽,可執行 make force-tag 覆蓋最新建立的 tag 標簽。

    4. 如一切順利,執行 make build ,RPM 安裝包將會在中央包裝系統(正在服役的系統名稱: Koji)。
    5. 看到文字介面訊息中看到所有工作為 done 後,代表 RPM 和 SRPM 等檔案已經被建立,正在為中央包裝系統所儲存。
    6. [請進入下一部分]

    遞送到發行版本 ( Rawhide / 開發版本不用進行以下步驟)

    1. 開啟並以 Fedora 帳號登入 Bodhi (發行版本遞送系統)。

    2. 在左邊頁面按下 New Update ,把空格填上: Package = n-v-r 格式的包版本編號、 Release = 要遞送的發行版本、 Type = 更新種類( bugfix 是補錯, enhancement 是改進, security 是保安)、Request = 要遞送的要求( Testing 是測試 repository ,一般都先到那裏讓有興趣幫忙測試的人下載; Stable 是穏定 repository ,就是公眾使用者都能下載的,一般要先經過 testing 一段短時間沒有問題後才到那裏; None 是還沒準備好遞送的,暫時存檔。)、 Bugs = 和此遞送有關的 bug 。若右邊空格選取,當更新遞送到 Stable ,系統會自動關閉該 bug 、 Notes = 備注、 Suggest Reboot 空格是要求使用者更新後重新啟動電腦。

    3. [完成!]

    後輟

    本文仍有很大的改進空間,歡迎提供任何意見,甚至動手修改完善。謝謝您的閲讀!

  • 相关阅读:
    python文件打开方式详解——a、a+、r+、w+、rb、rt区别
    io.UnsupportedOperation: can't do nonzero cur-relative seeks”错误
    端口三种模式:access,hybrid,trunk
    水仙花数
    maktrans和translate详解
    实战NFS服务搭建与配置
    except 配合 shell实现公钥分发脚本
    linux系统免秘钥分发文件
    rsync + inotify 实现远程实时同步数据
    通过rsync实现全网数据备份检查脚本
  • 原文地址:https://www.cnblogs.com/beta2013/p/3377373.html
Copyright © 2020-2023  润新知