Мультизагрузочный сервер для PXE и UEFI network boot (Сегодня сделаем загрузку по сети для старых и новых компьютеров!)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
kasak
Сообщения: 893
ОС: OpenBSD
Контактная информация:

Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kasak »

Коллеги линуксойды, из-за очень малого количества информации в интернетах по вопросам uefi network boot, я решил восполнить этот пробел, и рассказать сам, как организовать мультизагрузочный сервис, со всякими разными линуксами, доступный одновременно через старый Legacy PXE и через новомодный UEFI Network Stack.

Статью я разделю на три части, первая будет о том как настроить базовый сервер для загрузки, то есть dhcp+tftp+nfs+http и т.д.
Вторая будет о legacy PXE, третья о UEFI.

1 Часть. Подготовка сервера.

Вообще необязательно что это будет один сервер, вполне вероятно что у вас для этих целей могут быть разные сервера.

Начнём с DHCP.
Лично я использую ISC DHCPD там где нужна расширенная конфигурация (прямо как сейчас)
Возможно в будущем я сделаю такие же статьи о kea, но пока что dhcpd будет моей платформой для рассказа.
Если вы не используете у себя dhcpd и по какой-то причине не хотите использовать, вам придётся додумать это колдунство самостоятельно.

На самом деле настроить dhcpd для наших целей очень просто. Достаточно добавить в конфиг следующую конструкцию:

Код: Выделить всё

	if substring (option vendor-class-identifier, 15, 5) = "00000" {
		filename "bios/lpxelinux.0";
	} elsif substring (option vendor-class-identifier, 15, 5) = "00007" { 
		filename "EFI/grubx64.efi";
	} else {
		filename "bios/pxelinux.0";
        }
А так же нужно добавить директиву

Код: Выделить всё

next-server 192.168.0.5;
куда-либо в конфиг. Поскольку у меня всё не очень осложнено, все эти конструкции добавлены в глобальный конфиг, но можно добавить это всё в описание subnet.

Разберёмся по пунктам:
1) Когда pxe клиент получает ip адрес, он возвращает опцию vendor-class-identifier,
которая выглядит так:

Код: Выделить всё

vendor-class-identifier = "PXEClient:Arch:00000:UNDI:002001";
такую строку клиент вернёт если будет грузится по legacy pxe.
А вот такую если по UEFI:

Код: Выделить всё

set vendor-class-identifier = "PXEClient:Arch:00007:UNDI:003016";
Как нетрудно догадаться, наш оператор сравнения, отрезает от этой опции 15 байт ( PXEClient:Arch: )
После чего берёт следующие 5 байт 00007 и сравнивает со строкой (именно строкой а не числом!) после знака =
В зависимости от результата, передаёт клиенту тот или иной filename. Что это такое на filename я объясню чуть позже.
Если вы хотите увидеть ещё один способ реализации той же самой задачи, посмотрите мою статью про dhcpd.
ISC DHCPD - разделяем клиентов на классы

директива next-server передаёт клиенту ip адрес сервера, с которого нужно скачать загрузочный файл. Подразумевается разумеется
tftp сервер. Поэтому, разумеется следующим пунктом у нас будет настройка tftp сервера.
Итак после запроса ip, наш сервер передаст клиентам адрес сервера 192.168.0.5 и путь bios/lpxelinux.0 или EFI/grubx64.efi

tftp сервер:

Мне очень нравится tftp сервер в openbsd. Потому что его настройка очень легкая и понятная. Знаете что нужно для его настройки?
Ничего.
Но, чтобы вам было проще диагностировать ту или иную неисправность в вашей системе, разумно включить режим verbose.
Для этого в openbsd добавим следующую строку в rc.conf.local:

Код: Выделить всё

tftpd_flags=-v /tftpboot
Правда в openbsd такой способ включения сервисов уже устарел.
Сейчас модно добавлять все через rcctl:

Код: Выделить всё

rcctl enable tftpd 
rcctl set tftpd flags "-v /tftpboot"
По умолчанию директории /tftpboot не существует.
Да и нам будет неудобно всё время лазить по файловой системе в её поисках. Разумно создать эту директорию в домашнем каталоге пользователя и сделать на неё ссылку:

Код: Выделить всё

cd ~
mkdir tftpboot
ln -s ~/tftpboot /tftpboot
обратите внимание, tftpd работает не от root, это значит что для доступа к нужной директории, весь путь должен иметь бит x.
например у меня директория /home/kasak имеет права drwxr-xr-x, это не всегда хороший вариант. Но в моём случае это сделано лишь для удобства.

Скорее всего у читателя не BSD а линукс, и честно говоря я боюсь описывать конкретику по кажой реализации tftp во всех дистибутивах.
Для редхэт-подобных я могу лишь посоветовать установить пакет tftp-server и включить:

Код: Выделить всё

firewall-cmd --permanent --add-service=tftp
systemctl enable tftp.socket.

Папка для загрузок будет находится в /var/lib/tftpboot

NFS сервер:

Так же будет не лишним настроить nfs сервер, в основном если вы собираетесь загружать убунто-подобные дистрибутивы. Это в значительной степени ускорит процесс запуска.

в openbsd для этого нужно добавить в /etc/exports строку

Код: Выделить всё

/home/kasak/tftpboot -alldirs -ro -mapall=kasak -network=192.168.0.0 -mask=255.255.255.0
разумеется поправив путь на ваш вариант, и все опции на ваши.
-mapall совершенно излишняя и добавлена для исправления возможных косяков с правами доступа. (опция превращает всех гостей в пользователя kasak)
-alldirs нужна обязательно. она разрешает маунтить любую директорию внутри экспортированной.
-ro необязательна, запрещает запись.
-network и -mask я думаю понятно что такое.
Разумеется nfs нужно ещё активировать. В openbsd:

Код: Выделить всё

rcctl enable portmap mountd nfsd
В линуксе всё немного сложнее.
Нужно установить пакет nfs-utils,
включить

Код: Выделить всё

systemctl enable nfs-server
добавить в /etc/exports:

Код: Выделить всё

/home/kasak/tftpboot 192.168.0.0/12 
выполнить exportfs и добавить nfs в фаервол:

Код: Выделить всё

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpcbind
firewall-cmd --permanent --add-service=mountd
Настройка http

Последняя утилита которая очень поможет нам, это http сервер, как показывает практика, по http значительно быстрее раздавать файлы чем по tftp.
В Openbsd я просто использую встроенный http с таким конфигом:

Код: Выделить всё

ext_addr="*"
chroot "/"
logdir "/var/www/logs"

server "default" {
        listen on $ext_addr port 80
	connection { max request body 10000000000 }

	location "/tftpboot*" {
		directory auto index
		root "/home/kasak"
	}

}
Если вы используете линукс, разумно было бы применить какой-то другой инструмент для этого, но их так много, что я не буду растягивать статью ещё больше. И так получается достаточно длинно.

2 Часть. Работа с legacy pxe.

Наконец-то у нас есть платформа для работы, и теперь можно наконец создавать все эти файлы, для загрузки.
Я начал с pxe, поскольку с ним проще.
Для загрузки нам потребуется syslinux, он доступен по ссылке: https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/
на сегодняшний день самая свежая версия 6.03. и я сомневаюсь что когда-либо её обновят. Но сейчас это не важно.

Нас интересуют в первую очередь файлы bios/core/lpxelinux.0 и bios/core/pxelinux.0
По существу разница в том что lpxelinux.0 умеет загружать образы по http, а pxelinux.0 более совместим с разными машинами.
Однако практика показала что lpxelinux.0 работает во всех случаях. Но для приличия, я всё таки рассказать должен.

Эти оба файла положите в директорию bios, которую вы создадите в директории tftpboot.
(обратите внимание на опции dhcpd из первой части)
там же в директории bios создайте директорию pxelinux.cfg
При загрузке, lpxelinux.0 будет искать в этой директории конфиг следующим образом:

Код: Выделить всё

/pxelinux.cfg/b8945908-d6a6-41a9-611d-74a6ab80b83d
/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/pxelinux.cfg/C000025B
/pxelinux.cfg/C000025
/pxelinux.cfg/C00002
/pxelinux.cfg/C0000
/pxelinux.cfg/C000
/pxelinux.cfg/C00
/pxelinux.cfg/C0
/pxelinux.cfg/C
/pxelinux.cfg/default
вот эта белиберда b8945.... это UUID материнской платы, уникальный для каждого компьютера.
01-88-99... это разумеется мак адрес клиента.
а C000025B это ip адрес клиента конвертированный в 16ричный формат. в данном случае это адрес 192.0.2.91.
каждый раз pxelinux будет отчекрыживать по 1 цифре, пока наконец не расстроится окончательно и не попытается загрузить файл default.
ВОТ! Именно этот файл мы и создадим.
и отредактируем его вашим любимым редактором.
Начало файла у нас будет таким:

Код: Выделить всё

default vesamenu.c32

prompt 0

timeout 1200

label Загрузка с первого диска
localboot 0x80

menu begin 
menu title Ubuntu based

label ..
menu exit

label Ubuntu
linux d/ubuntu/casper/vmlinuz
append boot=casper ip=dhcp netboot=nfs nfsroot=192.168.0.5:/home/kasak/tftpboot/d/ubuntu NFSOPTS="rsize=8192,wsize=8192" initrd=d/ubuntu/casper/initrd.lz locale=ru_RU.UTF-8 quiet splash --
Я думаю тут всё понятно без особенного расписывания, однако обратите внимание на vesamenu.c32
нам для отображения меню потребуется ещё вот эта штуковина. Найти её можно в каталоге скачанного syslinux: bios/com32/menu.
Для работы этой штуковины, нужны ещё другие штуковины:
bios/com32/elflink/ldlinux/ldlinux.c32
bios/com32/libutil/libutil.c32
bios/com32/lib/libcom32.c32


Зачем всё это нужно даже не спрашивайте. Просто смиритесь с этим фактом, и положите это всё в папку bios в tftpboot.

Теперь при загрузке наш клиент будет запрашивать файлы вот в такой последовательности:

Код: Выделить всё

read request for 'bios/lpxelinux.0'
read request for 'bios/lpxelinux.0'
read request for 'bios/ldlinux.c32'
read request for 'bios/pxelinux.cfg/01-b4-96-91-63-3a-53'
read request for 'bios/pxelinux.cfg/AC100EE3'
read request for 'bios/pxelinux.cfg/AC100EE'
read request for 'bios/pxelinux.cfg/AC100E'
read request for 'bios/pxelinux.cfg/AC100'
read request for 'bios/pxelinux.cfg/AC10'
read request for 'bios/pxelinux.cfg/AC1'
read request for 'bios/pxelinux.cfg/AC'
read request for 'bios/pxelinux.cfg/A'
read request for 'bios/pxelinux.cfg/default'
read request for 'bios/vesamenu.c32'
read request for 'bios/libcom32.c32'
read request for 'bios/libutil.c32'
read request for 'bios/pxelinux.cfg/default'
Давайте пока на этом остановимся, и будем считать что с этой частью мы закончили. Добавлением всяких украшательств займемся чуть позже, а пока давайте приготовим платформу для uefi.

3 Часть. Загрузчик UEFI.

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

Для загрузки через uefi мы будем использовать разумеется grub2 (потому что в принципе иных вариантов у нас и нет, не пытайтесь использовать pxelinux.efi, он не работает). И писать конфиг для него будем ручками. Не бойтесь, конфиг граба очень простой, просто в нём очень часто много лишнего.

Для того чтобы приступить к работе, вам ОБЯЗАТЕЛЬНО потребуется установленный дистибутив linux. в моём случае это fedora. И в этом линуксе нужно установить пакет grub2-efi-x64-modules, чтобы мы могли создать образ граба конкретно под наш случай.

ВНИМАНИЕ!!! Брать где-то готовый бинарник абсолютно бесполезно, мы должны создать конкретно свой!!!
Как это делатся сейчас поясню.
Первое что делает граб, когда грузится - ищет свой grub.cfg внутри директории $prefix
А любой дистрибутив имеет в prefix что? всё что угодно, но не tftp адрес.
То есть если вы просто возьмёте grub который установлен в дистибутиве, после загрузки он попытается загрузить grub/grub.cfg
c жесткого диска, и разумеется, не найдёт там его. Нам нужно создать свой бинарник, который при загрузке, будет искать свой конфиг не на диске а в tftp, в определённом месте, и уже оттуда будем вести наши дела. Кроме того, мы сделаем бинарник очень маленького размера, без встроенных лишних модулей. Мы будем подгружать их уже из конфигурационного файла, а сам grub будет иметь только минимально нужное: поддержку сети и tftp.
для этого выполните команду:

Код: Выделить всё

grub2-mkimage -p '(tftp,192.168.0.5)/EFI' -O x86_64-efi -o grubx64.efi tftp efinet
Разумеется нужно заменить все значения на ваши.
(tftp,192.168.0.5) - адрес tftp сервера. /EFI - директория с грабом на этом сервере (внутри /tftpboot разумеется).
-O x86_64-efi говорит грабу о том для какой архитектуры создавать бинарник
tftp efinet - это два модуля которые граб включит в бинарник, чтобы граб мог работать с сетью и tftp.

Вот и всё. Нужный бинарник готов. но это конечно не простой путь, а сложный.

Есть путь проще, воспользоваться утилитой grub2-mknetdir, которая создаст бинарники самостоятельно.
Но я же должен был рассказать вам, как это работает, верно?
Разумеется я вам рекомендую использовать grub2-mknetdir в ваших установках, но я должен был показать вам что будет происходить и как создать тоже самое руками.

Итак, если вы пошли моим путём и собрали свой бинарник, вам ещё нужны модули, их можно взять тоже из дистибутива linux, например в федоре они установлены в /usr/lib/grub. переместите папку x86_64-efi в папку EFI на сервере.
Так же желательно переместить шрифт unicode.ps2 в папку EFI/fonts. Поищите этот шрифт в своём дистрибутиве linux, вполне вероятно он лежит в grub prefix вашей установки.

Так же создайте первоначальный grub.cfg в паке EFI на сервере:

Код: Выделить всё

function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
}

load_video
set gfxpayload=keep
set gfxmode=auto
loadfont unicode
font=unicode
insmod gfxterm
insmod gzio
insmod png

submenu "Arch Linux" {

menuentry "Arch Linux" {
linux d/archiso/arch/boot/x86_64/vmlinuz archiso_basedir=arch archiso_http_srv=http://192.168.0.5/tftpboot/d/archiso/ ip=:::::eth0:dhcp
initrd d/archiso/arch/boot/intel_ucode.img d/archiso/arch/boot/x86_64/archiso.img
	}

menuentry "Manjaro Linux" {
linux d/manjaro/boot/vmlinuz-x86_64 miso_basedir=manjaro miso_http_srv=http://192.168.0.5/tftpboot/d/manjaro/ ip=:::::eth0:dhcp
initrd d/manjaro/boot/intel_ucode.img d/manjaro/boot/initramfs-x86_64.img
	}
} #Конец меню Arch
Ну, чтож теперь у нас есть готовая платформа, которую теперь достаточно только наполнить контентом и можно загружаться.

Часть 4. Наполнение контентом и конфиги.

