如何欺骗apt依赖关系?

可能重复:
如何创建一个自动安装其他软件包的元软件包? 我想使用Frescobaldi(一款Lilypond编辑器),但官方仓库中打包发布的lilypond版本(2.12.3;lilypond类似于用于乐谱的TeX)有点旧,因为我想使用一些全新的功能。所以我只是克隆了他们的git仓库,并从那里安装了它。
现在我的问题是,我如何告诉apt,我已经手动满足了对lilypond的依赖,这样它就不会尝试安装另一个副本了?
2个回答

对于你实际提供依赖的地方,我建议使用checkinstall进行安装。 checkinstall基本上取代了make install,并生成一个适当的.deb软件包,然后安装它。这不仅可以让你更好地删除或升级软件包(在必要时),还能满足其他应用程序的依赖关系。
另一种方法是编写一个虚假的小软件包,它不提供任何文件,但声称提供你想要的任何内容。我认为最简单的方法是使用一个叫做equivs的应用程序:
sudo apt-get install equivs
equivs-control lilypond

# edit your fake package so it has the right versions, names, description, etc
nano lilypond

equivs-build lilypond
sudo dpkg -i lilypond-dummy*.deb

有第三种方法,简单但潜在危险:只需从标准仓库安装它,然后用你生成的文件替换它的文件。锁定软件包的版本,以防止升级。这个方法可能会出错,所以只有在无法使用checkinstall或其他方式伪装软件包时才这样做。

有没有一种方法可以不调整构建过程?就像在apt的数据库中伪造一个条目一样? - FUZxxl
@FUZxxl 这就是我在第二段所说的。但在你继续之前,正如我所说的,“checkinstall”为您做了更多的事情,而不仅仅是满足依赖关系。 - Oli
@FUZxxl 我已经添加了关于equivs的部分。 - Oli

你应该使用dhmakesudo check install而不是sudo make install。这样你就可以创建一个deb包(check install也会安装deb包),安装最新版本的lilypond ^^。
如果你仍然拥有源代码(以及编译后的目标文件/Makefile等),你可以在不需要重新下载的情况下进行操作。