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
В общем случае рекомендуется удалить все пакеты, которые были установлены не из стандартных репозиториев и отключить сами репозитории. Проверить такие пакеты можно следующим образом:
# apt list '?narrow(?installed, ?not(?origin(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
Здесь, опять же, не уходите далеко. Вам будут задавать вопросы в процессе установки обновлений.
Когда работа команды завершится успешно, можно считать, что обновление завершено. Останется только перезагрузить сервер.
# systemctl reboot
После загрузки обновлённого сервера, проверьте его версию.
Если у вас так же, значит обновление прошло успешно. Теперь можно установить удалённые ранее пакеты или проверить работу программ, установленных из сторонних репозиториев. По хорошему, их все надо обновить, подключив новые репозитории для текущей версии Debian. Со временем они появятся для привычного софта, типа nginx, mariadb, docker и т.д.
Заключение
Как я и говорил, обновления прошло штатно без каких-то особых проблем и действий со стороны администратора. Чаще всего все обновления Debian происходят примерно одинаково за исключением отдельных нюансов. К примеру, в прошлом релизе немного изменился формат описания репозитория безопасности. А в этом релизе появился новый репозиторий non-free-firmware.
Нужно знакомиться с изменениями очередного релиза и учитывать их при выполнении обновления системы. С Docker, кстати, никаких проблем не возникло. Я не удалял его пакеты, и не обновлял. Просто отключил на время обновления его репозиторий. Он продолжил штатно работать и после обновления.
Проблемы могут возникнуть с версиями некоторого софта, который обновится. Тут уже надо вручную смотреть и отлаживать эти моменты. Например, обновление версии php может наделать очень много проблем, так что к этому надо готовиться отдельно. Но в рамках обновления самой системы не имеет смысла рассматривать такие моменты. Это отдельная задача. Всегда с головой подходите к таким моментам. Саму систему обновить не трудно, но надо просчитать последствия. Иногда лучше не торопиться.