软件包冲突
当您遇到一个软件包试图安装另一个软件包已经提供的文件(例如,可以使用 FEATURES=collision-protect
检测到)时,您必须在提交 ebuild 之前解决此问题,或者如果您在现有软件包中遇到此问题,请提交有关该软件包的错误报告(请参见下文以了解一些例外情况)。文件冲突至关重要,因为如果 "foo" 提供了文件 /usr/bin/example
并且 "bar" 将覆盖它,并且之后 "bar" 被取消合并,Portage 将删除 /usr/bin/example
,因此很可能会破坏 "foo"。
最明显的解决方法是向想要安装该文件的两个软件包添加一个阻塞依赖项,这样它们就不能同时安装。但是,除非这两个软件包也存在其他阻止彼此安装的原因,否则应尽可能避免这种情况,而应修复该软件包,这可能包括以下步骤之一或多项:
- 使 "foo" (R)DEPEND 于 "bar" 并且不安装冲突文件。
- 在
src_install
或pkg_preinst
中从 "foo" 中删除冲突文件。 - 将冲突文件移动到一个新的子软件包中,并使 "foo" 和 "bar" 都 (R)DEPEND 于该软件包。
- 更改 "foo" 或 "bar" 安装冲突文件的位置。
在某些情况下,冲突文件无法真正修复或不那么重要,当前已知的例外情况是 Perl 模块手册页(覆盖 Perl 本身的手册页)和 CONFIG_PROTECT
保护的文件(仍然应该修复,但并不那么重要,因为 Portage 不会覆盖它们)。