Обновление 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).