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


Debian 新維護人員手冊
第 6 章 - 構建套件


現在我們已經爲構建套件做好了準備。


6.1 完整的(重)構建

爲保證完整的套件(重)構建能順利進行,你必須保證系統中已經安裝:

然後在原始碼目錄中執行以下命令:

     $ dpkg-buildpackage

這樣會自動完成所有從原始碼套件構建二進位套件的工作,包括:

這個過程中你需要做的就是輸入兩次你的 GPG 私鑰密碼。

之後査看上級目錄(~/gentoo):

.dsc.changes 檔案中很長的數字串是其中提及檔案的 MD5/SHA1/SHA256 校驗和。下載你套件的人可以使用 md5sum(1)sha1sum(1)sha256sum(1) 來進行覈對。如果校驗和不符,則說明檔案已被損壞或偷換。


6.2 自動編譯系統

Debian 通過在各種不同構架的計算機上運行 buildd 守護進程組成的 autobuilder network 來支持多種 ports。儘管這些工作不需要全由你完成,我們現在仍然要大致看看在各種構架上你的套件是如果被構建的。[43]

對於 Architecture: any 的套件,自動編譯系統重構建它們,它確保系統中已經安裝:

然後在原始碼目錄中執行以下命令:

     $ dpkg-buildpackage -B

這樣會自動完成從原始碼套件構建平臺依賴二進位套件的工作,包括:

這就是你看到你的套件在其他平臺上可用的原因。

儘管通常的打包工作中 Build-Depends-indep 欄位中列出的套件都需要安裝(參考 完整的(重)構建, 第 6.1 節),但是在編譯平臺依賴二進位套件時它們無需在自動編譯系統上安裝。[44]通常打包和自動編譯系統的這種不同爲你指出如何考慮必須的套件應如何放在 debian/control 檔案的 Build-DependsBuild-Depends-indep 欄位中(參考 control 檔案, 第 4.1 節)。


6.3 在上傳時包含 orig.tar.gz 檔案

第一次向倉庫上傳套件時要包含 orig.tar.gz 原始碼歸檔。如果 changelog 中的最後一個條目是這個上游版本的第一次上傳,那麼應爲 dpkg-buildpackage 命令傳遞 -sa 選項。相反,-sd 選項會強制將原始的 orig.tar.gz 原始碼歸檔排除在外。


6.4 debuild 命令

你可以使用 debuild 命令來進一步自動化 dpkg-buildpackage 的構建過程。參考 debuild(1)

debuild 命令的自定義可以通過 /etc/devscripts.conf~/.devscripts 實現。我建議至少添加以下幾項:

     DEBSIGN_KEYID="Your_GPG_keyID"
     DEBUILD_LINTIAN=yes
     DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"

這樣套件會使用指定的 ID 的 GPG 私鑰簽署(對於 sponsor 套件有好處),並使用 lintian 命令對套件做最大程度的檢査。

在普通用戶帳號中可以使用以下這樣簡單的命令清理原始碼並重構建套件:

     $ debuild

請注意用於包含 orig.tar.gz 原始碼歸檔的 dpkg-buildpackage 參數 -sa 可以這樣傳遞:

     $ debuild -sa

還可以簡單地清理原始碼樹:

     $ debuild clean

6.5 pbuilder 套件

對於使用淨室(chroot)編譯環境來驗證編譯依賴而言,pbuilder 套件是非常有用的。[45]它確保了套件在不同構架上的 sid 發行版環境中的自動編譯器中能成功編譯,避免了總是被歸類於 RC (Release Critical,影響發佈)的嚴重 FTBFS (Fails To Build From Source,從原始碼編譯失敗) Bug。參考 http://buildd.debian.org/ 以更多瞭解 Debian 套件自動編譯系統。

我們通過以下操作來定製 pbuilder 套件。

這使你可以使用 ~/.gnupg/ 目錄中的 GPG 私鑰簽署生成的套件。

使用以下命令初始化 pbuilder chroot 系統:

     $ sudo pbuilder create

如果你已經創建了原始碼套件,在包含 foo.orig.tar.gzfoo.debian.tar.gzfoo.dsc 檔案的目錄中執行下面的命令來更新 pbuilder chroot 系統以便執行構建。

     $ sudo pbuilder --update
     $ sudo pbuilder --build foo.dsc

請注意用於包含 orig.tar.gz 原始碼歸檔的 dpkg-buildpackage 參數 -sa 可以這樣傳遞:

     $ sudo pbuilder --build --debbuildopts "-sa" foo.dsc

新構建的套件將被放置於 /var/cache/pbuilder/result/ 且屬主不是 root。

如果你已經更新了原始碼樹但沒有生成對應的原始碼套件,在存放 debian 目錄的目錄裏執行:

     $ sudo pbuilder --update
     $ pdebuild

請注意用於包含 orig.tar.gz 原始碼歸檔的 dpkg-buildpackage 參數 -sa 可以這樣傳遞:

     $ pdebuild --debbuildopts "-sa"

你可以使用 pbuilder --login --save-after-login 命令登錄到這個 chroot 環境中並按照需要對其進行設定。通過 ^D (Control-D)離開這個 shell 時環境會被保存。

最新版的 lintian 命令可以通過設置鉤子腳本 /var/cache/pbuilder/hooks/B90lintianchroot 環境中運行。腳本內容如下:[46]

     #!/bin/sh
     set -e
     install_packages() {
         apt-get -y --force-yes install "$@"
         }
     install_packages lintian
     echo "+++ lintian output +++"
     su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes" - pbuilder
     # use this version if you don't want lintian to fail the build
     #su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes; :" - pbuilder
     echo "+++ end of lintian output +++"

sid 編譯套件需要使用 sid 環境。在現實中 sid 存在很多問題以至於你不願意將整個系統都遷移到其上。pbuilder 可以在這種情況下很好地解決問題。

你可能需要通過 stable-proposed-updatesstable/updates 等升級你的 stable 套件。[47]對於這類情況,“我正在運行 sid 系統” 並不是你不爲它們進行升級的充分理由。pbuilder 套件可以幫助你使用到相同 CPU 構架下幾乎所有 Debian 和 Debian 衍生版系統。

參考 http://www.netfort.gr.jp/~dancer/software/pbuilder.htmlpdebuild(1)pbuilderrc(5)pbuilder(8)


6.6 git-buildpackage 和相似命令

如果你的上游對原始碼使用版本控制系統(VCS),你也應該考慮使用它們。這會使得合併和提取上游補丁更加簡單。在 Debian 有多個爲不同 VCS 設計的腳本套件來協助 Debian 套件構建。

這些套件爲需要 自動化 編譯套件的資深打包人員提供了相比於手工使用 quilt 命令更加整潔的工作環境,本文件裏不會對此進行更多敘述。[48]


6.7 快速重構建

對於很大的套件,在調試 debian/rules 的過程中你可能不想對整個套件進行重構建。僅用於測試目的,你可以不重新構建原始碼套件而使用以下的方法創建 .deb 檔案[49]:

     $ fakeroot debian/rules binary

或者可以僅査看它是否能通過編譯:

     $ fakeroot debian/rules build

一旦完成了調試,記住要按照前面所將的正常過程重構建你的套件。你可能無法正常上傳用此種方法構建的 .deb 檔案。


[ 上一頁 ] [ 目錄 ] [ 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