Загрузка по сети pxe

Загрузка по сети pxe

Развиваем тему загрузки по сети
На этот раз будем переделывать Grub4Dos на загрузку через syslinux с использованием ipxe
Разбирать начальную установку сервера не станем, так как уже рассматривался в первой статье по сетевой загрузке
Установка тонких клиентов на примере загрузки Thinstation и Grub4Dos
Единственное что нам понадобится, это WEB сервер с модулем просмотра файлов. Любой. Я ставлю lighttpd

apt install lighttpd -y
lighty-enable-mod dir-listing
service lighttpd restart

Теперь пойдем по порядку

  1. Качаем и собираем всё необходимое для syslinux
  2. Создаем структуру каталогов
  3. Загружаем iso файлы
  4. Загружаем ipxe
  5. Пишем и правим конфигурацию до необходимого результата

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

Syslinux

Создаем в корне tftp сервера папку syslinux
Здесь будет вся наша структура каталогов и прочее
Если кроме данной сборки ничего больше не используется, то можно не дробить на подкаталоги и делать без подпапки syslinux
В моем случае используются и другие загрузочные pxe файлы
В папке syslinux создаем подпапки:
pxelinux.cfg – папка конфигурации загрузчика
utils – папка утилит, можно и без нее кидать всё в корень
В папке pxelinux.cfg создаем файл пустой файл default
Это файл основной конфигурации меню syslinux

cd ~/tftpboot/syslinux/pxelinux.cfg/
touch default

Качаем с сайта архив https://cdn.kernel.org/pub/linux/utils/boot/syslinux/
На момент установки syslinux-6.03.zip
Не похоже чтобы он развивался дальше так как версия от 06-Oct-2014 16:33
Распаковываем в любую временную папку и начинаем искать файлы
Файлы необходимы для базовой работы загрузки по сети. Они раскиданы по папкам. Самое простое, воспользоваться поиском.

find ./ -iname ldlinux.c32
./bios/com32/elflink/ldlinux/ldlinux.c32

find ./ -iname libutil.c32
./efi32/com32/libutil/libutil.c32
./efi64/com32/libutil/libutil.c32
./bios/com32/libutil/libutil.c32

Как видим файл с одинаковым именем встречается в нескольких подкаталогах.
Нас интересует простой метод, без efi. Берем по пути ./bios/com32/
Если что-то не докопировали, то при загрузке сервер сообщит об этом
Список файлов и структура которую мы должны получить в итоге:

.
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── memdisk
├── pxelinux.0
├── pxelinux.cfg
│   ├── default
│   └── vesamenu.c32
└── utils
    ├── chain.c32
    ├── poweroff.c32
    └── reboot.c32

В настройках DHCP сервера, для клиентов указываем файл загрузки
/syslinux/pxelinux.0

ISO IPXE

В корне папки syslinux создаем подпапки
iso – папка с загрузочными образами
ipxe – папка с файлами конфигурации и модулем загрузки ipxe
Закидываем образы для загрузки по сети. Это Live утилиты. С загрузкой больших Live линукс дистрибутивов есть сложности. Для начала рассматриваем что работает без нареканий
Подопытный ноутбук имеет частоту CPU 1533 и на борту 512 памяти
По большей части загрузка по сети делается для старого оборудования, которое не умеет грузиться с USB
В папку ipxe качаем готовый обра IPXE

cd ~/tftpboot/syslinux/ipxe/
wget http://boot.ipxe.org/ipxe.lkrn

HTTP

Для загрузки образом есть несколько вариантов. Можно использовать nfs, можно использовать http.
Так как в начале я ставил lighttpd, то понятно что я использую http
Необходимо настроить путь к папке с образами, а именно путь до папки iso

nano /etc/lighttpd/lighttpd.conf
......................
server.document-root        = "/home/virtual/tftpboot/syslinux/iso"
......................
service lighttpd restart

Не забвайте про права на папки, так как lighttpd работает от имени пользователя www-data, то необходимо предоставить права на iso. В процессе настройки это может понадобиться не один раз

chmod -Rf 755 /home/virtual/tftpboot/syslinux/
ipxe http

Конфигурация

