章 3. 工具的配置

內容目錄

3.1. 電子郵件地址
3.2. mc
3.3. git
3.4. quilt
3.5. devscripts
3.6. pbuilder
3.7. git-buildpackage
3.8. HTTP 代理
3.9. 私有 Debian 倉庫

build-essential 套件必須在構建環境內預先安裝。

devscripts 套件應當安裝在維護者的工作環境中。

儘管這個不是絕對的要求,但是在維護者的工作環境內裝上並配置好本章節提到的各個常用的套件會有助於維護者高效投入工作。這些軟體可以構成我們共同確立的一個基準工作環境。

如有需要,請同樣按需安裝在“Debian 開發者參考”文中 Debian 維護者工具概覽 一節提到的各個工具。

[注意] 注意

這裡展示的工具配置方式僅作為範例提供,可能與系統上最新的套件相比有所落後。Debian 的開發具有一個移動的目標。請確保閱讀合適的文件並按照需要更新配置內容。

許多 Debian 維護工具識別並使用 shell 環境變數 $DEBEMAIL$DEBFULLNAME 作為作為您的電子郵件地址和名稱。

我們可以通過將下面幾行加入 ~/.bashrc[6] 的方式對這些軟體進行配置。

新增至 ~/.bashrc 檔案. 

DEBEMAIL="your.email.address@example.org"
DEBFULLNAME="Firstname Lastname"
export DEBEMAIL DEBFULLNAME

mc 命令提供了管理檔案的簡單途徑。它可以開啟二進位制 deb 檔案,並僅需對二進位制 deb 檔案按下回車鍵便能檢查其內容。它呼叫了 dpkg-deb 命令作為其後端。我們可以按照下列方式對其配置,以支援簡易 chdir 操作。

新增至 ~/.bashrc 檔案. 

# mc related
export HISTCONTROL=ignoreboth
. /usr/lib/mc/mc.sh

如今 git 命令已成為管理帶歷史的原始碼樹的必要工具。

git 命令的使用者級全域性配置,如您的名字和電子郵件地址,儲存在 ~/.gitconfig 檔案中,且可以使用如下方式配置。

$ git config --global user.name "Name Surname"
$ git config --global user.email yourname@example.com

如果您仍然只習慣 CVS 或者 Subversion 的命令風格,您可以使用如下方式設定幾個命令別名。

$ git config --global alias.ci "commit -a"
$ git config --global alias.co checkout

您可以使用如下命令檢查全域性配置。

$ git config --global --list
[提示] 提示

有必要使用某些圖形介面 git 工具,例如 gitkgitg 命令來有效地處理 git 倉庫的歷史。

quilt 命令提供了記錄修改的一個基本方式。對 Debian 打包來說,該工具需要進行設定,從而在 debian/patches/ 目錄內記錄修改內容,而非使用預設的 patches/ 目錄。

為了避免改變 quilt 命令自身的行為,我們在這裡建立一個用於 Debian 打包工作的命令別名:dquilt。之後,我們將對應內容寫入 ~/.bashrc 檔案。下面給出的第二行為 dquilt 命令提供與 quilt 命令相同的命令行補全功能。

新增至 ~/.bashrc 檔案. 

alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg"
complete -F _quilt_completion $_quilt_complete_opt dquilt

然後我們來建立具有如下內容的 ~/.quiltrc-dpkg 檔案。

d=.
while [ ! -d $d/debian -a `readlink -e $d` != / ];
    do d=$d/..; done
if [ -d $d/debian ] && [ -z $QUILT_PATCHES ]; then
    # if in Debian packaging tree with unset $QUILT_PATCHES
    QUILT_PATCHES="debian/patches"
    QUILT_PATCH_OPTS="--reject-format=unified"
    QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
    QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
    QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:" + \
            "diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"
    if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
fi

請參考 quilt(1) 和 處理大量補丁的方法暨對 Quilt 的介紹 以瞭解如何使用 quilt 命令。

要取得使用範例,請檢視 節 4.8, “第三步(備選):修改上游原始碼”

debsign 命令由 devscripts 套件提供,它可以使用使用者的 GPG 私鑰對 Debian 軟體包進行簽名。

debuild 命令同樣由 devscripts 套件提供,它可以構建二進位制套件並使用 lintian 命令對其進行檢查。lintian 命令的詳細輸出通常都很實用。

您可以將下列內容寫入 ~/.devscripts 檔案來進行配置。

DEBUILD_DPKG_BUILDPACKAGE_OPTS="-i -I -us -uc"
DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"
DEBSIGN_KEYID="Your_GPG_keyID"

用於 dpkg-source 命令的 DEBUILD_DPKG_BUILDPACKAGE_OPTS 中可以額外使用 -i-I 選項以幫助構建原始碼中具有外來無關內容的套件(參見 節 5.15, “構建套件時排除不必要的內容”)。

