В этой статье мы расскажем, как обновить CentOS Stream 9 с CentOS Stream 8.
Если использовать только официальные репозитории, то обновление до нового релиза CentOS Stream 9, который следует за Red Hat Enterprise Linux 9, не составит труда.
Использование неофициальных или пользовательских репозиториев CentOS Stream 8 может привести к нестабильной работе системы или поломке системы пользователя, если следовать этому руководству. Сначала проверьте на совместимость с CentOS Stream 9 установленные на данный момент репозитории, если используются какие-то специфические или неофициальные.
В следующей статье используется CentOS Stream 9 только с официальными репозиториями по умолчанию и, кроме того, с репозиторием EPEL, который поддерживает CentOS Stream.
Все установленные пакеты должны быть обновлены до последних версий.
1 | dnf update -y |
Утилита DNF сообщает, что все пакеты обновлены, потому что обновлять ничего не нужно.
Очистка всех пакетов, которые больше не требуются.
Проверьте сиротские и оставленные пакеты. Некоторые из пакетов здесь могут использоваться пользователем явно, поэтому важно знать систему. Удалите пакеты, если они не используются системой и отображаются в виде вывода следующих команд, а также если они не используются пользователем системы.
1 2 | dnf repoquery --unneeded dnf repoquery --extras |
Удалите ненужные пакеты:
1 | dnf remove -y [packadge_name] |
где [packadge_name] - список пакетов для удаления.
На самом деле, некоторые из перечисленных выше пакетов могут остаться в системе, но лучше их удалить, а если они нужны, то установить после обновления.
Установите репозитории CentOS Stream 9.
Необходимо установить три файла:
- https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-9.0-24.el9.noarch.rpm
- https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-release-9.0-24.el9.noarch.rpm
- https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-9.0-24.el9.noarch.rpm
Это последняя версия на момент написания этой статьи. Проверьте URL http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/, чтобы узнать о более новых версиях.
1 | dnf install -y https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-9.0-24.el9.noarch.rpm https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-release-9.0-24.el9.noarch.rpm https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-9.0-24.el9.noarch.rpm |
Обновите дистрибутив с помощью следующей команды
1 | dnf -y --releasever=9-stream --allowerasing --setopt=deltarpm=false distro-sync |
Перестройте базу данных RPM.
1 | rpmdb --rebuilddb |
Очистите кэш DNF:
1 | dnf clean packages |
Повторно выполните команду обновления:
1 | dnf update -y |
Установите все пакеты для "Минимальной установки":
1 | dnf -y groupupdate "Core" "Minimal Install" |
Теперь система обновлена до CentOS Stream 9.
1 | cat /etc/*release |
Систему следует перезагрузить.
1 | reboot |
Ошибка обновления "Problem: conflicting requests":
в случае возникновения ошибки
Выполняем обновление следующим образом
1 2 | dnf clean package dnf update -y --allowerasing |
Ошибка Error: Transaction test error:
1 2 | Error: Transaction test error: file /usr/share/man/man8/ebtables-nft.8.gz from install of iptables-nft-1.8.10-2.el9.x86_64 conflicts with file from package iptables-ebtables-1.8.5-11.el8.x86_64 |
удаляем конфликтные пакеты
1 | dnf remove iptables-ebtables |
Ошибка warning: Converting database from bdb_ro to sqlite backend
Выполняем следующую последовательность команд, после которой предупреждение должно уйти
1 2 3 4 | setenforce 0 rpm --rebuilddb setenforce 1 rpm --rebuilddb |
Ошибка установки группы пакетов "Error: Transaction test error"
Если в процессе возникает ошибка
1 2 | Error: Transaction test error: file /usr/lib/udev/rename_device from install of initscripts-rename-device-10.11.6-1.el9.x86_64 conflicts with file from package initscripts-10.11.2-1.el9.x86_64 |
Удаляем initscripts
1 | dnf remove initscripts |
после чего, необходимо повторить
1 | dnf -y groupupdate "Core" "Minimal Install" |
Дополнительная очистка.
Удалите старые ядра и все старые пакеты, которые имеют версию ".el8" для CentOS Stream 8.
Сначала удалите старые ядра:
1 | rpm -q kernel-core |
1 | dnf remove -y kernel-core-4.18.0-552.el8.x86_64 kernel-core-4.18.0-448.el8.x86_64 |
Удалите Менеджер подписок, если у вас нет подписки:
1 | dnf remove -y subscription-manager |
Посмотрите все пакеты с расширением .el8, что означает, что они относятся к CentOS Stream 8:
1 | dnf list --installed|grep el8 |
Это старые библиотеки или модули, старые версии которых не включены в релиз CentOS Stream 9. Лучший способ - найти их эквиваленты в CentOS Stream 9 и установить эти пакеты. Если они не используются, их можно удалить.
Например, библиотека inih в CentOS Stream 9 имеет более старую версию, чем в CentOS Stream 8. inih в CentOS Stream 8 взята из репозитория EPEL, а в CentOS Stream 9 - из baseos. В задних случаях может случиться так, что пакеты в новом выпуске CentOS окажутся немного старше, чем пакет EPEL из старого выпуска CentOS.
1 2 | dnf remove -y inih dnf install -y inih |
Чтобы использовать пакет CentOS Stream 9, просто удалите старый, а затем установите его снова.
Так же можно попробовать обновить модули, после окончания всех процессов обновления
1 | dnf update |
Проверка logrotate
На этом шаге, предстоит проверить, запущена ли служба logrotate systemd, поскольку она отвечает за периодическую ротацию журналов в /var/log. Если эта служба не запущена, журналы могут заполнить корневой (или журнальный) раздел:
1 2 3 | systemctl enable logrotate.timer systemctl start logrotate.timer systemctl status logrotate.timer |
Пересоздайте загрузочную запись аварийного ядра.
Загрузочное ядро - старое, поэтому оно должно быть сгенерировано для нового выпуска CentOS, то есть для текущего ядра. Ознакомьтесь с подробной информацией в этой статье - Генерация загрузочной записи ядра спасения в CentOS Stream 9
Вот что нужно сделать:
1 2 | rm -f /boot/vmlinuz-0-rescue-b2a198ecbfdd451cb905f76f825af01e /boot/initramfs-0-rescue-b2a198ecbfdd451cb905f76f825af01e.img /boot/loader/entries/b2a198ecbfdd451cb905f76f825af01e-0-rescue.conf /usr/lib/kernel/install.d/51-dracut-rescue.install add $(uname -r) /boot /boot/vmlinuz-$(uname -r) |
Команда не выводит информацию об успешной генерации ядра восстановления.
Сломанные модули DNF
Похоже, что некоторые модули DNF могут быть сломаны, и менеджер DNF сообщает об этом.
К примеру
1 2 | Problem: conflicting requests - nothing provides module(platform:el8) needed by module python36:3.6:8050020210825152031:982725ab.x86_64 from @modulefailsafe |
Просто верните модули в исходное состояние с помощью:
1 | dnf module reset -y nodejs perl python36 |
Неработающие модули отображаются в каждой команде DNF, и после их переустановки вывод проблемы исчезнет.
Изменения в брандмауэре.
При добавлении маскарада к пакетам пересылки во внутреннем интерфейсе в виде мостов, например, следует добавить явную пересылку в зону, если интерфейсы находятся в одной зоне, или явную внутризоновую пересылку, если интерфейсы находятся в разных зонах:
1 2 | firewall-cmd --permanent --zone=public --add-forward firewall-cmd --reload |
Проще говоря, если после обновления интернет на все виртуальные серверы прекратился, добавьте "-add-forward" в зону.