Как Ubuntu легко обновляется до более нового дистрибутива, пока операционная система все еще работает? Я обновляюсь с 10.10 до 11.04, и я обновлялся несколько раз раньше, и это так же просто, как запустить update-manager -d, загрузить и установить их, а затем перезагрузить компьютер.
Как именно это работает? Как менеджер обновлений может обновлять операционную систему, пока она еще используется?
upgrade
release-management
bbosak
источник
источник
Ответы:
Исходя из моего опыта, я предполагаю, что во время работы пакетов и модулей они хранятся в памяти и больше не обращаются к своей копии на жестком диске. Это можно увидеть, если вы запустите программу в Ubuntu, а затем удалите связанные пакеты во время ее работы. Он будет продолжать работать, но если вы закроете его, вы не сможете перезапустить его.
Я бы предположил, что то же самое происходит с обновлением дистрибутива. Все пакеты, относящиеся к исходной версии ubuntu, все еще работают, даже если они были удалены и заменены новыми, поэтому, когда они, наконец, останавливаются при перезапуске системы, новые пакеты вступают во владение.
источник
Здесь более подробное описание процесса. Извините, текст так долго
Мой опыт связан с 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
чтобы узнать, какие пакеты помечены как установленные вручную, а какие установлены автоматически. Вы также можете переключать эти метки, используя ту же программу. Это напрямую повлияет на процесс обновления.При более сложной настройке программного обеспечения программа обновления иногда запрашивает разрешение зависимости вручную. Т.е. когда одна установленная вручную программа обновляется и запрашивает новую версию библиотеки, тогда как другая установленная вручную программа зависит от старой версии той же библиотеки и не может работать с новой. Затем вам придется сделать выбор: отказаться от одной из этих программ или воздержаться от обновления обеих. Поскольку зависимости часто являются сложными, это может очень быстро запутаться (вы, возможно, слышали о термине «ад зависимости»).
Теперь к конкретным вопросам:
Просто спросите меня, есть ли у вас еще вопросы.
источник
man apt-get
. Я считаю, что часто полезно использовать синтаксис команды с указанием релиза, такой какapt-get -t intrepid install foo/jaunty bar/oneiric
etc ..., только примеры. На самом деле это имеет больше смысла в Debian, где вы иногда смешиваете релизы, в Ubuntu это менее привычно. Интересными темами также могут быть apt-pinning и установка пакетов на удержание.На уровне файловой системы, в отличие от Windows, в системе Unix вы можете удалять открытые файлы. При удалении просто удаляется имя файла, а не его содержимое, поэтому любые программы, у которых файл остается открытым, могут получить к нему доступ, пока не закроют файл, и только после этого данные будут освобождены.
Таким образом, процесс обновления просто удаляет старые файлы, заменяет их новыми, а для определенных системных служб перезапускает их, чтобы запустить новую версию.
Есть один или два компонента, которые нельзя перезапустить без перезагрузки всего компьютера, поэтому после их обновления вам будет предложено перезагрузиться, чтобы вы использовали новую версию.
источник
Как Linux может обновляться, пока он еще используется?
Главным образом потому, что Linux (а вместе с ним и большинство дистрибутивов) просто разработан таким образом. Возможность обновления пакета в работающей системе является целью большинства дистрибутивов на основе Linux.
В Linux нет ничего, что могло бы помешать процессу менеджера пакетов записать файл на диск, даже если этот файл в данный момент открыт приложением или файл является исполняемой или совместно используемой библиотекой кода, который в данный момент выполняется . На очень низком уровне существуют блокировки, защищающие доступ к файлу во время одной операции записи / чтения, но они никогда не предназначены для удержания более нескольких миллисекунд, и любое другое приложение пытается записать в тот же файл будет просто ждать эти миллисекунды.
Вы можете заменить исполняемый файл во время его работы, и он фактически не будет ничего делать с запущенным процессом, потому что процессу больше не нужен файл на диске - весь его код уже загружен в память.
Вот почему в Linux, даже если вы можете обновить приложение во время его работы, обновление фактически не вступит в силу, пока приложение, которое вы обновили, не будет перезапущено. В случае обновления фонового процесса, такого как системная служба, эта служба должна быть перезапущена. В случае, если вы обновили ядро, это означает перезагрузку.
Не заменит ли файлы программы, пока она работает, некоторые программы?
Некоторые из пакетов в дистрибутиве Linux будут содержать инструкции по установке, в которых менеджер пакетов должен останавливать определенные системные службы во время обновления пакетов и перезапускать эти службы после завершения обновления. Это предотвращает ситуации, когда, например, файлы конфигурации для конкретной службы обновляются, и работающая версия службы может не справиться с более новой версией файлов конфигурации.
Как правило, обычные пользовательские приложения не требуют никаких файлов конфигурации для запуска, за исключением файлов, которые он генерирует сам и размещает в таких местах, как домашние каталоги пользователей. Таким образом, при обновлении они не будут затронуты менеджером пакетов.
источник
apt
обрабатывает определенные пакеты и зависимости в процессе обновления.Это похоже на другую функцию. Надеюсь, что это помогает понять основной процесс.
Я имею в виду возможность «переключать root» при загрузке операционной системы.
Когда операционная система загружается, корневая файловая система (читай: «/») изначально доступна только в оперативной памяти. Во время этого процесса загрузки он переключается / из ОЗУ в / файловую систему на жестком диске.
источник