Как вы можете видеть, я не просто так засунул один загрузчик в папку bios, а второй в папку efi. можно было бы конечно кинуть всё это в корень tftpboot, но тогда бы такой бардак наступил, просто ужас.
Именно поэтому все мои конфиги ссылаются на папку d/
это просто ссылочка, если вы выполните ls -l в папке /tftpboot увидите примерно следующее:

Код: Выделить всё

drwxr-xr-x   4 kasak  kasak   512 Dec 29 15:41 EFI
drwxr-xr-x   3 kasak  kasak   512 Mar  6  2018 bios
drwxr-xr-x  28 kasak  kasak   512 Jan 11 15:03 d
а внутри папок EFI и bios есть ссылочка ведущая на ../d:

Код: Выделить всё

lrwxr-xr-x  1 kasak  kasak       4 Mar  5  2018 d -> ../d
таким образом можно сохранить на tftp сервере некоторый порядок. Однако вам не обязательно повторять за мной, вы можете создать свою структуру.

Теперь в папке d достаточно создать подпапки с разными дистрибутивами, и добавить в конфиги pxelinux и grub.cfg ссылки на них.

Я спрячу под спойлер множественные примеры работающих конфигураций для pxelinux и grub:

для pxelinux:
Spoiler
label Загрузка с первого диска
localboot 0x80

menu begin
menu title Ubuntu based

label ..
menu exit

label Ubuntu
linux d/ubuntu/casper/vmlinuz
initrd d/ubuntu/casper/initrd
append ip=dhcp boot=casper netboot=nfs nfsroot=192.168.0.15:/home/kasak/tftpboot/d/ubuntu locale=ru_RU.UTF-8 quiet splash --

label Mint Cinnamon 64 bit
linux d/mint/casper/vmlinuz
initrd d/mint/casper/initrd.lz
append ip=dhcp boot=casper netboot=nfs nfsroot=192.168.0.15:/home/kasak/tftpboot/d/mint locale=ru_RU.UTF-8 quiet splash --

label Elementary OS
linux d/elementary/casper/vmlinuz
initrd d/elementary/casper/initrd.lz
append ip=dhcp boot=casper netboot=nfs nfsroot=192.168.0.15:/home/kasak/tftpboot/d/elementary locale=ru_RU.UTF-8 quiet splash --

label KDE Neon
linux d/kdeneon/casper/vmlinuz
initrd d/kdeneon/casper/initrd
append ip=dhcp boot=casper netboot=nfs nfsroot=192.168.0.15:/home/kasak/tftpboot/d/kdeneon locale=ru_RU.UTF-8 quiet splash --

menu end

menu begin
menu title Debian

label ..
menu exit

label Debian 10 netinst
linux d/debian/vmlinuz
initrd d/debian/initrd.gz
append --- quiet

menu end

menu begin
menu title Arch Linux

label ..
menu exit

label Arch Linux
linux d/archiso/arch/boot/x86_64/vmlinuz
initrd d/archiso/arch/boot/intel_ucode.img,d/archiso/arch/boot/x86_64/archiso.img
append archiso_basedir=arch archiso_http_srv=http://192.168.0.15/tftpboot/d/archiso/ ip=:::::eth0:dhcp

label Manjaro Linux
linux d/manjaro/boot/vmlinuz-x86_64
initrd d/manjaro/boot/intel_ucode.img,d/manjaro/boot/initramfs-x86_64.img
append miso_basedir=manjaro miso_http_srv=http://192.168.0.15/tftpboot/d/manjaro/ ip=:::::eth0:dhcp

label Manjaro Linux via NFS
linux d/manjaro/boot/vmlinuz-x86_64
initrd d/manjaro/boot/intel_ucode.img,d/manjaro/boot/initramfs-x86_64.img
append miso_basedir=manjaro miso_nfs_srv=192.168.0.15:/tftpboot/d/manjaro/ ip=:::::eth0:dhcp

menu end

menu begin
menu title System Rescue CD

label ..
menu exit

LABEL Boot SystemRescue (NFS)
LINUX d/sysrcd/sysresccd/boot/x86_64/vmlinuz
INITRD d/sysrcd/sysresccd/boot/intel_ucode.img,d/sysrcd/sysresccd/boot/amd_ucode.img,d/sysrcd/sysresccd/boot/x86_64/sysresccd.img
APPEND archisobasedir=sysresccd ip=dhcp archiso_nfs_srv=192.168.0.15:/home/kasak/tftpboot/d/sysrcd

LABEL Boot SystemRescue (HTTP)
LINUX d/sysrcd/sysresccd/boot/x86_64/vmlinuz
INITRD d/sysrcd/sysresccd/boot/intel_ucode.img,d/sysrcd/sysresccd/boot/amd_ucode.img,d/sysrcd/sysresccd/boot/x86_64/sysresccd.img
APPEND archisobasedir=sysresccd ip=dhcp archiso_http_srv=http://192.168.0.15/tftpboot/d/sysrcd

menu end

menu begin
menu title Утилиты

label ..
menu exit

label Memtest86+
kernel d/memtest/memtest

label MHDD Диагностика диска
linux /boot/memdisk
initrd http://192.168.0.15/tftpboot/d/mhdd/mhdd32ver4.6.img
append floppy

label Victoria Диагностика диска
linux /boot/memdisk
initrd http://192.168.0.15/tftpboot/d/victoria/Victoria_v.3.52.3.ima
append floppy

label Western Digital Data Lifeguard Diag
linux /boot/memdisk
initrd http://192.168.0.15/tftpboot/d/dosdlg/dosdlg.img
append harddisk

label Seagate Seatools
linux d/seatools/boot/64bit/vmlinuz_4817_64-signed
initrd d/seatools/boot/64bit/modules_4817_64.gz,d/seatools/boot/32bit/rootfs_4817_32.gz
append nfsmount=192.168.0.15:/home/kasak/tftpboot/d/seatools tce=nfs/tce lst=onboot_STB_Xorg.lst desktop=xfwm4 xexec="ST4L --exitPowerOff" mydata=mydata_STB quiet

label Dr. Web Live CD
linux d/drweb/casper/vmlinuz
initrd d/drweb/casper/initrd.lz
append ip=dhcp boot=casper union=aufs maybe-ubiquity netboot=nfs nfsroot=192.168.0.15:/home/kasak/tftpboot/d/drweb quiet splash --

label Hiren's boot CD диагностика системы
linux /boot/memdisk
initrd http://192.168.0.15/tftpboot/d/hirens/hiren.iso
append iso

label Parted Magic
linux d/pmagic/bzImage
initrd d/pmagic/initrd.img,d/pmagic/fu.img,d/pmagic/m.img
append edd=on vga=normal netsrc=wget neturl="http://192.168.0.15/tftpboot/d/pmagic/pmodules"

label GParted редактор разделов
linux d/gparted/vmlinuz
initrd d/gparted/initrd.img
append boot=live config components union=overlay quiet username=user noswap noeject locales=ru_RU.UTF-8 keyboard-layouts=en gl_batch vga=788 fetch=http://192.168.0.15/tftpboot/d/gparted/filesystem.squashfs

label CloneZilla
linux d/clonezilla/vmlinuz
initrd d/clonezilla/initrd.img
append boot=live union=overlay quiet config components noswap locales=en_US.utf8 edd=on ocs_live_run="ocs-live-general" ocs_live_extra_param="" keyboard-layouts=NONE ocs_live_batch="no" nosplash noprompt fetch=http://192.168.0.15/tftpboot/d/clonezilla/filesystem.squashfs

menu end

menu begin
menu title Минималистичные дистрибутивы

label ..
menu exit

label TinyCore Linux
kernel d/tinycore/boot/vmlinuz
initrd d/tinycore/boot/core.gz
append nfsmount=192.168.0.15:/home/kasak/tftpboot/d/tinycore tce=nfs/cde

