unix
October 21

Как в Ubuntu сломали загрузчик

Вот уже вторую неделю системный загрузчик Grub в Ubuntu Linux сломан самым эпическим образом — не позволяет загружать ничего кроме самой Ubuntu. Ни Windows, ни *BSD ни другие системы.

На примере этого замечательного инцидента расскажу как работает опенсорс, про его риски, проблемы и про сказочных п#дорасов, все это поддерживающих.

Слева описание из трекера, по центру как это выглядит, на фоне - очередной шедевр нейросети.

Что случилось

В последней версии Ubuntu Linux 24.10 с кодовым именем OracularOriole, в состав дистрибутива включили версию Grub с очень серьезной ошибкой, приводящей к полной невозможности загрузки большей части сторонних ОС — Windows, *BSD, других дистбирутивов Linux и так далее:

I now believe this affects every UEFI machine dual booting Windows 10 and Ubuntu 24.10: 1. You can boot into Ubuntu from GRUB if you don't unsuccessfully attempt to boot Windows first
2. Windows will fail to boot from GRUB (as a workaround you can boot it from the firmware boot menu)
3. After an unsuccessful attempt to load Windows, nothing will boot from GRUB until restarting GRUB

Неважно было ли это обновление текущей системы или установка с нуля — проблема вылезет в обоих случаях.

Понимаю что версия 24.10 не является LTS (с длительной поддержкой), но все же это полноценный релиз, с жизненным циклом в полгода, прошедший сложное тестирование.

Если кто вдруг не знает, Ubuntu — один из самых популярных и широко используемых дистрибутивов на планете:

И вот такое говно в релизе.

Пострадавшие

Собственно данная проблема должна была коснуться практически всех разработчиков использующих Ubuntu Linux на рабочих станциях, поскольку практическое применение «для работы» все также подразумевает «dualboot» с как минимум Windows, а чаще — с несколькими разными ОС.

У несчастного автора проблема вылезла на двух рабочих ноутбуках, которые он успел обновить.

Не затронуты только серверные и облачные установки, где загрузчик является номинальным.

Немного цитат, сохраненных для истории:

Обсуждение на реддите.

Еще одна ветка на реддите.

И еще реддит.

На Stackoverflow.

Kubuntu - вариация дистрибутива с другим DE, но проблемы те же. Отсюда.

Разумеется таких сообщений раз в десять больше чем я когда-либо смогу накопать, просто из-за специфики бага их сложно опознать — проблем с загрузчиками всегда было много.

Но думаю как минимум половина всех сообщений из серии «не могу загрузить Windows» или «сломан загрузчик» за последний месяц появились именно из-за описанной проблемы.

Процесс решения

Конечно мне как ветерану опенсорса, видевшему уже абсолютно все, такого рода проблемы мягко говоря не в новинку — все это уже было.

Интерес представляет сам процесс решения столь серьезной проблемы, поскольку он идеально иллюстрирует что такое современный опенсорс.

Не нашел когда именно и кем проблема была впервые обнаружена, поэтому отсчет пойдет с заведения двух багов в трекере Ubuntu: 2078307 и 2084104.

Первый был заведен еще в августе:

Второй в октябре, две недели назад:

Оба репорта были оформлены как положено, с четким описанием проблемы и тестовым сценарием для повторения — т. е. была проведена большая начальная работа для составления.

Но процессу решения это разумеется не особо помогло.

Первым делом пошли отмазки и попытки отказа:

Напоминаю, что речь про системный загрузчик ОС, который сломали до такой степени что не загружает ничего кроме Linux и с чисто английской вежливостью просят починить:

Через три дня переписки проблему наконец признали, хотя и с оговорками:

Еще через день появился патч:

Который через пару дней признали неработающим:

Всплыли особенности «внутренней кухни» Ubuntu — известно что его создают на базе Debian, но никогда не думал что процесс выглядит как сведение изменений в отдельных пакетах:

А еще ребята подтверждают что все патчи похерятся при следующем обновлении из аппстрима:

Напоминаю что речь идет про критическую проблему в загрузчике ОС — не представляю какого рода программная проблема может быть более критичной чем влияющая на саму возможность запуска.

Выстрел из дробовика по системному блоку если что.

Текущее состояние дел

Идеальная иллюстрация — вот это сообщение двухнедельной давности:

doesn’t boot «2 out of 3» on the vast majority of machines — когда-то так глумились на x86 Solaris, когда он только появился.

А тут сверхпопулярный дистрибутив Linux.

Последнее на момент написания статьи сообщение в трекере по данной проблеме является автоматическим.

Это отчет по тестам патчей на разных системах, из которого следует что патч кривоват — падает на всех платформах отличных от x86:

Официально это звучит так:

Chainloading of non-NX compatible versions of Windows 10 from UEFI GRUB2 might be broken on a limited subset of machines. This is being actively investigated but the root cause haven’t been found yet. If you are experiencing this, please see the linked bug for updates
Bug #2084104 “UEFI GRUB2 enforces NX even with a non-NX shim” : Bugs : grub2 package : Ubuntu 12.

«Actively investigated» мои чюваки.

Шел третий месяц неработающего загрузчика в самом популярном дистрибутиве Linux.

Выводы

Даже сверхкритичные проблемы в опенсорсе могут висеть месяцами, несмотря на вой коммьюнити и весь «negative impact». Даже при наличии четкого багрепорта.

Даже сверхпопулярный дистрибутив Linux может сломаться в лучших традициях 90х — до полной неработоспособности. Как будто никаких 30 лет развития не было.

Слово «release» в версии все также ничего не значит и не гарантирует.

Цирк короч.

P.S.

Пожалуйста покажите эту статью всем кто спрашивает «зачем нужна ваша BSD когда есть работающий Linux» — поможет разрушить некоторые иллюзии.

Тут разумеется свои приколы, но хотя-бы нет таких долбо#бов, которые могут на три месяца запороть загрузку ОС еще и отмазываясь что «проблема не наша».