为什么更新会覆盖从源代码构建的 Vim?

为什么更新会覆盖从源代码构建的 Vim?

我从源代码构建 Vim,并安装它checkinstall.不久软件及更新警告 Vim 有更新。但安装后,Vim 路径被更改,另一个构建取代了它,我的源构建消失了。知道发生了什么事吗?

答案1

我构建了 Vim,因此它安装在自定义目录中。我这样调用配置:

configure --prefix=/usr/local/mybuild/vim --mandir=/usr/local/mybuild/vim/share/man --without-local-dir ...

那我就做

make
make test
make install

那么可执行文件是/usr/local/mybuild/vim/bin/vim.

为了更新替代链接,我执行了以下操作。仅需要一次,而不是每次之后都需要make install

update-alternatives --install /usr/bin/editor editor /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/eview eview /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/evim evim /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/ex ex /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/gview gview /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/gvim gvim /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/gvimdiff gvimdiff /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/rgview rgview /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/rgvim rgvim /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/rview rview /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/rvim rvim /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/vi vi /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/view view /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/vim vim /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/vimdiff vimdiff /usr/local/mybuild/vim/bin/vim 1200

我选择了高优先级(1200),这样系统安装就不会替换链接。

现在 Vim 是/usr/bin/vim,它是一个到 的链接/etc/alternatives/vim,而它又是一个到 的链接/usr/local/mybuild/vim/bin/vim。因此,调用vim开始了我的 Vim 私人构建。

要查看 vim 的替代方案是如何配置的,您可以运行update-alternatives --display vim.在我的机器上它产生以下输出:

$ update-alternatives --display vim
vim - auto mode
  link best version is /usr/local/mybuild/vim/bin/vim
  link currently points to /usr/local/mybuild/vim/bin/vim
  link vim is /usr/bin/vim
/usr/bin/vim.basic - priority 30
/usr/bin/vim.gtk3 - priority 50
/usr/local/mybuild/vim/bin/vim - priority 1200

答案2

发生了以下两件事之一:

  1. 您使用的软件包名称与您的发行版相同,但您的发行版更新软件包具有更高的版本。因此,包管理器很高兴将您的自定义构建“升级”到您的发行版版本。解决方案:删除发行版的软件包并为本地软件包使用不同的名称(例如local-vim)。如果必须使用相同的名称(例如,由于依赖关系),请使用更高的版本。例如,在 Debian 上,您可以添加纪元。

  2. 您将 vim-from-source 安装到了 中/usr,并且发行版包中的文件使用相同的名称。因此您的文件被覆盖。不太可能,因为很多包管理器会对此大喊大叫...解决方案是使用不同的路径(例如/opt/usr/local)或不安装发行版包。

相关内容