构建Debian软件包 - 依赖关系是如何工作的?

我正在构建一个Debian软件包的过程中。目标是将一个目录打包成一个.deb文件,并且该文件有两个依赖项,这些依赖项是我创建的其他软件包。
当安装.deb软件包时,我看到了关于缺少依赖项的错误信息,这很好,但即使缺少依赖项,它仍然会转储目录和内容。
我的问题是,这种行为是否合适?如果存在缺少的依赖项,我不希望目录被创建和填充。任何帮助将不胜感激!
谢谢!
dpkg -i hdf5.deb
Selecting previously unselected package hdf5.
(Reading database ... 305222 files and directories currently installed.)
Unpacking hdf5 (from hdf5.deb) ...
dpkg: dependency problems prevent configuration of hdf5:
 hdf5 depends on szip (>= 2.9); however:
  Package szip is not installed.

dpkg: error processing hdf5 (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 hdf5

如果一个软件包的依赖关系未被满足,除非你强制要求软件包管理器这样做,否则该软件包将不会被安装。请问您能否将您运行的命令和完整的错误信息添加到您的问题中? - Florian Diesch
使用dpkg-deb --build命令构建了一个软件包,并成功创建了一个.deb文件。原帖中有输出结果。因此,它可以看到依赖关系,但仍然会创建/填充目录。 - hito
1个回答

你的问题是你正在安装一个你自己构建的软件包,它有一些未安装的依赖项,使用dpkg命令。虽然dpkg可以安装软件包,但它不会解决依赖关系并为您安装缺失的软件包。您需要使用apt命令从存档中安装它们,或者如果您有所需软件包的.deb文件,您需要先安装它,或者与您的新软件包同时使用dpkg命令进行安装。
您所描述的是生成的二进制软件包具有的"Depends",而不是源代码软件包构建所需的"Build-Depends"。在控制文件中将所有二进制软件包运行时依赖项放在"Build-Depends"中,是防止在没有安装它们的情况下构建软件包的好方法。另外,列举出您所有的依赖项是一个良好的做法,而不是依赖于其他您所依赖的软件包也需要这些依赖项来满足依赖关系,以防止在其他软件包中删除依赖项时出现问题。

Dobey, 感谢你的建议。为了简化事情,我想解释一下我的意图。我有一个包含库文件和脚本的目录,我想打包起来。总共有3个包,其中1个依赖于其他2个。现在,如果依赖关系没有满足,我不希望我的主要包“安装”(这里指的是将文件放置在适当的位置)。在我的情况下,我看到了上面的警告,但目录仍然被填充了。希望我能够清楚地解释自己。还请注意,我在这方面的技能水平很低。谢谢! - hito
是的。如果依赖项缺失,dpkg将解压包裹,但无法配置它。如果依赖项缺失且不可用,apt将退出而不下载软件包。 - dobey