「dist-upgrade」とは何ですか?なぜ「upgrade」以上にアップグレードするのですか?


395

なぜupgradeシステムの特定の部分をアップグレードしたくないのかと疑問に思ってdist-upgradeいました。実行後の例を次に示しますapt-get upgrade

apt-get upgrade

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

apt-get dist-upgrade

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-headers-3.0.0-13 linux-headers-3.0.0-13-generic
  linux-image-3.0.0-13-generic
The following packages will be upgraded:
  linux-generic linux-headers-generic linux-image-generic
3 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 48.5 MB of archives.
After this operation, 215 MB of additional disk space will be used.
Do you want to continue [Y/n]?

言い換えれば、なぜこれを実行できないのupgradeですか?

回答:


327

apt-getマニュアルから:

upgrade
   upgrade is used to install the newest versions of all packages
   currently installed on the system from the sources enumerated in
   /etc/apt/sources.list. Packages currently installed with new
   versions available are retrieved and upgraded; under no
   circumstances are currently installed packages removed, or packages
   not already installed retrieved and installed. New versions of
   currently installed packages that cannot be upgraded without
   changing the install status of another package will be left at
   their current version. An update must be performed first so that
   apt-get knows that new versions of packages are available.

dist-upgrade
   dist-upgrade in addition to performing the function of upgrade,
   also intelligently handles changing dependencies with new versions
   of packages; apt-get has a "smart" conflict resolution system, and
   it will attempt to upgrade the most important packages at the
   expense of less important ones if necessary. So, dist-upgrade
   command may remove some packages. The /etc/apt/sources.list file
   contains a list of locations from which to retrieve desired package
   files. See also apt_preferences(5) for a mechanism for overriding
   the general settings for individual packages.

そして、apt14.04以降で利用可能な新しいツールを使用すると:

full-upgrade
   full-upgrade performs the function of upgrade but may also remove
   installed packages if that is required in order to resolve a
   package conflict.

あなたの特定のケースでは、私は、例えば、それが見るlinux-headersの両方で提供される仮想パッケージですlinux-headers-3.0.0-12linux-headers-3.0.0-13、それがで扱うパッケージのインストールや削除のようなもののように聞こえるdist-upgradeが、ではないことでupgrade


4
14.04.1未満のfull-upgradeオプションとして表示されませんapt-get
-nobar

私は知っていなかったaptのどちらかが、彼がリンクされmanページによると、完全に切り抜いたコマンドのようです
BlueWizard

18
@nobarのオプションでaptあり、オプションではないので、表示されませんapt-get... :-)試してみてくださいman apt
ハスター

さて、私は検索し、私が見つけた最も初期のリンクは(ジェシー・テストと合理的な縫い目た2014年の終わりに出てきた)のUbuntu 15.10のためであるmanpages.ubuntu.com/manpages/wily/en/man8/apt.8.html
Zボソン

6
@Zbosonええ、14.04は2011年ではなく、2014年4月に出てきました...パターンをご覧ください。
タイジー

137

apt-get upgradeパッケージが新しいバージョンに置き換えられる場合に限られますが、パッケージを追加または削除する必要はありません。たとえば、Firefoxの新しいバージョンはでインストール可能ですapt-get upgrade

ただしapt-get upgrade、更新されたバージョンで追加または削除が必要な場合は機能しません。たとえば、カーネルをlinux-image-3.2.0-10-genericインストールしてlinux-image-3.2.0-11-generic表示された場合、linux-image-genericパッケージは新しいバージョンに依存するように更新されます。新しいカーネルをインストールするには、を実行する必要がありますapt-get dist-upgrade

どのように注意apt-get upgradeカーネルパッケージがされていることを言うだろうheld back。それがを使用するためのキューですapt-get dist-upgrade


2
パーフェクト!:Dさらに2つの質問... Ubuntuのグラフィカルなアップデートマネージャーは何を使用しますか?推奨されるものは何ですか?
THpubs

