▍ IPXE¶
Сетевая загрузка операционных систем через Mikrotik¶
Склонируем исходный код ipxe, чтобы можно было в него встроить наш скрипт загрузки меню
Сам скрипт загрузки меню
nano srv.ipxe
#!ipxe
:start
# Механизм получения ip. В случае ошибки - предлагает нажать "s" для запуска командной строки.
# Иначе - начать снова.
dhcp && goto next || prompt --key s --timeout 1500 Press "s" for the iPXE command line... && shell || goto start
:next
# Случае успеха - загрузить "меню" с tftp-сервера.
chain tftp://router/menu
Меняем настройки:
nano config/general.h
#define CERT_CMD /* Certificate management commands */
#define CONSOLE_CMD /* Console command */
#define DIGEST_CMD /* Image crypto digest commands */
#define DOWNLOAD_PROTO_HTTPS /* Secure Hypertext Transfer Protocol */
#define IMAGE_COMBOOT /* COMBOOT */
#define IMAGE_TRUST_CMD /* Image trust management commands */
#define IMAGE_GZIP /* GZIP image support */
#define IMAGE_PNG /* PNG image support */
#define IMAGE_ZLIB /* ZLIB image support */
#define NET_PROTO_IPV6 /* IPv6 protocol */
#define NET_PROTO_LLDP /* Link Layer Discovery protocol */
#define NSLOOKUP_CMD /* DNS resolving command */
#define NTP_CMD /* NTP commands */
#define PARAM_CMD /* Form parameter commands */
#define PCI_CMD /* PCI commands */
#define PING_CMD /* Ping command */
#define POWEROFF_CMD /* Power off commands */
#define REBOOT_CMD /* Reboot command */
#define TIME_CMD /* Time commands */
#define VLAN_CMD /* VLAN commands */
Немного красоты:
nano config/colour.h
#undef COLOR_NORMAL_FG
#undef COLOR_NORMAL_BG
#undef COLOR_SELECT_FG
#undef COLOR_SELECT_BG
#undef COLOR_SEPARATOR_FG
#undef COLOR_SEPARATOR_BG
#undef COLOR_EDIT_FG
#undef COLOR_EDIT_BG
#undef COLOR_ALERT_FG
#undef COLOR_ALERT_BG
#undef COLOR_URL_FG
#undef COLOR_URL_BG
#undef COLOR_PXE_FG
#undef COLOR_PXE_BG
#define COLOR_NORMAL_FG COLOR_CYAN
#define COLOR_NORMAL_BG COLOR_BLACK
#define COLOR_SELECT_FG COLOR_WHITE
#define COLOR_SELECT_BG COLOR_BLUE
#define COLOR_SEPARATOR_FG COLOR_WHITE
#define COLOR_SEPARATOR_BG COLOR_BLACK
#define COLOR_EDIT_FG COLOR_BLACK
#define COLOR_EDIT_BG COLOR_CYAN
#define COLOR_ALERT_FG COLOR_WHITE
#define COLOR_ALERT_BG COLOR_RED
#define COLOR_URL_FG COLOR_CYAN
#define COLOR_URL_BG COLOR_BLUE
#define COLOR_PXE_FG COLOR_BLACK
#define COLOR_PXE_BG COLOR_WHITE
Устанавливаем необходимые программы для сборки:
Собираем:
Создаем само меню boot.ipxe
#!ipxe
console --picture tftp://router/bg
# Boot <boot-url>/<boot-dir>/mac-010203040506.ipxe if script is present
chain --replace --autofree mac-${mac:hexraw} ||
isset ${hostname} && set initiator-iqn ${base-iqn}:${hostname} || set initiator-iqn ${base-iqn}:${mac}
set iscsi-server 192.168.0.10
set base-url http://192.168.0.10/iso
set nfs-server 192.168.0.10
set nfs-mountpt /srv/netinstall
set base nfs://${nfs-server}${nfs-mountpt}
set nfsroot ${nfs-server}:${nfs-mountpt}
set nfs-linux-live nfs://${nfs-server}${nfs-mountpt}
set language en
set layoutcode en
set locale ru_RU.UTF-8
set timezone Europe/Moscow
set keymap en
# Some menu defaults
set menu-timeout 2000
set submenu-timeout ${menu-timeout}
isset ${menu-default} || set menu-default kubuntu
# Figure out if client is 64-bit capable
cpuid --ext 29 && set arch x64 || set arch x86
cpuid --ext 29 && set archl amd64 || set archl i386
###################### MAIN MENU ####################################
:start
menu iPXE boot menu for ${mac:hexraw}
item --gap -- ------------------------- Operating systems --------------------------------
item xterm Boot XFCE Terminal from iSCSI
item ubuntu Boot Ubuntu Terminal from iSCSI
item kubuntu Boot Kubuntu Terminal from iSCSI
item alt Boot Alt Workstation K10 from iSCSI
item winpe1064 Boot Windows 10 21H2 PE 64-bit
item winpe1032 Boot Windows 10 PE 32-bit
item anti Boot antiX 22 32bit from ISO
item slax Boot SLAX 9.11.0 64bit from ISO
item hiren Boot Hiren Boot CD 15.2
item memtest Boot Memtest86 5.01
item victoria Boot Victoria 3.5
item clonezilla Boot Clonezilla x64
item --gap -- ------------------------- Install OS ---------------------------------------
item menu-install Installers...
item --gap -- ------------------------- Advanced options ---------------------------------
item pxelinux Load PXELinux menu
item config Configure settings
item shell Drop to iPXE shell
item reboot Reboot computer
item
item --key x e(x)it Exit iPXE and continue BIOS boot
choose --timeout ${menu-timeout} --default ${menu-default} os || goto cancel
set menu-timeout 0
echo ${os}
goto ${os}
############################ INSTALLER MENU #########################
:menu-install
menu Installers for ${mac:hexraw}
item --gap -- ------------------------- ALT Server 10.1 ----------------------------------
item alt-server Install ALT Server 10.1
item --gap -- ------------------------- Ubuntu 20.04 -------------------------------------
item u20-04-64 Boot Ubuntu 20.04 Installer (Network)
item
item --key 0x08 back Back to top menu...
iseq ${menu-default} menu-install && isset ${submenu-default} && goto menu-install-timed ||
choose selected && goto ${selected} || goto start
:menu-install-timed
choose --timeout ${submenu-timeout} --default ${submenu-default} selected && goto ${selected} || goto start
:cancel
echo You cancelled the menu, dropping you to a shell
:shell
echo Type 'exit' to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start
:failed
echo Booting failed, dropping to shell
goto shell
:reboot
reboot
:exit
:config
config
goto start
:back
set submenu-timeout 0
clear submenu-default
goto start
############ MAIN MENU ITEMS ############
:xterm
sanboot iscsi:${iscsi-server}:::1:xterm || goto failed
goto start
:ubuntu
sanboot iscsi:${iscsi-server}:::1:ubuntu || goto failed
goto start
:kubuntu
sanboot iscsi:${iscsi-server}:::1:kubuntu || goto failed
goto start
:alt
sanboot iscsi:${iscsi-server}:::1:alt || goto failed
goto start
:bootiso
dhcp
initrd ${base-url}/${iso-file}
chain ${base-url}/memdisk iso raw
:winpeload
dhcp
kernel ${base}/wimpe/wimboot pause gui
initrd ${base}/wimpe/${pearch}/media/Boot/bcd BCD
initrd ${base}/wimpe/${pearch}/media/Boot/boot.sdi boot.sdi
initrd ${base}/wimpe/${pearch}/media/sources/boot.wim boot.wim
imgstat
boot
:winpe1064
set pearch win10pe64
goto winpeload
:winpe1032
set pearch win10pe32
goto winpeload
:anti
initrd ${base-url}/antiX-22-net_386-net.iso
chain ${base-url}/memdisk iso || goto failed
goto start
:slax
kernel ${base-url}/MISC/SLAX/vmlinuz
initrd ${base-url}/MISC/SLAX/initrfs.img
imgargs vmlinuz vga=normal load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 from=${base-url}/MISC/slax-64bit-9.11.0.iso
boot || goto failed
goto start
:hiren
initrd ${base-url}/BOOT/Hirens.BootCD.15.2.iso
chain ${base-url}/memdisk iso raw || goto failed
goto start
:memtest
kernel ${base}/memdisk || read void
initrd ${base}/boot/memtest86+-5.01.iso || read void
imgargs memdisk iso raw || read void
boot || read void
:victoria
kernel ${base}/memdisk || read void
initrd ${base}/boot/victoria3.5.iso || read void
imgargs memdisk iso raw || read void
boot || read void
:clonezilla
set custom -- locales=${locale} keyboard-layouts=${layoutcode} utc=no timezone=${timezone}
set options nfsroot=${nfsroot}/${os} ro netboot=nfs boot=live config username=user hostname=clonezilla union=overlay components noswap edd=on nomodeset nodmraid ocs_live_run=ocs-live-general ocs_live_extra_param= ocs_live_batch=no net.ifnames=0 nosplash noprompt ocs_repository="smb://daffin@srv-nas/images/"
imgselect ${base}/${os}/live/vmlinuz ${options} ${custom} || goto failed
imgfetch ${base}/${os}/live/initrd.img || goto failed
imgexec || goto failed
goto start
:pxelinux
set 210:string tftp://router/
chain ${210:string}pxelinux.0 || goto failed
goto start
############################ INSTALLER MENU #########################
:alt-server
kernel ${base}/${os}/10.1/vmlinuz initrd=${base}/${os}/10.1/initrd.img root=bootchain bootchain=fg,altboot ip=dhcp4 changedisk fastboot live automatic=method:nfs,network:dhcp,server:${nfs-server},directory:${nfs-mountpt}/${os}/10.1/iso stagename=altinst showopts lang=ru_RU
initrd ${base}/${os}/10.1/initrd.img
boot || goto failed
goto start
:u20-04-64
echo Install Ubuntu 20.04 Installer (Network)
kernel http://archive.ubuntu.com/ubuntu/dists/focal-updates/main/installer-amd64/current/legacy-images/netboot/ubuntu-installer/amd64/linux
initrd http://archive.ubuntu.com/ubuntu/dists/focal-updates/main/installer-amd64/current/legacy-images/netboot/ubuntu-installer/amd64/initrd.gz
boot || goto failed
goto start
Копируем bin/undionly.kpxe и boot.ipxe в Mikrotik:
Настраиваем TFTP сервер:
Настраиваем DHCP сервер:
Добавляем правило на фаерволе:
Теперь при загрузке по сети наблюдаем следующее меню: