"apt-get dist-upgrade" 定義の混乱

"apt-get dist-upgrade" 定義の混乱

によるとman apt-get

「現在インストールされているすべてのパッケージの最新バージョンをインストールするために使用されます」をアップグレードします。

dist-upgrade「アップグレード機能を実行することに加えて、新しいバージョンパッケージの依存関係の変更をインテリジェントに処理できます。」

dist-upgradeのいくつかの定義をインターネットで検索した結果、(まだインストールされていない)新しい依存関係をインストールする必要があるときに使用されることがわかりました。しかし、man apt-get私が理解している限り、定義ではそうではありません。

私はいつもマニュアルページが非常に正確であることを知っていましたが、dist-upgrade定義で「パッケージの新しいバージョンへの依存関係の変更」が正確に何を意味するのか理解していません。これは、同じ依存関係の新しいバージョンで依存関係が変更されたことを意味しますか? 「変更」とは、ある依存関係を削除して別の依存関係をインストールすることを意味しますか、それとも今すぐ置き換えられたバージョンの代わりに同じ依存関係の新しいバージョンをインストールして使用することを意味しますか?アップグレードがすでに新しいバージョンの依存関係をインストールしており、パッケージがこの新しい依存関係を使用する必要があることを「どういうわけか」教えてください。

パッケージAがdist-upgradeが実行されるまでファイルに依存すると仮定しますか?

答え1

phpアップグレード前とpythonパッケージが両方libxml-dev-1.2に依存する状況が発生したとします。

                            +--------------------+
                            | python_3.1         |
+--------------+            |                    |
| php7.0       |            | depends on libxml-dev_1.2
|              |            +-----+--------------+
| depends on libxml-dev_1.2       |
|              |                  v
+------------+-+
             |              +---------------------+
             |              | libxml-dev-1.2      |
             +------------> |                     |
                            |                     |
                            |                     |
                            +---------------------+

aptその後、ローカルインデックスを更新すると、apt-get updatePHPバージョンで利用可能な新しいパッケージバージョンが
表示されます。ただし、実行すると、新しいphpパッケージにlibxml-dev依存関係の更新されたバージョンが必要であることが示され、新しいphpパッケージは次のように言う必要があります。通常、aptはPHP 7.3のインストールまたはアップグレードを満たすために必要なすべての依存関係をインストールしますが、aptを置き換える場合、新しいバージョン(並列実行は実際にはオプションではないことを覚えています)は依存関係要件を満たすためにPython依存関係要件を「中断」します。この場合は何もしませんが、アイテムを見るとapt-cache policy7.3
apt-cache show phplibxml-dev-1.3
libxml-dev-1.2libxml-dev-1.3libxml-dev-1.2libxml-dev-1.3php7.3
apt-get upgrademan apt-getdist-upgrade

dist-upgrade
アップグレード機能を実行することに加えて、dist-upgradeは新しいバージョンのパッケージに対する依存関係の変更をインテリジェントに処理することもできます。 apt-getには、必要に応じて最も重要なソフトウェアをアップグレードしようとする「スマート」クラッシュ解決システムがあります。それほど重要ではないパッケージのコスト。したがって、dist-upgradeコマンドは一部のパッケージを削除できます。 [...]

したがって、apt-get dist-upgradeパッケージをアップグレードするために、パッケージ指定の依存関係に関する規則を曲げたり壊したりする圧力があります。

したがって、これら2つのコマンドは、apt-get dist-upgrade他のコマンドを使用するよりも多くのパッケージをアップグレードします。apt-get upgrade

答え2

依存関係がファイルであるかパッケージであるかによって、両方のシナリオが発生する可能性があります。これに関連して、新しくインストールされた依存関係のために孤立したパッケージがあるかどうかを示すためのdeborphanコマンドがあります。

私は通常、常にdist-upgradeを使用し、時にはクリーンアップのためにapt-get remove $(deborphan)aを実行します。

関連情報