Что такое "dist-upgrade" и почему он обновляется чаще, чем "upgrade"?

Мне было интересно, почему upgrade иногда не хочет обновлять определенные части системы, в то время как dist-upgrade делает. Вот пример после запуска apt-get upgrade:

apt-get upgrade:

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get upgradeReading package lists... DoneBuilding dependency tree       Reading state information... DoneThe following packages have been kept back:  linux-generic linux-headers-generic linux-image-generic0 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-upgradeReading package lists... DoneBuilding dependency tree       Reading state information... DoneCalculating upgrade... DoneThe 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-genericThe following packages will be upgraded:  linux-generic linux-headers-generic linux-image-generic3 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?

От 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.

И с новым 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-headers это виртуальный пакет, который предоставляется обоими linux-headers-3.0.0-12 и linux-headers-3.0.0-13 и это похоже на установку и удаление пакетов, выполняемых dist-upgrade, но не с помощью upgrade.

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.

В принципе, обновление приведет только к обновлению существующих пакетов с одной версии на другую. Он не будет устанавливать или удалять пакеты, даже если это необходимо для обновления других. В случае обновлений ядра для обновления пакета linux-generic требуется установка нового linux-3.0.0-13- универсальный пакет, и поскольку обновление отказывается устанавливать или удалять пакеты, оно отказывается обновлять linux-generic.

Иногда различные несовместимости между пакетами требуют удаления некоторых пакетов для обновления других, и для этого также потребуется dist-upgrade. Обновления ядра всегда будут требовать dist-upgrade из-за того, как они обрабатываются. Вместо обновления пакета ядра каждый раз создается совершенно новый пакет ядра, а метапакет ядра обновляется, чтобы зависеть от нового пакета ядра вместо старого. Это было сделано для того, чтобы вы сохранили старые версии ядра, чтобы в случае возникновения проблем с загрузкой нового ядра вы могли выбрать старое из меню загрузки и восстановить.

То 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.

Ваш лучший вариант - это:

apt full-upgrade

-который автоматически обрабатывает зависимости при обновлении пакетов; тогда как:

apt upgrade

- не выполняет автоматическую обработку зависимостей при обновлении пакетов.