升级一个改道的包,dpkg 错误

Gau*_*ier 5 upgrade apt dpkg

我已经安装了ack(替代 grep)。在基于 debian 的系统中,由于包名 ack 已经存在(完全不同的东西),所以该包被称为“ack-grep”。

安装说明提到的方式,让用户使用命令ack,如果它是ack-grep

在 Debian 衍生的发行版上,ack 被打包为“ack-grep”,因为“ack”已经存在。如果您只是通过以下方式安装:

$ sudo apt-get install ack-grep 
Run Code Online (Sandbox Code Playgroud)

您的 ack 将被称为“ack-grep”,每次调用要输入的字符多 167%。这对你可怜的手指来说是可悲的。

要创建本地分流,将 ack-grep 重命名为 ack,首先安装 ack-grep 包,如上图所示。然后,运行:

$ sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。现在当我尝试升级我的系统时,apt-get upgrade由于转移而抱怨:

Unpacking ack-grep (2.12-2) over (2.12-1) ...
dpkg: error processing archive /var/cache/apt/archives/ack-grep_2.12-2_all.deb (--unpack):
 trying to overwrite `/usr/bin/ack', which is the diverted version of `/usr/bin/ack-grep'
Run Code Online (Sandbox Code Playgroud)

很好,dpkg 找到了分流,并尝试覆盖/usr/bin/ack,但为什么没有成功?

我尝试按照说明重做转换:

$ sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep 
Leaving 'local diversion of /usr/bin/ack-grep to /usr/bin/ack'
Run Code Online (Sandbox Code Playgroud)

,但仍然在apt-get upgradedpkg抱怨。

这是正常的吗?我应该怎么做才能更新改道?有没有办法让它自动化,或者让它在我下次工作时正常工作apt-get upgrade

小智 8

我找到了一个方法来修复它,首先删除转移:

dpkg-divert --package ack-grep --local --remove --rename --divert /usr/bin/ack /usr/bin/ack-grep

apt-get upgrade 在那之后工作正常。