编译好的程序一夜之间被repo版本取代

编译好的程序一夜之间被repo版本取代

Vim 版本更改无需打开新终端,无需重新启动计算机。简单来说,第二天我的电脑就采用了 repo 版本,之前已经被 apt 删除了。

我从源代码编译了 vim,因为我需要一些选项,而这些选项在 repo 版本中没有编译。我之前已经做过几次了,但现在在 XUbuntu 18.04LTS 上,系统忘记了编译的 vim,并且以某种方式拉回了 repo 版本,即我删除的内容,至少我是这么认为的。在不确定我是否正确进行编译和编译后设置后,我遵循这个链接。我还使用过 checkinstall,上次我使用 来拉回 vim8.2 dpkg -i deb_name,其中 deb_name 是 checkinstall 创建的 deb 文件的名称。

我注意到,当编译后的 vim 版本无法识别时,它的安装位置也不可用:

~ $ sudo update-alternatives --install /usr/bin/editor editor /usr/local/bin/vim 1
update-alternatives: error: alternative path /usr/local/bin/vim doesn't exist
~ $ ls -l /usr/local/bin/ | grep vi
lrwxrwxrwx 1 root root      3 Mär 13  2018 ex -> vim
-rwxr-xr-x 1 root root    216 Feb 15  2019 pyvisa-info
-rwxr-xr-x 1 root root    218 Feb 15  2019 pyvisa-shell
lrwxrwxrwx 1 root root      3 Mär 13  2018 rview -> vim
lrwxrwxrwx 1 root root      3 Mär 13  2018 rvim -> vim
lrwxrwxrwx 1 root root      3 Mär 13  2018 view -> vim
lrwxrwxrwx 1 root root      3 Mär 13  2018 vimdiff -> vim

这真的很奇怪,因为我需要执行这个命令来告诉我的系统,vim 是在哪里编译的。

该位置位于本地驱动器上,整体/usr是一个逻辑卷,因此无法断开连接。

sudo apt remove vim vim-runtime gvim vim-common在编译之前已经用 e 删除了 vim 。dpkg -l | grep vim已确认我没有安装 vim 软件包。 shell 还告诉我,Command 'vim' not found.尽管过了一段时间——第二天——vim 又从仓库中出现了:

~ $ dpkg -l vim
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                 Version                 Architecture            Description
 +++-====================================-=======================-=======================-========================================================
ii  vim                                  2:8.0.1453-1ubuntu1.4   amd64                   Vi IMproved - enhanced vi editor

安装 checkinstall 创建的 deb 解决了大约一天的问题:

~/git_repos/vim $ sudo dpkg -i vim_20201104-1_amd64.deb 
[sudo] password for tibenszky: 
dpkg: warning: downgrading vim from 2:8.0.1453-1ubuntu1.4 to 20201104-1
(Reading database ... 487461 files and directories currently installed.)
Preparing to unpack vim_20201104-1_amd64.deb ...
Unpacking vim (20201104-1) over (2:8.0.1453-1ubuntu1.4) ...
Setting up vim (20201104-1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

我不知道什么可能导致这个问题,或者我如何调试和解决这个问题。任何帮助表示赞赏。

更新: 好像 apt 的日常升级覆盖了我的 vim 版本。所以问题变成了“我如何告诉 apt 我想使用我的编译版本,而不是 repo 版本?”。我刚刚发出了命令sudo apt-mark hold vim,希望明天 vim 不会再次更新。我在这里找到了这个命令问题

答案1

请运行grep -i apt /var/log/syslog并检查是否有自动作业为您更新系统。如果存在,那么它可以解释为什么您自己的二进制文件在子系统中被替换alternatives。想必您想阻止这种情况发生

update-alternatives --config editor 0<&-; echo
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path               Priority   Status
------------------------------------------------------------
* 0            /bin/nano           40        auto mode
  1            /bin/ed            -100       manual mode
  2            /bin/nano           40        manual mode
  3            /usr/bin/vim.nox    40        manual mode
  4            /usr/bin/vim.tiny   15        manual mode

Press <enter> to keep the current choice[*], or type selection number:

如果您还没有这样做,请将您自己的二进制文件安装到配置集中

update-alternatives --install /usr/bin/editor editor /usr/local/bin/vim 1

但是,如果您重新运行--config命令(上面),您会发现您尚未切换到您自己的二进制文件。执行此操作,替代子系统将看到一个manual选择,并且应该停止更改您下面的设置。我认为这可能是您错过的步骤

update-alternatives --set editor /usr/local/bin/vim

相关内容