描述
举例说明:
- 我将从源代码构建
my-app
。 - 它需要一些依赖关系。安装它们
apt-get install foo bar baz
。 - 构建应用程序。
- 安装另一个
hello.deb
依赖于foo
. my-app
一段时间后通过删除整个源文件夹来删除。- 删除 的依赖项
my-app
。
但是,在步骤 6 中,您不能简单地发布apt-get remove foo bar baz
依赖项,因为hello.deb
仍然需要foo
包,因此只应删除bar
和包。baz
提议
为了解决这个问题,可以创建一个虚拟包,声明 , , 的依赖关系,foo
并且我们可以简单地安装这个虚拟包。稍后,我们可以通过卸载这个虚拟包来安全地卸载所有这些依赖项。包装器脚本将动态构建这样的包并安装它:bar
baz
$ apt-get-named install foo bar baz
Intention: for-myapp
问题
这种方法能解决问题吗?对于这样的问题有任何实施的解决方案吗?我们如何为此目的创建一个虚拟包?
答案1
没有现成的工具可以准确地提供这一点,因为 Debian 中的普遍期望是有人会打包my-app
,并且这将是真正的包,确保只要my-app
安装(独立于hello
),依赖项就保持可用。
然而,有两种工具在这种情况下可以派上用场。我怀疑与您最相关的是equivs
,它提供了一种创建具有依赖项的虚拟包的快速方法;看创建仅包含依赖项的 .deb 包了解详情。另一个工具是mk-build-deps
,它用于生成反映另一个包的构建依赖关系的虚拟包,并且在稍微不同的场景中很有用:目标是使给定包的构建依赖关系作为一个单元进行管理。看自动安装 dpkg-checkbuilddeps 检测到的未满足的构建依赖项了解详情。