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

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

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

如果我使用dpkg -i --force-depends-version安装依赖包,一切都会正常工作,我从未见过任何问题。

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

答案1

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

  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来安装您的包以及它声明为依赖项的各种包。

答案2

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

相关内容