如何假装一个包版本安装?
作为早期采用者并使用每日11.04版本,我有时会遇到某些软件包需要早于我安装的软件包的早期版本的情况。 通常,所需包的较新(但拒绝)版本提供其旧版本的所有function。
如果我使用dpkg -i --force-depends-version
来安装依赖包,一切正常,我从来没有遇到过问题。
而不是手动下载和安装每个软件包,我可以让系统假装有更新的时候安装了特定的软件包版本吗? 或者是apt-get
的--force-depends-version
密钥等效吗?
你可以使用equivs 包创建一个虚拟包来伪造正在安装的给定包。 这里有一些说明。
尽管已经接受了一个答案,但是将所接受的内容更好地传达了这个过程:
有一个名为equivs
的Debian软件包能够创建虚拟软件包。 通过运行sudo apt-get install -y equivs
安装它
安装完成后,使用以下命令生成模板“control”文件: equivs-control postfix
(将postfix
替换为您的软件包名称)。 在我的情况下,我可能会使用备用包名称,例如postfix-custom
或其他但我的自定义包满足或Provides
postfix
的安装依赖性(再次替换你想要的任何包的postfix
。
一旦生成了模板控制文件,我通常会删除很多注释掉的语句(以#
开头的语句)。 我想特别保留的是Provides:
语句,我可以说我的包提供了我试图伪造的其他包提供的function,例如Provides: postfix
告诉Debian / Ubuntu依赖解析机制我的包- 无论名称 – 提供目标包的相同function,再次postfix
或其他。 这允许我独立于目标包命名我的包,以避免混淆。 Erlang Factory用他们的东西做这件事,例如esl-erlang
提供erlang
。
最后,一旦创建了模板控制文件,就可以使用equivs-build
生成假包,例如equivs-build /path/to/generated/control/file
。 构建软件包需要几秒钟,然后您可以运行sudo dpkg -i my_package_name*.deb
对于高级用户,如果模板控制文件具有Requires:
dependency行,则可能需要使用gdebi
类的工具来安装包以及它声明为依赖项的各种包。