label Минималистичная ОС Колибри
linux /boot/memdisk
initrd /d/kolibri/kolibri.img
append raw

label Quirky Linux
linux /d/quirky/vmlinuz
initrd http://192.168.0.15/tftpboot/d/quirky/initrd.q

label Damn Small Linux
linux /boot/memdisk
initrd /d/dsl/current.iso

menu end

menu begin
menu title Red Hat based distros

label ..
menu exit

menu begin
menu title CentOS

label ..
menu exit

label CentOS 7 install
linux centos7/images/pxeboot/vmlinuz
initrd d/centos7/images/pxeboot/initrd.img
append repo=http://192.168.0.15/tftpboot/d/centos7

label CentOS 8 install
linux centos8/images/pxeboot/vmlinuz
initrd d/centos8/images/pxeboot/initrd.img
append repo=http://192.168.0.15/tftpboot/d/centos8

menu end

menu begin
menu title Fedora

label ..
menu exit

label Fedora Workstation Live (slow)
linux fedora/live/images/pxeboot/vmlinuz
initrd d/fedora/live/images/pxeboot/initrd.img
append root=live:http://192.168.0.15/tftpboot/d/fedora/live/LiveOS/squashfs.img rd.live.image quiet

menu end

menu end

menu begin
menu title Установка Windows
menu background boot/winburn.png

label ..
menu exit

label Установка Windows 10
linux d/clonezilla/vmlinuz
initrd d/clonezilla/initrd.img
append boot=live union=overlay quiet config components noswap locales=en_US.utf8 edd=on ocs_live_run="ocs-sr -g auto -e1 auto -e2 -r -j2 -scr -p cmd restoredisk win10 ask_user" ocs_repository="smb://guest:NULL@192.168.2.50/images" ocs_live_extra_param="" keyboard-layouts=NONE ocs_live_batch="no" nosplash noprompt fetch=http://192.168.0.15/tftpboot/d/clonezilla/filesystem.squashfs nomodeset vga=791
text help
ВНИМАНИЕ!!! Установщик удалит все данные на выбранном диске и установит образ Windows 10 Профессиональная 64 бита (UEFI).
endtext
для grub.cfg:
Spoiler
submenu "Arch Linux" {

menuentry "Arch Linux" {
linux d/archiso/arch/boot/x86_64/vmlinuz archiso_basedir=arch archiso_http_srv=http://192.168.0.15/tftpboot/d/archiso/ ip=:::::eth0:dhcp quiet
initrd d/archiso/arch/boot/intel_ucode.img d/archiso/arch/boot/x86_64/archiso.img
}

menuentry "Manjaro Linux" {
linux d/manjaro/boot/vmlinuz-x86_64 miso_basedir=manjaro miso_http_srv=http://192.168.0.15/tftpboot/d/manjaro/ ip=:::::eth0:dhcp quiet
initrd d/manjaro/boot/intel_ucode.img d/manjaro/boot/initramfs-x86_64.img
}

menuentry "Manjaro Linux via NFS" {
linux d/manjaro/boot/vmlinuz-x86_64 miso_basedir=manjaro miso_nfs_srv=192.168.0.15:/home/kasak/tftpboot/d/manjaro/ ip=:::::eth0:dhcp quiet
initrd d/manjaro/boot/intel_ucode.img d/manjaro/boot/initramfs-x86_64.img
}

} #Конец меню Arch

submenu "Ubuntu based" {

menuentry "Ubuntu" {
linux d/ubuntu/casper/vmlinuz boot=casper ip=dhcp netboot=nfs nfsroot=192.168.0.15:/home/kasak/tftpboot/d/ubuntu locale=ru_RU.UTF-8 quiet splash --
initrd d/ubuntu/casper/initrd
}
menuentry "Mint Cinnamon" {
linux d/mint/casper/vmlinuz boot=casper ip=dhcp netboot=nfs nfsroot=192.168.0.15:/home/kasak/tftpboot/d/mint locale=ru_RU.UTF-8 quiet splash --
initrd d/mint/casper/initrd.lz
}
menuentry "Elementary OS" {
linux d/elementary/casper/vmlinuz boot=casper ip=dhcp netboot=nfs nfsroot=192.168.0.15:/home/kasak/tftpboot/d/elementary locale=ru_RU.UTF-8 quiet splash --
initrd d/elementary/casper/initrd.lz
}
menuentry "KDE Neon" {
linux d/kdeneon/casper/vmlinuz boot=casper ip=dhcp netboot=nfs nfsroot=192.168.0.15:/home/kasak/tftpboot/d/kdeneon locale=ru_RU.UTF-8 quiet splash --
initrd d/kdeneon/casper/initrd
}
} #Конец меню убунт

submenu "Utilities" {

menuentry "Parted Magic" {
linux d/pmagic/bzImage edd=on vga=normal netsrc=wget neturl="http://192.168.0.15/tftpboot/d/pmagic/pmodules/"
initrd d/pmagic/initrd.img d/pmagic/fu.img d/pmagic/m.img
}

menuentry "GParted partition editor" {
linux d/gparted/vmlinuz boot=live config components union=overlay quiet username=user noswap noeject locales=ru_RU.UTF-8 keyboard-layouts=en gl_batch vga=788 fetch=http://192.168.0.15/tftpboot/d/gparted/filesystem.squashfs
initrd d/gparted/initrd.img
}

menuentry "CloneZilla" {
linux d/clonezilla/vmlinuz boot=live union=overlay quiet config components noswap locales=en_US.utf8 edd=on ocs_live_run="ocs-live-general" ocs_live_extra_param="" keyboard-layouts=NONE ocs_live_batch="no" nosplash noprompt fetch=http://192.168.0.15/tftpboot/d/clonezilla/filesystem.squashfs
initrd d/clonezilla/initrd.img
}

menuentry "change windows password" {
linux d/ntpass/vmlinuz rw vga=1 loglevel=1
initrd d/ntpass/initrd.czg d/ntpass/scsi.cgz
}

menuentry "Dr.Web Live CD" {
linux d/drweb/casper/vmlinuz ip=dhcp boot=casper union=aufs maybe-ubiquity netboot=nfs nfsroot=192.168.0.15:/home/kasak/tftpboot/d/drweb quiet splash --
initrd d/drweb/casper/initrd.lz
}

menuentry "Seagate Seatools" {
linux d/seatools/boot/64bit/vmlinuz_4817_64-signed nfsmount=192.168.0.15:/home/kasak/tftpboot/d/seatools tce=nfs/tce lst=onboot_STB_Xorg.lst desktop=xfwm4 xexec="ST4L --exitPowerOff" mydata=mydata_STB quiet
initrd d/seatools/boot/64bit/modules_4817_64.gz d/seatools/boot/32bit/rootfs_4817_32.gz
}

menuentry "Memtest86 free" {
insmod chain
chainloader (http,192.168.0.15)/tftpboot/d/memtest86/BOOTX64.efi
}

} #Конец меню утилит

submenu "CentOS" {

menuentry "CentOS 7 install" {
linux centos7/images/pxeboot/vmlinuz repo=http://192.168.0.15/tftpboot/d/centos7
initrd d/centos7/images/pxeboot/initrd.img
}
menuentry "CentOS 8 install" {
linux centos8/images/pxeboot/vmlinuz repo=http://192.168.0.15/tftpboot/d/centos8
initrd d/centos8/images/pxeboot/initrd.img
}
} #Конец меню центосей

