web-dev-qa-db-ja.com

aptアップグレードでx-www-browserがgoogle-chrome-stableに変更されるのはなぜですか?

2回目は、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 with 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)エントリは「自動」モードを選択するために使用され、リストされたバイナリはどの選択を示しているかを理解していると思います使用されます。問題は、最後のアップグレード後にこれを好みのブラウザ(iceweasel)に戻すために、更新の代替手段を使用したと99%確信しているため、「手動モード」になっているはずです。 x-www-browserは、このアップグレードの前に確かにiceweaselを開いていました。

apt upgradeの出力は、私が何らかの理由で間違っていて、iceweaselを開いていたにもかかわらず、これがすでに自動モードになっていることを示していますか?それとも、これはchromeメンテナの悪い習慣の結果であり、アップグレードのたびに自動モードにリセットされますか?

2
ghostly_s

Chromeパッケージのpostinstは、異常なことは何もしません。update-alternatives --installを呼び出すだけです。これにより、代替手段が現在ある場合にのみ、/etc/alternativesのリンクが変更されます。自動モードでは、新しくインストールされたバージョンの優先度が現在の設定よりも高くなります。

update-alternativesは、パッケージが新しくインストールされたか更新されたかを認識または気にしません。 postinstスクリプトは、すべての場合にそれを呼び出します。これは望ましい動作です。パッケージを更新すると、いくつかの選択肢の優先度が変わる可能性があります。

代替案が変更されている場合、唯一の説明は、以前はすでに自動モードであったということです。現在の手動設定を含むパッケージを一時的に削除した場合、つまりiceweaselを一時的に削除した場合は、自動モードに戻った可能性があります。一方、iceweaselのアップグレードは手動設定には影響しません。prermiceweaselスクリプトは、アンインストールまたは構成解除されている場合にのみ代替を正しく削除し、そうでない場合は削除しないためです。アップグレード中です。¹

¹ 逆は当てはまりません。google-chrome-stableprermにはバグがあり、代替を無条件に削除するため、パッケージをアップグレードして代替を手動で/usr/bin/google-chrome-stableに設定した場合は、自動モードに戻ります。繰り返しになりますが、このバグは、代替手段が手動でChromeに設定された場合にのみトリガーされ、代替手段が手動で他の何かに設定された場合の動作には影響しません。

これを制御するポストインストールスクリプトは、Gillesの回答で言及されています。掘り下げてみたところ、 debian chrome postinst script ここにあります。この動作を制御するセクションは2013年に作成されてから変更されていないため、優先度が変更されています除外されます。

スクリプトのupdate-alternatives --install行を試してみたところ、表示されたメッセージは、モードが以前は「自動」であった場合にのみ生成されることがわかりました。私はまた、別の非自明な行動を発見しました。代替が「手動モード」であり、/etc/alternatives/x-www-browserのシンボリックリンクが代替システムを使用するのではなく、ユーザーによって別のバイナリを指している場合、update-alternativesは自動的に変更を認識し、追跡を続行します。構成(バイナリにもリンクグループのエントリがあると想定)。ただし、代替が「自動モード」に設定されている場合、手動でリンクを再ポイントすると、update-alternativesは構成を追跡しなくなります。および代替を再インストールすると、優先度に基づいてリセットされます。

以前に「代替」を低い優先度で再インストールすることによってこの動作を変更したか、「自動モード」から変更せずに手動で新しいシンボリックリンクを作成したと結論付ける必要があります。リンクされたスクリプトで説明されている「200」優先度の背後にあるロジックは完全にばかげていると言うので、原則として優先度を変更しても驚かないでしょう。 ;-)

1
ghostly_s