Sap IT notes

Cobbler: загрузка по pxe в режиме uefi (CentOS 7).


Не так давно возникла необходимость установить на пачку серверов CentOS 7.2. Для этого использовался Cobbler, серверы грузились по PXE в uefi режиме.
Я не буду описывать процесс установки и настройки Cobbler’а и дополнительных сервисов, а лишь опишу здесь то как мне пришлось его донастроить для того, чтобы загрузка pxe в uefi режиме заработала как надо.

Серверы не хотели никак загружаться с использованием стандартных загрузчиков Cobbler’а, и как буд-то бы не видел grub конфигов сгенерированных для систем, которые лежали в /var/lib/tftpboot/grub/.
Мне помогла вот эта статья на сайте RedHat.
Из этой статьи нам понадобятся пункты с 3 по 6 (рездел 21.1.2. Configuring a PXE Server for UEFI-based AMD64 and Intel 64 Clients).
В моем случае Cobbler’у позволено управлять dhcp и tftp сервисами. Для этого в файле настроек Cobbler’а (/etc/cobbler/settings) выставляем опции: manage_dhcp: 1 и manage_tftpd: 1.

Итак, согласно статьи от RedHat создадим отдельную директорию /var/lib/tftpboot/uefi, здесь будет лежать загрузчик и конфигурационные файлы grub, затем извлечем shim.efi и grubx64.efi и положим их сюда.
Откорректируем шаблон /etc/cobbler/pxe/grubsystem.template для GRUB2, у меня получился вот такой:

set timeout=10
menuentry 'CentOS 7' {
linuxefi $kernel_path $kernel_options
initrdefi $initrd_path
}

Немного изменим темплейт /ect/cobbler/dhcp.template,
заменим filename "$iface.filename"; на filename "/uefi/shim.efi"; вот в этом месте:
...skip
#else
filename "$iface.filename";
#end if
## Cobbler defaults to $next_server, but some users
...skip

Теперь остается небольшой штрих – заставить Cobbler создавать конфиги для grub в нужной дериктории (/var/lib/tftpboot/uefi) и с нужным форматом имени, grub.cfg-01-02-03-a1-b1-1a-00, где “01-02-03-a1-b1-1a-00” – это мак адрес интерфейса, с которого сервер будет грузиться по pxe. Я вышел из положения написав маленький bash скрипт, который запускается по завершению процесса синхронизации (команда cobbler sync), для этого его надо положить в /var/lib/cobbler/triggers/sync/post/ и дать права на запуск или же запускать руками, после того как все системы будут внесены в Cobbler:

#!/usr/bin/bash
for o_name in $(ls -A1 /var/lib/tftpboot/grub/ | grep -E '(.{2}-){6}.{2}');
do
n_name=grub.cfg-$(echo ${o_name} | tr [A-Z] [a-z]);
cp -a /var/lib/tftpboot/grub/${o_name} /var/lib/tftpboot/uefi/${n_name};
done

Примечание: регулярное выражение ‘(.{2}-){6}.{2}’ помогает найти только файлы конфигурации grub с именем в формате 01-02-03-A1-B1-1B-00 (это мак адрес), которые генерирует cobbler и кладет в /var/lib/tftpboot/grub/

Решение не самое красивое, но работает, скрипт просто копирует файлы конфигурации grub из /var/lib/tftpboot/grub/ в /var/lib/tftpboot/uefi/ но с новыми именами, содержимое файлов менять не нужно, поскольку, благодаря корректировке соответствующего шаблона, оно верно.

Я верю, что есть более элегантное решение задачи, но на момент возникновения задачи и этого было достаточно, пачка серверов обзавелась нужной операционной системой, все были счастливы…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

© 2015