Всем доброй ночи. Ночи, потому что системные администраторы чаще всего занимаются апгрейдом операционный систем по ночам, потому как днём на серверах работают юзеры.
Сегодня апгрейдим Ubuntu Server 18.04 до версии 20.04. На самом деле апгрейд версии Ubuntu обычный запланированный процесс, скорее, проблем может доставить несовместимость работы вашего софта. Поэтому, перед апгрейдом нужно подготовиться.
- Если у вас есть возможность сделать бэкап сервера — сделайте бэкап. Проверьте что бэкап восстанавливается.
- Если у вас виртуальная среда — сделайте снапшот сервера, чтобы откатиться обратно в случае сбоя.
- Проведите тестирования вашего ПО на той версии ОС, на которую собираетесь обновляться.
- Убедитесь что на сервере есть доступ в Интернет для загрузки новых пакетов.
- Рассчитывайте время, апгрейд может занять несколько часов. Я обновлял 2.5 часа, плюс 30 мин допиливал напильником моё ПО, которое не хотело сразу запускаться.
- Ну чего я вас учу, соломки надо подстелить, пивас взять.
У меня всё не так страшно, я буду обновлять домашний сервер, так что обойдусь снапшотом.
Каждый раз при логине по SSH видим:
New release '20.04.6 LTS' available.
Run 'do-release-upgrade'
Посмотрим текущую версию:
uname -a
lsb_release -a
У нас с вами ядро 4.15, Ubintu 18.04.6 LTS.
Подготовка к апгрейду
Работаем далее под root.
Если сразу выполнить предлагаемую команду, то ничего может не получиться.
do-release-upgrade
Please install all available updates for your release before upgrading.
Команда проверяет наличие необновлённых пакетов и отказывается запускаться. Сначала нужно всё обновить.
apt update
apt upgrade
Обновляем всё. Обращаем внимание на строку:
Следующие пакеты будут оставлены в неизменном виде:
jellyfin
Это означает, что имеется пакет, который надо бы обновить, но он не хочет обновляться сам, понадобится ручная доработка.
Устанавливаются обновления.
Мне нужно убедиться, что после обновления ничего не сломалось, перезагружаю сервер:
reboot
После перезагрузки всё ПО работает нормально, но команда do-release-upgrade завершается тем же сообщением: "Please install all available updates for your release before upgrading." Будем обновлять дальше.
apt dist-upgrade
Из мануала apt-get:
upgrade upgrade is used to install the newest versions of all packages currently installed on the system from the sources enumerated in /etc/apt/sources.list. Packages currently installed with new versions available are retrieved and upgraded; under no circumstances are currently installed packages removed, or packages not already installed retrieved and installed. New versions of currently installed packages that cannot be upgraded without changing the install status of another package will be left at their current version. An update must be performed first so that apt-get knows that new versions of packages are available. dist-upgrade dist-upgrade in addition to performing the function of upgrade, also intelligently handles changing dependencies with new versions of packages; apt-get has a "smart" conflict resolution system, and it will attempt to upgrade the most important packages at the expense of less important ones if necessary. The dist-upgrade command may therefore remove some packages. The /etc/apt/sources.list file contains a list of locations from which to retrieve desired package files. See also apt_preferences(5) for a mechanism for overriding the general settings for individual packages.
Из мануала apt:
upgrade (apt-get(8)) upgrade is used to install available upgrades of all packages currently installed on the system from the sources configured via sources.list(5). New packages will be installed if required to satisfy dependencies, but existing packages will never be removed. If an upgrade for a package requires the removal of an installed package the upgrade for this package isn't performed. full-upgrade (apt-get(8)) full-upgrade performs the function of upgrade but will remove currently installed packages if this is needed to upgrade the system as a whole.
Вкратце:
- apt update (apt-get update) — обновление списка доступных пакетов.
- apt upgrade (apt-get upgrade) — обновление установленных пакетов до последней доступной версии, не удаляет пакеты.
- apt dist-upgrade (apt-get dist-upgrade) — обновление установленных пакетов до последней доступной версии со всеми зависимостями, удаляет при необходимости мешающие старые пакеты.
- apt full-upgrade (apt-get full-upgrade) — то же самое что и apt dist-upgrade.
- apt do-release-upgrade (apt-get do-release-upgrade, do-release-upgrade) — обновление релиза.
Команды из разных пакетов, но там везде алиасы прописаны, так что вызов работает.
Нам предлагают снести jellyfin-ffmpeg, вместо него поставить jellyfin-ffmpeg5, я не против.
do-release-upgrade
Обновление релиза не рекомендуют запускать по SSH, а если запускать, то дополнительная служба появится на порту 1022. У меня есть возможность запустить обновление из консоли, отменяю апгрейд и отключаюсь от SSH.
ВНИМАНИЕ! Дальше пока не действуйте, дочитайте до момента, когда я отказался от консоли.
Вхожу через консоль.
do-release-upgrade
И попадаю в неприятную ситуацию. Для продолжения мне нужно ввести на кириллице "д", но консоль отказывается мне переключать язык, ерунда какая-то, всё перепробовал, но на русский язик переключиться так и не смог. А скрипт не принимает английскую "y".
Отменяю установку, решаю вернуться к SSH. Попадаю в ещё одну неприятную ситуацию, инсталлятор уже накатил кучу пакетов, которые требуется снова обновить.
Так не пойдёт, откатываю сервер на сделанный снапшот, захожу через SSH, устанавливаю обновления.
Апгрейд до Ubintu Server 20.04.6 LTS
Добрались до нормального апгрейда по SSH.
do-release-upgrade
Теперь кириллица работает, соглашаюсь продолжить.
Нам сообщают, что некоторые сторонние репозитории будут отключены. Потом проверю что там было, обновлю при необходимости.
Опять почему-то жалобы на jellyfin-ffmpeg, я ж удалял его, видимо не до когда. Продолжаем.
Начинается апгрейд.
В процессе апгрейда нам будут задавать вопросы. Например, просят перезагрузить сервис. Соглашаюсь.
Спрашивают какую версию lxd ставить. Выбираю рекомендованную.
Продолжаем апгрейд.
Какой ставить sysctl.comf? Я там не менял ничего, ставлю из пакета: "Y".
Что делаем с sshd_conf? Там я тоже ничего не менял, выбираю "Установить версию из пакета". OK.
Удалить устаревшие пакеты? Соглашаюсь.
Обновление системы завершено. Продолжаем для перезагрузки.
Сервер перезагружается. Welcome to Ubuntu 20.06.6 LTS.
Апгрейд Ubuntu Server 18.04 до версии 20.04 успешно завершён.
Останется только убедиться, что наше ПО работает на этом сервере, починить при необходимости. Если всё в порядке, снапшот можно удалить и считать что мы молодцы.
На самом деле после перезагрузки напишут:
New release '22.04.3 LTS' available.
Run 'do-release-upgrade'
Но это уже совсем другая история...