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
作者 Blog 最新位置: http://blog.kaio.com