Основная логика работы такая:
В пункте меню syslinux выбирается пункт, и в зависимости он грузится или сразу в память, или посредством ipxe по сети
Мелкие образы я гружу сразу в память через модуль memdisk. Так как её мало то большие образы уже не загрузить и выдается ошибка, поэтому вызывается файл конфигурации *.ipxe для http через модуль ipxe.lkrn
В папке ipxe создаем файл с параметрами загрузки образа. Под каждый образ, свой файл

nano ipxe/Acronis_2017.ipxe
#!ipxe
dhcp
set keep-san 1
sanboot --no-describe -k http://192.168.118.49/Acronis_2017.iso

Теперь правим основной файл конфигурации syslinux
Для фонового изображения необходимо положить его в папку /syslinux/pxelinux.cfg/back.jpg
Размер изображения должен совпадать с разрешением экрана в конфигурацци
В моем случае это 800×600

nano syslinux/pxelinux.cfg/default
UI pxelinux.cfg/vesamenu.c32
ALLOWOPTIONS 0
PROMPT 0

MENU CLEAR
MENU RESOLUTION 800 600
MENU TITLE <<< SYSTEM IPXE NET BOOT >>>
MENU BACKGROUND pxelinux.cfg/back.jpg

MENU WIDTH 50
MENU VSHIFT 3
MENU MARGIN 3
MENU ROWS 12

# THEME
#======================================================
MENU COLOR border       30;44   #40ffffff #a0000000 std
MENU COLOR title        1;36;44 #9033ccff #a0000000 std
MENU COLOR sel          7;37;40 #e0ffffff #20ffffff all
MENU COLOR unsel        37;44   #50ffffff #a0000000 std
MENU COLOR help         37;40   #c0ffffff #a0000000 std
MENU COLOR timeout_msg  37;40   #80ffffff #00000000 std
MENU COLOR timeout      1;37;40 #c0ffffff #00000000 std
MENU COLOR msg07        37;40   #90ffffff #a0000000 std
MENU COLOR tabmsg       31;40   #30ffffff #00000000 std
#======================================================

LABEL -
        MENU LABEL Free DOS
        KERNEL memdisk
        append iso raw initrd=iso/fd11src_live.iso
	
LABEL -
        MENU LABEL Mem Test
        KERNEL memdisk
        append iso raw initrd=iso/memtest.iso

LABEL -
        MENU LABEL HDD Test Victoria
        KERNEL memdisk
        append iso raw initrd=iso/victoria.iso

LABEL -
        MENU LABEL Acronis 2013
	KERNEL ipxe/ipxe.lkrn
	INITRD ipxe/Acronis_2013.ipxe

LABEL -
        MENU LABEL Acronis 2017
	KERNEL ipxe/ipxe.lkrn
	INITRD ipxe/Acronis_2017.ipxe
        
LABEL -
        MENU LABEL Acronis B&amp;R 11.5
	KERNEL ipxe/ipxe.lkrn
	INITRD ipxe/Acronis_11.5.ipxe
      
LABEL -
        MENU LABEL ERD Commander x32
        KERNEL ipxe/ipxe.lkrn
        INITRD ipxe/erd65_32.ipxe

LABEL -
        MENU LABEL ERD Commander x64
        KERNEL ipxe/ipxe.lkrn
        INITRD ipxe/erd65_64.ipxe

LABEL -
        MENU LABEL HDD Local Boot
        COM32 utils/chain.c32
        append hd0 0

LABEL -
        MENU LABEL Reboot
        COM32 utils/reboot.c32

LABEL -
        MENU LABEL Shutdown
        COM32 utils/poweroff.c32

В итоге структура каталогов имеет вид:

.
├── ipxe
│   ├── Acronis_11.5.ipxe
│   ├── Acronis_2013.ipxe
│   ├── Acronis_2017.ipxe
│   ├── erd65_32.ipxe
│   ├── erd65_64.ipxe
│   └── ipxe.lkrn
├── iso
│   ├── Acronis_11.5.iso
│   ├── Acronis_2013.iso
│   ├── Acronis_2017.iso
│   ├── erd65_32.iso
│   ├── erd65_64.iso
│   ├── fd11src_live.iso
│   ├── memtest.iso
│   └── victoria.iso
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── memdisk
├── pxelinux.0
├── pxelinux.cfg
│   ├── back.jpg
│   ├── default
│   └── vesamenu.c32
└── utils
    ├── chain.c32
    ├── poweroff.c32
    └── reboot.c32

