Встречайте, новый cl-kernel!

kernel.jpg

Всё новое — это хорошо забытое старое. Спустя 7 месяцев мы решили восстановить утилиту сборки ядра cl-kernel. Но не просто восстановить, а полностью переосмыслить её поведение.

Реализовать вызов make menuconfig в графическом исполнении в клиент-серверной схеме работы утилит Calculate 3 не представляется возможным, поэтому программа как и прежде написана на Bash. Чтобы подчеркнуть разницу, переписанный cl-kernel входит в состав нового пакета calculate-toolkit, который будет включать подобные полезные дополнения, тесно интегрированными с особенностями работы Calculate Linux. Реализация cl-kernel на Bash в отдельном пакете надеюсь привлечёт сторонних разработчиков к проекту.

Отличия в работе новой программы

Основная задача cl-kernel вовсе не скомпилировать ядро, как может показаться, а создать шаблон настроек ядра. В своей работе cl-kernel использует утилиты для получения конфигурационного файла ядра, как это происходит при сборке calculate-sources или при настройке любого другого пакета. В результате своей работы cl-kernel создаст шаблон в директории /var/calculate/templates, который будет менять настройки ядра по умолчанию.

Например вам нужно добавить поддержку оборудования, слегка изменив настройки ядра. Нет ничего проще. Уберите USE флаг “minimal” для пакета calculate-sources, переустановите ядро чтобы распаковать исходники. После этого выполните cl-kernel. По результату работы вы получите изменённое ядро. Дальнейшие обновления пакета будет выполняться через компиляцию с добавленными вами опциями.

Компиляция ядра выполняется долго? Нет ничего проще, отключите огромное количество лишних драйверов устройств и поддержку неиспользуемых функций и вы в несколько раз ускорите компиляцию ядра.

Поддержка других ядер

Программа cl-kernel работает со всеми ядрами доступными в портежах. Так как шаблонов настроек для остальных ядер нет, скрипт будет генерировать дефолтный конфигурационный файл ядра и создавать шаблон настроек относительно него. Это позволяет существенно сократить размер файла шаблона.

Использовать сторонние ядра удобней. При желании при помощи cl-kernel, вы можете импортировать настройки ядра calculate-sources для использования в любом другом ядре, например vanilla-sources. Это позволит вам проводить эксперименты без опасений оставить систему с нерабочим ядром.

Поддержка initramfs

Новая программа учитывает поддержку initramfs в ядре и если она выключена, не создаёт файл initramfs. Этот этап настроек требует определённой подготовки и будет описан в документации в примерах. Понадобится все необходимые для старта ядра драйвера вкомпилировать в ядро. Как результат - скорость загрузки можно существенно увеличить.

Например убрав поддержку лишнего оборудования на своём стареньком ноутбуке и отказавшись от initramfs, я ускорил загрузку от Grub до Lightdm с 11 до 6 секунд!

Интеграция с профилем

Возможно настало время перечитать статьи Создание своего профиля в Calculate Linux, Обновление утилиты смены профиля и Выборочное отключение шаблонов, ведь новая программа добавляет ещё один аргумент в пользу создания своего профиля (если вы этого ещё не сделали). Шаблоны созданные при помощи cl-kernel найдут своё место в вашем профиле. Настройки calculate-sources 3.19 ядра уже созданы при помощи cl-kernel.

Подробнее о новой программе вы можете прочесть на обновлённой странице документации Сборка ядра со своей конфигурацией.

После последнего обновления, на моём CLS (сегодня утром), на ядро 3.18.8r (по-моему, точно не помню, так как перезагрузился с предыдущей версии кальки) выпадает kernel panic сразу после начала загрузки… что-то там VFS не может найти rootfs и тд…

если надо могу предоставить логи (скажите какие)…
вот поэтому и не люблю эти внезапные обновления… когда уже в Calculate Linux будет система как в NixOS - (только без systemd) -

Попробуйте загрузиться в SafeMode. После этого выполните cl-setup-boot

В SafeMode для этого ядра тоже выпадает в kernel panic, так что никакой команды не выполнить. Я загрузился с предыдущего ядра 3.14… всё работает…

Причина в используемом LZ4 формате сжатия initramfs. В 3.18.8-r2 будет исправлено.

Спасибо. Рад, что нашли ошибку.
Интересно, возможно ли как-то создать что-то подобное NixOS через снапшоты в btrfs или как-нибудь похоже, чтобы возвращать предыдущее состояние можно было бы буквально одним движением (как это показано на картинке)…

Понятно, что в NixOS вообще всё по-другому, они для этого вообще много что в Линуксе переделали, но не обязательно же идти таким путём. Можно делать снапшот для файловой системы перед каждым обновлением…

Интересно, возможно ли как-то создать что-то подобное NixOS через снапшоты

На протяжении 8 лет калька обновляется снапшотами. Резервируются два раздела под систему - текущий и второй под обновление. Именно так по сей день обновляются все десктопы в нашей компании.

Можно делать снапшот для файловой системы перед каждым обновлением…

Вполне возможно, что это можно будет реализовать в cl-update. Только основная цель идеи не снапшоты, а моментальное обновление системы, за считанные секунды.

Я больше имел ввиду как раз создание инкрементных снапшотов, без необходимости резервировать целый раздел для этого… как раз не для бэкапа (с этим всё просто, если нужен именно бэкап, то ничего лучше rsync’а нет), а для возможности вернуться хотя бы на 10 шагов назад.

Например, установил какие-то программы, а они тебе не нужны оказались. Просто возвращаешься к прошлому снапшоту и никаких проблем. Именно для устранения проблем связанных с настройкой программ.

Конечно, можно выйти из системы перед установкой, сделать образ логического диска и потом установить то, что тебе нужно, а потом проделать обратную операцию. Можно вручную исправить (удалить, очистить всё и тд.), но лучше же, когда всё автоматизировано и очень просто.

Я вот раньше всегда устанавливал систему в builder-режиме… всё мне нравилось, но так как новые образы я не создаю, для меня интрактивная сборка системы, в общем-то не нужна. Сейчас вот смотрю в сторону Docker. Отличная идея, взять, например, CLS… и устанавливать каждое приложение в отдельный контейнер. Насколько меньше было бы проблем с настройкой и обновлением… про установление новых программ, я вообще молчу: удалил контейнер и всё…

Насколько меньше было бы проблем с настройкой и обновлением…

Попробуйте. Хорошо если так, как вы говорите.

Я эту задачу решаю через использование btrfs под корень плюс примитивный скриптик, который делает снапшот, затем eix-sync, затем обновление мира с -a, чтобы можно было посмотреть, что будет обновляться и как. Потом, по прошествии времени, можно удалить снапшот. Я какое-то время сидел на арче, где примерно каждое десятое обновление ломает систему в хлам. Очень способствует наработке привычки делать бекапы)))

Спасибо за возврат утилиты, очень удобно. Единственная просьба, не могли бы Вы научить её ещё и emerge @module-rebuild в конце запускать? Или хотя бы пусть она мне текстом об этом напомнит. А то бывает забываю я это сделать…

Ну вот встретил, получил неработоспособную систему - виснет при загрузке. Настраиваю ядро, далее cl-kernel сообщает, что все ok, но при перезагрузке мертвое зависание на “запуск initramfs” (цитата неточная, бросил пока эти эксперименты, работающая система важнее).

Можно попробовать загрузить vmlinuz-3.18.13-calculate.old, но лучше всегда проводить эксперименты с нерабочим ядром, либо другой версией calculate-sources, или лучше с vanilla-sources.

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

Смотрите, что все файлы на месте в /boot и /lib/modules.