submenu "Install windows must die" {

background_image bios/boot/winburn.png

menuentry "Windows 10" {
linux d/clonezilla/vmlinuz boot=live union=overlay quiet config components noswap locales=en_US.utf8 edd=on ocs_live_run="ocs-sr -g auto -e1 auto -e2 -r -j2 -scr restoredisk win10 ask_user" ocs_repository="smb://guest:NULL@192.168.2.50/images" ocs_live_extra_param="" keyboard-layouts=NONE ocs_live_batch="no" nosplash noprompt fetch=http://192.168.0.15/tftpboot/d/clonezilla/filesystem.squashfs nomodeset vga=791
initrd d/clonezilla/initrd.img
}
}
Часть 5. Украшательства, и косяки с которыми вы можете столкнуться:

Украшательства:
Дабы немного разукрасить скучный вид, можно добавить русский язык в pxelinux. Для этого просто конвертируйте файл с русским шрифтом при помощи iconv:

Код: Выделить всё

iconv -f utf-8 -t cp866 default_rus > default
и добавьте на верх файла

Код: Выделить всё

default: font Cyr_a8x16.psf
Так же можно добавить обои в pxelinux и менять их в процессе перехода по разным менюшкам. Для этого нужно добавить строку в default:

Код: Выделить всё

menu background back.png
такую же строку следует добавить в подменю, если вы хотите чтобы в подменю картинка менялась. так можно добавить картинку например убунты в меню с убунтами.

Картинка должна иметь разрешение 640x480 и цветность 16 бит. Как сконвертировать есть в интернете.

GFXTERM В грабе позволяет устанавливать картинки на экран и меняет разрешение на адекватное. Чтобы включить добавьте в начало конфига это:

Код: Выделить всё

insmod all_video
insmod png
loadfont unicode
terminal_output gfxterm

background_image boot/grub2/tux.png
Картинку tux.png выберите самостоятельно.

Возможные проблемы:
Я не рекомендую использовать русский язык в grub. На некоторых машинах с ним нет никаких проблем, а на некоторых русские буквы просто пропадают.

Существуют проблемы с запуском убунт и их клонов с загрузкой из nfs когда сервер НЕ linux (в моём случае OpenBSD). Для этого нужно добавить опции NFSOPTS="rsize=8192,wsize=8192" к опциям загрузки, тогда всё пройдёт гладко.

Будьте предельно внимательны при копировании дистрибутива убунты на сервер. там есть скрытая папка .disk без которой убунта не загрузится!

Не пытайтесь в uefi загрузить старинные досовские утилиты, они не загрузятся.

Именно поэтому, придётся держать два отдельных конфига под pxe и uefi, иначе получится что в uefi не будет грузится часть досовских прог, а в pxe не будут грузится уефные бинарники

В грабе будьте внимательны с переменными и командами. Например terminal_output это команда, и знак = после неё не нужен. а gfxmode= это переменная, и знак = после неё нужен! Лучше поначалу вообще не используйте никакие переменные, чтобы не путаться.

Так же при загрузке через uefi, отключайте secure boot.
Теоретически, можно около бинарника граба поместить shimx64.efi, но лучше просто выключить secure boot.

seagate seatools можно загрузить через pxe и в режиме bios и в uefi. Он основан на tiny core linux. но к сожалению он не принимает nfsopts и заставить его понизить rsize и wsize нереально, поэтому nfs сервер под bsd не пойдёт.

western digital data lifeguard можно загрузить только в режиме legacy bios. но придётся вручную создать толстый дос диск.
я сделал это так:
1) создал в виртуалбоксе виртуальную машину с диском на 40-50 мегабайт. 2) установил туда фридос 3) скопировал туда dlg, и добавил в autoexec.bat путь к нему. 4) загрузил в этой виртуальной машине линукс и через dd скопировал весь диск в файл img. этот файл и нужно передать программе memdisk.

Часть 6. Заключительная

Возможно вы хотите задать вопросы, поэтому я сразу кое что проясню.
Q: Почему я сразу не использовал grub-mknetdir чтобы упростить себе и вам задачу, а не разводить тут писанину.
Отвечаю: Я поставил перед собой задачу рассказать вам как это происходит, как это работает, хотел показать разные варианты решения этих задач.

Q: Почему я не использовал тот же grub для legacy pxe?
A: Я мог бы, однако, опять же, хотел показать что не одним грабом можно решить эту задачу, и кроме того, pxelinux существует уже очень давно, и я пользуюсь им уже больше 10 лет.

Q: Как я смог загрузить N по сети? Я вижу в конфигах этот пункт!
A: Я давний член unixforum, вы читаете не перевод и не копипасту, а мои (kasak) статьи. Вы можете связаться со мной в личном сообщении, я рад помочь всем кто идёт по жизни с linux и bsd.
Последний раз редактировалось kasak 01.02.2021 08:53, всего редактировалось 10 раз.
Linux kasakoff 5.10.7-200.fc33.x86_64 #1 SMP Tue Jan 12 20:20:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1379
ОС: Slackware

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение UnixNoob »

kasak писал:
26.01.2021 16:40
Для загрузки через uefi мы будем использовать разумеется grub2 (потому что в принципе иных вариантов у нас и нет, не пытайтесь использовать pxelinux.efi, он не работает)
Есть, как минимум, rEFInd. Его конфиг лежит в разделе EFI,и искать его на диске другом он не будет.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
kasak
Сообщения: 893
ОС: OpenBSD
Контактная информация:

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kasak »

UnixNoob писал:
26.01.2021 18:18
kasak писал:
26.01.2021 16:40
Для загрузки через uefi мы будем использовать разумеется grub2 (потому что в принципе иных вариантов у нас и нет, не пытайтесь использовать pxelinux.efi, он не работает)
Есть, как минимум, rEFInd. Его конфиг лежит в разделе EFI,и искать его на диске другом он не будет.
rEFInd itself will normally be installed locally. (You can deliver rEFInd as a network-boot image, but that image will be able to boot only OSes on the local disk.)
Linux kasakoff 5.10.7-200.fc33.x86_64 #1 SMP Tue Jan 12 20:20:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1379
ОС: Slackware

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение UnixNoob »

kasak, понятно. Вы это писали с точки зрения поддержки загрузки по сети, а прозвучало как-будто с efi никакой загрузчик не работает. Значит я не так понял.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
xsacha
Сообщения: 24
ОС: Solaris 10

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение xsacha »

Подскажите как запустить на установку windows 10 например у меня такой конфиг

Код: Выделить всё

menuentry "Windows 10" {
  echo "Entering windows installation environment..."
  insmod part_gpt
  insmod ntfs
  insmod chain
  insmod memdisk
  loopback loop images/windows10/winpe.iso
}
но винда не стартует и вообще любой iso Образ как запустить на установку ?
Последний раз редактировалось Bizdelnick 03.06.2021 13:00, всего редактировалось 1 раз.
Причина: тег [code]
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение Bizdelnick »

xsacha писал:
03.06.2021 12:52
Подскажите как запустить на установку windows 10 например у меня такой конфиг

Код: Выделить всё

menuentry "Windows 10" {
  echo "Entering windows installation environment..."
  insmod part_gpt
  insmod ntfs
  insmod chain
  insmod memdisk
  loopback loop images/windows10/winpe.iso
}
но винда не стартует и вообще любой iso Образ как запустить на установку ?
Так Вы ничего и не запускаете в этом конфиге. Подгрузили модули, подцепили образ и на этом остановились. Дальше должно быть что-то вроде

Код: Выделить всё

set root=(loop)
chainloader /efi/boot/bootx64.efi
Но я не уверен, что таким образом в принципе можно заставить работать инсталлятор винды. Мой опыт (возможно, устаревший) говорит о том, что если он и запустится, то всё равно не найдёт установочные файлы.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение ormorph »

Пробовал давно на syslinux, тут кое что описано. Т.е. можно будет скопировать файл memdisk из syslinux, и с помощью его уже запускать образ диска винды в grub2.
Спасибо сказали:
Аватара пользователя
xsacha
Сообщения: 24
ОС: Solaris 10

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение xsacha »

