Блог программиста
не только о программировании

Дружественные ресурсы:

IntSystem.org | Веб-разработка, все о ней

DevOps-заметки |

03.11.2023

Обновление Fedora c 32 до 36

Типичное обновление версии выглядит примерно вот так:

dnf upgrade --refresh
dnf install dnf-plugin-system-upgrade
dnf system-upgrade download --releasever=N
dnf system-upgrade reboot

где N - версия дистрибутива. Однако, все может пойти не по сценарию. Например, вот так.

Под катом инфа про то, как можно дойти до такого состояния и как из него выходить.

Предистория

Картинка выше является результатом того, что бывает, когда бегло читаешь чей-то пост и не обращаешь внимание на ошибки в надежде, что все пройдет само по себе. Коротко: застрял на fedorа еще 32 версии, появилось желание обновиться до 37 (актуальная в моменте). Проверил обновление на виртуалке. Сначала до 36, а потом до 37. Все работает. После повтора обновления на хост-машине до 36 версии словил проблему, связанную с тем, что на новом ядре нельзя загрузиться из-за containerd. Старое ядро загружается. Решаю не исправлять проблему на пол пути, а сразу обновиться до 37 версии и исправить все возможные проблемы.

По итогу получилось то, что на фотке выше. Причем эта проблема проявлялась везде, с какого ядра не пробовать загрузиться. Попытки исправить проблему в режиме восстановления ничем не завершились, по итогу восстановил систему из бекапов.

Вторая попытка

Решил обновиться до 36 версии и подробнее посмотреть на ошибки. Во-первых, их там было меньше, а, во-вторых, и самое главное - был полноценный доступ к системе через загрузку старого ядра. Первым делом отключил containerd, т.к. эта ошибка повторялась.

systemctl stop containerd
systemctl disable containerd

Далее обратил внимание на ошибки в dkms. Было пару модулей, которые ставились вместе с пакетами достаточно давно и, либо уже были удалены, либо не использовались. Но dkms упорно продолжал пытаться их подключить для свежего ядра.

dkms status
# смотрим что происходит с модулями, ненужные удаляем
# sudo dkms remove имя_модуля
sudo dkms remove anbox-ashmem/1
sudo dkms remove anbox-binder/1

Далее нужно запустить повторную автоустановку (в моем случае для конкретной версии ядра).

dkms autoinstall -k 6.1.13-100.fc36.x86_64

Возможно предварительно потребуется освободить свободное место в /boot. У меня решилось удалением старых версий ядра.

dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)

После этого запускаем dkms и проверяем статус

systemctl start dkms
systemctl status dkms

Все манипуляции выше позволили наконец загрузиться с новой версией ядра, а вот проблему с запуском containerd получилось решить переустановкой docker и всех его обвязок (docker-compose, rootless).