Debian 新維護人員手冊

1

本文件默認您使用 squeeze 爲作業系統。如果你需要在 lenny 系統上使用本文件記述的方法,則至少必須安裝 backports 的 dpkgdebhelper 套件。

2

還有幾個類似但更針對某一類軟體的套件,如 dh-make-perldh-make-php 等。

3

當然,也一定總是有值得打包的新軟體。

4

當檔案副檔名不足以判斷檔案類型時,可以使用 file 命令來判斷。

5

需要注意的是,這個程式已經被打包好了,並且從寫這篇文件之初到現在它已經發生了很大的變化。

6

參考 Autotools Tutorial/usr/share/doc/autotools-dev/README.Debian.gz

7

Version 字符串可以用 dpkg --compare-versions ver1 op ver2 命令比較。參考 dpkg(1) man 手冊頁。

8

以下默認以 Bash 作爲登陸 shell。如果你使用其他的 shell,例如 Z shell,使用它們的設定檔案代替這裏提到的 ~/.bashrc

9

如果上游原始碼提供 debian 目錄和內容,運行 dh_make 命令是要加上 --addmissing 參數。新的 3.0 (quilt) 原始碼格式十分強健,在這種情況下不會出現問題。你可能需要爲你的 Debian 套件更新上游提供的 debian 目錄內容。

10

這裏有幾個候選項:s 爲單個二進位套件(Signle binary)、i 爲平臺獨立套件(Arch-Independent)、m 爲多個二進位套件(Multiple binary)、l 爲函式庫(Library)、k 爲核心模組(Kernel module)、n 爲核心補丁(Kernel patch)、b 爲使用 cdbs。本文件重點介紹使用通過 dh 命令使用 debhelper 打包。本文件側重於單個二進位套件,也涉及平臺獨立和多二進位套件類型的套件。cdbs 套件提供了類似 dh 的其他打包腳本框架,它並不在本文件的介紹範圍內。

11

你可以通過 quilt --quiltrc /dev/null ... 來運行 quilt 來禁用此設定檔案。

12

debian/patches 應當在你按照前面所述的步驟運行 dh_make 時生成的。這個例子中我們新創建它,因爲假設的是在更新一個已存在的套件。

13

對於多個二進位套件,dh_auto_install 將臨時目錄設置爲debian/tmp,而 dh_install 命令則將檔案按照 debian/package-1.installdebian/package-2.install 等檔案的描述將 debian/tmp 中的檔案分別裝入 debian/package-1debian/package-2 等臨時目錄以創建 *.deb 套件。

14

這只是一個 Makefile 的例子。如果 Makefile 是通過 ./configure 命令生成的,修復該類的 Makefile 的方法是通過 dh_auto_configure 執行 ./configure,並帶上如 --prefix=/usr 的默認選項。

15

作者已經意識到這不是一個最好的例子,因爲我們的 libncurses 套件現在提供了一個 libcurses.so 的符號鏈接,但作者還沒有想出更好的例子。非常歡迎提出建議 :-)

16

這種奇怪的情況是 Debian Policy Manual, Footnotes 48 中詳細描述的一種特性。這不是由於在 debian/rules 中使用 dh 命令所致的,真正的原因是 dpkg-buildpackage 如何運行。相同的情形也適用於 Ubuntu 的自動編譯系統

17

有些人使用無效的發行版名稱,如 UNRELEASED 以防止某些套件在共享的 VCS 中修改時被意外上傳。

18

此 target 被 dpkg-buildpackage 用於 完整的(重)構建, 第 6.1 節 描述的過程中。

19

此 target 被 dpkg-buildpackage -B" 用於自動編譯系統, 第 6.2 節 描述的過程中。

20

此 target 被 dpkg-buildpackage -A 使用。

21

這使用了新的 debhelper V7 特性。它的設計理念在 Not Your Grandpa's Debhelper 中有詳細解釋。這個幻燈片被 debhelper 上游作者於 DebConf9 時展示。在 lenny 中,dh_make 會創建一個複雜很多的 rules 檔案,其中帶有一系列 dh_* 腳本命令來完成所需要的各個 target。這個新的 dh 命令更加簡單靈活。你仍然可以通過 override_dh_* target 來對任意 target 進行定義。參考 定製 rules 檔案, 第 4.4.3 節。它僅是基於 debhelper 套件而不像 cdbs 那樣使編譯過程模糊不清。

22

你可以通過 dh --no-act targetdebian/rules -- '--no-act target' 來模擬編譯過程並査看實際要執行的 dh_* 程式。

23

此處默認 python-support 套件已經安裝在系統中。

24

對於所有的 dh_* 腳本實際做的工作以及它們可以使用的選項,請閱讀它們的 man 手冊頁和 debhelper 文件。

25

這些命令支持其他例如 setup.py 的編譯環境,可以通過在套件原始碼目錄執行 dh_auto_build --list 列出。

26

