Skip to main content

Запуск CoreElec по сети, через PXE

Ниже — итоговая инструкция в одной редакции, уже с учетом всех правок: OPNsense 192.168.1.1 раздает DHCP/PXE и TFTP, а NFS-сервер с LibreELEC находится на 192.168.1.200. Для Generic x86_64 LibreELEC официально поддерживает сетевую загрузку с pxelinux.0, KERNEL, SYSTEM и NFS для SYSTEM//storage, а в OPNsense Kea есть штатные поля Next server, TFTP server и TFTP bootfile name.

1. Что получится в итоге

Схема загрузки будет такой:

D2500 -> DHCP/PXE на OPNsense 192.168.1.1 -> TFTP на OPNsense 192.168.1.1 -> pxelinux.0 -> KERNEL -> NFS boot/storage на 192.168.1.200

Для повторяемости это хороший базовый вариант: OPNsense делает только сетевую выдачу параметров и начальных файлов, а все данные LibreELEC лежат на отдельном Linux-сервере. LibreELEC в своем руководстве описывает именно такой классический сценарий с DHCP, TFTP и NFS.

2. Что нужно заранее

Нужны:

  • OPNsense с адресом LAN 192.168.1.1
  • Linux-сервер с адресом 192.168.1.200
  • образ LibreELEC Generic x86_64
  • файлы pxelinux.0 и ldlinux.c32
  • клиент Intel D2500, у которого включена загрузка по сети

В каталоге Ubuntu 24.04 netboot для amd64 напрямую доступны pxelinux.0 и ldlinux.c32, а в документации Intel для Desktop Boards указано, что PXE включается через Boot to Network, а F12 может принудительно вызвать загрузку с LAN.

3. Сначала сделай backup конфигурации OPNsense

Перед началом сохрани текущую конфигурацию через:

System -> Configuration -> Backups

OPNsense официально рекомендует использовать именно этот раздел для backup/restore конфигурации.

4. Подготовь NFS-сервер 192.168.1.200

Ниже — вариант под Ubuntu/Debian. Если у тебя другой Linux, логика та же, меняются только команды установки пакета.

Установи NFS-сервер:

sudo apt update
sudo apt install nfs-kernel-server

Ubuntu Server documentation использует именно nfs-kernel-server для поднятия NFS-сервера.

Создай каталоги:

sudo mkdir -p /srv/libreelec/boot
sudo mkdir -p /srv/libreelec/storage

В /srv/libreelec/boot должны лежать файлы LibreELEC:

KERNEL
SYSTEM

LibreELEC для network boot использует именно KERNEL и SYSTEM, а также монтирует сетевые boot и /storage по NFS.

Открой /etc/exports и добавь:

/srv/libreelec/boot 192.168.1.0/24(ro,no_subtree_check,async)
/srv/libreelec/storage 192.168.1.0/24(rw,no_subtree_check,async,no_root_squash)

Файл /etc/exports — штатное место для объявления NFS-экспортов; синтаксис и опции экспорта описаны в exports(5) для Ubuntu.

Применить экспорт:

sudo exportfs -ra
sudo systemctl restart nfs-kernel-server

Команда exportfs -ra перечитывает экспортируемые каталоги, после чего сервис NFS перезапускается. Это соответствует стандартной последовательности настройки NFS на Ubuntu.

Проверка:

showmount -e 192.168.1.200

Ты должен увидеть оба экспорта:

  • /srv/libreelec/boot
  • /srv/libreelec/storage

5. Откуда взять pxelinux.0 и ldlinux.c32

Бери оба файла из Ubuntu netboot amd64. В каталоге релиза они лежат готовыми:

  • pxelinux.0
  • ldlinux.c32

Это подтверждается листингом каталога Ubuntu 24.04 netboot.

6. Установи TFTP-плагин на OPNsense

В OPNsense плагины устанавливаются через:

System -> Firmware -> Plugins

Официальная документация OPNsense прямо указывает, что плагины ставятся из раздела Firmware, а community plugins можно показать отдельной галочкой. Плагин os-tftp присутствует в экосистеме OPNsense и фигурирует в их release notes.

Установи os-tftp.

7. Подготовь TFTP-каталог на OPNsense

Для os-tftp на практике используется каталог:

/usr/local/tftp

Это зафиксировано в обсуждении плагина OPNsense и в практическом PXE walkthrough для OPNsense. Если каталога нет, создай его вручную.

Создай структуру:

mkdir -p /usr/local/tftp/pxelinux.cfg

В итоге на OPNsense должно получиться так:

/usr/local/tftp/
├── pxelinux.0
├── ldlinux.c32
├── KERNEL
├── SYSTEM
└── pxelinux.cfg/
└── default

Это рабочий базовый вариант для первого запуска LibreELEC по сети. LibreELEC использует pxelinux.0, KERNEL, SYSTEM и pxelinux.cfg/default, а pxelinux.0 и ldlinux.c32 доступны в netboot-наборе Ubuntu.

8. Какие файлы куда копировать

На OPNsense в /usr/local/tftp скопируй:

  • pxelinux.0
  • ldlinux.c32
  • KERNEL
  • SYSTEM

На NFS-сервер в /srv/libreelec/boot скопируй:

  • KERNEL
  • SYSTEM

То есть KERNEL и SYSTEM будут лежать и на TFTP-сервере, и на NFS-сервере. Это удобно для первого, максимально простого варианта запуска. Логика загрузки соответствует документации LibreELEC network boot.

