[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 下一頁 ]


Debian 新維護人員手冊
第 2 章 - 第一步


讓我們嘗試創建一個自己的套件(“收養”一個已存在的套件則更好)。


2.1 選擇你的程式

可能你已經選好了要製作的套件。第一件要做的事是使用 aptitude 檢査它是否已經存在於發行版倉庫中了。

你還可以通過 套件搜索頁面Debian Package Tracking System (Debian 套件跟蹤系統,PTS)査詢套件訊息。

如果套件已經存在,直接安裝就好了!:-) 如果它是被 拋棄(orphaned) 的——也就是說它的維護者被設置爲 Debian QA Group,那麼你可以嘗試接手維護它(在 Debian Bug report logs: Bugs in package wnpp in unstable 檢査它的維護者訊息)。你也可以“收養”維護者發出“Request for Adoption”(RFA)請求的套件。

有幾種査看 RFA 套件的方法:

僅作爲一筆旁註,Debian 已經擁有了絕大多數類型軟體的套件,倉庫中套件的數量也遠遠超過了有上傳權限的貢獻者的數量。因此,爲已經在倉庫中的套件貢獻力量是非常受其他開發者歡迎的(且更容易獲得 sponsorship)[3]。你可以通過非常多的方式來實現這一目的。

如果你有能力“收養”那個套件,下載(使用 apt-get source packagename 或其他類似的工具)並分析它的程式碼。這篇文件沒有包含如何接手套件的詳細訊息,但幸運的是因爲接手套件時起始的工作已經有人完成,接手的工作應比從頭開始輕鬆得多。儘管如此,請繼續閱讀,下面給出的建議會對你很有幫助。

如果你要製作的套件是全新的,並且希望它出現在 Debian 中,請按照以下的步驟進行:

當然,這些問題都只是爲了安全,並試圖讓你不至於在比如 setuid 守護進程等問題上犯錯誤而激怒了用戶... 當你在打包方面有了更多經驗時,就可以處理這些套件了。但即便是富有經驗的開發人員在遇到疑惑時也會發郵件到 debian-mentors@lists.debian.org 郵件列表諮詢,那裏的人會很樂意提供幫助。

關於這些問題的更多幫助,査看 Debian Developer's Reference


2.2 獲得程式,並且試用它

第一件要做的事就是找到並下載原始的原始碼。我假定你已經從作者的首頁上找到了它的原始碼。Unix 下的自由軟體原始碼通常是以 tar+gzip 格式(副檔名爲 .tar.gz)或 tar+bzip2 格式(副檔名爲 .tar.bz2)的形式提供的。通常壓縮檔中包含了一個名爲 programname-version 的子目錄,裏面包含了全部的原始碼。

如果原始碼的最新版需要通過諸如 Git、Subversion 或 CVS 這類 VCS (Version Control System,版本控制系統)倉庫獲得,那麼你需要使用“git clone”“cvs co”或“svn co”等命令獲得程式碼後,再使用 tar 程式的 --exclude-vcs 選項將其重新打包爲 tar+gzip 格式。

如果你的程式原始碼是以其他形式提供的(比如檔案名以 .Z.zip 結尾[4]),則使用合適的工具將其解壓縮,再重新打包。

作爲範例,我將使用一個名爲 gentoo 的程式,它是一個 X GTK+ 檔案管理器。[5]

在你的用戶主目錄下創建一個子目錄,命名爲 debiandeb 或任意你覺得合適的其他名字(本例中使用 ~/gentoo)。把下載好的壓縮檔放在其中並解壓縮(使用 tar xzf gentoo-0.9.12.tar.gz 命令)。要確定解壓縮過程中沒有發生錯誤,即便是有一點 不恰當 也不行,因爲在別人的系統上解壓縮這些檔案時,如果他們的工具並不忽略這些反常的現象就會出現問題。在你的終端螢幕上,應該看到如下的情形。

     $ mkdir ~/gentoo ; cd ~/gentoo
     $ wget http://www.example.org/gentoo-0.9.12.tar.gz
     $ tar xvzf gentoo-0.9.12.tar.gz
     $ ls -F
     gentoo-0.9.12/
     gentoo-0.9.12.tar.gz