實際上是依次考慮 distcleanrealcleanclean 之一併執行。

27

實際上是依次考慮 testcheck 並執行。

28

如果一個套件安裝了 /usr/share/perl5/Debian/Debhelper/Sequence/custom_name.pm 檔案,你應當使用 dh --with custom-name $@ 命令激活其功能。

29

dh_pysupportdh_pycentral 命令之間更推薦使用前者,不要使用 dh_python 命令。

30

lenny 下,如果你希望更改某個 dh_* 腳本的行爲,你需要在 rules 中找到相應的行然後進行調整。

31

gentoo 套件使用 GNU 編譯系統,又稱 Autotools。參考 http://en.wikipedia.org/wiki/GNU_build_system

32

沒有參數的 dh_auto_build命令將執行 Makefile 中的第一個 target。

33

debian/changelogdebian/NEWS 總是會被自動安裝。程式會不分大小寫地搜索以下檔案名來檢測上游 changelog:changelogchangeschangelog.txtchanges.txt

34

這取代了已經廢棄的 dh_movefiles(1) 命令,它本是用 files 檔案所設定的。

35

如果命令沒有 info 訊息頁但在 /usr/share/package 目錄中有其他文件,你應該手工編輯 help2man 命令所創建的 man 手冊頁。

36

squeeze 的列表和以前的有了較大的調整。

37

儘管我使用了 Bash 短表達式在此處指出這些檔案是 {post|pre}{inst|rm},但仍然建議你在這些 maintainer scripts 中儘可能地使用純粹的 POSIX (非 Bash)腳本來提供最佳的兼容性。

38

參考 DebSrc3.0 瞭解轉換到新的 3.0 (quilt)3.0 (native) 原始碼格式時的總結考慮。

39

實際上新格式還支持多個上游 tarball 和更多的壓縮方法,但這已超出本文件講述的範圍。

40

有多種不同的補丁維護方式被用於 Debian 套件中,而 quilt 系統則是其中的首選。其他系統還包括 dpatchdbscdbs 等。這些中的很多也將補丁保存於 debian/patches/* 檔案中。

41

如果你需要一個 sponsor 上傳你的套件,這種情況下,清晰的套件分解和對你做出的更改的描述對於套件的審査都非常重要。

42

你可以使用 --skip-patches 選項來在正常的是否操作後避免應用 3.0 (quilt) 原始碼套件格式中的 quilt 補丁。你也可以在正常解壓後使用 quilt pop -a 恢復這些補丁對源碼的修改。

43

實際的自動編譯系統涉及到比這篇文件所敘述的複雜許多的預設,這些細節已經超出了本文件的範圍。

44

和在 pbuilder 中不同,自動編譯系統使用的 sbuild 所維護的 chroot 不強制要求最小化的編譯系統,並可能保持很多套件始終安裝在其中。

45

pbuilder 套件仍然在改進中,你可以査看最新的官方文件來檢査實際的設定狀況。

46

此處默認 HOOKDIR="/var/cache/pbuilder/hooks"。你可以在 /usr/share/doc/pbuilder/examples 目錄中找到很多鉤子腳本的例子。

47

升級你的 stable 套件有規定限制。

48

對於資深打包人員,有以下幾個可用的資源:

49

常規情形下被設定好的環境變量在此時不會被自動設置。永遠不要將使用這個 快速 方法構建的套件上傳到任何地方。

50

如果你按照 debuild 命令, 第 6.4 節 中的敘述定義了 /etc/devscripts.conf~/.devscripts 檔案,就不需要再添加 lintian 選項 -i -I --show-overrides

51

dput 套件提供了更多的特性,相比於 dupload 也越來越受歡迎。它使用 /etc/dput 檔案作爲全局設定檔案、~/.dput.cf 作爲用戶設定檔案。它也直接支持 Ubuntu 相關的服務。

52

參考 ftp://ftp.upload.debian.org/pub/UploadQueue/README。另外你也可以使用來自 dputdcut 命令。

53

要獲得需要的日期格式,使用 LANG=C date -R

54

如果套件 foo 是使用舊的 1.0 格式的,可以在新解壓的原始碼目錄裏運行 zcat /path/to/foo_oldversion.diff.gz|patch -p1 來完成。

55

如果 uscan 命令下載並更新了原始碼,但沒有運行 uupdate 命令,你應該修正 debian/watch 檔案,使 URL 末尾後帶有 debian uupdate

56

如果你的 sponsor 或其他維護者一定反對更新已有的打包風格,則不值得去爲此煩惱或爭論,總是有更重要的事要做。

57

cdbs (0.4.74)套件中有一些對於 dh_make 創建的非 cdbsrules 檔案的消極描述。不要擔心它們,它們僅是針對於 lenny 中需要列出大串的 dh_* 命令而言的。

58

你可能使用 splitdiff 命令將 big.diff 分割爲多個有各自作用的補丁。


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