如何让Debian软件包安装依赖项?

18

我想制作一个简单的Debian软件包,用于安装一个依赖于Qt4库的简单工具。

在控制文件中,我已经定义了它依赖于Qt4库,但是当我测试该软件包时,它显示依赖项无法满足。

问题:

如何让Debian触发apt来安装所需的依赖关系?

虽然找不到相关文档,但我知道apt-get可以实现这一点。


你是否依赖于你的发行版中附带的普通Qt4库?能否请您发布确切的细节,即“依赖”规范和带有错误的apt-get调用? - thiton
听起来你的软件包没问题,但是你使用的apt镜像中缺少依赖项。请发布完整的错误信息。 - Jonathan Hall
dpkg 是一个低级工具,不考虑依赖关系。Carlos 使用 gdebi 的想法是正确的,因为它在运行时会拉取依赖项,而无需使用 apt,正如 Thomas 指出的那样,你也可以使用 apt - NuclearPeon
只需将所需的软件包添加到 PreDepends 部分和 cinst 文件中即可。 - ETech
5个回答

26

如果你想避免创建本地 APT 仓库,你可以执行以下操作:

dpkg -i mypackage.deb
apt-get install --fix-missing

如果你想创建本地仓库,你可以使用reprepro


4
安装软件时,如果出现依赖关系错误或缺失文件,可以使用命令 "# apt-get install -f --fix-missing" 来自动修复。 - kellogs
我应该再次运行 sudo dpkg -i mypackage.deb 吗? - Muhammad Gelbana
在 Debian stretch 中,至少在我运行了 apt-get install --fix-missing 之后,mypackage.deb 已经被成功安装并正常工作。 - HelloWorld101
1
第一行应该是 dpkg --unpack *.deb,这不会出错,并且会将软件包保留在状态中,以便 apt-get install --fix-missing 安装所有内容并配置您的 deb 文件。 - user3710044

17
如果您通过dpkg安装它,它将无法正常工作,因为dpkg不知道在哪里找到其他依赖项。如果您构建自己的存储库,可以通过apt-get进行安装,但第一次比较耗时(并不难,只是第一次需要一些时间来学习)。
另一方面,您可能正在寻找的解决方案是gdebi(您可能需要安装它:apt-get install gdebi-core)。它是一个检查软件包依赖项的工具,并调用apt-get获取和安装它们,然后调用dpkg来安装您的软件包。

嗯,我明白了...问题是,我需要制作一个安装程序。例如,当你下载Skype时,它会以.deb的形式出现。它是否带有所有需要的库?我应该包含我需要的所有库吗?我应该如何依赖apt来获取依赖项?打包依赖项的问题在于它们可能会影响目标系统。您提供的本地仓库的建议对于分发是否有效?想法:我可以在运行.deb时创建该本地仓库,然后在安装后调用apt-get...但这似乎不是一个有效的解决方案... - Nuno Santos
在安装过程中,从apt仓库安装gdebi,然后执行gdebi your-package.deb。它将从该机器上配置的apt仓库中获取所有依赖项(如果它们在仓库中可用)。或者我有任何其他不理解的问题吗? - Carlos Campderrós
gdebi会将已安装的软件包标记为我想要安装的软件包的依赖关系吗? - Trismegistos
2
你需要安装"gdebi-core"而不是"gdebi"软件包;然而,命令行实用程序被称为"gdebi"。 - Shnatsel

12

根据@textshellthis answer中的说法:

starting with apt 1.1 (available in Xenial (16.04), stretch) apt install also allows local files:

sudo apt install ./foo-1.2.3.deb

So much simpler and cleaner.

See the release announcment

这也会安装依赖项,就像普通的apt installapt-get install一样。


当使用Ansible的apt模块并提供一个deb文件时,这也是有效的。 - jamesc

7

1
嗨,我认为Depends: <some dependency>只会检查依赖项是否已安装,并相应地停止deb包的安装。我正在寻找的解决方案是将这些依赖项作为deb安装的一部分自动安装。您能否看一下这个问题:https://dev59.com/fH7aa4cB1Zd3GeqPqXIf - exAres

3

一种方法是在您的计算机上创建一个本地软件包仓库,并将其添加到 /etc/apt/sources.list 中。然后,您可以使用 apt-get 从本地仓库安装软件包,并自动解决依赖关系。

可能有更简单的方法,但我不知道是什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接