О Jessie

2020-10-17

Как известно, релизы Debian названы в честь персонажей «Истории игрушек». И вот, срок жизни Jessie подошёл к концу.

Джесси умерла

У Debian все релизы — LTS. Jessie вышел 25 апреля 2015 года. И вот, его поддержка завершена 30 июня 2020. Срок гарантии — пять лет.

Сроки поддержки

А это значит, что сервера, где работает Debian 8 Jessie, нужно срочно переводить на Debian 9 Stretch. Апгрейд сразу до текущего актуального Debian 10 Buster, через версию, не предусмотрен.

В интернетах полно инструкций для этого апгрейда. Вот моя версия, проверенная на живых серверах. Основанная на другой инструкции.

Это инструкция только для серверов. Десктопы лучше обновляйте соответствующими кнопочками.

Для начала убедитесь, что у вас есть бэкап всего сервера, который вы сможете восстановить, если что-то пойдёт не так. Снапшоты и образы сервера целиком вполне подойдут.

Конечно, если на сервере нет ничего важного, или вы готовы потерять всё это неважное, бэкап можно не делать. Но тогда всё равно убедитесь, что оно действительно неважное.

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

# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
# uname -a
Linux hostname 3.16.0-10-amd64 #1 SMP Debian 3.16.81-1 (2020-01-17) x86_64 GNU/Linux

Внимание. Нельзя обновляться, если версия ядра у вас ниже 3.2 и вы не можете её поменять. Сначала обновите ядро.

У меня такое случилось на одном сервере, запущенном в OpenVZ. OpenVZ — это не полноценная виртуальная машина, это — контейнер. И ядро там, соответственно, общее на всех. Аж 2.6. Было. А предупреждение о старой версии ядра выдаёт только libc уже при обновлении. Когда уже слишком поздно. Тот сервер я потерял. Точнее он живой, но никаких новых процессов через systemd я на нём запустить не могу.

Проверьте запущенные сервисы.

# systemctl --type service --state running

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

Проверьте наличие устаревших пакетов. Такие пакеты не могут быть обновлены. Убедитесь что тут нет ничего важного. В устаревших пакетах могут оказаться старые версии ядра, которые ещё не были удалены из загрузки. Это не страшно, новые версии ядра всегда идут в новых пакетах, а старые становятся устаревшими.

# aptitude search '~o'
i A linux-image-3.16.0-8-amd64     - Linux 3.16 for 64-bit PCs
i A linux-image-3.16.0-9-amd64     - Linux 3.16 for 64-bit PCs 

Теперь нужно полностью обновить пакеты Jessie. Пока ещё Jessie, не Stretch.

# apt update
# apt upgrade
# apt dist-upgrade

Самое интересное происходит на командах upgrade и dist-upgrade. Вам могут задавать вопросы. В основном вопросы об изменении конфигурационных файлов. Если вы меняли какие-нибудь системные конфигурационные файлы локально, и этот же файл меняется с новой версией пакета, возникает конфликт.

Внимательно просмотрите разницу (diff) между локальным файлом, и файлом из обновляемого пакета. Если вы понятия не имеете, что это за файл, и не знаете, что за изменения вы могли в него вносить, и изменения из пакета не выглядят, как что-то ломающие, принимайте новую версию файла от мейнтейнера пакета (ответ Y). Если вы изменяли что-то важное, и изменения из пакета затирают ваши изменения, оставляйте локальную версию (ответ N). После обновления рядом с самим файлом появится его версия с расширением .dpkg-dist из нового пакета, и вы сможете разобраться с обновлениями конфига в более спокойной обстановке. Если потребуется.

Проверьте, что все пакеты обновились без ошибок.

# dpkg -C

Проверьте, что нет пакетов с зафиксированной версией (hold). Такие пакеты не захотят обновляться, что может вызвать проблемы.

# apt-mark showhold

Теперь меняйте репозитории на Stretch. Просмотрите файл /etc/apt/sources.list и файлы .list в каталоге /etc/apt/sources.list.d. Замените jessie на stretch везде в этих файлах. Используйте любимый текстовый редактор.

В замене нуждаются:

  • jessiestretch
  • jessie/updatesstretch/updates
  • jessie-updatesstretch-updates
  • и т.д. и т.п.

Не забудьте сделать бэкапы изменяемых файлов. На всякий случай.

Удалите репозиторий jessie-backports, если он у вас используется. Скорее всего, нужные версии пакетов уже будут в Stretch.

Проверьте, что все репозитории доступны. Скачайте список пакетов.

# apt update

Пора апгрейдиться до Stretch.

Просмотрите список пакетов, которые собираются обновляться.

# apt list --upgradable

Проверьте, что в списке нет неожиданных обновлений или неожиданных смен мажорной версии, которых вы не хотите.

ТОЧКА НЕВОЗВРАТА

Здесь ещё можно остановиться, решить не делать апгрейд, и вернуть списки пакетов в предыдущее состояние. Следующие команды начнут устанавливать новые пакеты, и ОС будет необратимо изменена. Процедуры отката назад на Jessie не предусмотрено.

Запускайте апгрейд пакетов.

# apt upgrade
# apt dist-upgrade

При выполнении upgrade и dist-upgrade вам снова будут задавать вопросы.

Вот самые частые вопросы.

  • Общий вопрос Restart services during package upgrades without asking?. То есть, перезапускать ли сервисы при обновлении без дополнительных вопросов. Вполне безопасно ответить Yes. Подключение по ssh у вас не отвалится, не бойтесь.
  • Изменения в файле /etc/ufw/before.rules, если у вас стоит ufw. Изменились названия некоторых модулей ядра, используемых в файерволе. Стоит поставить версию файла из нового пакета.
  • Изменения в файле /etc/ssh/sshd_config, если вы шаманили с безопасностью ssh, отключали вход по паролю и тому подобное. Лучше оставить вашу версию, вы же не зря sshd настраивали.
  • Изменения в файле /etc/apt/apt.conf.d/50unattended-upgrades, если вы настраивали фоновые обновления. Изменения косметические, можно поставить версию из нового пакета.

Ещё раз проверьте устаревшие пакеты.

# aptitude search '~o'

Тут появится больше старых библиотек и версий ядра. Скорее всего, это нормально.

Перезагрузите систему.

# reboot

После перезагрузки проверьте версию ОС.

# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
# uname -a
Linux sdns-dal-test-b 4.9.0-13-amd64 #1 SMP Debian 4.9.228-1 (2020-07-05) x86_64 GNU/Linux

Проверьте запущенные сервисы.

# systemctl --type service --state running

Список должен совпадать с тем списком, что вы получили до апгрейда. Могут добавиться некоторые системные сервисы. Главное, чтобы ваши программы работали.

Если какие-то важные сервисы не запустились, проверьте, почему. Возможно, вам нужно будет вручную поправить конфигурационные файлы.

Поздравляю. Теперь ваш сервер работает на Debian Stretch. Не забудьте обновиться до Debian Buster в 2022.

В честь кого назвали

P.S. Впервые перевожу свой собственный текст, изначально написанный на английском. В вику одного проекта.