Що таке "dist-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.

А з новішим 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.


4
Я не вважаю full-upgradeможливістю до apt-get14.04.1.
nobar

Я про це не знав, aptале, мабуть, це абсолютно інша команда відповідно до сторінки чоловіка, на яку він пов’язаний
BlueWizard

18
@nobar Ви не бачите, тому що це варіант, aptа не apt-get... :-) Спробуйте man apt.
Гастур

Гаразд, я шукав, і найдавніше знайдене посилання на Ubuntu 15.10 (яке вийшло наприкінці 2014 року, що є розумним при тестуванні Джессі) manpages.ubuntu.com/manpages/wily/en/man8/apt.8.html
Z boson

6
@Zboson Так, а 14.04 вийшов не в 2011 році, а в квітні 2014 року ... бачите викрійку?
tgies

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 Ще два питання ... чим користується графічний менеджер оновлень в Ubuntu? Що рекомендується?
THpubs

11
Графічна утиліта, update-managerне використовує apt-getбезпосередньо; замість цього він працює з бекендом під назвою aptdaemon. Стандартні здібності update-manager- це суміш режимів upgradeта dist-upgradeрежимів apt-get: він може додавати, але не видаляти пакунки - він викликає інструмент "Часткове оновлення", коли потрібні видалення. Під час використання командного рядка використовуйте apt-get upgrade. Якщо ви бачите повідомлення про те, що пакети були "стримані", запустіть, apt-get dist-upgradeщоб забрати решту оновлень.
паблом

33

В основному оновлення дозволить лише оновити існуючі пакети з однієї версії до іншої. Він не буде встановлювати та не видаляти пакети, навіть якщо це потрібно для оновлення інших. У разі оновлень ядра оновлення пакета linux-generic вимагає встановлення нового пакета linux-3.0.0-13-generic, а оскільки оновлення відмовляється встановлювати або видаляти пакети, він відмовляється від оновлення linux-generic.

Іноді різні несумісності між пакунками вимагатимуть видалення деяких пакунків для оновлення інших, а також потрібно розширення. Оновлення ядра завжди потребуватимуть модернізації dist через те, як вони обробляються. Замість того, щоб оновити пакет ядра, який оновлюється, кожен раз створюється абсолютно новий пакет ядра, а метапакет ядра оновлюється залежно від нового пакета ядра замість старого. Це було зроблено для того, щоб ви зберегли старі версії ядра, щоб у випадку виникнення проблем із завантаженням нового ядра ви можете вибрати стару з меню завантаження та відновити.


2
Найкраща суть. Все-таки, як зберегти певний пакет?
0xC0000022L

11

apt-get upgradeКоманда зазвичай тільки встановити оновлення (або виправлення) в встановлених пакетах. Зазвичай нова команда Mozilla Firefox , наприклад, буде встановлена ​​за допомогою цієї команди.

Однак apt-get upgradeбуде НЕ взагалі встановлювати нові версії, де (потрібно , включаючи видалення пакетів або оновлення GRUB) значні зміни. Наприклад, коли є нове ядро ​​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 , яку ви переглядали як менш точну, краще, і я б порадив читачам перейти до цього.
Чан-Хо Су

1
Виправлення: apt-get upgradeніколи не встановлювати та не видаляти будь-які пакунки. Оновлення ядра упаковуються як нові пакети, і як результат, apt-get upgradeядро ніколи не буде оновлено. Те, що оновлення ядра робить «основні» зміни, такі як конфігурація GRUB, не є причиною різниці між upgradeі dist-upgrade.
Мікко Ранталайнен

1

Ваш найкращий варіант:

apt full-upgrade

-який автоматично обробляє залежності при модернізації пакетів; тоді як:

apt upgrade

- НЕ автоматично справляється із залежностями під час оновлення пакетів.

- duBtrotterS

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.