This commit is contained in:
Alexander Zhirov 2025-10-18 23:26:25 +03:00
commit 9bc27e0fb8
Signed by: alexander
GPG key ID: C8D8BE544A27C511
2 changed files with 934 additions and 0 deletions

163
README.md Normal file
View file

@ -0,0 +1,163 @@
# iPXE tool
Скрипт выполняет два основных набора задач:
1. **Работа с образом Alpine (`disk.img`)** — команда `image` с подкомандами:
* `image build` — создание и первичное наполнение образа;
* `image chroot` — вход в chroot;
* `image overlay` — вход в chroot с наложением OverlayFS (изменения не сохраняются).
2. **Сборка iPXE в режиме overlay** с временными изменениями и копированием артефактов на хост — команда `build`.
> Все команды требуют прав `root`.
---
## Требования
* Поддержка loop-устройств и доступ к утилитам: `losetup`, `parted`, `mkfs.ext4`, `mount`, `umount`, `curl`, `tar`, `chroot`.
* Для создания файла: одна из утилит `fallocate`/`truncate`/`dd`.
* Для OverlayFS: поддержка `overlay` в ядре (`/proc/filesystems`) и доступен `modprobe` (если модуль загружается динамически).
* Интернет-доступ для загрузки `alpine-minirootfs`.
* Доступные каталоги:
* Образ по умолчанию: `/var/ipxe/disk.img`
* Внутри образа при первой сборке создаётся `/develop` с файлами:
* `/develop/build.sh` — сценарий сборки iPXE;
* `/develop/certtrust.patch` — патч к исходникам iPXE (по необходимости).
---
## Быстрый старт
### 1) Создание образа Alpine
```bash
sudo ./ipxe.sh image build
```
По умолчанию:
* URL minirootfs: `https://dl-cdn.alpinelinux.org/.../alpine-minirootfs-3.22.2-x86_64.tar.gz`
* Путь к образу: `/var/ipxe/disk.img`
* Размер: `512` МБ (диапазон: `512..1024` МБ)
Полезные флаги:
* `--url URL` — другой источник minirootfs
* `--img PATH` — другой путь к образу
* `--size-mb N` — размер образа (512..1024)
* `--no-bootstrap` — без установки пакетов/репозитория iPXE
* `--force` — перезапись существующего файла
* `--debug` — подробный вывод
Пример:
```bash
sudo ./ipxe.sh image build --img /var/ipxe/disk.img --size-mb 768 --force
```
### 2) Вход в chroot (с сохранением изменений)
```bash
sudo ./ipxe.sh image chroot --img /var/ipxe/disk.img
```
Опционально можно выполнить команду сразу:
```bash
sudo ./ipxe.sh image chroot --img /var/ipxe/disk.img -- 'apk add htop'
```
### 3) Вход в chroot в режиме OverlayFS (изменения не сохраняются)
```bash
sudo ./ipxe.sh image overlay --img /var/ipxe/disk.img
```
Опционально задать размер tmpfs для верхнего слоя:
```bash
sudo ./ipxe.sh image overlay --img /var/ipxe/disk.img --overlay-size-mb 512
```
### 4) Сборка iPXE в overlay и копирование артефактов на хост
```bash
sudo ./ipxe.sh build --img /var/ipxe/disk.img --out-dir /tmp/out -- --efi --legacy --iso --default --patch
```
* Все флаги после `--` передаются **внутреннему** `/develop/build.sh`.
* Артефакты копируются в `--out-dir` (по умолчанию текущий каталог) **только если были собраны**:
* `ipxe.efi``/root/ipxe/src/bin-x86_64-efi/ipxe.efi`
* `undionly.kpxe``/root/ipxe/src/bin-i386-pcbios/undionly.kpxe`
* `ipxe.iso``/root/ipxe/src/bin/ipxe.iso`
---
## Поведение и детали
* **Логи** скрипта нейтральные: «создание образа», «монтирование», «скачивание», «распаковка» и т. п.
* При `image build` выполняется разметка `msdos`, создаётся один раздел `ext4`, монтируется и наполняется содержимым `minirootfs`.
* При первой сборке внутрь образа добавляется `/develop/build.sh` и `/develop/certtrust.patch`.
* `image chroot` и `image overlay` автоматически монтируют необходимые файловые системы (`/dev`, `proc`, `sys`, `run`, `devpts`, `shm`), а при выходе — размонтируют.
* В `overlay`-режиме нижний слой (`disk.img`) монтируется **только для чтения**, верхний слой — во временный `tmpfs`; все изменения теряются при выходе.
* Команда `build`:
* Разворачивает `overlay`, выполняет `/develop/build.sh` с переданными флагами;
* По коду возврата определяет, была ли сборка успешной, и при наличии артефактов копирует их на хост в `--out-dir`;
* После завершения всё размонтирует автоматически.
---
## Часто используемые флаги `/develop/build.sh`
Передаются через `--` в команду `build`, например:
```bash
sudo ./ipxe.sh build -- --efi --default
```
* `--efi` — сборка `bin-x86_64-efi/ipxe.efi`
* `--legacy` — сборка `bin-i386-pcbios/undionly.kpxe`
* `--iso` — сборка `bin/ipxe.iso`
* Без флагов собираются **все** цели.
* `--default` — включение набора опций в `config/general.h` (PING_CMD, IPSTAT_CMD, CONSOLE_CMD и т. д.)
* `--patch` — применение `/develop/certtrust.patch` и включение HTTPS/CERT_CMD
---
## Примеры
Создание образа и последующая сборка всех артефактов iPXE в overlay с копированием на хост:
```bash
sudo ./ipxe.sh image build --img /var/ipxe/disk.img --size-mb 512
sudo ./ipxe.sh build --img /var/ipxe/disk.img --out-dir /srv/ipxe -- --efi --legacy --iso
```
Минимальная сборка только EFI, с патчем и дефолтными опциями:
```bash
sudo ./ipxe.sh build --img /var/ipxe/disk.img --out-dir /srv/ipxe -- --efi --patch --default
```
Проверка окружения без сохранения изменений:
```bash
sudo ./ipxe.sh image overlay --img /var/ipxe/disk.img --overlay-size-mb 256 -- 'apk info -vv'
```
---
## Диагностика
* «образ не найден» — проверьте путь `--img` и выполните `image build`.
* «минимальный/максимальный размер» — скорректируйте `--size-mb` (диапазон 512..1024).
* «отсутствие поддержки overlayfs» — убедитесь в наличии модуля `overlay` в ядре и/или возможности загрузки через `modprobe`.
* При сетевых операциях используйте актуальный URL minirootfs (`--url`).
При любой ошибке скрипт выполняет автоматическую очистку: размонтирование файловых систем и отвязку `loop`-устройств.