Что такое «отказ от обновления» и почему он обновляется больше, чем «увеличение»?

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

apt-get upgrade:

rimmer @ rimmer-Lenovo-IdeaPad-S10-2: ~ $ sudo apt-get upgrade
Чтение списков пакетов ... Готово
Создание дерева зависимостей
Чтение информации о состоянии ... Готово
Следующие пакеты были сохранены:
  linux-generic linux-headers-generic linux-image-generic
0 обновлено, 0 вновь установлено, 0 удалено и 3 не обновлены.

в сравнении с apt-get dist-upgrade:

rimmer @ rimmer-Lenovo-IdeaPad-S10-2: ~ $ sudo apt-get dist-upgrade
Чтение списков пакетов ... Готово
Создание дерева зависимостей
Чтение информации о состоянии ... Готово
Расчет обновления ... Готово
Будут установлены следующие пакеты NEW:
  linux-headers-3.0.0-13 linux-headers-3.0.0-13-generic
  Linux-образ-3.0.0-13-родовой
Следующие пакеты будут обновлены:
  linux-generic linux-headers-generic linux-image-generic
3 обновления, 3 новых, 0 для удаления и 0 не обновлено.
Необходимо получить 48,5 МБ архивов.
После этой операции будет использовано 215 МБ дополнительного дискового пространства.
Вы хотите продолжить [Y /n]?

Другими словами, почему это невозможно выполнить с помощью upgrade?

apt
339 голосов | спросил Richard Rodriguez 22 22011vEurope/Moscow11bEurope/MoscowTue, 22 Nov 2011 10:03:57 +0400 2011, 10:03:57

4 ответа


282

В руководстве apt-get :

Обновление
   обновление используется для установки новейших версий всех пакетов
   в настоящее время установленный в системе из источников, перечисленных в
   /etc/apt/sources.list. Пакеты, установленные в настоящее время с новыми
   доступные версии доступны и обновляются; под
   обстоятельства в настоящее время установлены удаленные пакеты или пакеты
   еще не установлен и не установлен. Новые версии
   установленных в настоящее время пакетов, которые невозможно обновить без
   изменение статуса установки другого пакета будет оставлено на
   их текущей версии. Сначала необходимо выполнить обновление, чтобы
   apt-get знает, что доступны новые версии пакетов.

Dist-Upgrade
   dist-upgrade в дополнение к выполнению функции обновления,
   также разумно обрабатывает изменения зависимостей с новыми версиями
   пакетов; apt-get имеет «умную» систему разрешения конфликтов и
   он попытается обновить наиболее важные пакеты на
   расход менее важных, если это необходимо. Итак, dist-upgrade
   команда может удалить некоторые пакеты. Файл /etc/apt/sources.list
   содержит список местоположений, из которых можно получить желаемый пакет
   файлы. См. Также apt_preferences (5) для механизма переопределения
   общие настройки для отдельных пакетов.

И с помощью нового инструмента apt , доступного с 14.04 и далее:

полный апгрейд
   full-upgrade выполняет функцию обновления, но может также удалить
   установленных пакетов, если это необходимо для разрешения
   конфликт пакетов.

В вашем конкретном случае я вижу, например, что linux-headers - это виртуальный пакет, который предоставляется как linux-headers-3.0.0-12 и linux-headers-3.0.0-13, и это звучит как тип установки и удаления пакетов, обрабатываемых dist-upgrade, но не с помощью upgrade код>.

ответил jcollado 22 22011vEurope/Moscow11bEurope/MoscowTue, 22 Nov 2011 10:57:03 +0400 2011, 10:57:03
117

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 скажет, что пакеты ядра были сдерживались. Это подсказка для использования apt-get dist-upgrade.

ответил pablomme 27 Jpm1000000pmFri, 27 Jan 2012 20:34:34 +040012 2012, 20:34:34
32

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

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

ответил psusi 22 22011vEurope/Moscow11bEurope/MoscowTue, 22 Nov 2011 18:45:17 +0400 2011, 18:45:17
11

Команда 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.

ответил david6 28 Jam1000000amSat, 28 Jan 2012 04:55:13 +040012 2012, 04:55:13

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132