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