现在第二次,我刚刚跑步apt upgrade
并发生了这种情况:
[...]
Setting up google-chrome-stable (48.0.2564.116-1) ...
update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/x-www-browser (x-www-browser) in auto mode
[...]
我正在用 拉 chrome deb http://dl.google.com/linux/chrome/deb/ stable main
。我对 apt 的理解是不稳定的,但通常这不是只在第一次安装软件包或使用时才应该发生的操作类型吗dpkg reconfigure
?每次我都必须重置我的首选浏览器,这非常烦人并且感觉不合适apt upgrade
。
升级后,这就是update-alternatives
我看到的:
$ update-alternatives --config x-www-browser
There are 3 choices for the alternative x-www-browser (providing /usr/bin/x-www-browser).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/google-chrome-stable 200 auto mode
1 /usr/bin/chromium 40 manual mode
2 /usr/bin/google-chrome-stable 200 manual mode
3 /usr/bin/iceweasel 70 manual mode
Press enter to keep the current choice[*], or type selection number:
我发现这张表相当混乱,但感谢这个问题我相信我理解第一个 ( 0
) 条目仅用于选择“自动”模式,列出的二进制文件指示将使用哪个选择。问题是,我 99% 确信我在上次升级后使用 update-alternatives 将其切换回我喜欢的浏览器 (iceweasel),所以它应该处于“手动模式”。x-www-browser
在这次升级之前肯定是打开了iceweasel。
输出是否apt upgrade
表明我在某种程度上弄错了,并且已经处于自动模式,即使它正在打开iceweasel?或者这是 chrome 维护人员不良做法的结果,并且每次升级时都会重置为自动模式?
答案1
Chrome 软件包的 postinst 没有任何异常。它只是调用update-alternatives --install
./etc/alternatives
仅当替代版本当前处于自动模式并且新安装的版本具有比当前设置更高的优先级时,才会更改链接。
update-alternatives
不知道也不关心该软件包是新安装的还是更新的。 postinst 脚本在所有情况下都会调用它。这是期望的行为:包的更新可能会更改其某些替代方案的优先级。
如果替代方案发生变化,唯一的解释是它之前已经处于自动模式。如果您暂时删除了包含当前手动设置的软件包,即如果您暂时删除了iceweasel
.另一方面,升级iceweasel
不会影响手动设置,因为正确prerm
的脚本iceweasel
仅在卸载或取消配置时删除替代项,而不是在升级时删除替代项。
反之则不然:prerm
ofgoogle-chrome-stable
有一个 bug,它会无条件地删除替代项,因此,如果您升级软件包并将替代项手动设置为/usr/bin/google-chrome-stable
,它将返回到自动模式。再次强调,此错误仅在手动将替代项设置为 Chrome 时才会触发,它不会影响将替代项手动设置为其他内容时发生的情况。
答案2
Gilles 的回答中提到了控制此操作的安装后脚本;我做了一些挖掘并发现了debian chrome postinst 脚本这里。控制此行为的部分自 2013 年编写以来一直没有更改,因此排除了优先级更改的可能性。
我对update-alternatives --install
脚本中的行进行了一些实验,并确定我看到的消息确实只有在模式之前为“自动”时才会生成。我还发现了另一个不明显的行为。如果替代方案处于“手动模式”,并且/etc/alternatives/x-www-browser
用户将符号链接指向另一个二进制文件而不是使用替代系统,update-alternatives
则将自动识别更改并继续跟踪配置(假设该二进制文件也有一个条目链接组)。但如果替代设置为“自动模式”,手动重新指向链接将导致update-alternatives
不再跟踪配置,并且重新安装替代方案将根据优先级重置它。
我必须得出结论,我之前要么通过重新安装具有较低优先级的“替代”来修改此行为,要么更有可能手动创建一个新的符号链接而不从“自动模式”更改。我想说链接脚本中解释的“200”优先级背后的逻辑是完全荒谬的,所以如果我只是原则上修改优先级,我不会感到惊讶。 ;-)