Bizdelnick писал:
03.06.2021 13:05
xsacha писал:
03.06.2021 12:52
Подскажите как запустить на установку windows 10 например у меня такой конфиг

Код: Выделить всё

menuentry "Windows 10" {
  echo "Entering windows installation environment..."
  insmod part_gpt
  insmod ntfs
  insmod chain
  insmod memdisk
  loopback loop images/windows10/winpe.iso
}
но винда не стартует и вообще любой iso Образ как запустить на установку ?
Так Вы ничего и не запускаете в этом конфиге. Подгрузили модули, подцепили образ и на этом остановились. Дальше должно быть что-то вроде

Код: Выделить всё

set root=(loop)
chainloader /efi/boot/bootx64.efi
Но я не уверен, что таким образом в принципе можно заставить работать инсталлятор винды. Мой опыт (возможно, устаревший) говорит о том, что если он и запустится, то всё равно не найдёт установочные файлы.
А как заставить работать инсталятор, все ПК уже на UEFI в режиме bios я настроил все работает но это устаревший режим скоро его вообще не будет и нужно заставить работать в uefi
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение Bizdelnick »

xsacha писал:
04.06.2021 13:37
А как заставить работать инсталятор, все ПК уже на UEFI в режиме bios я настроил все работает но это устаревший режим скоро его вообще не будет и нужно заставить работать в uefi
Я не знаю, надо пробовать. Принципиальной разницы между EFI- и legacy-загрузкой для инсталлятора нет.
Вы хотя бы то, что я написал, сделали? Каков результат?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SwapON
Сообщения: 151
ОС: Arch linux => Gentoo

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение SwapON »

В принципе всё взлетело. Центос по сети встаёт. Но пробую дебиано-подобные ОСи ставить, на этапе установки говорит что не найдет привод, с которого хочет подгрузить дополнительные компоненты. Ну и установка дальше не идёт... :cray:
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение Bizdelnick »

SwapON писал:
15.07.2021 09:28
пробую дебиано-подобные ОСи ставить, на этапе установки говорит что не найдет привод, с которого хочет подгрузить дополнительные компоненты
Это читали? Грузите netboot?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SwapON
Сообщения: 151
ОС: Arch linux => Gentoo

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение SwapON »

Bizdelnick писал:
15.07.2021 09:46
SwapON писал:
15.07.2021 09:28
пробую дебиано-подобные ОСи ставить, на этапе установки говорит что не найдет привод, с которого хочет подгрузить дополнительные компоненты
Это читали? Грузите netboot?
Ну если честно, то у нас на работе импортозамещение. Необходимо на 316 АРМ'ов установить астру + для каждого отдела софт. В основном у всех он одинаковый. Дабы всё автоматизировать, было принято решение развернуть PXE, положить туда астру + preseed. Сопсна затык на установке астры. Ну ща почитаю что Вы предложили, думаю разберусь. Спасибо...! ;)
Спасибо сказали:
Аватара пользователя
SwapON
Сообщения: 151
ОС: Arch linux => Gentoo

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение SwapON »

Bizdelnick писал:
15.07.2021 09:46
SwapON писал:
15.07.2021 09:28
пробую дебиано-подобные ОСи ставить, на этапе установки говорит что не найдет привод, с которого хочет подгрузить дополнительные компоненты
Это читали? Грузите netboot?
Вот я балбес...! Там на диске с астрой, в папке install-doc для тугодумов вся пошагово расписано...! Сделал всё по мануалу, всё взлетело...!
Спасибо сказали:
kamreva
Сообщения: 4
ОС: Debian 11

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kamreva »

Доброго времени суток!
Такой вопрос: как из grub передать управление / запустить установщик Windows с другого сервера? Т.е. в локальной сети есть несколько pxe-серверов и мне надо из grub попасть / запустить загрузчик на win-сервер с поднятой службой WDS. В режиме legacy (pxelinux) я это реализовал через модуль pxechn.c32. Как это реализовать в grub пока найти не могу, по идее это chainloader, но как запустить загрузчик *.efi из сети не знаю.
Спасибо сказали:
Аватара пользователя
kasak
Сообщения: 893
ОС: OpenBSD
Контактная информация:

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kasak »

kamreva писал:
07.02.2022 01:24
Доброго времени суток!
Такой вопрос: как из grub передать управление / запустить установщик Windows с другого сервера? Т.е. в локальной сети есть несколько pxe-серверов и мне надо из grub попасть / запустить загрузчик на win-сервер с поднятой службой WDS. В режиме legacy (pxelinux) я это реализовал через модуль pxechn.c32. Как это реализовать в grub пока найти не могу, по идее это chainloader, но как запустить загрузчик *.efi из сети не знаю.

Код: Выделить всё

menuentry windows must die {
insmod chain
chainloader (tftp)192.168.0.1/boot.efi}
Linux kasakoff 5.10.7-200.fc33.x86_64 #1 SMP Tue Jan 12 20:20:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Спасибо сказали:
kamreva
Сообщения: 4
ОС: Debian 11

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kamreva »

kasak писал:
07.02.2022 08:57
kamreva писал:
07.02.2022 01:24
Доброго времени суток!
Такой вопрос: как из grub передать управление / запустить установщик Windows с другого сервера? Т.е. в локальной сети есть несколько pxe-серверов и мне надо из grub попасть / запустить загрузчик на win-сервер с поднятой службой WDS. В режиме legacy (pxelinux) я это реализовал через модуль pxechn.c32. Как это реализовать в grub пока найти не могу, по идее это chainloader, но как запустить загрузчик *.efi из сети не знаю.

Код: Выделить всё

menuentry windows must die {
insmod chain
chainloader (tftp)192.168.0.1/boot.efi}
При попытке загрузиться с другого сервера
https://drive.google.com/file/d/1SKGZWURAB9S94Cq4tZp4V671lC7gShse/view?usp=sharing
Выдает ошибку доступа
https://drive.google.com/file/d/11Y07vhYH3v74F8zoFFUZsVK8Dil3JNAK/view?usp=sharing
Но в режиме Legacy в PXElinux всё работает отлично и проблем с доступом нет
https://drive.google.com/file/d/14iVh_F6QWtjn94m02smhsmPercs_ONvx/view?usp=sharing
При обычной загрузке (DHCP->WDS) в режиме UEFI так же всё работает
https://drive.google.com/file/d/14cfst1TWhpfPp7OJ06HnUO0nHbQvKjh_/view?usp=sharing

Скриншоты лежат на google-диске и как картинки отображаться не хотят, только как URL

Буду очень признателен за любую помощь
Спасибо сказали:
Аватара пользователя
kasak
Сообщения: 893
ОС: OpenBSD
Контактная информация:

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kasak »

kamreva писал:
14.02.2022 13:17
kasak писал:
07.02.2022 08:57
kamreva писал:
07.02.2022 01:24
Доброго времени суток!
Такой вопрос: как из grub передать управление / запустить установщик Windows с другого сервера? Т.е. в локальной сети есть несколько pxe-серверов и мне надо из grub попасть / запустить загрузчик на win-сервер с поднятой службой WDS. В режиме legacy (pxelinux) я это реализовал через модуль pxechn.c32. Как это реализовать в grub пока найти не могу, по идее это chainloader, но как запустить загрузчик *.efi из сети не знаю.

Код: Выделить всё