現在又有了一個新的子目錄,名爲 gentoo-0.9.12。進入該目錄並 徹底 讀完其中的文件。通常情況下這些文件被命名爲 README*INSTALL**.lsm*.html。你必須找到關於如何正確編譯和安裝程式的指導(最可能的是他們會默認你希望把程式安裝到 /usr/local/bin 目錄,但事實上你不能那樣做,詳細的內容稍後將在 把檔案安裝到目的位置, 第 3.3 節 中說明)。

帶有 Makefile 檔案的簡單程式可以很容易地使用 make 來編譯。其中的一些還支持 make check,可以完成一系列自身測試。編譯好後可以使用 make install 來將程式安裝到目標目錄。

現在嘗試編譯和運行你的程式,確保它工作正常,且在安裝和運行時不會導致其他問題。

你還可以運行 make clean (或更好的 make distclean)來清理編譯目錄。有時還會帶有 make uninstall 用以反安裝已經安裝了的檔案。


2.3 自由的可移植程式

非常多的自由軟體是使用 CC++ 語言編寫的。其中的有很多使用 Autotools 或 CMake 來使其可以在不同平臺上移植。這些工具被用於生成 Makefile 和其他必須的源檔案,然後這些程式可以使用正常的 make; make install 來編譯和安裝。

Autotools 是 GNU 編譯系統工具,包括 AutoconfAutomakeLibtoolgettext。你可以通過 configure.acMakefile.amMakefile.in 等檔案來識別這種類型的原始碼。[6]

使用 Autotools 的第一步是上游作者在程式碼中運行 autoreconf -i -f 並把生成的檔案同原始碼一起散佈。

     configure.ac-----+-> autoreconf -+-> configure
     Makefile.am -----+        |      +-> Makefile.in
     src/Makefile.am -+        |      +-> src/Makefile.in
                               |      +-> config.h.in
                           automake
                           aclocal
                           aclocal.m4
                           autoheader

編輯 configure.acMakefile.am 等檔案需要一些關於 autoconfautomake 的知識。參考 info autoconfinfo automake

使用 Autotools 的流程第二部是用戶獲得散佈的原始碼後在原始碼中運行 ./configure && make 並將其編譯成爲 binary (二進位程式)。

     Makefile.in -----+                +-> Makefile -----+-> make -> binary
     src/Makefile.in -+-> ./configure -+-> src/Makefile -+
     config.h.in -----+                +-> config.h -----+
                               |
                config.status -+
                config.guess --+

你可以通過命令選項來改變 Makefile 檔案中的很多設置,比如默認的檔案安裝位置(使用 ./configure --prefix=/usr)。

儘管不是必須的,還可以使用 autoreconf -i -f 更新 configure 和其他相關檔案,這樣做可能提高原始碼的兼容性。

CMake 是另一個可選的編譯系統,可以通過 CMakeLists.txt 檔案來識別它。


2.4 套件名稱和版本

開始打包時原始碼目錄應當是絕對乾淨(原始)的,或者直接使用剛剛解壓縮得到的原始碼。

爲了讓套件可以正確地編譯和構建,如果程式原有的名字不是完全小寫的則必須將其改成小寫,並且應當把原始碼以 packagename-version 的形式命名。

如果程式的名稱超過一個單詞,把它改成一個單詞或縮寫成合適的形式。例如,程式“John's little editor for X”可以命名爲 johnledxjle4x,或者隨便你認爲合適的其他名字。它需要符合一定的限制,比如長度不要超過 20 和字符。

