Как обновить Debian 11 до Debian 12 Bookworm

10 июня 2023 года состоялся очередной релиз именитой и популярной системы на базе Linux — Debian 12. В своей статье я подробно расскажу, как обновиться с прошлого релиза Debian 11 до 12-й версии Bookworm. Традиционно, обновление проходит без особых сложностей и лишних действий со стороны администратора.

Что нового в Debian 12

За что лично мне нравится Debian, так это за его стабильность. В нём мало каких-то революционных изменений ради изменений. К примеру, сколько я знаю Debian, ещё со времён 6-й версии, у него не менялся интерфейс установщика. В этом просто нет смысла. Всё, что нужно в плане функциональности, там есть. Нет смысла менять то, что хорошо работает.

Чаще всего обновление дистрибутива сопровождается обновлением пакетов в базовых репозиториях. Я не буду перечислять изменение их версий. Отмечу лишь то, на что по моему мнению имеет смысл обратить внимание.

    • В установочные образы включили некоторые прошивки из репозитория non-free. Это сделано для лучшей поддержки железа во время установки. Debian всегда очень внимательно относился к проприетарному софту, выделяя его в отдельный репозиторий non-free. В этом релизе решили сделать некоторые исключения. Поэтому добавлен ещё один репозиторий для проприетарных прошивок non-free-firmware.
    • В Debian 12 добавлен пакет ksmbd-tools, который реализует функциональность файлового сервера на базе протокола SMB3. Сервер работает на базе модуля ядра Linux. Подобная реализация более эффективна с точки зрения производительности, потребления памяти и интеграции с расширенными возможностями ядра. При этом ksmbd не претендует на полноценную замену Samba. Скорее как расширение для неё.
    • По умолчанию не используется rsyslog для записи системных логов. Вместо этого предлагают использовать journalctl для просмотра логов systemd. Если хотите (а мы хотим) по старинке системные логи в текстовом виде в /var/log, установите пакет system-log-daemon.
    • Из дистрибутива выпилили утилиту which, которая объявлена устаревшей. Вместо неё предлагают использовать type. Это приведёт к поломке многих скриптов, где часто используют which для определения полного пути к бинарнику. Не забудьте установить вручную whitch, если она у вас используется.
    •  Из репозиториев убрали пакеты для Asterisk. Не нашлось желающих их поддерживать, а сами разработчики астера не занимаются поддержкой пакетов в принципе.

Более детальную информацию об обновлении можно посмотреть в официальной новости.

Подготовка системы к обновлению

Перед обновлением рекомендую ознакомиться с официальным руководством Upgrades from Debian 11 (bullseye). Мои дальнейшие действия соответствуют некоторым рекомендациям из этого документа. В первую очередь проверьте все бэкапы. И по возможности протестируйте обновление важных систем в тестовой лаборатории. Чаще всего обновление системы происходит штатно и лично я вообще ни разу не сталкивался с тем, что обновление Debian привело к нарушению работы сервера и необходимости откатываться из бэкапов.

Отдельно рекомендую сохранить список текущих установленных пакетов. Это может пригодиться, если в процессе обновления произойдёт удаление каких-то нужных пакетов, которые убрали из нового релиза. Потом будет проще разобраться в этой ситуации:

# dpkg --get-selections "*" > ~/dpkg.list

Эта команда выгружает только список пакетов. Можно добавить ещё один список уже с версиями:

# dpkg -l > ~/dpkg-full.list

Проверьте на всякий случай версию текущей системы. Обновление Debian с одного релиза на другой поддерживается только в рамках перехода на одну версию вверх. То есть у вас должна быть полностью обновлённая система Debian 11.

# apt update && apt upgrade && apt dist-upgrade && apt --purge autoremove

# lsb_release -a

# cat /etc/debian_version

 

Посмотреть текущую версию Debian

В общем случае рекомендуется удалить все пакеты, которые были установлены не из стандартных репозиториев и отключить сами репозитории. Проверить такие пакеты можно следующим образом:

# apt list '?narrow(?installed, ?not(?origin(Debian)))'

 

Список пакетов в Debian из неофициальных репозиториев

 