menuentry windows must die {
insmod chain
chainloader (tftp)192.168.0.1/boot.efi}
При попытке загрузиться с другого сервера
https://drive.google.com/file/d/1SKGZWURAB9S94Cq4tZp4V671lC7gShse/view?usp=sharing
Выдает ошибку доступа
https://drive.google.com/file/d/11Y07vhYH3v74F8zoFFUZsVK8Dil3JNAK/view?usp=sharing
Но в режиме Legacy в PXElinux всё работает отлично и проблем с доступом нет
https://drive.google.com/file/d/14iVh_F6QWtjn94m02smhsmPercs_ONvx/view?usp=sharing
При обычной загрузке (DHCP->WDS) в режиме UEFI так же всё работает
https://drive.google.com/file/d/14cfst1TWhpfPp7OJ06HnUO0nHbQvKjh_/view?usp=sharing

Скриншоты лежат на google-диске и как картинки отображаться не хотят, только как URL

Буду очень признателен за любую помощь
А Secure Boot выключен?
Linux kasakoff 5.10.7-200.fc33.x86_64 #1 SMP Tue Jan 12 20:20:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Спасибо сказали:
kamreva
Сообщения: 4
ОС: Debian 11

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kamreva »

kasak писал:
14.02.2022 13:48
kamreva писал:
14.02.2022 13:17
kasak писал:
07.02.2022 08:57

Код: Выделить всё

menuentry windows must die {
insmod chain
chainloader (tftp)192.168.0.1/boot.efi}
При попытке загрузиться с другого сервера
https://drive.google.com/file/d/1SKGZWURAB9S94Cq4tZp4V671lC7gShse/view?usp=sharing
Выдает ошибку доступа
https://drive.google.com/file/d/11Y07vhYH3v74F8zoFFUZsVK8Dil3JNAK/view?usp=sharing
Но в режиме Legacy в PXElinux всё работает отлично и проблем с доступом нет
https://drive.google.com/file/d/14iVh_F6QWtjn94m02smhsmPercs_ONvx/view?usp=sharing
При обычной загрузке (DHCP->WDS) в режиме UEFI так же всё работает
https://drive.google.com/file/d/14cfst1TWhpfPp7OJ06HnUO0nHbQvKjh_/view?usp=sharing

Скриншоты лежат на google-диске и как картинки отображаться не хотят, только как URL

Буду очень признателен за любую помощь
А Secure Boot выключен?
Да выключен. Скрины, которые я приложил были сняты с виртуальной машины(VMWare 16)
На реальной машине ошибка другая, но про тоже: BlInitializeLibrary failed 0xc0000001
Спасибо сказали:
Аватара пользователя
kasak
Сообщения: 893
ОС: OpenBSD
Контактная информация:

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kasak »

честно признаюсь, я не знаю правильный ответ.
Linux kasakoff 5.10.7-200.fc33.x86_64 #1 SMP Tue Jan 12 20:20:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Спасибо сказали:
kamreva
Сообщения: 4
ОС: Debian 11

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kamreva »

kasak писал:
14.02.2022 15:51
честно признаюсь, я не знаю правильный ответ.
Печально, вот и я уже несколько месяцев "любовью занимаюсь" с сетевыми загрузчиками.
Спасибо за участие.
Спасибо сказали:
Atmel
Сообщения: 5

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение Atmel »

Доброго дня!
У меня астралинукс, по pxelinux.0 все нормально, а вот efi grub после загрузки образа и начала установки изображение на мониторе не обновляется пока не передернешь кабель HDMI.

grub.cfg
if loadfont $prefix/font.pf2 ; then
#set gfxmode=800x600
set gfxmode=auto
set gfxpayload=keep
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod gfxterm
insmod png
terminal_output gfxterm
insmod net
insmod efinet
insmod tftp
insmod gzio
insmod part_gpt
insmod all_video
insmod ext2
insmod multiboot2
insmod normal
fi

menuentry 'Install Astra Linux SE )' {
set background_color=black
echo "Loading linux Kernel"
linux se/linux modprobe.blacklist=evbug debian-installer/allow_unauthenticated=true auto=true priority=critical debian-installer/locale=en_US console-keymaps-at/keymap=ru hostname=test2 domain=main.local astra-license/license=true url=tftp://ip/se/preseed_efi.cfg interface=auto netcfg/dhcp_timeout=60
echo "Loading initrd"
initrd se/initrd.gz
}
После передергивания кабеля показывается текущее в данный момент изображение и чтоб обновить надо снова передернуть.
После окончания установки и загрузки установленной ОС нормальная работа монитора.
Спасибо сказали:
Aid07b
Сообщения: 7
ОС: Linux Mint

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение Aid07b »

Дброго дня!
У меня задача установить по сети Linux Mint на старый системник до-uefi'йных времён.
ит
Я написал скрипт который разворачивает загрузчик на Grub2 для UEFI (что здесь не подходит), который успешно ставит любые версии Mint на UEFI-машины в том чисте и последние версии. И также разворачивает PXE-загрузчик на Syslinux (вот его этот старый системник успешно загружает по сети), который успешно ставит любые версии Mint до 19 версии включительно, но при попытке установить Mint 20, или Mint 20.3, или Mint 21, или Mint 21.1 - выдает ошибку.

В Grub я решил эту проблему дописыванием в конфиг парометра

Код: Выделить всё

ignore_uuid
И мой РОБОЧИЙ конфиг выглядит так:

Код: Выделить всё

loadfont unicode
insmod efi_gop
insmod efi_uga
insmod efinet
insmod linuxefi
insmod lsefimmap
insmod lsefi
insmod lsefisystab
insmod gfxterm
terminal_output gfxterm

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry "Boot on first HDD" {
        set root=(hd0,0)
        chainloader +1
}

menuentry "Install Linux Mint 21 xfce 64-bit" {
        set gfxpayload=keep
        echo Loading the kernel
        linux /images/mint21/casper/vmlinuz ignore_uuid netboot=nfs nfsroot=192.168.88.99:/tftp/images/mint21/ boot=casper file=/cdrom/preseed/autoinstall_by_aid.seed automatic-ubiquity ip=dhcp ---
        echo The kernel has been loaded
        echo Loading the initramfs
        initrd /images/mint21/casper/initrd.lz
        echo The initramfs has been loaded
}

menuentry "Reboot" {
        reboot
}

menuentry "Power Off" {
        halt
}
... но старый целевой системник вообще не грузит UEFI-загрузчик, а в Syslinux эта опция не работает.

Соответственно вопрос: как правильно научить Syslinux устанавливать Linux Mint 21.1 и ему подобные, или так как мой Grub2 даже не загружается на старом системнике, то как развернуть Grab2 для Legacy-машин?
Последний раз редактировалось Aid07b 13.07.2023 11:29, всего редактировалось 1 раз.
Спасибо сказали:
Аватара пользователя
kasak
Сообщения: 893
ОС: OpenBSD
Контактная информация:

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kasak »

а какую ошибку выдаёт то?
Linux kasakoff 5.10.7-200.fc33.x86_64 #1 SMP Tue Jan 12 20:20:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Спасибо сказали:
Aid07b
Сообщения: 7
ОС: Linux Mint

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение Aid07b »

kasak писал:
13.07.2023 10:32
а какую ошибку выдаёт то?
Пишет что

Код: Выделить всё

NFS unavailable over TCP
Но при этом на этомже сервере, с этом же загрузчиком, с абсолютно идентичными параметрами любой Mint включительно до версии 19 успешно устанавливается без какой либо ошибки.

С Grub была та же история пока не добавил параметр

Код: Выделить всё

ignore_uuid
Нету времени лечить проблему. Проще развернуть Grub для Legasy. Вопрос как?
Спасибо сказали:
Аватара пользователя
kasak
Сообщения: 893
ОС: OpenBSD
Контактная информация:

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kasak »

Aid07b писал:
13.07.2023 11:37
kasak писал:
13.07.2023 10:32
а какую ошибку выдаёт то?
Пишет что

Код: Выделить всё

