grub.clt

День добрый. Так получилось, что мне нужно передавать свои параметры в строку загрузки ядра, в дополнение к умолчальным. Сейчас это libata.force=8.00:disable и acpi_enforce_resources=lax. Для этого я создал /etc/default/grub.clt (# Calculate format=openrc) со своей строкой, заменяющей дефолтную GRUB_CMDLINE_LINUX в /etc/default/grub. Проблема в том, что изменения, вносимые cl-setup-boot в grub, перекрываются этим шаблоном. В результате, например, когда из calculate-sources в очередной раз выкинули tuxonice, у меня поломалась гибернация, так как в шаблоне осталась старая, скопированная мною когда то и модифицированная строка, включающая параметры настройки tuxonice. Я убил несколько часов, пытаясь разобраться, пока не вспомнил про свой шаблон.

Сам я никак не могу осилить синтаксис и логику работы шаблонов, прямо ступор какой то каждый раз. Подскажите мне пожалуйста, как можно средствами шаблонов изменить строку GRUB_CMDLINE_LINUX в /etc/default/grub, добавив к ней свои параметры, а не просто тупо её заменять, как это делается сейчас у меня.

Например, можно bash скриптом сделать так:
$cat /var/calculate/templates/default.grub

 # Calculate exec=/bin/bash merge(sys-boot/grub)!=&&pkg(sys-boot/grub:2)!= env=install ac_install_merge==on
grep acpi_enforce_resources /etc/default/grub && exit 0 || sed -i 's/^GRUB_CMDLINE_LINUX="\(.*\)"$/GRUB_CMDLINE_LINUX="\1 acpi_enforce_resources=lax acpi_enforce_resources=lax"/' /etc/default/grub

В случае если grep вернет отрицательный результат, sed исправит строку.
Выполните cl-core --method core_setup --pkg-name=grub для проверки.

Сергей Федотов wrote:

grep acpi_enforce_resources && exit 0 …

grep acpi_enforce_resources /etc/default/grub && exit 0

Либо можно воспользоваться шаблоном формата patch. Функция grep() проверит отсутствие acpi_enforce_resources. Шаблон добавит необходимую строку в GRUB_CMDLINE_LINUX.

 # Calculate path=/etc/default name=grub format=patch multiline merge(sys-boot/grub)!=&&pkg(sys-boot/grub:2)!=&&grep(/etc/default/grub,acpi_enforce_resources)== env=install ac_install_merge==on
<reg>(^GRUB_CMDLINE_LINUX)="(.*)"$</reg>
<text>\1="\2 acpi_enforce_resources=lax acpi_enforce_resources=lax"</text>
1 Like

Mikhail Hiretsky wrote:
??> grep acpi_enforce_resources /etc/default/grub && exit 0??
Спасибо, поправил. Ваш вариант более читаемый.

Благодарю за советы, разбираю ваши примеры.