還要檢査程式的版本號,它將被包含到套件版本內。如果手中的軟體版本號不是 X.Y.Z 的形式,而是使用日期等形式。那麼可以繼續使用日期來作爲版本號,只要新版本程式的版本號能變得比老闆本大即可。最好能與上游使用相同的版本號,如果上游使用了諸如 09Oct23 的格式,那麼最好將其轉換爲 YYYYMMDD 的格式,此例中爲 20091023,以便保證 dpkg 程式在更新軟體時能正確處理新舊版本。[7]

還有一些程式根本就沒有版本號,這是你應該聯繫上游維護者,看他們是否使用了其他的版本跟蹤方法。


2.5 初始化 Debian 套件

首先我們設置兩個 環境變量,$DEBEMAIL$DEBFULLNAME,使多數 Debian 維護工具能夠正確識別你用於維護套件的姓名和電子郵件地址。[8]

     $ cat >>~/.bashrc <<EOF
     DEBEMAIL=your.email.address@example.org
     DEBFULLNAME="Firstname Lastname"
     export DEBEMAIL DEBFULLNAME
     EOF

讓我們按照以下方法使用 dh_make 來初始化 Debian 套件。

     $ . ~/.bashrc
     $ cd ~/gentoo/gentoo-0.9.12
     $ dh_make -f ../gentoo-0.9.12.tar.gz

當然,使用你的原始原始碼壓縮檔名替代範例中的檔案名。[9]參考 dh_make(1) 以獲得詳細訊息。

此時會出現一些提示訊息。它會詢問你要創建那種類型的套件。Gentoo 是單個的二進位套件——編譯後僅生成一個二進位檔案,也因此只需要一個 .deb 檔案——所以我們使用 s 鍵選擇第一個選項,檢査螢幕上顯示的訊息,無誤後按 ENTER 確認。[10]

執行 dh_make 後,上一級目錄中自動創建了一份上游 tarball 的副本,名爲 gentoo_0.9.12.orig.tar.gz,這個檔案和稍後介紹的 debian.tar.gz 在一起滿足了 Debian 非本地原始碼套件的要求。

     $ cd ~/gentoo ; ls -F
     gentoo-0.9.12/
     gentoo-0.9.12.tar.gz
     gentoo_0.9.12.orig.tar.gz

請注意 gentoo_0.9.12.orig.tar.gz 這個檔案名的兩個關鍵特點:

你應該可以注意到 debian 目錄下有了許多模板檔案。這些檔案將在 debian 目錄中的必須內容, 第 4 章debian 目錄下的其他檔案, 第 5 章 一一解釋。你還應該明白,打包不是一個自動的過程,你還需要按照 修改原始碼, 第 3 章 中的方法來修改套件。此後,你還要按照 構建套件, 第 6 章 中敘述的合適的方法來編譯 Debian 套件、按照 檢査套件中的錯誤, 第 7 章 中的方法檢査其中錯誤,最終依照 上傳套件, 第 8 章 的介紹將其上傳。我將對所有的這些步驟進行解釋。

再次強調,作爲一個新維護人員,不推薦創建複雜的套件,例如:

它們並非特別難於掌握,但確實需要更多的知識,所以我們不在這裏對所有情況進行描述。

如果你在修改過程中不小心刪除或弄壞了某些模板檔案,你可以使用 dh_make 加上 --addmissing 參數來將其還原。

更新一個已存在的套件可能比較複雜,因爲它可能使用舊的技術。請繼續在這裏學習最新的打包技術以便掌握必要的基本功。我們會在稍後的 更新套件, 第 9 章 中回頭講解如何處理這種情況。


[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 下一頁 ]


Debian 新維護人員手冊

版本 1.2.25, 2010-12-21 14:06:56 UTC

Josip Rodin joy-mg@debian.org

翻譯:Aron Xu happyaron.xu@gmail.com
翻譯:李凌 lilingv@gmail.com
翻譯:郑原真 ycheng@slat.org
繁簡轉換:陳侃如 koster@debian.org
繁簡轉換:青木修 osamu@debian.org