===== Oбновление Debian 11 "Bullseye" до Debian 12 "Bookworm" (In-Place Upgrade) ===== {{:unix-linux:debian:pasted:20171124-194401.png }} Перед началом процедуры обновления методом In-Place Upgrade с **Debian GNU/Linux 11 (Bullseye)** до **Debian 12 (Bookworm)** крайне желательно создать резервную копию обновляемой системы для возможности возврата системы в исходное состояние на тот случай, если после обновления возникнут проблемы. На этапе планирования обновления необходимо внимательно прочитать документ [[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html|Issues to be aware of for bookworm]]. Особенное внимание следует уделить таблице с проблемными пакетами в разделе [[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html#rc-bugs|Known severe bugs]]. Сама процедура обновления и все известные её особенности описаны в документе [[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-upgrading.en.html|Upgrades from Debian 11 (bullseye)]]. ---- ==== Обновление Debian 11 ==== Проверим текущую версию Debian:
# cat /etc/debian_version 11.7
# uname -a Linux ... 5.10.0-23-amd64 #1 SMP Debian 5.10.179-1 (2023-05-12) x86_64 GNU/Linux
# lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 11 (bullseye) Release: 11 Codename: bullseyeУбедимся в том, что в конфигурации пакетного менеджера **apt** ''/etc/apt/sources.list'' подключены только стандартные репозитории **Debian Bullseye**: [[:unix-linux:debian:bullseye:linux-how-to-add-debian-11-bullseye-default-repos|Как подключить стандартные репозитории Debian 11 Bullseye]]. Если в составе репозиторев у вас подключен репозиторий **bullseye-backports**, то есть [[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-upgrading.en.html#unofficial-sources|рекомендация]] отключения этого репозитория до начала процесса обновления. Помимо этого, есть [[https://www.debian.org/releases/bookworm/amd64/release-notes/ch-upgrading.en.html#proposed-updates|рекомендация]] отключать репозиторий **proposed-updates**, если он был подключен ранее. Выполним обновление всех доступных к обновлению пакетов из репозиториев **Bullseye**:
# apt-get update # apt-get upgradeПосле обновления пакетов перезагрузим систему и проведём ещё ряд предварительных проверок. ---- ==== Проверка пакетной базы ==== Предварительно следует сохранить информацию о всех пакетах, установленных не из официальных репозиториев Debian, так как с любым из этих пакетов могут возникнуть какие-либо проблемы при обновлении системы (возможно данные пакеты потребуют переустановки/обновления после обновления ОС). Получить список таких пакетов можно, например, с помощью **apt** и **apt-forktracer**.
# apt list '?narrow(?installed, ?not(?origin(Debian)))' # apt install apt-forktracer # apt-forktracer | sort\\ Рекомендуется найти и удалить все устаревшие конфигурационные файлы, оставшиеся в системе от предыдущих обновлений. Это поможет в дальнейшем избежать путаницы при анализе проблемных приложений. Найти такие устаревшие файлы можно например командой:
# find /etc -name '*.dpkg-*' -o -name '*.ucf-*' -o -name '*.merge-error'Перед обновлением рекомендуется выявить и отключить все неофициальные репозитории, чтобы избежать конфликтов в ходе обновления. Перечень всех используемых в системе репозиториев получим командами типа:
# cat /etc/apt/sources.list # cat /etc/apt/sources.list.d/*\\ Помимо этого следует проанализировать фиксированные (**Pinning**) пакеты APT. Перед обновлением желательно отключить все фиксации пакетов. Если один из участвующих в обновлении пакетов зафиксирован, обновление завершится неудачно.
# cat /etc/apt/preferences # cat /etc/apt/preferences.d/*Независимо от способа обновления, рекомендуется сначала проверить состояние всех пакетов и убедиться, что всем пакетам разрешено обновляться. Следующие команды покажут пакеты, установленные частично (**Half-Installed**), пакеты настройка которых не удалась (**Failed-Config**), а также все пакеты в ошибочных состояниях и фиксированные пакеты в статусе "hold":
# dpkg --audit # dpkg --get-selections | grep 'hold$' # apt-mark showholdДля того, чтобы отменить фиксацию какого либо пакета, находящегося в статусе "hold", можно использовать команды типа:
# apt-mark unhold package_name # echo package_name install | dpkg --set-selectionsМеханизмы работы с цифровыми подписями в Bookworm потребуют наличия актуальной версии пакета **gpgv**, которая должна быть не ниже 2 версии. Проверить и, при необходимости, установить актуальную версию gpgv можно командами:
# dpkg -l gpgv # apt install gpgv---- ==== Подключение репозиториев Debian 12 ==== В файле ''/etc/apt/sources.list'' отключим стандартные репозитории **Debian 11** (закомментируем строки) и подключим репозитории **Debian 12**: [[:unix-linux:debian:bookworm:linux-how-to-add-debian-12-bookworm-default-repos|Как подключить стандартные репозитории Debian 12 Bookworm]] Обновим кеш менеджера пакетов:
# apt update---- ==== Проверка доступного пространства для обновления ==== Нехватка места при обновлении может привести к последующим дополнительным проблемам, которые может оказаться нелегко исправить. Поэтому перед запуском процесса обновления системы следует убедиться в том, что у нас достаточно места на диске. В ходе обновления все нужные для установки пакеты загружаются из репозиториев Debian в каталог ''/var/cache/apt/archives'', поэтому мы, как минимум, должны проверить место на разделе, который содержит ''/var/''. Чтобы предварительно оценить то, сколько места потребуется для загружаемых пакетов, можно использовать команду "холостого" запуска обновления (эта команда только произведёт расчёт нужного места на диске, но не станет выполнять саму процедуру обновления):
# apt -o APT::Get::Trivial-Only=true full-upgrade Reading package lists... Done Building dependency tree... Done Reading state information... Done Calculating upgrade... Done The following packages were automatically installed and are no longer required: ftp g++-10 ... python3.9-minimal telnet Use 'apt autoremove' to remove them. The following packages will be REMOVED: icinga2 icinga2-bin libgnutlsxx28 libnfsidmap2 libsemanage1 The following NEW packages will be installed: at-spi2-common cpp-12 ... xml-core zstd The following packages will be upgraded: acl acpi ... xz-utils zlib1g 839 upgraded, 116 newly installed, 5 to remove and 0 not upgraded. Need to get 454 MB/454 MB of archives. After this operation, 798 MB of additional disk space will be used. E: Trivial Only specified but this is not a trivial operation.---- ==== Минимальное обновление системы ==== Чтобы легче было разбираться с возможными конфликтами при обновлении системы, обновление лучше выполнять в 2 этапа - сначала минимальное обновление, а затем полное обновление. Минимальное обновление приведёт к обновлению только тех пакетов, которые можно обновить без необходимости удаления или установки других пакетов. Минимальное обновление системы также может оказаться полезным, если на диске мало свободного места, и по этой причине запускать сразу полное обновление нежелательно. Запускаем минимальное обновление:
# apt upgrade --without-new-pkgsНа запрос о необходимости перезапуска служб в процессе установки новых версий пакетов ответим утвердительно. ---- ==== Обновление системы ====
# apt full-upgradeЭта команда произведёт полное обновление системы, установив последние доступные версии всех пакетов и разрешив всех изменившиеся между выпусками зависимости. При необходимости будут установлены новые пакеты (обычно, это новые версии библиотек или переименованные пакеты) и удалены все вызывающие конфликты устаревшие пакеты. Для пакетов, у которых ранее были изменены стандартные конфигурационные файлы, будет предложено выбрать вариант их обновления. Можно использовать опцию установки новых конфигурационных файлов (опция **Y**), а можно оставить свои ранее настроенные конфигурационные файлы (опция **N**), если мы понимаем, что принципиальных отличий в директивах конфигурации нет. По окончании процесса обновления перезагружаем систему
# rebootПосле первой успешной загрузки системы проверяем версию загруженного ядра Linux:
# uname -a Linux ... 6.1.0-10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.37-1 (2023-07-03) x86_64 GNU/Linux
# lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 12 (bookworm) Release: 12 Codename: bookworm