В моём примере это пакеты для Docker, которые были установлены из его родного репозитория. Чаще всего проблем с подобными пакетами не возникает, так что удалять или нет, решать вам. Я не удалю. Но рекомендация по корректному обновлению такова — все неродные пакеты удаляем, после обновления ставим заново, если они поддерживают новую версию Debian. Если нет, то обновление откладываем и каким-то образом решаем эту проблему.

Обновление списка репозиториев

Обновляем файл с репозиториями /etc/apt/sources.list, изменив релиз с bullseye на bookworm. Содержимое этого файла должно стать примерно следующим:

deb https://deb.debian.org/debian bookworm main

deb-src https://deb.debian.org/debian bookworm main



deb https://deb.debian.org/debian bookworm-updates main

deb-src https://deb.debian.org/debian bookworm-updates main



deb http://security.debian.org/ bookworm-security main

deb-src http://security.debian.org/ bookworm-security main

Если вы использовали прошивки (firmware) из репозитория non-free, подключите репозиторий non-free-firmware для их обновления.

deb https://deb.debian.org/debian bookworm main non-free-firmware

Выполняем обновление списка пакетов из нового репозитория:

# apt update

 

Первичное обновление системы

 

Теперь убедитесь, что у вас есть достаточно свободного места на корневом разделе для продолжения обновления. Количество необходимого места зависит от набора пакетов. Посмотреть его можно с помощью следующей команды:

# apt -o APT::Get::Trivial-Only=true full-upgrade

 

Сколько места на диске необходимо для обновления

Если места недостаточно, то можно выполнить некоторые чисти, связанные с работой пакетного менеджера:

# apt autoremove

# apt clean

Далее запускаем минимальное обновление, которое не требует установки новых пакетов или удаления старых. Обязательно запускайте его через screen или tmux. В случае обрыва связи при подключении по ssh, могут произойти непрогнозируемые проблемы с работоспособностью системы. Процесс обновления обязательно должен полностью завершиться успешно.

# apt upgrade --without-new-pkgs

Не сворачивайте консоль, так как в процессе обновления Debian 11 до 12 вам будут задавать некоторые вопросы. Можно выбирать значения по умолчанию и всё пройдёт успешно. Первым делом вам предложат ознакомиться со списком изменений и выйти из режима чтения, нажав q.

 

Информация об обновлении

Только если всё прошло успешно на предыдущем шаге, запускайте полное обновление Debian 11:

# apt full-upgrade

 

Обновление Debian 11 до 12

Здесь, опять же, не уходите далеко. Вам будут задавать вопросы в процессе установки обновлений.

Автоматический перезапуск служб в процессе обновления debian

Когда работа команды завершится успешно, можно считать, что обновление завершено. Останется только перезагрузить сервер.

# systemctl reboot

После загрузки обновлённого сервера, проверьте его версию.

Debian 12 Bookworm

Если у вас так же, значит обновление прошло успешно. Теперь можно установить удалённые ранее пакеты или проверить работу программ, установленных из сторонних репозиториев. По хорошему, их все надо обновить, подключив новые репозитории для текущей версии Debian. Со временем они появятся для привычного софта, типа nginx, mariadb, docker и т.д.

Заключение

Как я и говорил, обновления прошло штатно без каких-то особых проблем и действий со стороны администратора. Чаще всего все обновления Debian происходят примерно одинаково за исключением отдельных нюансов. К примеру, в прошлом релизе немного изменился формат описания репозитория безопасности. А в этом релизе появился новый репозиторий non-free-firmware.

Нужно знакомиться с изменениями очередного релиза и учитывать их при выполнении обновления системы. С Docker, кстати, никаких проблем не возникло. Я не удалял его пакеты, и не обновлял. Просто отключил на время обновления его репозиторий. Он продолжил штатно работать и после обновления.

Проблемы могут возникнуть с версиями некоторого софта, который обновится. Тут уже надо вручную смотреть и отлаживать эти моменты. Например, обновление версии php может наделать очень много проблем, так что к этому надо готовиться отдельно. Но в рамках обновления самой системы не имеет смысла рассматривать такие моменты. Это отдельная задача. Всегда с головой подходите к таким моментам. Саму систему обновить не трудно, но надо просчитать последствия. Иногда лучше не торопиться.