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 <[email protected]> - 0.99-3.fc9
- Fixed locale 'sv' files appearing twice.

* Tue Jan 29 2008 Caius Chance <[email protected]> - 0.99-2.fc9
- Refined .spec file regarding 'file' section in spec. (rhbz#238379)

* Mon Jan 14 2008 Caius Chance <[email protected]> - 0.99-1.fc9
- Sync to upstream perferred version number, refined .spec file. (rhbz#238379)

* Mon Jan 07 2008 Caius Chance <[email protected]> - 1.0-2.fc9
- Updated .spec file by package reviewer's feedback. (rhbz#238379)

* Fri Dec 21 2007 Caius Chance <[email protected]> - 1.0-1.fc9
- Updated .spec file by package reviewer's feedback. (rhbz#238379)

* Sat Dec 15 2007 Caius Chance <[email protected]> - 0.1-2.fc9
- Corrected executable file path parameters.

* Fri Dec 14 2007 Caius Chance <[email protected]> - 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. [完成!]

後輟

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

你可能感兴趣的:(fedora)