From Fedora Project Wiki

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Fedora 打包教學

閲讀注意事項

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

前言

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

推薦參考文章

事前準備工作

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/emesene/emesene-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. [完成!]

後輟

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

最後修改: Kaio 13:23, 7 February 2008 (HKT)

作者原文: http://keimoto.net/wiki/index.php/Fedora_%E6%89%93%E5%8C%85%E6%95%99%E5%AD%B8