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


23

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

如果我dpkg -i --force-depends-version用来安装相关的软件包,那么一切都可以正常工作,我从来没有遇到过问题。

不用手动下载和安装每个软件包,我是否可以让系统假装有特定的软件包版本(如果有更新的版本)?还是有--force-depends-version等效的键apt-get

Answers:


16

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


虽然这足够了。但是链接可能迟早会断开。最好至少在答案中包含恢复指令。我的回答可能会在这里有所帮助askubuntu.com/a/1181415/26246。因此,我们可以参考这个问题,该问题在对等方面有较高的投票权。
user.dz

23

尽管已经接受了一个答案,但内联更好地传达了这一过程:

  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-erlangproviders erlang

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

  5. 花费几秒钟来构建软件包,然后您可以运行 sudo dpkg -i my_package_name*.deb

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.