В рамках заметки, обновляем CentOS 7 до CentOS 8 без переустановки системы. В рамках этой заметки, рассматривается процесс апгрейда ОС, на которой работает стандартный LAMP стек.
Несколько важных замечаний вначале.
- Перед процессом обновления ОС, нужно обязательно сделать ревизию по установленному ПО и подключенным в систему репозиториям. Не исключено, что вам придётся какие-то репозитории отключить, а какие-то программы переустановить вручную после апгрейда. Относительно без проблем апгрейд проходит в случаях, когда в системе не установлено сторонних пакетов, и используются только штатные репозитории плюс epel.
- Обновление — процесс необратимый, так что обязательно убедитесь, что у вас имеются бекапы, из которых можно будет корректно восстановиться после неудачи.
- Если на сервере используется какая-либо панель управления (ISPmanager, VestaCP и т. д.), скорее всего, апгрейд сломает её работу. Такие серверы лучше не обновлять с 7 на 8 релиз.
Подготовка.
Для начала, ставим утилиты, которые нам потребуются, и проверяем, что epel репозиторий подключен:
# yum install rpmconf epel-release yum-utils
Теперь выполним проверку и сравнение конфигов в системе. Тут стоит внимательно читать вывод утилиты (если он будет) и отвечать на вопросы о том, какой конфиг нам нужен (текущий, дефолтный из пакета и т. п.):
# rpmconf -a
С помощью package-cleanup смотрим, какие у нас установлены пакеты не из репозиториев, есть ли в системе пакеты, которые можно удалить и т. д (команды ниже выведут список этих пакетов):
# package-cleanup --orphans # package-cleanup --leaves
Можно, так же, воспользоваться функционалом yum’а, но тут нужно внимательно посмотреть, что пакетный енеджер предложит удалить:
# yum autoremove
Заменяем yum на dnf.
Для апгрейда нам потребуется установить dnf, он используется в CentOS 8 по умолчанию. После этого, удалить yum. Опять же, нужно внимательно посмотреть, что dnf предложит удалить в зависимостях вместе с удалением yum:
# yum install dnf # dnf remove yum yum-metadata-parser # rm -Rf /etc/yum # dnf upgrade
Обновляем систему.
Для начала, ставим centos-release и epel-release от 8 версии дистрибутива:
# dnf upgrade https://mirror.yandex.ru/centos/8/BaseOS/x86_64/os/Packages/centos-release-8.0-0.1905.0.9.el8.x86_64.rpm # dnf upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Удаляем пакеты, которые могут привести к конфликтам и старые ядра, оставшиеся в системе:
# rpm -e --nodeps sysvinit-tools # rpm -e `rpm -q kernel`
И выполняем само обновление системы:
# dnf --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
На всякий случай, проверяем, что бы пакет kernel-core с новым ядром так же быд установлен. Если его нет, ставим:
# dnf install kernel-core
И устанавливаем\обновляем минимальный набор пакетов через групповое управление:
# dnf groupupdate "Core" "Minimal Install"
Как только процесс будет завершён, перезагружаем систему, проверяем, что она запустилась с новым ядром, что установленное ПО работает нормально. При необходимости, добавляем репозитории стороннего софта и ставим его оттуда заново.
Интересно, полезно и не много экстравагантно.
У меня при удалении Kernel такие ошибки:
Неудовлетворенные зависимости:
kernel >= 3.10.0-1025.el7 нужен для (установлен)kmod-kvdo-6.1.2.41-5.el7.x86_64
kernel(PDE_DATA) = 0x44f0d59d нужен для (установлен)kmod-kvdo-6.1.2.41-5.el7.x86_64
dnf remove kmod-kvdo.x86_64
если на что-то ещё ругается то удаляем таким же образом.
Если система установлена на raid контроллер использует драйвер megaraid_sas, например в моём случае LSI MegaRAID Tri-Mode SAS3508, нужно
1.дополнительно доставить dnf install kernel-nodules
2. обновить для нового ядра (подставить нужную версию) dracut -f /boot/initramfs-4.18.0-147.8.1.el8_1.x86_64.img 4.18.0-147.8.1.el8_1.x86_64
Иначе после перезагрузки сервер превратится в тыкву и без live cd будет не обойтись. В Centos8 этот драйвер вынесли в отдельный пакет
kernel-modules конечно же
[root@era ~]# dnf upgrade
Last metadata expiration check: 0:19:37 ago on Thu 29 Oct 2020 03:21:54 PM CET.
Dependencies resolved.
Problem: cannot install the best update candidate for package mysql-connector-odbc-8.0.21-1.el7.x86_64
— nothing provides mysql-community-client-plugins = 8.0.22 needed by mysql-connector-odbc-8.0.22-1.el7.x86_64
===================================================================================================================================================================================================================
Package Arch Version Repository Size
===================================================================================================================================================================================================================
Skipping packages with broken dependencies:
mysql-connector-odbc x86_64 8.0.22-1.el7 mysql-connectors-community 4.1 M
Transaction Summary
===================================================================================================================================================================================================================
Skip 1 Package
Nothing to do.
Complete!
[root@era ~]#
el7 — похоже что пакет остался от семёрки. Как вариант, удалить его попробовать руками (только внимательно посмотреть на вывод пакетного менеджера при удалении) и поставить пакет от восьмёрки.