Здесь более подробное описание процесса. Извините, текст так долго
Мой опыт связан с Debian, для которого изначально была изобретена вся система упаковки и обновления, используемая в Ubuntu. Ежедневные обновления безопасности Ubuntu соответствуют запуску, apt-get upgrade
который обычно не удаляет программное обеспечение. Большие обновления выпуска соответствуют тому, в apt-get dist-upgrade
течение которого пакеты программного обеспечения могут быть полностью заменены.
На самом деле компоненты очень низкого уровня обычно не заменяются во время обновления выпуска. Сразу после обновления вы должны найти два образа ядра и initrd в каталоге / boot. Это потому, что в отличие от программ, компоненты ядра не так хорошо взаимозаменяемы. Если во время обновления возникает необходимость загрузки новых драйверов устройств, они должны быть совместимы с работающим ядром. После загрузки системы с новым ядром старое можно удалить. В прошлый раз, когда я проверял, это нужно было сделать вручную, я не знаю, как это делает текущий модуль обновления. Это кстати. основная причина, по которой образ ядра имеет свой номер версии в имени файла - поэтому вы можете установить разные версии ядра одновременно. То же самое для пути к модулю (/ lib / modules / ...)
Пакеты программного обеспечения обновляются один за другим, начиная с самых низких пакетов в иерархии зависимостей. Обычно это программные библиотеки, такие как libc и другие. Последовательность обновления пакетов, однако, не жестко запрограммирована, а динамически рассчитывается по мере разрешения зависимостей пакетов. В большинстве случаев старые программы могут функционировать с новыми библиотеками, поэтому не так проблематично, если эти библиотеки будут заменены первыми.
Здесь вы должны понимать, что система различает установленные вручную пакеты (то есть пакеты, установку которых вы непосредственно запросили сами, например, chromium) и автоматически установленные пакеты, которые были установлены только для выполнения зависимостей от установленных вручную пакетов (и зависимостей этих зависимостей). ).
Для каждой установленной вручную программы средство обновления просто ищет более новую версию. Часто эти программы являются просто метапакетами, такими как «ubuntu-desktop», который не содержит данных, а содержит только зависимости. Новые версии зависимых библиотек будут добавлены, так как они запрашиваются непосредственно обновляемыми (запрашиваемыми вручную) программами. Средство обновления всегда будет пытаться установить самую новую используемую версию любого зависимого пакета (во время любого обновления, а не только выпуска обновления).
Программы, которые не могут работать с новыми версиями библиотеки, не могут быть запущены в течение времени после обновления библиотеки, а также до обновления самой программы. Если эти программы уже должны быть запущены до обновления библиотеки, они, тем не менее, продолжат работу, потому что старая версия библиотеки остается в памяти до тех пор, пока она используется. То же самое касается программ, которые были запущены до их обновления. Те не будут предоставлять новые функции, пока они не будут прекращены и перезапущены.
После обновления некоторые библиотеки (или зависимости в целом) будут потеряны. Это библиотеки, которые требовались в старых версиях программы, но больше не требуются в новых версиях. Поскольку эти пакеты помечены как автоматически установленные, и так как никакая prgram, установленный вручную, больше не относится к ним, эти пакеты можно легко найти и удалить. Вы даже можете наблюдать это как последний шаг процесса обновления (программа обновления говорит «удаление устаревших пакетов» или что-то подобное).
Будут установлены некоторые пакеты, которые ранее не устанавливались, это просто новые зависимости, которые помечаются как автоматически установленные и могут быть удалены, если требование к ним исчезнет в будущем.
Этот механизм даже позволяет обмениваться целыми пользовательскими программами. Как например переключение с Gnome2 на Unity. Так как оба являются просто автоматическими зависимостями ubuntu-desktop, который является одним из немногих пакетов, для которых новые версии фактически запрашиваются в первую очередь.
Программы обычно не зависят от конкретной версии ядра ОС, поэтому они будут нормально работать с работающим ядром.
Помимо всего этого, я подозреваю, что средство обновления Ubuntu вносит некоторые конкретные исправления и обходные пути в микс, чтобы обойти ситуации, когда эта теория нарушается.
Как вы можете видеть во время обновления, есть очень хорошие условия, при которых система может использоваться только в ограниченной части. Если что-то пойдет не так во время обновления, вы , скорее всего, останетесь с неисправной системой. Часто даже тот, который не может быть легко восстановлен, поскольку программа обновления также может быть затронута. Помните, что программы с нарушенными зависимостями могут продолжать функционировать, но не могут быть перезапущены, пока эти зависимости нарушены, это также относится и к средствам обновления.
Вы можете использовать программу командной строки, apt-mark
чтобы узнать, какие пакеты помечены как установленные вручную, а какие установлены автоматически. Вы также можете переключать эти метки, используя ту же программу. Это напрямую повлияет на процесс обновления.
При более сложной настройке программного обеспечения программа обновления иногда запрашивает разрешение зависимости вручную. Т.е. когда одна установленная вручную программа обновляется и запрашивает новую версию библиотеки, тогда как другая установленная вручную программа зависит от старой версии той же библиотеки и не может работать с новой. Затем вам придется сделать выбор: отказаться от одной из этих программ или воздержаться от обновления обеих. Поскольку зависимости часто являются сложными, это может очень быстро запутаться (вы, возможно, слышали о термине «ад зависимости»).
Теперь к конкретным вопросам:
- Когда изменяется низкоуровневая инфраструктура (низкоуровневая, как в ядре, драйверах, библиотеках и т. Д., С которой пользователь напрямую не взаимодействует), что происходит с устаревшими двоичными файлами?
- Хорошо ... я уже рассмотрел этот
- Что происходит с приложением, которое полностью устарело? Например, Unity 2D (или любое другое программное обеспечение, от которого отказались / нет сопровождающих, чей пакет не находится в новом репо).
- Если приложение однажды было установлено вручную, оно останется в системе, часто вызывая ад зависимости, который я описал.
- ubuntu-desktop - это метапакет, который использует стандартные приложения Ubuntu как зависимости. Если я удалил Firefox и установил Chrome, Firefox все равно будет загружен как часть обновлений?
- Пока это стандартный браузер новой версии, да. Хром также будет обновлен. Я не уверен, что вы можете удалить Firefox без удаления Ubuntu-Desktop. Обратите внимание, что помимо строгих зависимостей, система пакетов знает также концепцию рекомендаций, где программное обеспечение обычно устанавливается как зависимость, но может быть удалено позже, не затрагивая ничего, кроме собственных исключительных зависимостей.
- Более того, что произойдет, если одно приложение раньше зависело от package-x и больше не делало этого в новой версии; будет ли пакет-x обновлен вместе с остальными пакетами, несмотря на то, что они осиротели?
Просто спросите меня, есть ли у вас еще вопросы.