.deb 包中的 DEBIAN 还是 debian?

.deb 包中的 DEBIAN 还是 debian?

我正在尝试创建一个 .deb 包,但不确定包的文件结构。包含controlchangelogrules等的目录应该命名为DEBIAN还是debian

我正在使用它dpkg-deb来打包它,它似乎需要DEBIAN,我试图使用 Lintian 来检查它,但它无法识别changelogcopyright文件。Lintian 抛出错误debian-changelog-file-missing和,no-copyright-file但后来警告unknown-control-file changelogunknown-control-file copyright。查看这一页,它建议使用debian,我将目录重命名为该目录,但会导致dpkg-deb失败。阅读Debian 政策手册,它通常debian在示例中使用,但偶尔也会使用DEBIAN,这让我怀疑在某些情况下是否两者都需要。正确的做法是什么?

答案1

当创建包时,您有一个debian目录,其中包含制作包所需的数据(文件control、、rules等)changelogdpkg-deb不是制作包的常用方法 - 它只是提供了一种快速组装包的方法。您通常使用dpkg-buildpackage

答案2

来源软件包(即尚未编译的源代码树)使用小写debian目录。例如,如果您用来dpkg-buildpackage编译 C 程序并生成二进制 .deb,您将拥有如下源代码树:

foo-1.0/
 ├─debian/
 │  ├─changelog
 │  └─control
 ├─main.c
 ├─main.h
 └─Makefile

大写字母DEBIAN显然只出现在二进制包(即已编译的 .deb 文件本身)在其“control.tar”档案中。

然而,根据 dpkg 文档,这个“DEBIAN”目录是历史遗留问题非常旧的 dpkg 软件包格式(如 2000 年之前;请参阅man deb-oldman deb)。所有新的 .deb 软件包都将控制文件直接放在“control.tar”档案的顶层:

$ tar -tf control.tar
./changelog
./control
./postinst

相关内容