如何使 Debian 软件包安装依赖项?
Posted
技术标签:
【中文标题】如何使 Debian 软件包安装依赖项?【英文标题】:How to make Debian package install dependencies? 【发布时间】:2012-01-18 14:34:51 【问题描述】:我想制作一个简单的 Debian 包来安装一个依赖于 Qt4 库的简单工具。
在控制文件中,我定义它依赖于 Qt4 库,但是,当我测试包时,它说无法满足依赖关系。
问题:
如何让 Debian 触发器也适合安装依赖项?
找不到该文档,但我知道 apt-get 可以做到这一点。
【问题讨论】:
您是否依赖于您的发行版随附的普通 Qt4 库?您能否发布确切的详细信息,即“取决于”规范和有错误的 apt-get 调用? 听起来你的包是正确的,但是你使用的 apt 镜像中不存在依赖项。请发布您的完整错误消息。dpkg
是一个低级工具,不考虑依赖关系。 Carlos 使用 gdebi 的想法是正确的,因为它会在您运行它时引入依赖项,而不必使用 apt
,正如 Thomas 指出的那样,您也可以使用它。
只需将所需的包添加到 PreDepends 部分和 cinst 文件中
【参考方案1】:
一种方法是在您的计算机上创建一个本地软件包存储库并将其添加到 /etc/apt/sources.list。然后,您可以使用 apt-get 从本地存储库安装软件包,并自动解析依赖项。
可能有更简单的方法,但我不知道那会是什么。
【讨论】:
【参考方案2】:如果您通过dpkg
安装它,它将无法工作,因为dkpg
不知道在哪里可以找到其他依赖项。如果你建立自己的仓库,你可以通过apt-get
来做,但第一次这样做有点费时(这并不难,只是第一次需要一些时间来学习一些“新”的东西)。
另一方面,您可能正在寻找的解决方案是 gdebi
(您可能需要安装它:apt-get install gdebi-core
)。它是一个检查包的依赖关系并调用apt-get
来获取和安装它们,然后调用dpkg
来安装你的包的工具。
【讨论】:
嗯。我明白了……问题是。我需要做一个安装程序。例如。当您下载 Skype 时,它会以 .deb 的形式出现。它是否带来了它需要的所有库?我应该包括我需要的所有库吗?我应该如何依靠 apt 来获取依赖项?打包依赖项的问题是它们可能会弄乱目标系统。您对本地代表的建议是否对分发有效。想法:我可以在运行 .deb 时创建该本地代表,然后在安装后调用 apt-get ......但这似乎不是一个有效的解决方案...... 在安装过程中,从apt repo安装gdebi,然后执行gdebi your-package.deb
。它将从该机器中配置的 apt 存储库中获取所有依赖项(如果它们在存储库中可用)。或者还有什么我不明白的问题?
gdebi 会将已安装的软件包标记为我要安装的软件包的依赖项吗?
你想要“gdebi-core”,而不是“gdebi”包;但是,命令行实用程序称为“gdebi”。【参考方案3】:
如果您要创建 Debian 软件包,则在debian/
目录控制文件中指定其依赖项;我相信 debian/control
会为此目的使用 Depends:
指令。
我自己也不太清楚,但是http://www.debian.org/doc/manuals/maint-guide/有说明;特别是,http://www.debian.org/doc/manuals/maint-guide/dreq.en.html#control 似乎是开始寻找的正确位置。
【讨论】:
您好,我认为Depends: <some dependency>
只会检查是否安装了依赖项,并会相应地停止安装 deb 包。我正在寻找的解决方案是自动安装这些依赖项作为 deb 安装的一部分。请你看看这个问题:***.com/questions/22907113/…【参考方案4】:
如果您想避免创建本地 APT 存储库,您可以这样做:
dpkg -i mypackage.deb
apt-get install --fix-missing
如果您确实想创建本地存储库,可以使用 reprepro。
【讨论】:
# apt-get install -f --fix-missing 我应该再次运行sudo dpkg -i mypackage.deb
吗?
没有。在 Debian 中,在我运行 apt-get install --fix-missing
之后,至少安装了 mypackage.deb
并且工作正常。
第一行应该是dpkg --unpack *.deb
这不会出错,并且会使包处于apt-get install --fix-missing
安装所有内容并配置您的deb文件的状态。【参考方案5】:
每个@textshell 在this answer:
从 apt 1.1 开始(在 Xenial (16.04) 中可用,stretch)
apt install
也允许本地文件:sudo apt install ./foo-1.2.3.deb
简单多了。
见release announcment
这也将安装依赖项,就像普通的apt install
或apt-get install
。
【讨论】:
这也适用于使用 Ansibleapt
模块并为其提供 deb
文件。以上是关于如何使 Debian 软件包安装依赖项?的主要内容,如果未能解决你的问题,请参考以下文章
Gitlab CE 8.1.3 安装手册(Debian/Ubuntu)