本文件默認您使用 squeeze
爲作業系統。如果你需要在 lenny
系統上使用本文件記述的方法,則至少必須安裝 backports 的
dpkg
和 debhelper
套件。
還有幾個類似但更針對某一類軟體的套件,如
dh-make-perl
、dh-make-php
等。
當然,也一定總是有值得打包的新軟體。
當檔案副檔名不足以判斷檔案類型時,可以使用
file
命令來判斷。
需要注意的是,這個程式已經被打包好了,並且從寫這篇文件之初到現在它已經發生了很大的變化。
參考 Autotools
Tutorial
和
/usr/share/doc/autotools-dev/README.Debian.gz
。
Version 字符串可以用 dpkg --compare-versions ver1
op ver2 命令比較。參考 dpkg(1)
man 手冊頁。
以下默認以 Bash 作爲登陸 shell。如果你使用其他的
shell,例如 Z shell,使用它們的設定檔案代替這裏提到的
~/.bashrc
。
如果上游原始碼提供 debian
目錄和內容,運行
dh_make
命令是要加上 --addmissing
參數。新的 3.0 (quilt)
原始碼格式十分強健,在這種情況下不會出現問題。你可能需要爲你的
Debian 套件更新上游提供的 debian
目錄內容。
這裏有幾個候選項:s 爲單個二進位套件(Signle
binary)、i
爲平臺獨立套件(Arch-Independent)、m
爲多個二進位套件(Multiple binary)、l
爲函式庫(Library)、k 爲核心模組(Kernel
module)、n 爲核心補丁(Kernel patch)、b
爲使用 cdbs
。本文件重點介紹使用通過 dh
命令使用 debhelper
打包。本文件側重於單個二進位套件,也涉及平臺獨立和多二進位套件類型的套件。cdbs
套件提供了類似 dh
的其他打包腳本框架,它並不在本文件的介紹範圍內。
你可以通過 quilt --quiltrc /dev/null ... 來運行
quilt
來禁用此設定檔案。
debian/patches
應當在你按照前面所述的步驟運行
dh_make
時生成的。這個例子中我們新創建它,因爲假設的是在更新一個已存在的套件。
對於多個二進位套件,dh_auto_install
將臨時目錄設置爲debian/tmp
,而 dh_install
命令則將檔案按照 debian/package-1.install
和
debian/package-2.install
等檔案的描述將
debian/tmp
中的檔案分別裝入
debian/package-1
和
debian/package-2
等臨時目錄以創建
*.deb
套件。
這只是一個 Makefile
的例子。如果 Makefile
是通過 ./configure
命令生成的,修復該類的
Makefile
的方法是通過 dh_auto_configure
執行
./configure
,並帶上如 --prefix=/usr
的默認選項。
作者已經意識到這不是一個最好的例子,因爲我們的
libncurses
套件現在提供了一個 libcurses.so
的符號鏈接,但作者還沒有想出更好的例子。非常歡迎提出建議
:-)
這種奇怪的情況是 Debian Policy
Manual, Footnotes 48
中詳細描述的一種特性。這不是由於在 debian/rules
中使用 dh
命令所致的,真正的原因是
dpkg-buildpackage
如何運行。相同的情形也適用於
Ubuntu
的自動編譯系統
。
有些人使用無效的發行版名稱,如 UNRELEASED 以防止某些套件在共享的 VCS 中修改時被意外上傳。
此 target 被 dpkg-buildpackage 用於 完整的(重)構建, 第 6.1 節 描述的過程中。
此 target 被 dpkg-buildpackage -B" 用於自動編譯系統, 第 6.2 節 描述的過程中。
此 target 被 dpkg-buildpackage -A 使用。
這使用了新的 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
那樣使編譯過程模糊不清。
你可以通過 dh --no-act target 或
debian/rules -- '--no-act target'
來模擬編譯過程並査看實際要執行的 dh_*
程式。
此處默認 python-support
套件已經安裝在系統中。
對於所有的 dh_*
腳本實際做的工作以及它們可以使用的選項,請閱讀它們的
man 手冊頁和 debhelper
文件。
這些命令支持其他例如 setup.py
的編譯環境,可以通過在套件原始碼目錄執行
dh_auto_build --list 列出。
實際上是依次考慮 distclean、realclean 或 clean 之一併執行。
實際上是依次考慮 test 或 check 並執行。
如果一個套件安裝了
/usr/share/perl5/Debian/Debhelper/Sequence/custom_name.pm
檔案,你應當使用 dh --with custom-name $@
命令激活其功能。
在 dh_pysupport
和 dh_pycentral
命令之間更推薦使用前者,不要使用 dh_python
命令。
在 lenny 下,如果你希望更改某個 dh_*
腳本的行爲,你需要在 rules
中找到相應的行然後進行調整。
gentoo
套件使用 GNU 編譯系統,又稱 Autotools。參考
http://en.wikipedia.org/wiki/GNU_build_system
沒有參數的 dh_auto_build
命令將執行 Makefile
中的第一個 target。
debian/changelog
和 debian/NEWS
總是會被自動安裝。程式會不分大小寫地搜索以下檔案名來檢測上游
changelog:changelog
、changes
、changelog.txt
和changes.txt
。
這取代了已經廢棄的 dh_movefiles(1)
命令,它本是用
files
檔案所設定的。
如果命令沒有 info
訊息頁但在
/usr/share/package
目錄中有其他文件,你應該手工編輯 help2man
命令所創建的 man 手冊頁。
squeeze 的列表和以前的有了較大的調整。
儘管我使用了 Bash 短表達式在此處指出這些檔案是
{post|pre}{inst|rm}
,但仍然建議你在這些 maintainer
scripts 中儘可能地使用純粹的 POSIX (非
Bash)腳本來提供最佳的兼容性。
參考 DebSrc3.0
瞭解轉換到新的 3.0 (quilt) 和 3.0 (native)
原始碼格式時的總結考慮。
實際上新格式還支持多個上游 tarball 和更多的壓縮方法,但這已超出本文件講述的範圍。
有多種不同的補丁維護方式被用於 Debian 套件中,而
quilt
系統則是其中的首選。其他系統還包括
dpatch
、dbs
、cdbs
等。這些中的很多也將補丁保存於 debian/patches/*
檔案中。
如果你需要一個 sponsor 上傳你的套件,這種情況下,清晰的套件分解和對你做出的更改的描述對於套件的審査都非常重要。
你可以使用 --skip-patches
選項來在正常的是否操作後避免應用 3.0 (quilt)
原始碼套件格式中的 quilt
補丁。你也可以在正常解壓後使用 quilt pop -a
恢復這些補丁對源碼的修改。
實際的自動編譯系統涉及到比這篇文件所敘述的複雜許多的預設,這些細節已經超出了本文件的範圍。
和在 pbuilder
中不同,自動編譯系統使用的
sbuild
所維護的 chroot
不強制要求最小化的編譯系統,並可能保持很多套件始終安裝在其中。
pbuilder
套件仍然在改進中,你可以査看最新的官方文件來檢査實際的設定狀況。
此處默認
HOOKDIR="/var/cache/pbuilder/hooks"。你可以在
/usr/share/doc/pbuilder/examples
目錄中找到很多鉤子腳本的例子。
升級你的 stable 套件有規定限制。
對於資深打包人員,有以下幾個可用的資源:
位於 /usr/share/doc/git-buildpackage/manual-html/gbp.html
的
Building Debian Packages with git-buildpackage
常規情形下被設定好的環境變量在此時不會被自動設置。永遠不要將使用這個 快速 方法構建的套件上傳到任何地方。
如果你按照 debuild
命令, 第 6.4 節 中的敘述定義了 /etc/devscripts.conf
或 ~/.devscripts
檔案,就不需要再添加
lintian
選項 -i -I --show-overrides。
dput
套件提供了更多的特性,相比於
dupload
也越來越受歡迎。它使用 /etc/dput
檔案作爲全局設定檔案、~/.dput.cf
作爲用戶設定檔案。它也直接支持 Ubuntu 相關的服務。
參考 ftp://ftp.upload.debian.org/pub/UploadQueue/README
。另外你也可以使用來自
dput
的 dcut
命令。
要獲得需要的日期格式,使用 LANG=C date -R。
如果套件 foo
是使用舊的 1.0
格式的,可以在新解壓的原始碼目錄裏運行 zcat
/path/to/foo_oldversion.diff.gz|patch
-p1 來完成。
如果 uscan
命令下載並更新了原始碼,但沒有運行
uupdate
命令,你應該修正 debian/watch
檔案,使 URL 末尾後帶有 debian uupdate。
如果你的 sponsor 或其他維護者一定反對更新已有的打包風格,則不值得去爲此煩惱或爭論,總是有更重要的事要做。
在 cdbs
(0.4.74)套件中有一些對於 dh_make
創建的非 cdbs
的 rules
檔案的消極描述。不要擔心它們,它們僅是針對於
lenny 中需要列出大串的 dh_*
命令而言的。
你可能使用 splitdiff
命令將 big.diff
分割爲多個有各自作用的補丁。
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