當前情況下,使用 4096 位的 RSA 金鑰是較好的做法。另見 建立一個新 GPG 金鑰

pbuilder 套件提供了淨室(乾淨的)(chroot)構建環境。[7]

我們可以搭配使用另外幾個輔助套件對其設定。

  • cowbuilder 套件能加速 chroot 建立過程。
  • lintian 套件能找到所構建套件中的缺陷。
  • bashmcvim 套件在構建失敗時用來查詢問題。
  • ccache 套件可以加速 gcc。(可選)
  • libeatmydata1 套件可以加速 dpkg。(可選)
  • 並行執行 make 以提高構建速度。(可選)
[警告] 警告

可選的設定項可能造成負面影響。如果有疑問,請關閉它們。

我們使用如下給出的內容來建立 ~/.pbuilderrc 檔案(所有可選功能均已關閉)。

AUTO_DEBSIGN="${AUTO_DEBSIGN:-no}"
SOURCE_ONLY_CHANGES="${SOURCE_ONLY_CHANGES:-yes}"
PDEBUILD_PBUILDER=cowbuilder
HOOKDIR="/var/cache/pbuilder/hooks"
MIRRORSITE="http://deb.debian.org/debian/"
#APTCACHE=/var/cache/pbuilder/aptcache
APTCACHE=/var/cache/apt/archives
#BUILDRESULT=/var/cache/pbuilder/result/
BUILDRESULT=../
EXTRAPACKAGES="lintian"
#EXTRAPACKAGES="ccache lintian libeatmydata1"

# enable to use libeatmydata1 for pbuilder
#export LD_PRELOAD=${LD_PRELOAD+$LD_PRELOAD:}libeatmydata.so

# enable ccache for pbuilder
#export PATH="/usr/lib/ccache${PATH+:$PATH}"
#export CCACHE_DIR="/var/cache/pbuilder/ccache"
#BINDMOUNTS="${CCACHE_DIR}"

# parallel make
#DEBBUILDOPTS=-j8
[注意] 注意

可以考慮建立從 /root/.pbuilderrc/home/<user>/.pbuilderrc 的符號鏈接以獲得一致的體驗。

[注意] 注意

由於 缺陷 #606542,您可能需要手動將 EXTRAPACKAGES 列出的套件安裝進入 chroot。請見 節 7.10, “chroot”

[注意] 注意

應當在 chroot 環境內外同時安裝上 libeatmydata1 (>=82-2),否則即為關閉 libeatmydata1。該套件在某些構建系統中可能導致競爭情況(race condition)發生。

[注意] 注意

並行的 make 可能在某些已有套件上執行失敗,它同樣會使得構建日誌難以閱讀。

我們可以按如下方式建立觸動指令碼。

/var/cache/pbuilder/hooks/A10ccache

#!/bin/sh
set -e
# increase the ccache caching size
ccache -M 4G
# output the current statistics
ccache -s

/var/cache/pbuilder/hooks/B90lintian

#!/bin/sh
set -e
apt-get -y --allow-downgrades install lintian
echo "+++ lintian output +++"
su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes; :" -l pbuilder
echo "+++ end of lintian output +++"

/var/cache/pbuilder/hooks/C10shell

#!/bin/sh
set -e
apt-get -y --allow-downgrades install vim bash mc
# invoke shell if build fails
cd /tmp/buildd/*/debian/..
/bin/bash < /dev/tty > /dev/tty 2> /dev/tty
[注意] 注意

所有這些指令碼都需要設定為全域性可執行:“-rwxr-xr-x 1 root root”。

[注意] 注意

ccache 的快取目錄 /var/cache/pbuilder/cache 需要為了 pbuilder 命令的使用而設定為全域性可寫:“-rwxrwxrwx 1 root root”。您需要明白這樣會帶來相關的安全隱患。

您也可能需要在 ~/.gbp.conf 中設定全域性配置資訊

# Configuration file for "gbp <command>"

[DEFAULT]
# the default build command:
builder = git-pbuilder -i -I -us -uc
# use pristine-tar:
pristine-tar = True
# Use color when on a terminal, alternatives: on/true, off/false or auto
color = auto
[提示] 提示

這裡的 gbp 命令是 git-buildpackage 命令的一個別名。

您應當在本地設定 HTTP 快取代理以節約查詢 Debian 軟體倉庫的頻寬。可以考慮以下幾種選項:

  • 簡單的 HTTP 快取代理,使用 squid 軟體包。
  • 特化的 HTTP 快取代理,使用 apt-cacher-ng 套件。

您可以使用 reprepro 套件搭建私有 Debian 倉庫。



[6] 這裡假設您正在使用 Bash 並以此作為登入預設 shell。如果您設定了其它登入 shell,例如 Z shell,請使用它們對應的配置檔案替換 ~/.bashrc 檔案。

[7] sbuild 套件提供了另一套 chroot 平臺。