[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 下一頁 ]
讓我們嘗試創建一個自己的套件(“收養”一個已存在的套件則更好)。
可能你已經選好了要製作的套件。第一件要做的事是使用
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]。你可以通過非常多的方式來實現這一目的。
接手被拋棄而仍然被很多人使用的套件。
加入 打包小組
。
爲某些常用的套件分類 Bug。
在需要時準備 QA
或 NMU 上傳
。
如果你有能力“收養”那個套件,下載(使用 apt-get source packagename 或其他類似的工具)並分析它的程式碼。這篇文件沒有包含如何接手套件的詳細訊息,但幸運的是因爲接手套件時起始的工作已經有人完成,接手的工作應比從頭開始輕鬆得多。儘管如此,請繼續閱讀,下面給出的建議會對你很有幫助。
如果你要製作的套件是全新的,並且希望它出現在 Debian 中,請按照以下的步驟進行:
首先,你必須知道這個軟體能夠工作,並且需要試用一段時間。
你必須在 正在被處理的套件列表
上査看以確定沒有其他人已經開始了工作。如果沒有,則提交一份
ITP (Intent To Package) Bug 報告到 wnpp
pseudo
套件(可以使用
reportbug
)。如果已經有人在處理,則在需要的情況下聯繫他或他們。如果不需要你的幫助,就尋找其他你感興趣且沒有人維護的套件。
軟體 必須有一個許可證。
對於 main 類的軟體,其許可證 必須滿足
Debian Free Software Guidelines (DFSG) 的全部條件 (參考
http://www.debian.org/social_contract#guidelines
)
以及 不能依賴於 main 之外的套件
以滿足 Debian Policy
中對於編譯和運行的要求。正如我們所期望的,main
是容納絕大多數自由軟體的場所。
對於 contrib 類的軟體,其許可證必須滿足 DFSG 的全部條件,但可以依賴於 main 之外的套件以完成編譯或運行。
對於 non-free 類的軟體,其許可證可以不滿足 DFSG 中的一些條件,但至少需要是 可以散佈的。
如果你不清楚你的軟體應該分入哪一類,則把許可證文本發送到
debian-legal@lists.debian.org
請他人提出意見。
程式 不應該 setuid 到 root,甚至可以更好——不 setuid 或 setgid 到任何用戶或組。
這個程式不應該是守護進程,也不應該安裝檔案到
*/sbin
目錄或者以 root 打開任何端口。
程式應當最終以二進位可執行程式的形式呈現,函式庫則較難處理。
程式應當有很好的文件,最好原始碼也容易理解(比如不混亂)。
你應該與程式的作者取得聯繫問一下他是否認爲程式應當被打包,以及他是否對 Debian 友好。能夠詢問作者關於程式的任何問題是非常重要的,不要嘗試打包一個無人維護的軟體。
當然,這些問題都只是爲了安全,並試圖讓你不至於在比如
setuid 守護進程等問題上犯錯誤而激怒了用戶...
當你在打包方面有了更多經驗時,就可以處理這些套件了。但即便是富有經驗的開發人員在遇到疑惑時也會發郵件到
debian-mentors@lists.debian.org
郵件列表諮詢,那裏的人會很樂意提供幫助。
關於這些問題的更多幫助,査看 Debian Developer's
Reference
。
第一件要做的事就是找到並下載原始的原始碼。我假定你已經從作者的首頁上找到了它的原始碼。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]
在你的用戶主目錄下創建一個子目錄,命名爲
debian
或 deb
或任意你覺得合適的其他名字(本例中使用
~/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 用以反安裝已經安裝了的檔案。
非常多的自由軟體是使用 C
和
C++
語言編寫的。其中的有很多使用 Autotools 或 CMake
來使其可以在不同平臺上移植。這些工具被用於生成
Makefile
和其他必須的源檔案,然後這些程式可以使用正常的
make; make install 來編譯和安裝。
Autotools
是
GNU 編譯系統工具,包括 Autoconf
、Automake
、Libtool
和 gettext
。你可以通過
configure.ac
、Makefile.am
和
Makefile.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.ac
和 Makefile.am
等檔案需要一些關於 autoconf
和 automake
的知識。參考 info autoconf 和 info 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
檔案來識別它。
開始打包時原始碼目錄應當是絕對乾淨(原始)的,或者直接使用剛剛解壓縮得到的原始碼。
爲了讓套件可以正確地編譯和構建,如果程式原有的名字不是完全小寫的則必須將其改成小寫,並且應當把原始碼以
packagename-version
的形式命名。
如果程式的名稱超過一個單詞,把它改成一個單詞或縮寫成合適的形式。例如,程式“John's
little editor for X”可以命名爲 johnledx
或
jle4x
,或者隨便你認爲合適的其他名字。它需要符合一定的限制,比如長度不要超過
20 和字符。
還要檢査程式的版本號,它將被包含到套件版本內。如果手中的軟體版本號不是
X.Y.Z
的形式,而是使用日期等形式。那麼可以繼續使用日期來作爲版本號,只要新版本程式的版本號能變得比老闆本大即可。最好能與上游使用相同的版本號,如果上游使用了諸如
09Oct23 的格式,那麼最好將其轉換爲
YYYYMMDD 的格式,此例中爲
20091023,以便保證 dpkg
程式在更新軟體時能正確處理新舊版本。[7]
還有一些程式根本就沒有版本號,這是你應該聯繫上游維護者,看他們是否使用了其他的版本跟蹤方法。
首先我們設置兩個 環境變量,$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
這個檔案名的兩個關鍵特點:
套件名稱和版本是以底線 _ 分隔的。
.tar.gz
副檔名前有 .orig
。
你應該可以注意到 debian
目錄下有了許多模板檔案。這些檔案將在 debian
目錄中的必須內容, 第 4
章 和 debian
目錄下的其他檔案, 第 5 章
一一解釋。你還應該明白,打包不是一個自動的過程,你還需要按照
修改原始碼, 第 3 章
中的方法來修改套件。此後,你還要按照 構建套件, 第 6 章
中敘述的合適的方法來編譯 Debian 套件、按照 檢査套件中的錯誤, 第 7 章
中的方法檢査其中錯誤,最終依照 上傳套件, 第 8 章
的介紹將其上傳。我將對所有的這些步驟進行解釋。
再次強調,作爲一個新維護人員,不推薦創建複雜的套件,例如:
多個二進位套件的套件;
函式庫套件;
核心模組套件;
核心補丁套件;
原始碼不是 tar.gz
也不是 tar.bz2
格式,或
原始碼 tarball 中包含不可散佈的內容。
它們並非特別難於掌握,但確實需要更多的知識,所以我們不在這裏對所有情況進行描述。
如果你在修改過程中不小心刪除或弄壞了某些模板檔案,你可以使用
dh_make
加上 --addmissing 參數來將其還原。
更新一個已存在的套件可能比較複雜,因爲它可能使用舊的技術。請繼續在這裏學習最新的打包技術以便掌握必要的基本功。我們會在稍後的 更新套件, 第 9 章 中回頭講解如何處理這種情況。
[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 下一頁 ]
Debian 新維護人員手冊
版本 1.2.25, 2010-12-21 14:06:56 UTCjoy-mg@debian.org
happyaron.xu@gmail.com
lilingv@gmail.com
ycheng@slat.org
koster@debian.org
osamu@debian.org