О 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
везде в этих файлах.
Используйте любимый текстовый редактор.
В замене нуждаются:
jessie
→stretch
jessie/updates
→stretch/updates
jessie-updates
→stretch-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. Впервые перевожу свой собственный текст, изначально написанный на английском. В вику одного проекта.