9. Настрой TFTP на OPNsense

После установки плагина открой:

Services -> TFTP -> General

Выставь:

  • Enable = включено
  • Listen address = 192.168.1.1

В практических примерах для OPNsense PXE/TFTP именно так и делают: TFTP слушает LAN-адрес firewall, а не loopback.

10. Настрой PXE-параметры в Kea DHCP на OPNsense

Открой:

Services -> KEA DHCPv4

На нужной LAN-подсети укажи:

Next server: 192.168.1.1
TFTP server: 192.168.1.1
TFTP bootfile name: pxelinux.0

В документации OPNsense Kea эти поля присутствуют штатно: Next server, TFTP server, TFTP bootfile name.

11. Создай загрузочный конфиг LibreELEC

На OPNsense создай файл:

/usr/local/tftp/pxelinux.cfg/default

Содержимое:

DEFAULT LibreELEC
PROMPT 0

LABEL LibreELEC
KERNEL /KERNEL
APPEND ip=dhcp boot=NFS=192.168.1.200:/srv/libreelec/boot disk=NFS=192.168.1.200:/srv/libreelec/storage quiet

Параметры boot=NFS=... и disk=NFS=... соответствуют схеме network boot из документации LibreELEC.

12. Опционально: загрузка SYSTEM в RAM

Если хочешь, чтобы LibreELEC после старта скопировал SYSTEM в оперативную память, добавь параметр toram в конец строки APPEND:

DEFAULT LibreELEC
PROMPT 0

LABEL LibreELEC
KERNEL /KERNEL
APPEND ip=dhcp boot=NFS=192.168.1.200:/srv/libreelec/boot disk=NFS=192.168.1.200:/srv/libreelec/storage toram quiet

Разработчик LibreELEC в форуме проекта пишет, что toram копирует SYSTEM в RAM и требует примерно 150–200 МБ дополнительной памяти; для систем с менее чем ~2 ГБ RAM использовать это нежелательно.

13. Проверки до первого запуска

С любого хоста в сети проверь TFTP:

tftp 192.168.1.1 -c get pxelinux.0

Если файл скачивается, TFTP работает.

Проверь NFS:

showmount -e 192.168.1.200

Если видны /srv/libreelec/boot и /srv/libreelec/storage, NFS работает.

Эти две проверки закрывают две основные точки отказа: начальную сетевую загрузку и доступность экспортов NFS.

14. Настройка клиента Intel D2500

На клиенте зайди в BIOS:

  • F2 при старте
  • раздел Boot
  • включить Boot to Network
  • сохранить F10

Для принудительной сетевой загрузки при POST можно использовать F12. Это описано в официальной инструкции Intel по PXE boot для Desktop Boards.

15. Что будет происходить при старте

Последовательность такая:

  1. D2500 получает IP по DHCP от OPNsense.
  2. OPNsense сообщает, что bootfile — pxelinux.0.
  3. Клиент забирает pxelinux.0 по TFTP с 192.168.1.1.
  4. PXELINUX читает pxelinux.cfg/default.
  5. Загружается KERNEL.
  6. LibreELEC монтирует boot и storage по NFS с 192.168.1.200.
  7. Стартует Kodi.

16. Быстрый блок «если не взлетело»

Если загрузка не пошла, проверяй в таком порядке:

  1. Скачивается ли pxelinux.0 по TFTP с 192.168.1.1.
  2. Есть ли в /usr/local/tftp файлы pxelinux.0, ldlinux.c32, KERNEL, SYSTEM.
  3. Правильно ли указан pxelinux.0 в TFTP bootfile name.
  4. Видны ли экспорты showmount -e 192.168.1.200.
  5. Реально ли лежат KERNEL и SYSTEM в /srv/libreelec/boot.
  6. Совпадает ли путь в APPEND со строками в /etc/exports.

Эти проверки напрямую соответствуют цепочке PXE/TFTP/NFS, на которой построен network boot LibreELEC.

17. Финальная шпаргалка

На OPNsense 192.168.1.1:

Services -> TFTP -> General
Enable: yes
Listen address: 192.168.1.1

Services -> KEA DHCPv4
Next server: 192.168.1.1
TFTP server: 192.168.1.1
TFTP bootfile name: pxelinux.0

Файлы на OPNsense:

/usr/local/tftp/
├── pxelinux.0
├── ldlinux.c32
├── KERNEL
├── SYSTEM
└── pxelinux.cfg/default

Файл /usr/local/tftp/pxelinux.cfg/default:

DEFAULT LibreELEC
PROMPT 0

LABEL LibreELEC
KERNEL /KERNEL
APPEND ip=dhcp boot=NFS=192.168.1.200:/srv/libreelec/boot disk=NFS=192.168.1.200:/srv/libreelec/storage quiet

Или с загрузкой SYSTEM в RAM:

DEFAULT LibreELEC
PROMPT 0

LABEL LibreELEC
KERNEL /KERNEL
APPEND ip=dhcp boot=NFS=192.168.1.200:/srv/libreelec/boot disk=NFS=192.168.1.200:/srv/libreelec/storage toram quiet

На NFS-сервере 192.168.1.200:

/srv/libreelec/boot
/srv/libreelec/storage

/etc/exports:

/srv/libreelec/boot 192.168.1.0/24(ro,no_subtree_check,async)
/srv/libreelec/storage 192.168.1.0/24(rw,no_subtree_check,async,no_root_squash)