Сказать Linux/GRUB запускать iPXE при следующей загрузке?

Я только что обнаружил чудо это iPXE.

Я запускаю разные версии Debian на разных компьютерах и хотел бы удаленно попросить их перезагрузиться в iPXE, чтобы iPXE автоматически загрузился в клонезиллу с авто-развертыванием.iso, который у меня есть.

Есть ли способ заставить Linux автоматически загружаться в iPXE при следующей загрузке один раз, а затем iPXE автоматически загружаться в.iso с сервера?

0
задан 19 November 2021 в 18:19
2 ответа

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

Однако я не полагаюсь на grub на целевой машине и не использую iPXE.

Вместо этого я установил загрузочный сервер PXE. В настоящее время крайне сложно найти компьютер с неработающей -загрузкой PXE. Поэтому я настроил все компьютеры, которыми мне нужно управлять, таким образом, чтобы они загружались из сети через PXE.

Кстати, это в равной степени возможно как со старым -стилем BIOS, так и с современными машинами с UEFI, и DHCP-сервер различает эти случаи и предлагает машине подходящий загрузчик.

В любом случае машины загружают какой-то вариант PXELinux. У него есть отличное свойство в том, как он ищет файл конфигурации. Сначала он запрашивает файл конфигурации, названный в честь UUID SMBIOS машины, если он не найден, если запрашивает файл, названный в честь MAC-адреса интерфейса, который был загружен, IP-адрес, и если ничего не помогает, он запрашивает файл default.

Таким образом, вы можете создать некоторые «базовые конфигурации», одна из которых загружает машины с локального жесткого диска tftp/pxelinux.cfg/harddisk:

default harddisk

label harddisk
    localboot 0

, а другая — для загрузки clonezilla tftp/pxelinux.cfg/clonezilla:

default clonezilla

label clonezilla
#    clonezilla boot instructions here

, и вы можете добавить несколько других, например, для бездискового тонкого клиента (это фактическая конфигурация, которую я когда-то использовал):

default stretch

label stretch
    linux thinclient/vmlinuz-4.9.0-7-amd64
    initrd thinclient/initrd.img-4.9.0-7-amd64
    append ISCSI_INITIATOR=iqn.1993-08.org.debian:01:a4c444f2b735 ISCSI_TARGET_NAME=iqn.2018-10.ru.rterm.office.test-storage:thinclient.lvm ISCSI_TARGET_IP=192.168.168.113 ISCSI_TARGET_PORT=3260 root=UUID=344ca052-8ea2-437f-9550-a5503d0e7b21 ip=dhcp quiet

Затем вы создаете символические ссылки, которые указывают на эти шаблоны:

cd tftp/pxelinux.cfg
ln -s clonezilla 01-10-32-54-76-98-ba
ln -s clonezilla 01-dc-fe-10-32-54-76
ln -s harddisk 01-98-ba-dc-fe-10-32
ln -s harddisk 01-54-76-98-ba-dc-fe
ln -s harddisk default
ln -s thinclient 00801536-e3ee-1610-9957-d68a52030736  

В этом примере машины с MAC-адресами 10:32:54:76:98:baи dc:fe:10:32:54:76будут загружать clonezillaфайл конфигурации (01. ] в начале имен файлов здесь означает "Ethernet" ), машина с UUID 00801536-e3ee-1610-9957-d68a52030736загрузит конфиг thinclient, а остальные машины загрузятся harddisk, но две с указанными MAC будут делать это тише (меньше журналов "файл не найден" на сервере и немного более быстрая загрузка, потому что попытка загрузки будет успешной раньше ).

Итак,если вам нужна какая-то машина для загрузки, скажем, clonezilla, вы создаете или меняете ее симлинк на tftp-сервере на clonezilla. После того, как он был загружен, вы можете отменить изменение (, например. измените на harddiskили что хотите ). Вы можете создать конфиги для сетевой установки Linux — я даже не помню, когда в последний раз загружал установщик с USB, потому что всегда устанавливаю его так уже несколько лет. Вы можете использовать директиву PXELinux includeи создать аккуратное универсальное меню со всеми этими параметрами, чтобы выбирать их вручную и использовать вместо этого по умолчанию. Технически даже установка Windows (была )возможна таким образом. Схема очень гибкая, и единственное, что зависит от клиентской машины, это то, что она сначала загружается из сети.

2
ответ дан 20 November 2021 в 08:39

Я просто добавил запись iPXE (со «скриптом» iPXE в файле initrd)в /etc/grub.d/(, начиная с «99», чтобы он был в конце списка), затем запустил update-grub, затем запустил

grub-reboot `egrep '^menuen' /boot/grub/grub.cfg |wc -l`; reboot;

, это просто подсчитывает menuentriesв файле grub.cfg и указывает grub-reboot загрузить последний вариант при следующей перезагрузке.

0
ответ дан 24 November 2021 в 14:54

Теги

Похожие вопросы