[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 下一頁 ]
現在我們已經爲構建套件做好了準備。
爲保證完整的套件(重)構建能順利進行,你必須保證系統中已經安裝:
build-essential
套件;
列於 Build-Depends 欄位的套件(參考 control
檔案, 第 4.1
節);
列於 Build-Depends-indep 欄位的套件(參考 control
檔案, 第 4.1
節)。
然後在原始碼目錄中執行以下命令:
$ dpkg-buildpackage
這樣會自動完成所有從原始碼套件構建二進位套件的工作,包括:
清理原始碼樹(debian/rules clean)
構建原始碼套件(dpkg-source -b)
構建程式(debian/rules build)
構建二進位套件(fakeroot debian/rules binary)
使用 gpg
簽署 .dsc
檔案
使用 dpkg-genchanges
和 gpg
創建並簽署上傳用的 .changes
檔案
這個過程中你需要做的就是輸入兩次你的 GPG 私鑰密碼。
之後査看上級目錄(~/gentoo
):
gentoo_0.9.12.orig.tar.gz
這是原始的原始碼 tarball,由 dh_make -f ../gentoo-0.9.12.tar.gz 命令重命名以符合 Debian 的標準。
gentoo_0.9.12-1.dsc
這是一個從 control
檔案生成的原始碼概要,可用於
dpkg-source(1)
程式。這個檔案是使用 GPG
簽署過的,以便別人可以確信它確實是你所提供的。
gentoo_0.9.12-1.debian.tar.gz
這個壓縮的 Tar 歸檔包含你的 debian
目錄。其他對於原始碼的修改都由 quilt
補丁存儲於 debian/patches
中。
如果其他人想要重新構建你的套件,他們可以使用以上三個檔案很容易地完成。只需複製三個檔案,再運行 dpkg-source -x gentoo_0.9.12-1.dsc。 [42]
gentoo_0.9.12-1_i386.deb
這是你的二進位套件,可以使用 dpkg
程式安裝或反安裝它,就像其他套件一樣。
gentoo_0.9.12-1_i386.changes
這個檔案描述了當前版本的套件中的全部變更,它被 Debian
FTP
倉庫維護程式用於安裝二進位和原始碼套件。它的是部分從
changelog
和 .dsc
檔案生成的,並使用 GPG
簽名以便別人可以確信它確實是你提供的。
隨着你不斷完善這個套件,程式的行爲會發生變化,也會有更多新特性添加進來。下載你套件的人可以査看這個檔案來快速找到有那些變化,Debian
倉庫維護程式還會把它的內容發表至 debian-devel-announce@lists.debian.org
郵件列表。
.dsc
和 .changes
檔案中很長的數字串是其中提及檔案的 MD5/SHA1/SHA256
校驗和。下載你套件的人可以使用
md5sum(1)
、sha1sum(1)
或 sha256sum(1)
來進行覈對。如果校驗和不符,則說明檔案已被損壞或偷換。
Debian 通過在各種不同構架的計算機上運行 buildd
守護進程組成的 autobuilder network
來支持多種 ports
。儘管這些工作不需要全由你完成,我們現在仍然要大致看看在各種構架上你的套件是如果被構建的。[43]
對於 Architecture: any 的套件,自動編譯系統重構建它們,它確保系統中已經安裝:
build-essential
套件;
列於 Build-Depends 欄位的套件(參考 control
檔案, 第 4.1
節)。
然後在原始碼目錄中執行以下命令:
$ dpkg-buildpackage -B
這樣會自動完成從原始碼套件構建平臺依賴二進位套件的工作,包括:
清理原始碼樹(debian/rules clean)
構建程式(debian/rules build)
構建平臺依賴二進位套件(fakeroot debian/rules binary-arch)
使用 gpg
簽署 .dsc
檔案
使用 dpkg-genchanges
和 gpg
創建並簽署上傳用的 .changes
檔案
這就是你看到你的套件在其他平臺上可用的原因。
儘管通常的打包工作中 Build-Depends-indep
欄位中列出的套件都需要安裝(參考 完整的(重)構建, 第 6.1
節),但是在編譯平臺依賴二進位套件時它們無需在自動編譯系統上安裝。[44]通常打包和自動編譯系統的這種不同爲你指出如何考慮必須的套件應如何放在
debian/control
檔案的 Build-Depends 或
Build-Depends-indep 欄位中(參考 control
檔案, 第 4.1
節)。
orig.tar.gz
檔案
第一次向倉庫上傳套件時要包含 orig.tar.gz
原始碼歸檔。如果 changelog
中的最後一個條目是這個上游版本的第一次上傳,那麼應爲
dpkg-buildpackage
命令傳遞 -sa
選項。相反,-sd 選項會強制將原始的
orig.tar.gz
原始碼歸檔排除在外。
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
pbuilder
套件
對於使用淨室(chroot
)編譯環境來驗證編譯依賴而言,pbuilder
套件是非常有用的。[45]它確保了套件在不同構架上的 sid
發行版環境中的自動編譯器中能成功編譯,避免了總是被歸類於
RC (Release Critical,影響發佈)的嚴重 FTBFS (Fails To Build From
Source,從原始碼編譯失敗) Bug。參考 http://buildd.debian.org/
以更多瞭解 Debian 套件自動編譯系統。
我們通過以下操作來定製 pbuilder
套件。
設置 /var/cache/pbuilder/result
對用戶可寫。
創建一個對用戶可寫的目錄保存鉤子腳本,例如
/var/cache/pbuilder/hooks
在 ~/.pbuilderrc
或 /etc/pbuilderrc
中添加以下內容:
AUTO_DEBSIGN=yes HOOKDIR="/var/cache/pbuilder/hooks"
這使你可以使用 ~/.gnupg/
目錄中的 GPG
私鑰簽署生成的套件。
使用以下命令初始化 pbuilder
chroot
系統:
$ sudo pbuilder create
如果你已經創建了原始碼套件,在包含
foo.orig.tar.gz
、foo.debian.tar.gz
和 foo.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/B90lintian
在
chroot 環境中運行。腳本內容如下:[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-updates、stable/updates
等升級你的 stable 套件。[47]對於這類情況,“我正在運行 sid
系統”
並不是你不爲它們進行升級的充分理由。pbuilder
套件可以幫助你使用到相同 CPU 構架下幾乎所有 Debian 和
Debian 衍生版系統。
參考 http://www.netfort.gr.jp/~dancer/software/pbuilder.html
、pdebuild(1)
、pbuilderrc(5)
和 pbuilder(8)
git-buildpackage
和相似命令
如果你的上游對原始碼使用版本控制系統(VCS
),你也應該考慮使用它們。這會使得合併和提取上游補丁更加簡單。在
Debian 有多個爲不同 VCS 設計的腳本套件來協助 Debian
套件構建。
git-buildpackage
:幫助維護 Git 倉庫中套件的套件。
topgit
:一個 Git 補丁隊列管理器。
svn-buildpackage
:幫助維護 Subversion
倉庫中套件的程式。
cvs-buildpackage
:爲 CVS 原始碼樹設計的 Debian
套件腳本集。
這些套件爲需要 自動化
編譯套件的資深打包人員提供了相比於手工使用
quilt
命令更加整潔的工作環境,本文件裏不會對此進行更多敘述。[48]
對於很大的套件,在調試 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 UTCjoy-mg@debian.org
happyaron.xu@gmail.com
lilingv@gmail.com
ycheng@slat.org
koster@debian.org
osamu@debian.org