init
This commit is contained in:
commit
9bc27e0fb8
2 changed files with 934 additions and 0 deletions
163
README.md
Normal file
163
README.md
Normal 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`-устройств.
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue