web-dev-qa-db-ja.com

「update-alternatives」と「dpkg-reconfigure」

From buntu 14.04 bashのデフォルトのシェルはなぜですか?

Debian派生物では、ルートとして/bin/shダッシュを実行することにより、デフォルトのdpkg-reconfigureとしてDashとBashを切り替えることができます。

update-alternativesdpkg-reconfigureの両方を使用して、/bin/のシンボリックリンクがリンクする実行可能ファイルを変更できるのは正しいですか?

はいの場合、この目的のために、update-alternativesdpkg-reconfigureの違いは何ですか?

ありがとう。

1
Tim

update-alternativesは、実際には/binの下、またはその他の場所でシンボリックリンクを管理するために使用できます。 それが目的です 。協力パッケージまたは手動セットアップが必要です—さまざまな代替手段を登録する必要があります。

dpkg-reconfigureはまったく特定されておらず、パッケージのインストール後のメンテナスクリプトのみを実行します。そのため、その動作は、構成に使用される特定のパッケージに完全に依存します。 bashおよびdashの場合、メンテナスクリプトは/bin/shシンボリックリンクを処理するため、はい、この特定のケースではdpkg-reconfigureがシンボリックリンクの管理に使用されます。

bashdashupdate-alternativesを使用して/bin/shを管理しない理由は、可能性が有効になっているときにupdate-alternativesが有効になっていないためです。 /bin/shなどの機密ファイルを信頼できるほど堅牢であると見なされます。 anythingがうまくいかず、/bin/shが削除されるか、存在しないファイルを指すようになると、システムはほとんど役に立たなくなり、修正するのは難しい。正しく起動することすらできません...したがって、bashdashは、/bin/shが常に使用できるように細心の注意を払っています。これには、インストール前の「スクリプト」(依存関係のループを回避するために実際にはバイナリ)での注意深い処理、dpkg-divertを含むトリック、およびインストール後のスクリプトでの最後の処理が含まれます。これらすべての設計の詳細については、 bug#34717 (19年前)を参照してください。

システム内のどのバイナリが代替を使用して処理され、どのバイナリが(メンテナスクリプトからの)迂回を使用して処理されるかを判断するには、対応するツール、特にすべての迂回を一覧表示するdpkg-divert --listを使用できます。 update-alternatives --listの場合、関心のある代替グループを知る必要がありますが、代替はすべて/etc/alternatives内のファイルへのシンボリックリンクであるため、簡単に見つけることができます。

4
Stephen Kitt

update-alternativesコマンドでは、/ bin内のシンボリックリンクが指す代替を管理するために、すべての代替がそれに登録されている必要があります。

代替システムは、一度に複数のシンボリックリンクを管理でき、複数の代替実装を処理できるため、非常に柔軟性があります。2つ以上がインストールされている場合にどちらを選択するかを決定するのに役立つ重みを与え、適切に選択することもできます。アンインストールされた場合、次に高い重みがあります。

dpkg-reconfigure dashが使用するスキームは、dpkgの迂回システムを使用します。1つのパッケージ(bash)は/bin/shを出荷しますが、他のパッケージはそれを「迂回」して実装でオーバーライドできます。

dpkgの流用システムはシンボリックリンクに限定されず(ファイルを流用することもできます)、update-alternativesなどのシステムを採用するために変更する元のシンボリックリンク(またはファイル)を出荷するメインパッケージを必要としません。

迂回システムは代替システムほど柔軟ではありません。通常、迂回の最上位に配置するように構成するパッケージに依存し、多くの場合、構成をまったく行いません(新しいパッケージをインストールするだけでファイルが自動的に迂回されます)以前にインストールされたパッケージから、構成なしで。)これらの制限により、dpkgの迂回システムを使用して3つ以上の選択肢を実装することも困難になります。

2
filbranden