My code works, I don’t know why.

國王的耳朵是驢耳朵

打包Debian 套件時加入自己的Patch方式

| Comments

在打包Debian套件,有時候會需要從更改原本套件,也就是說需要在打包時自行apply patch。而Debian套件可以透過quilt協助管理patch。Debian New Maintainers’ Guide建議方式如下。

  • 確認有安裝quilt
  • 修改~/.bashrc加入:
~/.bashrc
1
2
alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg"
complete -F _quilt_completion $_quilt_complete_opt dquilt
  • 新增~/.quiltrc-dpkg
~/.quiltrc-dpkg
1
2
3
4
5
6
7
8
9
10
11
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
  • 打包Debian產生patch時使用dquilt而不是quilt

~/.quiltrc-dpkg說明

不要被這堆符號嚇到(先承認我一開使有被嚇到)。這邊可以看到為什麼要把quilt打包成quilt:

  • QUILT_PATCHES:產生的patch會放在debian/patches目錄而不是預設的patches目錄
  • QUILT_PATCH_OPTS:讓quilt呼叫patch執行檔apply patch時被退貨要使用unified格式
  • QUILT_REFRESH_ARGSQUILT_DIFF_ARGS:讓quilt呼叫diff執行檔指定
    • -p ab:使用a/file b/file的diff格式而不是dir.orig/file dir/file的表示方法
    • 產生patch檔案內不包含timestamp及index的資訊
  • QUILT_COLORS:不用解釋吧

參考資料

Comments