如何伪造安装的软件包版本?

Iva*_*van 30 apt dpkg

作为早期采用者并使用 11.04 每日构建,我有时会遇到一些包需要比我安装的包更早版本的其他包的情况。通常所需软件包的较新(但被拒绝)版本提供其旧版本的所有功能。

如果我dpkg -i --force-depends-version用来安装依赖包,一切正常,我从来没有遇到过问题。

不是手动下载和安装每个软件包,我可以让系统假装在有更新版本时安装了特定的软件包版本吗?或者是否有--force-depends-version等效的键apt-get

Jon*_*ver 31

尽管已经接受了答案,但内联接受的答案可以更好地传达过程:

  1. 有一个名为的 Debian 软件包equivs可以创建虚拟软件包。通过运行安装它sudo apt-get install -y equivs

  2. 安装后,您可以使用以下命令生成模板“控制”文件:(equivs-control postfix替换postfix为您的包名称)。在我的情况下,我可能会使用备用包名称,例如postfix-custom或其他任何但让我的自定义包实现或Provides安装依赖项postfix(再次替换postfix您想要的任何包。

  3. 生成模板控制文件后,我通常会删除很多注释掉的语句(以 开头的语句#)。我特别喜欢保留的Provides:声明是我可以说我的包提供了我试图伪造的另一个包提供的功能,例如Provides: postfix告诉 Debian/Ubuntu 依赖项解析机制我的包——无论名称——再次提供与目标包相同的功能postfix。这允许我独立于目标包命名我的包以避免混淆。Erlang Factory 用他们的东西来做到这一点,例如esl-erlang提供erlang

  4. 最后,一旦创建了模板控制文件,您就可以使用它equivs-build来生成假包,例如equivs-build /path/to/generated/control/file.

  5. 构建包需要几秒钟,然后就可以运行了 sudo dpkg -i my_package_name*.deb

对于高级用户,如果你的模板控制文件有一个Requires:依赖行,你可能想使用一个工具gdebi来安装你的包以及它声明为依赖的各种包。


fra*_*ous 19

您可以使用该equivs包创建一个虚拟包来伪造正在安装的给定包。这里有一些说明。