SLAX

При попытке загрузить обычный Linux Live дистрибутив, получаем ошибку initramfs
В принципе есть варианты решений http://ipxe.org/appnote/ubuntu_live
Мне удалось загрузить Slax
Сами параметры загрузки можно увидеть распаковав образ Slax iPXE с сайта https://www.slax.org/
Мы будем загружать простой образ Slax 32bit
В папке iso создадим папку slax, в ней подпапку ipxe
В папку ipxe необходимо положить загрузчик slax. Его можно взять из образа или скачать http://ftp.linux.cz/pub/linux/slax/Slax-9.x/ipxe/9.7.0/32bit/
Сам образ кладем в корне папке slax, здесь же будет и файл параметров конфигурации slax-32bit-9.7.0.ipxe
Проделываемые действия, без сокращений чтобы лучше понимать

mkdir syslinux/iso/slax/
mkdir syslinux/iso/slax/ipxe/
cd syslinux/iso/slax/ipxe/
wget http://ftp.linux.cz/pub/linux/slax/Slax-9.x/ipxe/9.7.0/32bit/initrfs.img
wget http://ftp.linux.cz/pub/linux/slax/Slax-9.x/ipxe/9.7.0/32bit/vmlinuz
cd ..
wget http://ftp.linux.cz/pub/linux/slax/Slax-9.x/slax-32bit-9.7.0.iso
nano slax-32bit-9.7.0.ipxe
#!ipxe
kernel http://192.168.1.49/slax/ipxe/vmlinuz vga=normal load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 from=http://192.168.1.49/slax/slax-32bit-9.7.0.iso
initrd http://192.168.1.49/slax/ipxe/initrfs.img
boot

В меню syslinux создадим пункт меню

cd ~tftp/syslinux/pxelinux.cfg/
nano default
LABEL -
        MENU LABEL Slax 32bit
        KERNEL ipxe/ipxe.lkrn
        APPEND dhcp &amp;&amp; chain http://192.168.1.49/slax/slax-32bit-9.7.0.ipxe

Если получили ошибку доступа к файлам, то не забываем править права

chmod -Rf 755 /home/virtual/tftpboot/syslinux/

IP адрес – это адрес сервер tftp, того где мы все это настраиваем

Еще раз окончательный вид получившейся структуры файлов

.
├── ipxe
│   ├── Acronis_11.5.ipxe
│   ├── Acronis_2013.ipxe
│   ├── Acronis_2017.ipxe
│   ├── erd65_32.ipxe
│   ├── erd65_64.ipxe
│   └── ipxe.lkrn
├── iso
│   ├── Acronis_11.5.iso
│   ├── Acronis_2013.iso
│   ├── Acronis_2017.iso
│   ├── erd65_32.iso
│   ├── erd65_64.iso
│   ├── fd11src_live.iso
│   ├── memtest.iso
│   ├── slax
│   │   ├── ipxe
│   │   │   ├── initrfs.img
│   │   │   └── vmlinuz
│   │   ├── slax-32bit-9.7.0.ipxe
│   │   └── slax-32bit-9.7.0.iso
│   └── victoria.iso
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── memdisk
├── pxelinux.0
├── pxelinux.cfg
│   ├── back.jpg
│   ├── default
│   └── vesamenu.c32
└── utils
    ├── chain.c32
    ├── poweroff.c32
    └── reboot.c32

PS: Gparted

Загрузка официального образа gparted
В документации есть статья https://gparted.org/livepxe.php
Объясню немного проще

Качаем ZIP архив как указано в документации
https://sourceforge.net/projects/gparted/files/gparted-live-stable/1.0.0-3/
1.0.0-3 – на момент написания статьи
Распаковываем как нам нравится. Берем папку live, копируем её на сервер в папку iso (см выше) и переименовываем в gparted

Пункт меню для syslinux/pxelinux.cfg/default

LABEL -
        MENU LABEL Gparted 32bit
        KERNEL iso/gparted/vmlinuz                                            
        APPEND initrd=iso/gparted/initrd.img boot=live config components union=overlay username=user noswap noeject ip= vga=788 fetch=http://192.168.1.49/gparted/filesystem.squashfs

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

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