11
グラフィカルユーティリティ、update-managerapt-get直接使用しません。代わりに、と呼ばれるバックエンドで動作しaptdaemonます。の標準機能はのモードとモードのupdate-manager混合です。パッケージを追加できますが、削除はできません-削除が必要な場合は「部分アップグレード」ツールを呼び出します。コマンドラインを使用する場合は、を使用します。パッケージが「保留」されていると報告された場合は、実行して残りの更新を取得します。upgradedist-upgradeapt-getapt-get upgradeapt-get dist-upgrade
パブロム

33

基本的にアップグレードは、既存のパッケージをあるバージョンから別のバージョンにのみアップグレードします。他のパッケージをアップグレードするために必要な場合でも、パッケージをインストールまたは削除しません。カーネルの更新の場合、linux-genericパッケージをアップグレードするには新しいlinux-3.0.0-13-genericパッケージをインストールする必要があり、アップグレードではパッケージのインストールまたは削除が拒否されるため、linux-genericのアップグレードは拒否されます。

パッケージ間のさまざまな非互換性により、他のパッケージをアップグレードするために一部のパッケージを削除する必要があり、dist-upgradeも必要になる場合があります。カーネルの更新は、処理方法により、常にdist-upgradeが必要です。カーネルパッケージが更新されるのではなく、毎回完全に新しいカーネルパッケージが作成され、カーネルメタパッケージは古いカーネルパッケージではなく新しいカーネルパッケージに依存するように更新されます。これは、新しいカーネルの起動で問題が発生した場合に、ブートメニューから古いカーネルを選択して回復できるように、古いカーネルバージョンを保持するために行われました。


2
最高の要点。それでも、特定のパッケージを保持する方法は?
0xC0000022L

11

このapt-get upgradeコマンドは通常、現在インストールされているパッケージへの更新(または修正)のみをインストールします。通常、たとえば、Mozilla Firefoxの新しいリリースは、このコマンドでインストールされます。

ただし、通常、大きな変更(パッケージの削除またはGRUBの更新が必要な場合)の新しいリリースはインストールapt-get upgradeされません。たとえば、新しいLinuxカーネル(linux-image-3.xx-xx-genericなど)が利用可能な場合、パッケージはインストールされません。

新しいカーネルをインストールするには、を実行する必要がありますapt-get dist-upgrade。を実行apt-get upgradeすると、特定のパッケージが保留されたと通知されるため、通知されます。それが使用するキューです:apt-get dist-upgrade


12
これは誤解を招きます。適宜変更されdist-upgradeない限り、新しいリリースにアップグレードしませんsources.list(それでも、Ubuntuでのアップグレードのサポートされた方法ではありません)。で新しいカーネルがインストールされるとdist-upgrade、それはUbuntuの新しいリリースではありません。それは単なる新しいパッケージです。さらに、「またはGRUBの更新が必要」という主張は誤りです。sudo apt-get upgradeパッケージが削除されず、新しいパッケージがインストールされている限り、GRUBを更新する必要がある状況でパッケージを完全にアップグレードできます。update-grubいつものように自動的に実行されます。
エリアケイガン

2
あなたは自分の答えを書く必要があります。それは私の明快さを追加しないからです。
david6

2
エリアが言ったことに加えて、本質的なポイントはapt-get upgradeパッケージを削除または追加しないことです。パッケージの修正に新しいパッケージが必要な場合、更新は保留されます。 pablommeの答えは、正確性が低くなるように修正したものの方が優れているので、読者の方にはぜひお勧めします。
チャンホーSuh

1
訂正:apt-get upgrade決してインストールしていないか、削除するパッケージを。カーネルのアップグレードは新しいパッケージとしてパッケージ化されるため、apt-get upgradeカーネルはアップグレードされません。カーネルのアップグレードがないという事実は、GRUBの設定として「主要な」変化は、違いの理由ではないupgradedist-upgrade
ミッコランタライネン

1

最適なオプションは次のとおりです。

apt full-upgrade

-パッケージのアップグレード時に依存関係を自動処理します。一方:

apt upgrade

-パッケージのアップグレード時に依存関係を自動処理しません。

- duBtrotterS

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.