Мне было интересно, почему 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?
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.