debmake [-h] [-c | -k] [-n | -a 软件包名-版本号.orig.tar.gz | -d | -t ] [-p package] [-u version] [-r 修订号] [-z 扩展] [-b "binarypackage, …]" [-e [email protected]] [-f "名称 姓氏"] [-i "构建工具" | -j] [-l license_file] [-m] [-o file] [-q] [-s] [-v] [-w "addon, …"] [-x [01234]] [-y] [-L] [-P] [-T]
debmake 协助从上游源代码构建一个 Debian 软件包,通常做法如下:
请确保将 -b、-f、-l 和 -w 选项的参数使用引号合适地保护起来,以避免 shell 环境的干扰。
为授权+许可证文本而扫描源码,然后退出。
对 debian/copyright 文件和源代码进行比较并退出。
debian/copyright 必须将通用的文件匹配模式放在前部并将个别文件的例外放在后部。
制作一个原生 Debian 源码包,即不涉及 .orig.tar.gz。这样将制作一个“3.0 (native)”格式的包。
如果您正打算打包一个含 debian/* 目录的 Debian 特有的源码树成为一个 Debian 原生软件包的话,还请三思。您可以使用“debmake -d -i debuild”或者“debmake -t -i debuild”命令来创建一个“3.0 (quilt)”格式的非原生 Debian 软件包。唯一的区别是 debian/changelog 文件必须使用非原生软件包对应的命名规范:版本号-修订号。非原生的软件包对下游发行版更友好。
直接使用上游源码压缩包。(-p, -u, -z:被覆盖)
上游源码压缩包可以命名为 package_version.orig.tar.gz 或者 tar.gz。在某些情况下,也可使用 tar.bz2 或 tar.xz。
如果所指定的源码压缩包文件名中包含大写字母,Debian 打包时生成的名称会将其转化为小写字母。
如果所指定的参数是一个指向上游源码压缩包的 URL(http://、https:// 或 ftp://),程序将会使用 wget 或 curl 下载这个压缩包。
先运行“make dist”命令或其等效命令以生成上游源码压缩包并在打包过程中使用。
“debmake -d”命令设计用于在 软件包名/ 目录下使用了上游版本控制系统的场景,且其构建系统支持“make dist”或其等效命令。(如 automake/autoconf、Python distutils 等等)
运行“tar”命令以生成上游源码压缩包并在打包过程中使用。
“debmake -t”命令设计用于在 软件包名/ 目录下使用了上游版本控制系统的场景。除非您使用了 -u 选项或者使用 debian/changelog 文件提供了上游版本号,默认情况下程序将运用协调世界时日期和时间按照 0~%y%m%d%H%M 的格式作为快照的上游版本号,例如 0~1403012359。所生成的压缩包将排除上游版本控制系统中的 debian/ 目录。(它也会排除常见的版本控制系统目录:.git/ .hg/ .svn/ .CVS/。)
设置二进制软件包的指定类型内容,使用一个用逗号分隔的二进制软件包名:类型成对列表;例如,使用完整形式“foo:bin,foo-doc:doc,libfoo1:lib,libfoo-dev:dev”或者使用短形式,“-doc,libfoo1,libfoo-dev”。
这里,二进制软件包是二进制软件包名称,可选的类型应当从下面的类型值中进行选取:
括号内成对的值,例如(any,foreign),是软件包的架构和多架构(Multi-Arch)特性的值,它们将设置在 debian/control 文件中。
大多数情况下,debmake 命令可以有效地从二进制软件包的名称猜测出正确的类型。如果类型的值并不明显,程序将回退到将类型设置为bin。例如,libfoo 设置类型为 lib,而 font-bar 会令程序设置类型为 data,……
如果源码树的内容和类型的设置不一致,debmake 命令会发出警告。
设置电子邮件地址。
默认值为环境变量 $DEBEMAIL 的值。
设置全名。
默认值为环境变量 $DEBFULLNAME 的值。
invoke "buildtool" at the end of execution. buildtool may be “dpkg-buildpackage”, “debuild”, “sbuild”, etc.
默认情况是不执行任何程序。
设置该选项也会自动设置 --local 选项。
运行 dpkg-depcheck 以检查构建依赖和文件路径。检查日志将存储在父目录下。
在存放许可证扫描结果的 debian/copyright 文件末尾添加格式化后的许可证文本。
默认值是添加 COPYING 和 LICENSE 文件,您只需要在许可证文件部分添加额外的文件名即可,并使用“,”分隔各个文件名。
从指定file读取可选参数。(这个选项不适合日常使用。)
文件 file 的内容,将在 para.py 的末尾作为 Python 代码的源代码。例如,软件包描述信息可以使用下述文件来定义。
para['desc'] = 'program short description' para['desc_long'] = '''\ program long description which you wish to include. . Empty line is space + . You keep going on ... '''
在 debian/rules 文件中向 dh(1) 命令的参数中添加额外的 dh(1) 参数以指定所使用的附加组件(addon)。
这里 addon 的值中各项使用“,”进行分隔,例如“-w "python3,autoreconf"”。
对于基于 Autotools 的软件包,autoreconf 作为 addon 运行“autoreconf -i -v -f”,是dh(1) 命令在每次构建软件包的默认行为。
对基于 Autotools 的软件包,如果它们要安装 Python(版本 3) 程序,您需要指定 python3 作为 addon 到 debmake 命令参数,因为这不是显而易见的。但对基于 setup.py 的软件包来说,并不需要指定 python3 作为 addon 到 debmake 命令参数,因为这是显而易见的,debmake 会自动为 dh(1) 命令设置这样的参数。
以模板文件的形式创建配置文件(请注意 debian/changelog、debian/control、debian/copyright 和 debian/rules 文件是构建 Debian 二进制软件包所需的最小文件集合。)
n 的数字大小决定了生成哪些配置模板文件。
对比较正常的源码来说,您可以使用一行命令简单地构建一个自用的 Debian 二进制软件包。测试安装这样生成的软件包通常比传统的“make install”命令安装至 /usr/local 目录更好,因为 Debian 软件包可以使用“dpkg -P …””命令更干净地卸载掉。这里提供构建这类测试软件包的一些例子(这些例子应该在大多数情况下足够使用。如果 -d 选项无法工作,请尝试使用 -t 选项。)
对典型的使用 autoconf/automake 的 C 程序源码树:
对于典型的 Python(版本 3)模块源码树:
对于 package-version.tar.gz 存档里的一个典型 Python*(版本 3) 模块:
对于典型的以 package-version.tar.gz 归档提供的 Perl 模块:
打包工作也许需要额外安装一些专用的帮助软件包。
debmake 的目的是为软件包维护者提供开始工作的模板文件。注释行以 # 开始,其中包含一些教程性文字。您在将软件包上传至 Debian 仓库之前必须删除或者修改这样的注释行。
许可证信息的提取和赋值过程应用了大量启发式操作,因此在某些情况下可能不会正常工作。强烈建议您搭配使用其它工具,例如来自 devscripts 软件包的 licensecheck 工具,以配合 debmake 的使用。
组成 Debian 软件包名称的字符选取存在一定的限制。最明显的限制应当是软件包名称中禁止出现大写字母。这里给出正则表达式形式的规则总结:
请在《Debian 政策手册》的 第 5 章 - Control 文件及其字段 一节中查看其精确定义。
debmake 所假设的打包情景是相对简单的。因此,所有与解释器相关的程序都会默认为“Architecture: all”的情况。当然,这个假设并非总是成立。
请使用 reportbug 命令报告 debmake 软件包的问题与错误。
环境变量 $DEBUG 中设置的字符用来确定日志输出等级。
用法如下:
$ DEBUG=pdfbmeclak debmake ...
查看源码中的 README.developer 文件以了解更多信息。
Copyright © 2014-2021 Osamu Aoki <[email protected]>