NFS unavailable over TCP
Но при этом на этомже сервере, с этом же загрузчиком, с абсолютно идентичными параметрами любой Mint включительно до версии 19 успешно устанавливается без какой либо ошибки.

С Grub была та же история пока не добавил параметр

Код: Выделить всё

ignore_uuid
Нету времени лечить проблему. Проще развернуть Grub для Legasy. Вопрос как?
так же как и grub-efi.

[kasak@kasakoff ~]$ grub2-mknetdir --net-directory /tftpboot
Создан каталог netboot для i386-pc. Настройте сервер DHCP так, чтобы он указывал на /tftpboot/boot/grub2/i386-pc/core.0
Создан каталог netboot для x86_64-efi. Настройте сервер DHCP так, чтобы он указывал на /tftpboot/boot/grub2/x86_64-efi/core.efi
Linux kasakoff 5.10.7-200.fc33.x86_64 #1 SMP Tue Jan 12 20:20:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Спасибо сказали:
Aid07b
Сообщения: 7
ОС: Linux Mint

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение Aid07b »

kasak писал:
13.07.2023 12:28
Aid07b писал:
13.07.2023 11:37
kasak писал:
13.07.2023 10:32
а какую ошибку выдаёт то?
Пишет что

Код: Выделить всё

NFS unavailable over TCP
Но при этом на этомже сервере, с этом же загрузчиком, с абсолютно идентичными параметрами любой Mint включительно до версии 19 успешно устанавливается без какой либо ошибки.

С Grub была та же история пока не добавил параметр

Код: Выделить всё

ignore_uuid
Нету времени лечить проблему. Проще развернуть Grub для Legasy. Вопрос как?
так же как и grub-efi.

[kasak@kasakoff ~]$ grub2-mknetdir --net-directory /tftpboot
Создан каталог netboot для i386-pc. Настройте сервер DHCP так, чтобы он указывал на /tftpboot/boot/grub2/i386-pc/core.0
Создан каталог netboot для x86_64-efi. Настройте сервер DHCP так, чтобы он указывал на /tftpboot/boot/grub2/x86_64-efi/core.efi
Изображение
я попробую так, может это будет работать...
Спасибо сказали:
Aid07b
Сообщения: 7
ОС: Linux Mint

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение Aid07b »

Сначала я переименовал уже существующую директорию на Дальше выполнил команду

Код: Выделить всё

grub-mknetdir --net-directory /tftp
на что получил ответ

Код: Выделить всё

Netboot directory for i386-pc created. Configure your DHCP server to point to /tftp/boot/grub/i386-pc/core.0
Далие чтоб не перенастраивать все (NFS + next-file на Mikrotik) я скопировал папку с образами в нужное место

Код: Выделить всё

mv /tftp2/images/ /tftp/
Также заменил пустой файл

Код: Выделить всё

/tftp/boot/grub/i386-pc/grub.cfg
на свой
Spoiler
loadfont unicode
set gfxmode=auto
insmod gfxterm
terminal_output gfxterm

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry "Boot on first HDD" {
set root=(hd0,0)
chainloader +1
}

menuentry "Install Linux Mint 21 xfce 64-bit" {
set gfxpayload=keep
echo "Loading the kernel"
linux /images/mint21/casper/vmlinuz ignore_uuid netboot=nfs nfsroot=10.164.8.150:/tftp/images/mint21/ boot=casper file=/cdrom/preseed/autoinstall_by_aid.seed automatic-ubiquity ip=dhcp ---
echo "The kernel has been loaded"
echo "Loading the initramfs"
initrd /images/mint21/casper/initrd.lz
echo "The initramfs has been loaded"
}

menuentry "Reboot" {
insmod reboot
reboot
}

menuentry "Power Off" {
insmod halt
halt
}
Потом сделал символьную ссылку на

Код: Выделить всё

/tftp/boot/grub/i386-pc/core.0
при помощи команды

Код: Выделить всё

ln -s /tftp/boot/grub/i386-pc/core.0 /tftp/bootx64.efi
Перезапустил tftp

Код: Выделить всё

systemctl restart tftpd-hpa.service
И при старте целевого компа, биос написал что файл загрузчика не найден...

Тогда я удалил символьные ссылки

Код: Выделить всё

rm bootx64.efi
rm grub.cfg
Потом скопировал директорию grub таким образом:

Код: Выделить всё

 cp -r /tftp/boot/grub/ /tftp/
А также скопировал загрузчик в корневую директорию tftp:

Код: Выделить всё

cp /tftp/boot/grub/i386-pc/core.0 /tftp/
И переименовал его (так тоже можна - уже проверено) в тот что настроен на микротике

Код: Выделить всё

mv core.0 bootx64.efi
Перезапустил tftp

Код: Выделить всё

systemctl restart tftpd-hpa.service
Начал снова запускать целевой комп и на моменте загрузки самого grub по сети он зависал и все.... :wacko:
Добавлено (16:17):
Снова прошерстил биос - он действительно старый, без поддержки UEFI.
Есть еще какие-то идеи как подружить его с Grub?
Последний раз редактировалось /dev/random 13.07.2023 15:42, всего редактировалось 1 раз.
Причина: удалил испорченный тег [quote]
Спасибо сказали:
Аватара пользователя
kasak
Сообщения: 893
ОС: OpenBSD
Контактная информация:

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение kasak »

это уже вопрос к микротикам. Такие пляски с бубном не помогут, надо для одних клиентов отдавать core.0 для других core.efi. заниматься этим должен dhcp сервер. Не представляю может ли этим заниматься микротик.
Linux kasakoff 5.10.7-200.fc33.x86_64 #1 SMP Tue Jan 12 20:20:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Спасибо сказали:
Aid07b
Сообщения: 7
ОС: Linux Mint

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение Aid07b »

kasak писал:
13.07.2023 16:27
это уже вопрос к микротикам. Такие пляски с бубном не помогут, надо для одних клиентов отдавать core.0 для других core.efi. заниматься этим должен dhcp сервер. Не представляю может ли этим заниматься микротик.
Вот сдесь какраз могу не согласиться.
свою историю закину в сполйер чтоб не засорять )
Spoiler
Я сист.админ в доволи таки не маленькой Компании, у нас около 500 рабочих мест в 11 регионах страны. В каждом офисе стоят микротики, они же выступают dhcp-серверапи своих подсетей, которые соединены через VPN в одну большую сеть. Так вот, меня достало что со всех офисов привозили компы ко мне чтоб я переустановил ОСь и я таки занялся установкой по сети - когда я писал скрипт по развертыванию сетевого установщика, чтоб была возможность устанавливать ОСь на новых ноутбуках или переустанавливать ОСь на старых удаленно то для тестов использовал те машины, что были в офисе под рукой. Какой-то период времени скрипт претерпевал шлифовку + добавлялись всякие украштельства для приятного восприятия глазом работы скрипта (ну типа таймер котрый пишет что скрипт сделает что-то через 3.. 2.. 1..)
Так вот, сегодня в офисе у меня есть новый UEFI-йный ноутбук, я для теста развернул загрузчик скриптом и проверяю на подопытном ноуте. После настройки, отправил ноут на фмлмал, или отдал в работу на своем подразделении. Далее снова шлифовал скрипт, а завтра ко мне привезли ещё какой-то старый системник с какого-то из наших филиалов, и т.д. Сначала я разворачивал загрузчик на Syslinux, потом на Grub (для поддержки UEFI), короче какие подопытные кролики были под рукой, те и использовал. И чтоб не перенастраивать dhcp на микротике (лень было) я просто переименовывал bootx64.efi (он же shim для secure boot) на pxelinux.0 и обратно - и это работало!

Поэтому причина далеко не в этом!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Мультизагрузочный сервер для PXE и UEFI network boot

Сообщение Bizdelnick »

Aid07b, не Ваш случай?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить