Порядок в шведской семье или ссылки в Grub-меню

Материал из Rosalab Wiki
Перейти к: навигация, поиск

Как мы уже писали, сейчас уже совершенно нормально держать даже на ноутбуке несколько систем, и мы всегда пытаемся сделать так, чтобы с РОСой это было удобно.

Правда если вариант с двумя системами («для игр и реальной жизни») прост и очевиден, то если держать на своем компьютере в порыве энтузиазма или по работе несколько линуксов, возникали юзабилити проблемы, из-за ответственности основной системы, поставляющей загрузчик, за загрузку всей остальной семейки:

  • При обновлении ядра в каждом из этих линуксов нужно перегружаться в главную систему и запускать процесс обновления меню, чтобы подхватились новые ядра «дополнительных» систем. Причем процесс сканирования систем по разделам выполняется далеко не мгновенно и автоматизировать его при каждой загрузке было бы неправильно. Бардак Мучительный беспорядок!
  • Пунктов меню становилось слишком много, ибо на каждый найденный линукс добавляется два пункта загрузки («Загрузка по умолчанию» и «Дополнительные опции»). И хотя одноуровневое меню при небольшом числе пунктов эргономичней вложенного, то начиная с четырех систем пунктов становилось больше классической формулы «5±2»… и тут бы уже хотелось иерархичности.

Соответственно, мы неоднократно получали пожелания — нельзя ли оставить дополнительные системы[1] в своих разделах, вместе с собственными загрузчиками и меню загрузки (тогда внутри своих разделов они бы обновлялись своими силами), а из главного меню загрузки GRUB-а делать только ссылки на эти меню?

Наконец-то мы сделали и это[2], и теперь РОСА отлично подходит[3] на роль старшей жены в гареме сестры в семье, которая заботится о порядке и надежной загрузке остальных.

Было
Стало

На пути к решению

Предположим, что у нас уже есть возможность установки загрузчика в раздел, и представим себе, как будет выглядеть для пользователя настройка основного загрузчика. Для начала ему придётся вручную создать пункт загрузочного меню, который будет ссылаться на целевой раздел, что уже достаточно проблематично для пользователя, не слишком знакомого со структурой grub-меню и механизмами загрузки. Но будем считать, что пункт успешно добавлен и корректно работает. Что увидит пользователь после очередного обновления? В списке окажутся сразу три пункта, относящиеся к этой вторичной системе: прямая загрузка с использованием последней версии ядра, подменю с перечислением всех версий ядер, и, наконец, тот самый вручную добавленный пункт для перенаправления на загрузчик из раздела. Немножко избыточно, как вы считаете?

Что же мы можем здесь улучшить? На самом деле, пользователю совершенно необязательно передавать управление на загрузчик. Grub прекрасно умеет загружать свои конфигурационные файлы из произвольных мест. То есть если пользователя устраивает вышеописанная схема, то с нашей стороны и не потребуется ничего делать. Просто в том самом вручную созданном пункте надо будет вместо команды chainloader, передающей управление другому загрузчику, вписать команду configfile с путём к целевому grub.cfg.

И всё же избыточность раздражает. Да, в грабе[4] есть возможность отключить генерацию дополнительных пунктов меню для вторичных систем, но тонкая настройка отсутствует напрочь: либо всё, либо ничего. Так что если установлено более двух систем, то прописывать вручную придётся их все (кроме основной, разумеется). Ну и, конечно, ручное создание всех этих пунктов меню не очень-то соответствует нашим представлениям о user-friendly.

Мы решили решить обе проблемы одним ударом. В Grub2 была добавлена новая опция GRUB_OS_PROBER_LINKED, при включении которой все вторичные системы добавляются в меню не как обычно (один пункт для загрузки последнего ядра плюс подменю «Advanced options» со списком ядер), а в виде одного пункта-ссылки, перенаправляющего пользователя прямо на целевой конфиг-файл, как если бы он был обычным подменю.

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


Хочу, хочу!

Сейчас нововведение проходит последние стадии тестирования и проверки, и скоро обновлённые пакеты будут доступны в репозиториях. Начиная с релиза R5 GNOME, который выйдет на днях, все это будет по умолчанию в новых образах.

Чтобы воспользоваться новой возможностью на уже установленных системах, нужно будет прописать в файле /etc/default/grub строчку:

GRUB_OS_PROBER_LINKED=true

и перегенеровать загрузочное меню командой update-grub2. Для установки же системы с нуля мы добавили соответствующую галочку в расширенные настройки инсталлятора:

Опция в инсталляторе

Чтобы вернуть меню к прежнему виду, удалите строчку с GRUB_OS_PROBER_LINKED или задайте этому параметру значение false и снова вызовите update-grub2.

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


Что еще?

К решению этой задачи мы перешли получив множество пожеланий пользователей по поводу «установки загрузчика в раздел». Несмотря на то, что технически Grub2 поддерживает такой режим, он работает не для всех файловых систем, является крайне ненадёжным, и сами разработчики настоятельно рекомендуют его не применять, поэтому к идее добавления такой опции мы всегда относились весьма скептически. Мы предпочли подойти с другой стороны: понять, для чего вообще требуется установка загрузчика в раздел, и предложить альтернативные пути решения этих задач. Из отзывов пользователей мы смогли выудить следующие сценарии:

  • Основным загрузчиком является не grub, а что-то другое, с конфигами граба работать не умеющее. Пользователь хочет поставить Росу, но оставить свой загрузчик. Тогда установка Росовского граба в раздел позволила бы добавить ссылку на него в основной загрузчик, так что при выборе соответствующего пункта управление просто передавалось бы в первый (загрузочный) сектор раздела, и на экране появлялось бы меню Росы.
    • Эта задача пока остаётся нерешённой, но поскольку подавляющее большинство Linux-систем уже перешло на grub2, актуальность такого сценария невелика.
  • Похожий, но несколько отличающийся вариант: пользователь просто хочет сохранить свой текущий загрузчик (может быть, тоже grub, но от другой системы), а установщик Росы всегда принудительно устанавливает свой вариант граба, перезатирая то, что было. Опция установки в раздел была бы в этом случае просто обходным путём для сохранения имеющегося загрузчика.
Эту проблему мы решили более логично, просто добавив в инсталлятор возможность отказа от установки загрузчика. При этом локальный grub.cfg целевой системы продолжает генерироваться и обновляться, так что обновление основного загрузочного меню будет происходить корректно.
  • Каждый раз при установке нового ядра в одной из вторичных систем пользователь вынужден перезагружаться в основную систему и вручную обновлять загрузочное меню, чтобы туда добавились новые ядра. Если бы была возможность установки граба в раздел, достаточно было бы однократно добавить в основное меню ссылку на него, и про необходимость ручного обновления можно забыть: локальный grub.cfg перегенерируется автоматически, так что при передаче управления в этот вторичный граб пользователю показывался бы сразу актуальный список ядер.

Решению вот этой-то задачи и посвящена данная статья.


Надеюсь, эта новость вас…

Ввела в экстаз ^_^14
16%
Порадовала :)61
71%
Оставила равнодушным -_-6
7%
Огорчила :(5
6%
  1. Которыми кстати, тоже могут быть ROSA Desktopы, например других релизов
  2. Ну, почти это.
  3. Мы не обнаружили аналогичной возможности у других распространенных дистрибутивов
  4. Далее, в этой статье ради простоты, мы будем просто, без чинов, называть загрузчик GRUB2 — «грабом». Не «крабом», не «гробом», а именно «грабом».

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.