Appendix A. debmake(1) 手冊頁

debmake,用來製作 Debian 原始碼套件的程式

debmake [-h] [-c | -k] [-n | -a 套件名-版本號.orig.tar.gz | -d | -t ] [-p package] [-u version] [-r 修訂號] [-z 擴充套件] [-b "binarypackage, …]" [-e foo@example.org] [-f "名稱 姓氏"] [-i "構建工具" | -j] [-l license_file] [-m] [-o file] [-q] [-s] [-v] [-w "addon, …"] [-x [01234]] [-y] [-L] [-P] [-T]

debmake 協助從上游原始碼構建一個 Debian 套件,通常做法如下:

  • 下載上游原始碼壓縮包(tarball)並命名為 package-version.tar.gz 檔案。
  • 對其進行解壓縮並將所有檔案放置於 package-version/ 目錄之下。
  • package-version/ 目錄中呼叫 debmake,並按需帶上引數。
  • 手工調整 package-version/debian/ 目錄下的檔案。
  • dpkg-buildpackage (usually from its wrapper debuild or sbuild) is invoked in the package-version/ directory to make Debian packages.

請確保將 -b-f-l-w 選項的引數使用引號合適地保護起來,以避免 shell 環境的干擾。

-h, --help
顯示本幫助資訊並退出。
-c, --copyright

為授權+許可證文字而掃描原始碼,然後退出。

  • -c:簡單輸出風格
  • -cc:正常輸出風格(類似 debian/copyright 檔案)
  • -ccc:除錯輸出風格
-k, --kludge

debian/copyright 檔案和原始碼進行比較並退出。

debian/copyright 必須將通用的檔案匹配模式放在前部並將個別檔案的例外放在後部。

  • -k:基本輸出風格
  • -kk:冗長輸出風格
-n, --native

製作一個原生 Debian 原始碼套件,即不涉及 .orig.tar.gz。這樣將製作一個“3.0 (native)”格式的包。

如果您正打算打包一個含 debian/* 目錄的 Debian 特有的原始碼樹成為一個 Debian 原生套件的話,還請三思。您可以使用“debmake -d -i debuild”或者“debmake -t -i debuild”命令來建立一個“3.0 (quilt)”格式的非原生 Debian 套件。唯一的區別是 debian/changelog 檔案必須使用非原生套件對應的命名規範:版本號-修訂號。非原生的套件對下游發行版更友好。

-a package-version.tar.gz, --archive package-version.tar.gz

直接使用上游原始碼壓縮包。(-p, -u, -z:被覆蓋)

上游原始碼壓縮包可以命名為 package_version.orig.tar.gz 或者 tar.gz。在某些情況下,也可使用 tar.bz2tar.xz

如果所指定的原始碼壓縮包檔名中包含大寫字母,Debian 打包時生成的名稱會將其轉化為小寫字母。

如果所指定的引數是一個指向上游原始碼壓縮包的 URL(http://、https:// 或 ftp://),程式將會使用 wgetcurl 下載這個壓縮包。

-d, --dist

先執行“make dist”命令或其等效命令以生成上游原始碼壓縮包並在打包過程中使用。

debmake -d”命令設計用於在 套件名/ 目錄下使用了上游版本控制系統的場景,且其構建系統支持“make dist”或其等效命令。(如 automake/autoconf、Python distutils 等等)

-t, --tar

執行“tar”命令以生成上游原始碼壓縮包並在打包過程中使用。

debmake -t”命令設計用於在 套件名/ 目錄下使用了上游版本控制系統的場景。除非您使用了 -u 選項或者使用 debian/changelog 檔案提供了上游版本號,預設情況下程式將運用協調世界時日期和時間按照 0~%y%m%d%H%M 的格式作為快照的上游版本號,例如 0~1403012359。所生成的壓縮包將排除上游版本控制系統中的 debian/ 目錄。(它也會排除常見的版本控制系統目錄:.git/ .hg/ .svn/ .CVS/。)

-p 套件名, --package 套件名
設定 Debian 套件名稱。
-u 上游版本號, --upstreamversion 版本號
設定上游套件版本。
-r 修訂號, --revision 修訂號
設定 Debian 套件修訂號。
-z 副檔名, --targz 副檔名
設定原始碼壓縮包型別,副檔名=(tar.gz|tar.bz2|tar.xz)。(別名:z, b, x
-b "二進位制套件名[:type],…", --binaryspec "二進位制套件名[:type],…"

設定二進位制套件的指定型別內容,使用一個用逗號分隔的二進位制套件名:型別成對列表;例如,使用完整形式“foo:bin,foo-doc:doc,libfoo1:lib,libfoo-dev:dev”或者使用短形式,“-doc,libfoo1,libfoo-dev”。

這裡,二進位制套件是二進位制套件名稱,可選的類型應當從下面的型別值中進行選取:

  • bin:C/C++ 預編譯 ELF 二進位制程式碼套件(any,foreign)(預設,別名:"",即,空字串
  • data:資料(字型、影象、……)套件(all,foreign)(別名:da
  • dev:程式庫開發套件(any,same)(別名:de
  • doc:文件套件(all,foreign)(別名:do
  • lib:程式庫套件(any,same)(別名:l
  • perl:Perl 指令碼套件(all,foreign)(別名:pl
  • python3: Python (version 3) script package (all, foreign) (alias: py3)
  • ruby:Ruby 指令碼套件(all,foreign)(別名:rb
  • nodejs: Node.js based JavaScript package (all, foreign) (alias: js)
  • script:Shell 指令碼套件(all,foreign)(別名:sh

括號內成對的值,例如(any,foreign),是套件的架構多架構(Multi-Arch)特性的值,它們將設定在 debian/control 檔案中。

大多數情況下,debmake 命令可以有效地從二進位制套件的名稱猜測出正確的型別。如果型別的值並不明顯,程式將回退到將型別設定為bin。例如,libfoo 設定型別lib,而 font-bar 會令程式設定型別data,……

如果原始碼樹的內容和型別的設定不一致,debmake 命令會發出警告。

-e foo@example.org, --email foo@example.org

設定電子郵件地址。

預設值為環境變數 $DEBEMAIL 的值。

-f "名稱 姓氏", --fullname "名稱 姓氏"

設定全名。

預設值為環境變數 $DEBFULLNAME 的值。

-i "構建工具", --invoke "構建工具"

invoke "buildtool" at the end of execution. buildtool may be “dpkg-buildpackage”, “debuild”, “sbuild”, etc.

預設情況是不執行任何程式。

設定該選項也會自動設定 --local 選項。

-j, --judge

執行 dpkg-depcheck 以檢查構建依賴和檔案路徑。檢查日誌將儲存在父目錄下。

  • 套件名.build-dep.logdpkg-depcheck 的日誌檔案。
  • 套件名.install.log:記錄 debian/tmp 目錄下所安裝檔案的日誌。
-l "許可證檔案,…", --license "許可證檔案,…"

在存放許可證掃描結果的 debian/copyright 檔案末尾新增格式化後的許可證文字。

預設值是新增 COPYINGLICENSE 檔案,您只需要在許可證檔案部分新增額外的檔名即可,並使用“,”分隔各個檔名。

-m, --monoarch
強制套件不使用多架構特性。
-o 檔案, --option 檔案

從指定file讀取可選引數。(這個選項不適合日常使用。)

The content of file is sourced as the Python code at the end of para.py. For example, the package description can be specified by the following file.

para['desc'] = 'program short description'
para['desc_long'] = '''\
 program long description which you wish to include.
 .
 Empty line is space + .
 You keep going on ...
'''
-q, --quitearly
在建立 debian/ 目錄下的檔案之前即提前退出程式。
-s, --spec
使用上游配置檔案(例如 Python 裡的 setup.py 等)資訊來初始化套件描述內容。
-v, --version
顯示版本資訊。
-w "addon,…", --with "addon,…"

debian/rules 檔案中在 dh(1) 命令的引數中新增額外的 dh(1) 引數以指定所使用的附加元件(addon)。

The addon values are listed all separated by “,”, e.g., “-w "python3,autoreconf"”.

For Autotools based packages, autoreconf as addon to run “autoreconf -i -v -f” for every package building is default behavior of the dh(1) command.

For Autotools based packages, if they install Python (version 3) programs, setting python3 as addon to the debmake command argument is needed since this is non-obvious. But for setup.py based packages, setting python3 as addon to the debmake command argument is not needed since this is obvious and the debmake command automatically set it to the dh(1) command.

-x n, --extra n

以模板檔案的形式建立配置檔案(請注意 debian/changelogdebian/controldebian/copyrightdebian/rules 檔案是構建 Debian 二進位制套件所需的最小文件集合。)

n 的數字大小決定了生成哪些配置模板檔案。

  • -x0:最少的配置檔案(這是存在任何已有配置檔案時的預設選項)
  • -x1:所有 -x0 提供的檔案以及用於生成單個二進位制套件可能需要的配置檔案。(這是隻生成單個二進位制套件,且不存在其它已有配置檔案時的預設選項)
  • -x2:所有 -x2 提供的檔案以及用於生成多個二進位制套件可能需要的配置檔案。(這是生成多個二進位制套件,且不存在其它已有配置檔案時的預設選項)
  • -x3:所有 -x2 提供的檔案以及不常使用的配置模板檔案。不常使用的配置模板檔案在生成時會帶上 .ex 字尾名以方便對其刪除。如需使用這些配置檔案,請重新命名這些檔案並去除 .ex 的字尾。
  • -x4 選項:全部配置 -x3 檔案加版權宣告檔案範例。
-y, --yes
對所有提示“強制選擇是”(不提示選項“詢問 [是/否]”;重複選項兩次則為“強制選擇否”)
-L, --local
為本地套件生成配置檔案以繞過 lintian(1) 的檢查。
-P, --pedantic
對自動生成的檔案進行嚴格(甚至古板到迂腐程度)的檢查。
-T, --tutorial
在模板檔案中輸出教材註釋行。

對比較正常的原始碼來說,您可以使用一行命令簡單地構建一個自用的 Debian 二進位制套件。測試安裝這樣生成的套件通常比傳統的“make install”命令安裝至 /usr/local 目錄更好,因為 Debian 套件可以使用“dpkg -P …””命令更乾淨地解除安裝掉。這裡提供構建這類測試套件的一些例子(這些例子應該在大多數情況下足夠使用。如果 -d 選項無法工作,請嘗試使用 -t 選項。)

對典型的使用 autoconf/automake 的 C 程式原始碼樹:

  • debmake -d -i debuild

For a typical Python (version 3) module source tree:

  • debmake -s -d -b":python3" -i debuild

For a typical Python (version 3) module in the package-version.tar.gz archive:

  • debmake -s -a package-version.tar.gz -b":python3" -i debuild

對於典型的以 package-version.tar.gz 歸檔提供的 Perl 模組:

  • debmake -a package-version.tar.gz -b":perl" -i debuild

打包工作也許需要額外安裝一些專用的幫助套件。

  • Python (version 3) programs may require the dh-python package.
  • Autotools (Autoconf + Automake) 構建系統可能需要 autotools-devdh-autoreconf 套件。
  • Ruby 程式可能需要 gem2deb 套件。
  • Node.js based JavaScript programs may require the pkg-js-tools package.
  • Java 程式可能需要 javahelper 套件。
  • Gnome 程式可能需要 gobject-introspection 套件。
  • 等等。

debmake 的目的是為套件維護者提供開始工作的模板檔案。註釋行以 # 開始,其中包含一些教材文字。您在將套件上傳至 Debian 倉庫之前必須刪除或者修改這樣的註釋行。

許可證資訊的提取和賦值過程應用了大量啟發式操作,因此在某些情況下可能不會正常工作。強烈建議您搭配使用其它工具,例如來自 devscripts 套件的 licensecheck 工具,以配合 debmake 的使用。

組成 Debian 套件名稱的字元選取存在一定的限制。最明顯的限制應當是套件名稱中禁止出現大寫字母。這裡給出正則表示式形式的規則總結:

  • 上游套件名稱(-p):[-+.a-z0-9]{2,}
  • 二進位制套件名稱(-b):[-+.a-z0-9]{2,}
  • 上游版本號(-u):[0-9][-+.:~a-z0-9A-Z]*
  • Debian 修訂版本(-r): [0-9][+.~a-z0-9A-Z]*

請在《Debian 政策手冊》的 第 5 章 - Control 檔案及其欄位 一節中檢視其精確定義。

debmake 所假設的打包情景是相對簡單的。因此,所有與直譯器相關的程式都會預設為“Architecture: all”的情況。當然,這個假設並非總是成立。

請使用 reportbug 命令報告 debmake 套件的問題與錯誤。

環境變數 $DEBUG 中設定的字元用來確定日誌輸出等級。

  • i:列印資訊
  • p:列出全部全域性引數
  • d:列出所有二進位制套件解析得到的引數
  • f:用於掃描授權資訊的輸入檔名
  • y:授權資訊欄的年份/名稱切分資訊
  • s:format_state 的行掃描器
  • b:content_state 掃描迴圈:迴圈開始
  • m: content_state 掃描迴圈:正則匹配之後
  • e: content_state 掃描迴圈:迴圈結束
  • c:列印授權區段文字
  • l:列印許可證區段文字
  • a:列印作者/翻譯者區段文字
  • k:debian/copyright 各節的排序關鍵字
  • n:debian/copyright 的掃描結果(“debmake -k”)

用法如下:

 $ DEBUG=pdfbmeclak debmake ...

檢視原始碼中的 README.developer 檔案以瞭解更多資訊。

Copyright © 2014-2021 Osamu Aoki <osamu@debian.org>

Expat 許可證

debmake-doc 套件提供了“Debian 維護者指南”手冊,以純文字、HTML 和 PDF 三種格式存放在 /usr/share/doc/debmake-doc/ 目錄下。

See also dpkg-source(1), deb-control(5), debhelper(7), dh(1), dpkg-buildpackage(1), debuild(1), quilt(1), dpkg-depcheck(1), sbuild(1), gbp-buildpackage(1), and gbp-pq(1) manpages.