web-dev-qa-db-ja.com

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

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で実行できないのでしょうか?

392

apt-get manual から:

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.

そして、新しい apt 14.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-headerslinux-headers-3.0.0-12linux-headers-3.0.0-13の両方によって提供される仮想パッケージであり、 dist-upgrade、ただしupgradeによるものではありません。

326
jcollado

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を使用するためのキューです。

135
pablomme

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

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

33
psusi

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

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

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

11
david6

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

apt full-upgrade

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

apt upgrade

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

-duBtrotterS

1