30.05.2026
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| 30.05.2026 [2026/05/30 23:41] – VladPolskiy | 30.05.2026 [2026/06/03 07:31] (текущий) – внешнее изменение 127.0.0.1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== Ручная сборка Arch ISO (Headless + WebUI) ====== | ||
| - | ====== | + | |
| + | ===== Этап 1. Подготовка диска sdb на хосте tom_1 ===== | ||
| + | Выполняется на живом хосте tom_1 (IP: 192.168.1.72). Диск sdb выступает временным | ||
| + | накопителем-донором. с доступом в интернет. | ||
| + | |||
| + | ==== 1.1 Создание рабочих директорий ==== | ||
| + | Схема создаваемой структуры: | ||
| + | < | ||
| + | /home | ||
| + | └── eva | ||
| + | ├── new_iso | ||
| + | │ ├── boot | ||
| + | │ └── etc | ||
| + | │ | ||
| + | └── original_iso_image | ||
| + | └── archlinux-x86_64.iso | ||
| + | </ | ||
| <code bash #bash> | <code bash #bash> | ||
| + | # original_iso_image - для оригинального образа iso | ||
| + | mkdir -p ~/ | ||
| + | # new_iso - рабочай директория, | ||
| + | mkdir -p ~/new_iso/ | ||
| + | </ | ||
| + | Как это работает | ||
| + | * mkdir имя_папки — создает новую директорию. | ||
| + | |||
| + | Проаерка создания | ||
| + | <code bash #bash> | ||
| + | # original_iso_image - для оригинального образа iso | ||
| + | ls -ld ~/ | ||
| + | # new_iso - рабочай директория, | ||
| + | ls -ld ~/new_iso/ | ||
| </ | </ | ||
| - | ---------------------------------------------------------------------- | + | Как это работает |
| - | 1.3.1. Распределение ролей при работе в Hyper-V (Virtual Machine) | + | * ls -ld имя_папки |
| - | tom_1 - эталонный хост, основная тестовая ВМ в Hyper-V для сборки iso образа, | + | |
| - | arch-flash - виртуальный диск ы Hyper-V (носитель с записанным iso образом), | + | |
| - | tom_2 - изолированный виртуальный хост, ВМ в Hyper-V без доступа в интернет, | + | |
| - | Добавление ролей при работе c физическим железом | + | |
| - | usb-arch-server - физический usb носитель | + | |
| - | arch-server - физический сервер (supermicro/ | + | |
| - | 1.3.2. Администраторы сервера | + | |
| - | root - по умолчанию в Arch linux | + | |
| - | eva - из установленного Arch linux | + | |
| - | admin - новый создаваемый администратор | + | |
| - | ~/ | + | |
| - | ~/new_iso/ - тут собираем новый | + | |
| - | ---------------------------------------------------------------------- | + | |
| - | [ Этап 3. Настройка через Chroot ] | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | [ Этап 4. Конфигурация loader.conf ] | + | |
| - | │ | + | |
| - | | + | |
| - | | + | |
| - | 【 ВАРИАНТ А 】 【 ВАРИАНТ Б 】 | + | |
| - | Сборка "на лету" | + | |
| - | (Быстрый метод) | + | |
| - | | + | |
| - | | + | |
| - | [ Этап 5А ] [ Этап 5Б ] | + | |
| - | Генерация efi.img и Создание папки ~/ | + | |
| - | прямой запуск xorriso | + | |
| - | | + | |
| - | | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | [ Этап 6. Экспорт и запуск в Hyper-V ] | + | |
| - | ----------------------------------------------------------------------- | + | |
| - | 1. Дублирование сборки ISO (Этап 5А против Этапа 5): | + | |
| - | мы влючаем 2 вида: либо Этап 5А / либо Этапа 5 | + | |
| - | 2. Смешение сущностей «RootFS» и «Готовый ISO»: | + | ==== 1.2 Разметка виртуального диска sdb (будущий |
| - | ~/new_iso/ в ней мы собираем новый | + | |
| - | sdb1 - это boot для arch-flash | + | |
| - | sdb2 - это root для | + | |
| - | 3. Ошибки в синтаксисе путей: | + | ===Просмотр списка |
| - | В пункте 3.3.4.2 в параметре Server указано: В пункте 3.3.4.2 | + | Самый наглядный |
| - | через notepad++ указанно верно | + | |
| - | Server = file:/// | + | |
| - | --------------------------------------------------------------------------- | + | |
| - | Ручная сборка Arch ISO (Headless + WebUI) | + | |
| - | Этап 1. Подготовка диска sdb на хосте tom_1 | + | |
| - | Выполняется на живом хосте tom_1 (IP: 192.168.1.72). Диск sdb выступает временным | + | |
| - | накопителем-донором. с доступом в интернет. | + | |
| - | 1.1 Создание рабочих директорий: | + | <code bash #bash> |
| - | mkdir -p ~/original_iso_image/ | + | lsblk |
| - | + | </code> | |
| - | 1.2 Разметка виртуального диска sdb (будущий arch-flash): | + | |
| скрипт создаст правильную структуру для UEFI + BIOS: | скрипт создаст правильную структуру для UEFI + BIOS: | ||
| - | sdb1 — BIOS Boot (1 МБ) -> для загрузки старого BIOS. | + | <note blue> |
| - | sdb2 — EFI System (1 ГБ, FAT32) -> для загрузки UEFI (ваш boot). | + | sdb1 — BIOS Boot (1 МБ) -> для загрузки старого BIOS.\\ |
| + | sdb2 — EFI System (1 ГБ, FAT32) -> для загрузки UEFI (ваш boot).\\ | ||
| sdb3 — Linux root (Все оставшееся место, BTRFS) | sdb3 — Linux root (Все оставшееся место, BTRFS) | ||
| + | </ | ||
| Используйте один из следующих вариантов размеи дисков с | Используйте один из следующих вариантов размеи дисков с | ||
| Строка 73: | Строка 59: | ||
| 1.2.1 Использование утилиты fdisk | 1.2.1 Использование утилиты fdisk | ||
| + | <code bash #bash> | ||
| sudo fdisk /dev/sdb <<EOF | sudo fdisk /dev/sdb <<EOF | ||
| g | g | ||
| Строка 95: | Строка 82: | ||
| w | w | ||
| EOF | EOF | ||
| + | </ | ||
| + | |||
| + | |||
| 1.2.2 Использование утилиты sfdisk | 1.2.2 Использование утилиты sfdisk | ||
| + | <code bash #bash> | ||
| sudo sfdisk /dev/sdb << EOF | sudo sfdisk /dev/sdb << EOF | ||
| label: gpt | label: gpt | ||
| Строка 106: | Строка 97: | ||
| /dev/sdb3 : start= | /dev/sdb3 : start= | ||
| EOF | EOF | ||
| + | </ | ||
| + | Поверим | ||
| + | <code bash #bash> | ||
| + | lsblk | ||
| + | </ | ||
| - | 1.3 Форматирование разделов с метками (LABEL): | + | ==== 1.3 Форматирование разделов с метками (LABEL) |
| 1.3.1 Назначение метки ARCH_BOOT для UEFI-загрузчикаFAT32: | 1.3.1 Назначение метки ARCH_BOOT для UEFI-загрузчикаFAT32: | ||
| + | <code bash #bash> | ||
| sudo mkfs.vfat -F 32 -n " | sudo mkfs.vfat -F 32 -n " | ||
| + | </ | ||
| + | |||
| 1.3.2 Назначение метки ARCH_ROOT для корневой системы BTRFS: | 1.3.2 Назначение метки ARCH_ROOT для корневой системы BTRFS: | ||
| + | <code bash #bash> | ||
| sudo mkfs.btrfs -f -L " | sudo mkfs.btrfs -f -L " | ||
| + | </ | ||
| + | |||
| // | // | ||
| + | 1.3.3. Проверка | ||
| + | Показывает структуру, | ||
| + | <code bash #bash> | ||
| + | lsblk -f | ||
| + | </ | ||
| - | + | 1.3.4 Проверка текущего монтирования | |
| - | 1.3.4 Проверка текущего монтированияЧтобы загрузчик установился корректно, | + | \\ |
| разделы должны быть смонтированы внутри вашей среды arch-chroot. | разделы должны быть смонтированы внутри вашей среды arch-chroot. | ||
| Обычная структура выглядит так: | Обычная структура выглядит так: | ||
| - | /mnt — ваш корень BTRFS (sdb3) | ||
| - | /mnt/boot — ваш boot-раздел FAT32 (sdb2) | ||
| - | Выполните команду для проверки текущего дерева монтирования: | ||
| - | lsblk -f | ||
| - | Что искать в выводе: | + | < |
| - | Убедитесь, | + | NAME |
| - | Убедитесь, | + | sda |
| - | Раздел | + | ├─sda1 vfat |
| + | └─sda2 btrfs 53b73831-4cdb-4783-8dd1-e2342ec6c2bf | ||
| + | /var/cache/pacman/pkg | ||
| + | | ||
| + | / | ||
| + | sdb | ||
| + | ├─sdb1 | ||
| + | ├─sdb2 vfat FAT32 ARCH_BOOT AAD6-B042 | ||
| + | └─sdb3 btrfs ARCH_ROOT cb7b1794-2e34-456c-b4c6-b470a4d3df26 | ||
| + | zram0 swap | ||
| + | </ | ||
| + | ==Структура разделов на диске sdb== | ||
| + | Для универсальной загрузки (и на старых компьютерах с BIOS, и на современных с UEFI) | ||
| + | диск размечается в таблице GPT на три раздела: | ||
| - | 1.3.6 Автоматическая генерация fstab | + | <note blue> |
| + | |Раздел|Назначение|Размер|Файловая система|Метка (LABEL)| | ||
| + | |/ | ||
| + | |/ | ||
| + | |/ | ||
| + | </ | ||
| + | ===Монтирование корневого раздела диска в домашнюю папку.=== | ||
| + | |||
| + | <code bash #bash> | ||
| + | sudo mount /dev/sdb3 ~/new_iso | ||
| + | </ | ||
| + | |||
| + | Разбор команды: | ||
| + | * sudo: запускает команду с правами администратора (root). | ||
| + | * mount: команда для подключения файловой системы устройства к дереву папок. | ||
| + | * /dev/sdb3: третий раздел на втором жестком диске (sdb). | ||
| + | * ~/new_iso: целевая папка (точка монтирования) внутри вашей домашней директории. | ||
| + | Результат: | ||
| + | * содержимое раздела /dev/sdb3 станет доступно для чтения и записи внутри папки ~/new_iso. | ||
| + | |||
| + | === Проверка монтирования корневого раздела. === | ||
| + | Найти все активные монтирования, | ||
| + | <code bash #bash> | ||
| + | mount | grep ~/new_iso | ||
| + | </ | ||
| + | |||
| + | Разбор команды: | ||
| + | * mount: без параметров выводит список всех вообще примонтированных устройств в системе. | ||
| + | * | (конвейер): | ||
| + | * grep : фильтрует строки, | ||
| + | Результат: | ||
| + | * вы увидите, | ||
| + | |||
| + | === Создать папку etc внутри точки монтирования. === | ||
| + | <code bash #bash> | ||
| + | sudo mkdir -p ~/ | ||
| + | </ | ||
| + | |||
| + | Разбор команды: | ||
| + | * mkdir: команда создания директорий. | ||
| + | * -p (parents): полезный флаг. Он создаст всю цепочку папок (~/ | ||
| + | Результат: | ||
| + | * создается каталог etc. Если перед этим вы успешно выполнили первую команду (mount), то эта папка создастся прямо внутри раздела /dev/sdb3. | ||
| + | |||
| + | === Проверка создания папки /etc === | ||
| + | |||
| + | |||
| + | <code bash #bash> | ||
| + | tree ~/new_iso | ||
| + | </ | ||
| + | |||
| + | // | ||
| + | |||
| + | 1.3.6 Автоматическая генерация fstab | ||
| + | Команда ls -ld ~/ | ||
| + | <code bash #bash> | ||
| + | ls -ld ~/ | ||
| + | </ | ||
| Важно: Эту команду нужно выполнять снаружи chroot-окружения (внутри установочной флешки), | Важно: Эту команду нужно выполнять снаружи chroot-окружения (внутри установочной флешки), | ||
| - | когда все ваши разделы уже смонтированы в папку | + | когда все ваши разделы уже смонтированы в папку . |
| + | \\ | ||
| Выполните команду: | Выполните команду: | ||
| - | genfstab -U /mnt >> | + | <code bash #bash> |
| + | sudo genfstab -U ~/new_iso | sudo tee -a ~/new_iso/etc/fstab | ||
| + | </ | ||
| + | //( | ||
| + | * Флаг -U указывает утилите использовать уникальные UUID разделов вместо имен вроде /dev/sdb3. | ||
| + | Это гарантирует, | ||
| + | * Команда sudo tee запускает саму утилиту записи с правами администратора (root). Это позволяет успешно сохранить сгенерированную таблицу разделов в файл fstab | ||
| + | * Флаг -a (сокращение от append — добавить) переключает утилиту в режим добавления. Новый текст дописывается в самый конец файла, а старые данные не удаляются | ||
| + | )// | ||
| - | //(Флаг -U указывает утилите использовать уникальные UUID разделов вместо имен вроде /dev/sdb3. | + | ===Проверка результата=== |
| - | Это гарантирует, что система | + | |
| - | Проверка результата | + | Откройте файл для проверки: |
| - | Зайдите внутрь установленной системы (если выходили): | + | <code bash #bash> |
| - | arch-chroot | + | cat ~/ |
| + | </code> | ||
| - | И откройте файл для проверки: | ||
| - | cat /etc/fstab | ||
| Если вы ставили систему без подтомов (прямо в корень BTRFS), | Если вы ставили систему без подтомов (прямо в корень BTRFS), | ||
| ваш файл должен выглядеть примерно так:text | ваш файл должен выглядеть примерно так:text | ||
| - | # / | + | < |
| - | UUID=1234abcd-5678-efgh-ijkl-90abcdef1234 | + | [eva@tom1 ~]$ cat ~/ |
| + | # / | ||
| + | UUID=cb7b1794-2e34-456c-b4c6-b470a4d3df26 | ||
| + | [eva@tom1 ~]$ | ||
| + | </ | ||
| - | # /dev/sdb2 (Boot-раздел FAT32) | + | <note blue> |
| - | UUID=A1B2-C3D4 | + | ⚠️ Оптимизация для BTRFS (Рекомендуется)\\ |
| - | + | Стандартные настройки genfstab рабочие, | |
| - | ⚠️ Оптимизация для BTRFS (Рекомендуется)Стандартные настройки genfstab рабочие, | + | |
| (особенно если у вас SSD-диск) крайне полезно вручную отредактировать опции монтирования | (особенно если у вас SSD-диск) крайне полезно вручную отредактировать опции монтирования | ||
| - | для корня (/). | + | для корня (/).\\ |
| - | Откройте файл через | + | Откройте файл через nano /etc/fstab и добавьте в строку с btrfs следующие параметры через запятую: |
| - | nano /etc/fstab и добавьте в строку с btrfs следующие параметры через запятую: | + | ssd — включает оптимизацию под твердотельные накопители (если у вас SSD).\\ |
| - | ssd — включает оптимизацию под твердотельные накопители (если у вас SSD). | + | |
| compress=zstd — включает прозрачное сжатие данных (сильно экономит место и продлевает жизнь SSD). | compress=zstd — включает прозрачное сжатие данных (сильно экономит место и продлевает жизнь SSD). | ||
| + | </ | ||
| + | |||
| + | === Редактирование файла fstab=== | ||
| + | <code bash #bash> | ||
| + | sudo nano ~/ | ||
| + | </ | ||
| + | |||
| + | |||
| Пример оптимизированной строки: | Пример оптимизированной строки: | ||
| + | <code bash fstab> | ||
| + | # /dev/sdb3 LABEL=ARCH_ROOT | ||
| + | UUID=cb7b1794-2e34-456c-b4c6-b470a4d3df26 | ||
| + | </ | ||
| + | // | ||
| - | UUID=... / | + | ===Проверить, что вы всё сделали правильно === |
| - | Этап 2. Сборка RootFS внутри нового образа (~/new_iso/) | + | <code bash #bash> |
| + | cat ~/new_iso/etc/fstab | ||
| + | </ | ||
| - | Формируем структуру будущего | + | Посчитайте количество элементов в строке с UUID (разделенных пробелами). Их должно быть |
| - | 2.1 Монтирование нового диска для заливки системы: | + | - UUID=... |
| - | mkdir -p ~/new_iso | + | - / |
| + | - btrfs | ||
| + | - rw, | ||
| + | - 0 | ||
| + | - 0 | ||
| + | |||
| + | === Отключение диска sdb3 от системы === | ||
| + | Команда sudo umount -l /dev/sdb3 выполняет «ленивое» (lazy) размонтирование раздела диска. | ||
| + | |||
| + | <code bash #bash> | ||
| + | sudo umount -l /dev/sdb3 | ||
| + | </ | ||
| + | |||
| + | Разбор параметров команды | ||
| + | * sudo: запускает операцию с правами администратора. | ||
| + | * umount: стандартная системная команда для отключения файловой системы. | ||
| + | * -l (lazy): ключевой флаг, который активирует режим «ленивого» (или отложенного) отключения. | ||
| + | * /dev/sdb3: целевой раздел диска, который нужно отключить. | ||
| + | |||
| + | |||
| + | ===== Этап 2. Сборка RootFS внутри нового образа (~/ | ||
| + | ===🗺️ Визуальная схема структуры монтирования.=== | ||
| + | В процессе сборки (Этап 2.1) создается иерархическая структура, | ||
| + | где один раздел накопителя-донора монтируется внутрь другого: | ||
| + | < | ||
| + | / (Корень хоста tom_1) | ||
| + | ├── boot/ < | ||
| + | ├── [BIOS Boot] < | ||
| + | └── home/ | ||
| + | └── eva/ | ||
| + | └── new_iso/ | ||
| + | └── boot/ < | ||
| + | </ | ||
| + | Выполните команду для проверки текущего | ||
| + | <code bash #bash> | ||
| + | lsblk -f | ||
| + | </ | ||
| + | |||
| + | Как выглядит идеальный результат для вашего диска: | ||
| + | <code bash #bash> | ||
| + | NAME | ||
| + | sda | ||
| + | ├─sda1 vfat | ||
| + | └─sda2 btrfs 53b73831-4cdb-4783-8dd1-e2342ec6c2bf | ||
| + | / | ||
| + | /home | ||
| + | / | ||
| + | sdb | ||
| + | ├─sdb1 | ||
| + | ├─sdb2 vfat FAT32 ARCH_BOOT AAD6-B042 | ||
| + | └─sdb3 btrfs ARCH_ROOT cb7b1794-2e34-456c-b4c6-b470a4d3df26 | ||
| + | zram0 swap | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | Вот список из 4 ключевых вещей, которые вам нужно проверить в терминале: | ||
| + | - 1. Колонка **FSTYPE** (Тип файловой системы) | ||
| + | Убедитесь, | ||
| + | - Для / | ||
| + | - Для / | ||
| + | - Если там пусто, | ||
| + | - 2. Колонка **LABEL** (Метка диска) | ||
| + | Проверьте, | ||
| + | - У загрузочного раздела должно стоять **ARCH_BOOT**. | ||
| + | - У корневого раздела должно стоять **ARCH_ROOT**. | ||
| + | - Метки помогают | ||
| + | - 3. Колонка **UUID** (Уникальный идентификатор) | ||
| + | Это длинная строка из букв, цифр и дефисов. Именно её вы записывали в файл fstab. | ||
| + | - Убедитесь, что **UUID** для / | ||
| + | - 4. Колонка **MOUNTPOINTS** (Точки монтирования) | ||
| + | - В этой колонке напротив строк **sdb2** и **sdb3** должно быть абсолютно **пусто**. | ||
| + | |||
| + | ==== 2.1 Монтирование новых дисов для загрузки системы ==== | ||
| + | |||
| + | Монтируются два раздела | ||
| + | <note blue> | ||
| + | * **sdb1** (BIOS Boot) — **не монтируется** (нужен просто как «маяк» | ||
| + | * **sdb2** (FAT32, метка ARCH_BOOT) — монтируется в папку **~/ | ||
| + | * **sdb3** (Btrfs, метка ARCH_ROOT) — монтируется | ||
| + | </ | ||
| + | //////////////////////////////////////////////////////////////////// | ||
| + | <code bash #bash> | ||
| + | # mkdir -p ~/ | ||
| sudo mount /dev/sdb3 ~/ | sudo mount /dev/sdb3 ~/ | ||
| sudo mkdir -p ~/ | sudo mkdir -p ~/ | ||
| sudo mount /dev/sdb2 ~/ | sudo mount /dev/sdb2 ~/ | ||
| + | </ | ||
| + | ==1. /dev/sdb1 (BIOS Boot) — НЕ МОНТИРУЕТСЯ== | ||
| + | Этот раздел действительно **остается несмонтированным** на протяжении всего процесса. | ||
| + | * В инструкции на Этапе 1.3.4 прямо указано: | ||
| + | * Зачем он нужен: Этот раздел имеет крошечный размер (всего 1 МБ). Он нужен только для разметки GPT, чтобы старые материнские платы (BIOS/ | ||
| + | ==3. /dev/sdb3 (Корень Btrfs) — МОНТИРУЕТСЯ== | ||
| + | Этот раздел монтируется в первую очередь. | ||
| + | * В инструкции на Этапе 2.1 выполняется команда: | ||
| + | * Зачем: Это самый большой раздел, | ||
| + | ==2. /dev/sdb2 (папка boot) — МОНТИРУЕТСЯ== | ||
| + | Этот раздел действительно **остается несмонтированным** на протяжении всего процесса. | ||
| + | * В инструкции на Этапе 1.3.4 прямо указано: | ||
| + | * Зачем он нужен: Этот раздел имеет крошечный размер (всего 1 МБ). Он нужен только для разметки GPT, чтобы старые материнские платы (BIOS/ | ||
| - | 2.2 копируем корень tom_1, исключая виртуальные и временные папки. | + | <code bash #bash> |
| - | sudo rsync -aAXv --exclude={"/ | + | lsblk -f |
| + | </code> | ||
| - | =====Этап 3. Настройка системы через Chroot (chroot ~/new_iso/) | + | < |
| + | [eva@tom1 ~]$ lsblk -f | ||
| + | NAME | ||
| + | sda | ||
| + | ├─sda1 vfat | ||
| + | └─sda2 btrfs 53b73831-4cdb-4783-8dd1-e2342ec6c2bf | ||
| + | / | ||
| + | /home | ||
| + | / | ||
| + | sdb | ||
| + | ├─sdb1 | ||
| + | ├─sdb2 vfat FAT32 ARCH_BOOT AAD6-B042 | ||
| + | └─sdb3 btrfs ARCH_ROOT cb7b1794-2e34-456c-b4c6-b470a4d3df26 | ||
| + | zram0 swap | ||
| + | |||
| + | </ | ||
| + | |||
| + | Итоговая схема п.2.1 | ||
| + | < | ||
| + | [eva@tom1 ~]$ tree /home | ||
| + | /home | ||
| + | └── eva | ||
| + | └── new_iso | ||
| + | ├── boot | ||
| + | └── etc | ||
| + | └── fstab | ||
| + | |||
| + | 5 directories, | ||
| + | </ | ||
| + | ==== 2.2 копируем корень tom_1, исключая виртуальные и временные папки. ==== | ||
| + | <code bash #bash> | ||
| + | sudo rsync -aAXv --exclude={"/ | ||
| + | </ | ||
| + | |||
| + | ===Проверим выполнение с вложенностью 3 уровня=== | ||
| + | Выведем только интересующие нас папку /boot и файл / | ||
| + | <code bash #bash> | ||
| + | sudo find / | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | └── home | ||
| + | └── eva | ||
| + | └── new_iso | ||
| + | ├── boot | ||
| + | └── etc | ||
| + | └── fstab | ||
| + | |||
| + | 5 directories, | ||
| + | </ | ||
| + | === Проверка файла /etc/fstab === | ||
| + | Проверим, | ||
| + | выведем его содержимое на экран с помощью команды cat. | ||
| + | |||
| + | <code bash #bash> | ||
| + | cat / | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # /dev/sdb3 LABEL=ARCH_ROOT | ||
| + | UUID=85f23d27-9469-4c60-89d5-79242d2e1e17 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Этап 3. Настройка системы через Chroot (chroot ~/ | ||
| Переходим внутрь создаваемой системы для изоляции настроек. | Переходим внутрь создаваемой системы для изоляции настроек. | ||
| - | 3.1 Вход в окружение: | + | ==== 3.1 Вход в окружение |
| + | <code bash #bash> | ||
| sudo arch-chroot ~/new_iso/ | sudo arch-chroot ~/new_iso/ | ||
| + | </ | ||
| + | < | ||
| + | [eva@tom1 ~]$ sudo arch-chroot ~/new_iso/ | ||
| + | [root@tom1 /]# | ||
| + | </ | ||
| - | 3.2 Время и Офлайн-режим | + | |
| - | 3.2.1 Настройка времени (Универсальное UTC + запрет синхронизации): | + | ==== 3.2 Время и Офлайн-режим |
| + | Во время установки Arch Linux с помощью скрипта archinstall или официального образа служба | ||
| + | синхронизации времени включается автоматически. По умолчанию за это отвечает служба systemd-timesyncd | ||
| + | |||
| + | |||
| + | ===3.2.1 Настройка времени (Универсальное UTC + запрет синхронизации): | ||
| + | Эти команды используются для настройки системного времени и управления синхронизацией часов в Linux. | ||
| + | \\ | ||
| + | Обычно такой набор команд применяется в изолированных окружениях, | ||
| + | кастомных ISO-образов, | ||
| + | фоновые сетевые службы времени. | ||
| + | == 1. Устанавливаем часовой пояс UTC / Europe/ | ||
| + | <code bash #bash> | ||
| ln -sf / | ln -sf / | ||
| + | </ | ||
| + | или< | ||
| + | ln -sf / | ||
| + | </ | ||
| + | |||
| + | Установка системного часового пояса в UTC / Europe/ | ||
| + | * ln: утилита для создания ссылок между файлами. | ||
| + | * -s (symbolic): создает символическую ссылку (ярлык), | ||
| + | * -f (force): принудительно перезаписывает старую ссылку / | ||
| + | Как это работает: | ||
| + | * файл / | ||
| + | Эта команда привязывает вашу систему к эталонному всемирному времени UTC (Zero timezone). | ||
| + | Все логи и системные часы теперь будут работать без смещения на зимнее/ | ||
| + | |||
| + | == Проверка часового пояса (UTC / Europe/ | ||
| + | Выполните команду ls -l для файла / | ||
| + | является символической ссылкой, | ||
| + | <code bash #bash> | ||
| + | ls -l / | ||
| + | </ | ||
| + | Идеальный вывод: | ||
| + | < | ||
| + | # UTC | ||
| + | lrwxrwxrwx 1 root root 23 May 31 19:08 / | ||
| + | # Europe/ | ||
| + | lrwxrwxrwx 1 root root 33 May 31 22:35 / | ||
| + | </ | ||
| + | Также можно запустить команду date -u — она покажет текущее системное время в формате UTC / Europe/ | ||
| + | |||
| + | == 2. Переносим системное время в аппаратное == | ||
| + | |||
| + | <code bash #bash> | ||
| hwclock --systohc | hwclock --systohc | ||
| - | systemctl disable | + | </ |
| - | systemctl | + | |
| + | Запись текущего системного времени в аппаратные часы материнской платы. | ||
| + | * hwclock: утилита для работы с аппаратными часами (RTC — Real Time Clock), | ||
| + | которые питаются от батарейки на материнской плате вашего компьютера. | ||
| + | * --systohc (System to Hardware Clock): берет точное время из операционной памяти | ||
| + | (которое настроено в Linux) и принудительно записывает его в чип BIOS/ | ||
| + | Зачем это нужно: | ||
| + | * чтобы при следующей перезагрузке компьютера материнская плата сразу передала ядру | ||
| + | Linux правильное время, даже если не будет интернета. | ||
| + | |||
| + | == Проверка переноса времени в аппаратное == | ||
| + | Чтобы убедиться, | ||
| + | <code bash #bash> | ||
| + | hwclock --show | ||
| + | </ | ||
| + | Идеальный вывод: | ||
| + | < | ||
| + | 2026-05-31 19: | ||
| + | </ | ||
| + | Идеальный вывод: Команда должна вывести актуальную дату и точное время | ||
| + | (обычно с припиской .000000+00: | ||
| + | |||
| + | == 3. Ручной " | ||
| + | <code bash #bash> | ||
| + | ln -sf /dev/null / | ||
| + | </ | ||
| + | |||
| + | Полная блокировка («замораживание») службы синхронизации времени. | ||
| + | * mask: это самая сильная форма отключения сервиса в Systemd. Она связывает файл службы с пустой директорией / | ||
| + | Результат: | ||
| + | * службу | ||
| + | ни вручную, | ||
| + | её вызовет ошибку. Это гарантирует, | ||
| + | случайно не изменит зафиксированное вами время. | ||
| + | |||
| + | ==Как это сработает на конечной машине? | ||
| + | Когда ваш кастомный образ загрузится на компьютере без интернета, | ||
| + | systemd попытается прочитать конфигурацию службы systemd-timesyncd.service, | ||
| + | наткнется на пустышку /dev/null и просто проигнорирует её запуск, | ||
| + | вообще не тратя системные ресурсы. | ||
| + | |||
| + | == Проверка ручной блокировки службы (mask) == | ||
| + | Проверьте, | ||
| + | <code bash #bash> | ||
| + | ls -l / | ||
| + | </ | ||
| + | Идеальный вывод: | ||
| + | < | ||
| + | lrwxrwxrwx 1 root root 9 May 31 19:44 / | ||
| + | </ | ||
| + | Идеальный вывод: systemd-timesyncd.service -> /dev/null | ||
| + | |||
| + | |||
| + | ==== 3.3 Настройка статического офлайн-репозитория ==== | ||
| + | |||
| + | Для настройки статического офлайн-репозитория на Arch Linux скачайте | ||
| + | нужные .pkg.tar.zst пакеты и их зависимости, | ||
| + | папку (например, | ||
| + | а затем добавьте полученный путь в конфигурационный файл / | ||
| + | перед официальными репозиториями. | ||
| - | 3.3 Настройка статического офлайн-репозитория: | ||
| 3.3.1 Создаем локальный репозиторий внутри образа из кэша tom_1, | 3.3.1 Создаем локальный репозиторий внутри образа из кэша tom_1, | ||
| База пакетов уже скопирована вместе с / | База пакетов уже скопирована вместе с / | ||
| - | Создаем локальную БД: | + | |
| + | \\ Перейдем | ||
| + | <code bash #bash> | ||
| cd / | cd / | ||
| + | </ | ||
| + | |||
| + | вывод | ||
| + | < | ||
| + | [root@tom1 /]# cd / | ||
| + | [root@tom1 pkg]# | ||
| + | </ | ||
| + | |||
| + | Создаем локальную БД: | ||
| + | <code bash #bash> | ||
| repo-add custom.db.tar.gz *.pkg.tar.zst | repo-add custom.db.tar.gz *.pkg.tar.zst | ||
| + | </ | ||
| + | |||
| + | вывод | ||
| + | < | ||
| + | [root@tom1 pkg]# repo-add custom.db.tar.gz *.pkg.tar.zst | ||
| + | |||
| + | -> Computing checksums... | ||
| + | -> Creating ' | ||
| + | -> Creating ' | ||
| + | ==> Creating updated database file ' | ||
| + | [root@tom1 pkg]# | ||
| + | |||
| + | </ | ||
| 3.3.2 Настройка секции [custom] в pacman.conf для полной изоляции | 3.3.2 Настройка секции [custom] в pacman.conf для полной изоляции | ||
| Строка 211: | Строка 602: | ||
| в локальный кэш: | в локальный кэш: | ||
| 3.3.3.1 Откройте конфигурационный файл: | 3.3.3.1 Откройте конфигурационный файл: | ||
| + | <code bash #bash> | ||
| sudo nano / | sudo nano / | ||
| + | </ | ||
| 3.3.4 Настройка файла: | 3.3.4 Настройка файла: | ||
| Строка 222: | Строка 614: | ||
| 3.3.4.2 В самый конец файла добавь твою локальную секцию [custom]. | 3.3.4.2 В самый конец файла добавь твою локальную секцию [custom]. | ||
| Итоговый блок репозиториев в / | Итоговый блок репозиториев в / | ||
| - | #ini | + | <code bash pacman.conf> |
| # Полностью отключаем внешние репозитории | # Полностью отключаем внешние репозитории | ||
| #[core] | #[core] | ||
| Строка 234: | Строка 626: | ||
| SigLevel = Optional TrustAll | SigLevel = Optional TrustAll | ||
| Server = file:/// | Server = file:/// | ||
| + | </ | ||
| + | После правки | ||
| + | < | ||
| + | #[core] | ||
| + | #Include = / | ||
| - | 3.3.5 Проверка внутри Chroot: | + | # |
| + | #Include = / | ||
| + | |||
| + | #[extra] | ||
| + | #Include = / | ||
| + | |||
| + | # Добавляем изолированный локальный репозиторий | ||
| + | [custom] | ||
| + | SigLevel = Optional TrustAll | ||
| + | Server = file:/// | ||
| + | </ | ||
| + | // | ||
| + | затем Enter для подтверждения записи файла, | ||
| + | и наконец Ctrl + X для выхода)// | ||
| + | |||
| + | ==== 3.3.5 Проверка внутри Chroot | ||
| После сохранения файла обязательно обнови локальную базу данных, | После сохранения файла обязательно обнови локальную базу данных, | ||
| чтобы проверить работу: | чтобы проверить работу: | ||
| + | <code bash #bash> | ||
| pacman -Sy | pacman -Sy | ||
| + | </ | ||
| + | |||
| + | вывод | ||
| + | < | ||
| + | [root@tom1 pkg]# pacman -Sy | ||
| + | :: Synchronizing package databases... | ||
| + | | ||
| + | [root@tom1 pkg]# | ||
| + | </ | ||
| // | // | ||
| custom.db напрямую из папки без единого сетевого запроса.)// | custom.db напрямую из папки без единого сетевого запроса.)// | ||
| - | 3.4 Настройка сети (Статический IP флешки в ОЗУ): | + | ==== 3.4 Настройка сети (Статический IP флешки в ОЗУ) |
| - | Прописываем параметры для работы в ОЗУ (IP: 192.168.1.150). | + | ===Прописываем параметры для работы в ОЗУ (IP: 192.168.1.150).=== |
| - | Создаем профиль systemd-networkd: | + | Т.к. файл профиля systemd-networkd |
| - | rm -f / | + | tom_1 и имеет IP: |
| + | <code bash #bash> | ||
| nano / | nano / | ||
| + | </ | ||
| - | Содержимое: | + | |
| + | Изменим | ||
| + | <code bash 20-wired.network> | ||
| [Match] | [Match] | ||
| Name=en* | Name=en* | ||
| Строка 259: | Строка 685: | ||
| Gateway=192.168.1.1 | Gateway=192.168.1.1 | ||
| DNS=1.1.1.1 | DNS=1.1.1.1 | ||
| + | </ | ||
| + | |||
| + | !!!!!!!!!!!!!!!!!!!!!Я ТУТ!!!!!!!!!!!!!!!!!!!!!!!!!\\ | ||
| + | !!!!!!!!!!!!!!!!!!!!!Я ТУТ!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| + | ==== 3.5 Включение сервисов (Nginx порт 7000 + SSH) ==== | ||
| + | |||
| + | ===Настройка SSH=== | ||
| + | Убедитесь, | ||
| + | <code bash #bash> | ||
| + | systemctl enable sshd | ||
| + | </ | ||
| + | |||
| + | |||
| + | По умолчанию Nginx слушает 80-й порт. Чтобы изменить его на 7000: | ||
| + | Откройте конфигурационный файл в текстовом редакторе (например, | ||
| - | 3.5 Включение сервисов (Nginx порт 7000 + SSH): | ||
| 3.5.1 Правим порт Nginx: | 3.5.1 Правим порт Nginx: | ||
| - | nano / | + | <code bash #bash> |
| + | nano / | ||
| + | </ | ||
| + | Найдите блок server { ... } и проверьте/ | ||
| + | |||
| + | <code bash nginx.conf> | ||
| listen | listen | ||
| server_name | server_name | ||
| + | </ | ||
| + | |||
| + | // | ||
| + | \\ | ||
| + | Включите службу Nginx | ||
| + | |||
| + | <code bash #bash> | ||
| + | systemctl enable nginx | ||
| + | </ | ||
| + | |||
| + | ==1. systemd-networkd== | ||
| + | Это системный демон для управления сетевыми интерфейсами и подключениями | ||
| + | |||
| + | |||
| + | ==2. systemd-resolved== | ||
| + | Это локальный кэширующий DNS-клиент (распознаватель) | ||
| + | |||
| + | |||
| + | ==Как они работают вместе: | ||
| + | systemd-networkd поднимает соединение и получает от | ||
| + | провайдера IP-адрес и адреса DNS-серверов. Затем он передает эти DNS-адреса | ||
| + | службе systemd-resolved, | ||
| + | ваших приложений (например, | ||
| + | |||
| + | |||
| 3.5.2 Активируем автозапуск: | 3.5.2 Активируем автозапуск: | ||
| - | systemctl enable systemd-networkd systemd-resolved | + | <code bash #bash> |
| + | systemctl enable systemd-networkd systemd-resolved | ||
| + | </ | ||
| - | 3.6 Настройка Swap в ОЗУ (zram-generator): | + | Вывод: |
| + | < | ||
| + | [root@tom1 ~]# systemctl enable systemd-networkd systemd-resolved sshd nginx | ||
| + | Created symlink '/ | ||
| + | Created symlink '/ | ||
| + | Created symlink '/ | ||
| + | Created symlink '/ | ||
| + | [root@tom1 ~]# | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===Проверка автозапуска служб=== | ||
| + | В среде chroot команда systemctl status | ||
| + | может работать некорректно из-за отсутствия запущенного менеджера | ||
| + | инициализации (systemd). Чтобы гарантировать, | ||
| + | в автозагрузку, | ||
| + | |||
| + | <code bash #bash> | ||
| + | systemctl is-enabled sshd | ||
| + | systemctl is-enabled nginx | ||
| + | systemctl is-enabled systemd-networkd | ||
| + | systemctl is-enabled systemd-resolved | ||
| + | </ | ||
| + | |||
| + | Если службы добавлены в автозагрузку, | ||
| + | \\ | ||
| + | |||
| + | Вывод: | ||
| + | < | ||
| + | [root@tom1 ~]# systemctl is-enabled sshd | ||
| + | enabled | ||
| + | [root@tom1 ~]# systemctl is-enabled nginx | ||
| + | enabled | ||
| + | [root@tom1 ~]# systemctl is-enabled systemd-networkd | ||
| + | enabled | ||
| + | [root@tom1 ~]# systemctl is-enabled systemd-resolved | ||
| + | enabled | ||
| + | [root@tom1 ~]# | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== 3.6 Настройка Swap в ОЗУ (zram-generator) | ||
| + | <code bash #bash> | ||
| nano / | nano / | ||
| + | </ | ||
| + | |||
| Содержимое: | Содержимое: | ||
| - | ini | + | <code bash zram-generator.conf> |
| [zram0] | [zram0] | ||
| zram-size = ram / 2 | zram-size = ram / 2 | ||
| compression-algorithm = zstd | compression-algorithm = zstd | ||
| + | </ | ||
| - | 3.7 Перезапись fstab под новые метки (LABEL): | + | |
| + | ==== 3.7 Перезапись fstab под новые метки (LABEL) | ||
| + | <code bash #bash> | ||
| # Так как rsync скопировал реальный fstab с UUID хоста tom_1, | # Так как rsync скопировал реальный fstab с UUID хоста tom_1, | ||
| # мы полностью очищаем его внутри chroot, чтобы Live-система на tom_2 работала в ОЗУ без привязки к дискам. | # мы полностью очищаем его внутри chroot, чтобы Live-система на tom_2 работала в ОЗУ без привязки к дискам. | ||
| true > /etc/fstab | true > /etc/fstab | ||
| + | </ | ||
| + | |||
| ( Если система при загрузке в ОЗУ затребует UUID дисков, | ( Если система при загрузке в ОЗУ затребует UUID дисков, | ||
| 3.7 Перезапись fstab под новые метки (LABEL): | 3.7 Перезапись fstab под новые метки (LABEL): | ||
| + | <code bash #bash> | ||
| cat <<EOF > /etc/fstab | cat <<EOF > /etc/fstab | ||
| LABEL=ARCH_ROOT | LABEL=ARCH_ROOT | ||
| - | LABEL=ARCH_BOOT | + | LABEL=ARCH_BOOT |
| EOF | EOF | ||
| + | </ | ||
| ) | ) | ||
| - | 3.8 Установка и обновление EFI-загрузчика: | + | nano / |
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== 3.8 Установка и обновление EFI-загрузчика | ||
| + | |||
| + | Перемонтируйте раздел повторно | ||
| + | Теперь примените новые параметры монтирования | ||
| + | из обновленного fstab: | ||
| + | |||
| + | mount -o remount /boot | ||
| + | |||
| + | Смонтируйте вручную с правильными правами | ||
| + | |||
| + | mount -t vfat -o fmask=0077, | ||
| + | |||
| + | |||
| + | <code bash #bash> | ||
| bootctl install | bootctl install | ||
| + | </ | ||
| + | |||
| Выход из chroot: | Выход из chroot: | ||
| + | <code bash #bash> | ||
| exit | exit | ||
| + | </ | ||
| + | |||
| - | Этап 4. Конфигурация загрузчика systemd-boot | + | ===== Этап 4. Конфигурация загрузчика systemd-boot |
| Установка загрузчика (Выполняется на хосте tom_1. На этом этапе разделы | Установка загрузчика (Выполняется на хосте tom_1. На этом этапе разделы | ||
| диска sdb все еще примонтированы в ~/ | диска sdb все еще примонтированы в ~/ | ||
| - | 4.1 Настройка параметров загрузки (loader.conf): | + | ==== 4.1 Настройка параметров загрузки (loader.conf) |
| + | <code bash #bash> | ||
| sudo nano ~/ | sudo nano ~/ | ||
| + | </ | ||
| + | |||
| Содержимое (выбор 3 секунды): | Содержимое (выбор 3 секунды): | ||
| + | <code bash loader.conf> | ||
| inidefault arch | inidefault arch | ||
| timeout 3 | timeout 3 | ||
| console-mode max | console-mode max | ||
| editor no | editor no | ||
| + | </ | ||
| - | 4.2 Настройка записи загрузки параметры ядра (arch.conf): | + | |
| + | ==== 4.2 Настройка записи загрузки параметры ядра (arch.conf) | ||
| Привязка к глобальной метке ARCH_ROOT, COM-порт и отключение прерываний Hyper-V: | Привязка к глобальной метке ARCH_ROOT, COM-порт и отключение прерываний Hyper-V: | ||
| + | <code bash #bash> | ||
| sudo nano ~/ | sudo nano ~/ | ||
| + | </ | ||
| + | |||
| Содержимое: | Содержимое: | ||
| - | ini | + | <code bash ini> |
| # Для ~/ | # Для ~/ | ||
| title Arch Linux Custom Live (SquashFS Manual) | title Arch Linux Custom Live (SquashFS Manual) | ||
| Строка 325: | Строка 882: | ||
| initrd / | initrd / | ||
| options archisolabel==ARCH_202605 archisobasedir=/ | options archisolabel==ARCH_202605 archisobasedir=/ | ||
| + | </ | ||
| - | 4.3 Подготовка Syslinux (BIOS) для физического железа: | + | ==== 4.3 Подготовка Syslinux (BIOS) для физического железа |
| + | <code bash #bash> | ||
| sudo pacman -S syslinux --noconfirm | sudo pacman -S syslinux --noconfirm | ||
| sudo mkdir -p ~/ | sudo mkdir -p ~/ | ||
| sudo cp / | sudo cp / | ||
| + | </ | ||
| + | <code bash #bash> | ||
| sudo nano ~/ | sudo nano ~/ | ||
| + | </ | ||
| - | Содержимое: | + | Содержимое: |
| + | <code bash ini> | ||
| UI vesamenu.c32 | UI vesamenu.c32 | ||
| PROMPT 0 | PROMPT 0 | ||
| Строка 345: | Строка 908: | ||
| APPEND archisolabel==ARCH_202605 archisobasedir=/ | APPEND archisolabel==ARCH_202605 archisobasedir=/ | ||
| - | 4.4. Настройка родного initramfs для поддержки SquashFS и OverlayFS | + | </ |
| + | |||
| + | ==== 4.4. Настройка родного initramfs для поддержки SquashFS и OverlayFS | ||
| Чтобы система загрузилась в режиме «только чтение» из SquashFS, но позволяла изменять файлы в ОЗУ (принцип LiveCD), | Чтобы система загрузилась в режиме «только чтение» из SquashFS, но позволяла изменять файлы в ОЗУ (принцип LiveCD), | ||
| стандартный initramfs должен | стандартный initramfs должен | ||
| Строка 352: | Строка 917: | ||
| Выполните следующие действия на хосте tom_1: | Выполните следующие действия на хосте tom_1: | ||
| Зайдите в окружение Chroot: | Зайдите в окружение Chroot: | ||
| + | <code bash #bash> | ||
| sudo arch-chroot ~/new_iso/ | sudo arch-chroot ~/new_iso/ | ||
| + | </ | ||
| + | |||
| Включите поддержку модулей в конфигурации сборщика: | Включите поддержку модулей в конфигурации сборщика: | ||
| + | <code bash #bash> | ||
| nano / | nano / | ||
| + | </ | ||
| + | |||
| Найдите строку MODULES=(...) и добавьте туда модули для работы с петлевыми устройствами и | Найдите строку MODULES=(...) и добавьте туда модули для работы с петлевыми устройствами и | ||
| сжатыми файловыми системами: | сжатыми файловыми системами: | ||
| + | <code bash #bash> | ||
| MODULES=(loop overlay squashfs vfat btrfs) | MODULES=(loop overlay squashfs vfat btrfs) | ||
| + | </ | ||
| + | |||
| Проверьте хуки: | Проверьте хуки: | ||
| В строке HOOKS=(...) убедитесь, | В строке HOOKS=(...) убедитесь, | ||
| + | <code bash #bash> | ||
| HOOKS=(base udev modconf memdisk archiso_loop_mnt archiso archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs block filesystems keyboard) | HOOKS=(base udev modconf memdisk archiso_loop_mnt archiso archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs block filesystems keyboard) | ||
| + | </ | ||
| Пересоберите initramfs: | Пересоберите initramfs: | ||
| Генерируем новый образ загрузки, | Генерируем новый образ загрузки, | ||
| + | <code bash #bash> | ||
| mkinitcpio -p linux | mkinitcpio -p linux | ||
| + | </ | ||
| + | |||
| Выйдите из chroot: | Выйдите из chroot: | ||
| + | <code bash #bash> | ||
| exit | exit | ||
| + | </ | ||
| + | ===== Этап 5. Выбор варианта Генерация UEFI-образа, | ||
| + | 【 ВАРИАНТ А 】 | ||
| + | \\ | ||
| + | Сборка "на лету" | ||
| + | Метод собирает ISO прямо из рабочей директории, | ||
| + | // | ||
| + | \\ | ||
| + | 【 ВАРИАНТ Б 】 | ||
| + | \\ | ||
| + | Сборка через изолированную структуру | ||
| + | ~/ | ||
| + | [ Этап 3. Настройка через Chroot ] | ||
| + | │ | ||
| + | ▼ | ||
| + | [ Этап 4. Конфигурация loader.conf ] | ||
| + | │ | ||
| + | | ||
| + | | ||
| + | 【 ВАРИАНТ А 】 【 ВАРИАНТ Б 】 | ||
| + | Сборка "на лету" | ||
| + | (Быстрый метод) | ||
| + | | ||
| + | | ||
| + | [ Этап 5А ] [ Этап 5Б ] | ||
| + | Генерация efi.img и Создание папки ~/ | ||
| + | прямой запуск xorriso | ||
| + | | ||
| + | | ||
| + | │ | ||
| + | ▼ | ||
| + | [ Этап 6. Экспорт и запуск в Hyper-V ] | ||
| - | ─── ВЫБЕРИТЕ ОДИН ИЗ ВАРИАНТОВ СБОРКИ ─── | ||
| - | 【 ВАРИАНТ А 】 Сборка "на лету" | ||
| - | Метод собирает ISO прямо из рабочей директории, | ||
| - | Этап 5А. Генерация UEFI-образа, | + | |
| + | ===== Этап 5А. Генерация UEFI-образа, | ||
| + | 【 ВАРИАНТ А 】 | ||
| + | \\ | ||
| + | Сборка "на лету" | ||
| + | Метод собирает ISO прямо из рабочей директории, | ||
| + | \\ | ||
| + | // | ||
| - | 5А.1 Создание внутренней структуры Arch ISO и сжатие RootFS: | + | ==== 5А.1 Создание внутренней структуры Arch ISO и сжатие RootFS |
| # 1. Создаем целевой каталог внутри сборки | # 1. Создаем целевой каталог внутри сборки | ||
| + | <code bash #bash> | ||
| mkdir -p ~/ | mkdir -p ~/ | ||
| + | </ | ||
| + | |||
| # 2. Упаковываем RootFS во временный файл в /tmp/ хоста | # 2. Упаковываем RootFS во временный файл в /tmp/ хоста | ||
| + | <code bash #bash> | ||
| sudo mksquashfs ~/new_iso / | sudo mksquashfs ~/new_iso / | ||
| + | </ | ||
| # 3. Перемещаем готовый изолированный образ внутрь структуры | # 3. Перемещаем готовый изолированный образ внутрь структуры | ||
| + | <code bash #bash> | ||
| sudo mv / | sudo mv / | ||
| + | </ | ||
| - | + | ==== 5А.2 Создание внутреннего efi.img внутри структуры | |
| - | + | ||
| - | 5А.2 Создание внутреннего efi.img внутри структуры | + | |
| # 1. Создаем образ efi.img во временной папке хоста в ~/ | # 1. Создаем образ efi.img во временной папке хоста в ~/ | ||
| + | <code bash #bash> | ||
| sudo dd if=/ | sudo dd if=/ | ||
| sudo mkfs.vfat -F 16 -n " | sudo mkfs.vfat -F 16 -n " | ||
| + | </ | ||
| # 2. Монтируем его для наполнения | # 2. Монтируем его для наполнения | ||
| + | <code bash #bash> | ||
| mkdir -p / | mkdir -p / | ||
| sudo mount -o loop / | sudo mount -o loop / | ||
| + | </ | ||
| # 3. Копируем файлы загрузчика ИЗ смонтированного диска во временный efi.img | # 3. Копируем файлы загрузчика ИЗ смонтированного диска во временный efi.img | ||
| + | <code bash #bash> | ||
| sudo mkdir -p / | sudo mkdir -p / | ||
| sudo cp ~/ | sudo cp ~/ | ||
| sudo cp ~/ | sudo cp ~/ | ||
| sudo cp ~/ | sudo cp ~/ | ||
| + | </ | ||
| # 4. Размонтируем и удаляем точку монтирования | # 4. Размонтируем и удаляем точку монтирования | ||
| + | <code bash #bash> | ||
| sudo umount / | sudo umount / | ||
| rmdir / | rmdir / | ||
| + | </ | ||
| - | + | ==== 5А.3 Прямой запуск xorriso сборки гибридного ISO ==== | |
| - | + | ||
| - | 5А.3 Прямой запуск xorriso сборки гибридного ISO для Варианта А: | + | |
| # Запускаем сборку из директории ~/new_iso/. Результат положим в корень домашней директории. | # Запускаем сборку из директории ~/new_iso/. Результат положим в корень домашней директории. | ||
| + | |||
| + | <code bash #bash> | ||
| sudo xorriso -as mkisofs \ | sudo xorriso -as mkisofs \ | ||
| -iso-level 3 \ | -iso-level 3 \ | ||
| Строка 431: | Строка 1060: | ||
| -output ~/ | -output ~/ | ||
| ~/new_iso/ | ~/new_iso/ | ||
| + | </ | ||
| - | + | ==== 5А.4 Безопасное размонтирование диска донора | |
| - | + | ||
| - | + | ||
| - | 5А.4 Безопасное размонтирование диска донора | + | |
| # Только теперь, | # Только теперь, | ||
| + | <code bash #bash> | ||
| # Размонтируем разделы диска sdb, которые были подключены к хосту tom_1 | # Размонтируем разделы диска sdb, которые были подключены к хосту tom_1 | ||
| sudo umount ~/ | sudo umount ~/ | ||
| sudo umount ~/new_iso | sudo umount ~/new_iso | ||
| rm -f / | rm -f / | ||
| + | </ | ||
| - | + | <note blue> | |
| Примечание: | Примечание: | ||
| + | </ | ||
| + | ===== Этап 5Б. Подготовка структуры и сборка ISO через xorriso ===== | ||
| 【 ВАРИАНТ Б 】Сборка через изолированную структуру | 【 ВАРИАНТ Б 】Сборка через изолированную структуру | ||
| ~/ | ~/ | ||
| - | Этап 5Б. Подготовка структуры и сборка ISO через xorriso | + | <note blue> |
| Этот этап применяется, | Этот этап применяется, | ||
| позволяя упаковать систему в SquashFS и создать гибридный | позволяя упаковать систему в SquashFS и создать гибридный | ||
| ISO-образ, | ISO-образ, | ||
| + | </ | ||
| // | // | ||
| освобождая диск донор sdb сразу.)// | освобождая диск донор sdb сразу.)// | ||
| - | 5Б.1 Создание структуры и копирование данных | + | ==== 5Б.1 Создание структуры и копирование данных |
| Создаем рабочую директорию и синхронизируем в нее данные, | Создаем рабочую директорию и синхронизируем в нее данные, | ||
| # Создаем чистую директорию | # Создаем чистую директорию | ||
| + | |||
| + | <code bash #bash> | ||
| mkdir -p ~/ | mkdir -p ~/ | ||
| + | </ | ||
| # Синхронизируем содержимое sdb в папку сборки для xorriso | # Синхронизируем содержимое sdb в папку сборки для xorriso | ||
| + | |||
| + | <code bash #bash> | ||
| sudo rsync -aAXv --exclude={"/ | sudo rsync -aAXv --exclude={"/ | ||
| + | </ | ||
| - | 5Б.2 Освобождение диска-донора | + | ==== 5Б.2 Освобождение диска-донора |
| Размонтируем исходный диск sdb, так как данные уже скопированы в iso_source: | Размонтируем исходный диск sdb, так как данные уже скопированы в iso_source: | ||
| + | |||
| + | <code bash #bash> | ||
| sudo umount ~/ | sudo umount ~/ | ||
| sudo umount ~/new_iso | sudo umount ~/new_iso | ||
| + | </ | ||
| - | 5Б.3 Упаковка RootFS в SquashFS | + | ==== 5Б.3 Упаковка RootFS в SquashFS |
| Упаковываем файловую систему в сжатый образ airootfs.sfs с использованием zstd, | Упаковываем файловую систему в сжатый образ airootfs.sfs с использованием zstd, | ||
| исключая служебные каталоги: | исключая служебные каталоги: | ||
| + | |||
| # 1. Создаем целевой каталог внутри изолированной структуры | # 1. Создаем целевой каталог внутри изолированной структуры | ||
| + | |||
| + | <code bash #bash> | ||
| mkdir -p ~/ | mkdir -p ~/ | ||
| + | </ | ||
| # 2. Упаковываем RootFS во временный файл из папки ~/ | # 2. Упаковываем RootFS во временный файл из папки ~/ | ||
| + | |||
| + | <code bash #bash> | ||
| sudo mksquashfs ~/ | sudo mksquashfs ~/ | ||
| + | </ | ||
| + | |||
| # 3. Перемещаем готовый изолированный образ внутрь правильной структуры | # 3. Перемещаем готовый изолированный образ внутрь правильной структуры | ||
| + | |||
| + | <code bash #bash> | ||
| sudo mv / | sudo mv / | ||
| + | </ | ||
| + | |||
| - | 5Б.4 Создание скрипта сборки ISO глобальной меткой ARCH_202605. | + | ==== 5Б.4 Создание скрипта сборки ISO глобальной меткой ARCH_202605. |
| Так как мы собираем чистый гибридный UEFI/BIOS образ вручную (без archiso), | Так как мы собираем чистый гибридный UEFI/BIOS образ вручную (без archiso), | ||
| нам нужен готовый скрипт, | нам нужен готовый скрипт, | ||
| Строка 492: | Строка 1144: | ||
| Выполняется на хосте tom_1, вне Chroot. | Выполняется на хосте tom_1, вне Chroot. | ||
| - | 5Б.4.1. Создай файл скрипта: | + | ==== 5Б.4.1. Создай файл скрипта |
| + | <code bash #bash> | ||
| nano ~/ | nano ~/ | ||
| + | </ | ||
| - | 5Б.4.2. Вставь в него следующий код: | + | ==== 5Б.4.2. Вставь в него следующий код |
| + | <code bash #bash> | ||
| #!/bin/bash | #!/bin/bash | ||
| Строка 601: | Строка 1256: | ||
| exit 1 | exit 1 | ||
| fi | fi | ||
| + | </ | ||
| - | 5Б.5 Запуск сборки | + | ==== 5Б.5 Запуск сборки |
| Делаем скрипт исполняемым и запускаем его для создания финального образа: | Делаем скрипт исполняемым и запускаем его для создания финального образа: | ||
| + | |||
| + | <code bash #bash> | ||
| chmod +x ~/ | chmod +x ~/ | ||
| ~/ | ~/ | ||
| + | </ | ||
| // | // | ||
| Строка 614: | Строка 1272: | ||
| в твою домашнюю директорию. | в твою домашнюю директорию. | ||
| - | Этап 6. Экспорт ISO в Windows и монтирование в CD-привод Hyper-V (tom_2) | + | ===== Этап 6. Экспорт ISO в Windows и монтирование в CD-привод Hyper-V (tom_2) |
| - | 6.1 Передача файла на Windows-хост: | + | ==== 6.1 Передача файла на Windows-хост |
| Используте WinSCP | Используте WinSCP | ||
| - | #cmd | + | |
| + | <code bash cmd> | ||
| pscp eva@192.168.1.72:/ | pscp eva@192.168.1.72:/ | ||
| + | </ | ||
| - | 6.2 Запись на arch-flash (опционально, | + | ==== 6.2 Запись на arch-flash (опционально, |
| Открываешь Rufus, выбираешь флешку, | Открываешь Rufus, выбираешь флешку, | ||
| и пишешь в режиме DD/ISO. | и пишешь в режиме DD/ISO. | ||
| - | 6.3 Монтирование нового ISO-образа в CD-привод Hyper-V (для tom_2): | + | ==== 6.3 Монтирование нового ISO-образа в CD-привод Hyper-V (для tom_2) |
| - | Открой Диспетчер Hyper-V. | + | |
| - | Выбери изолированную виртуальную машину tom_2. | + | |
| - | Нажми Параметры (Settings) -> vIDE-контроллер или SCSI-контроллер (в зависимости от поколения ВМ Gen1/ | + | |
| - | Выбери Накопитель DVD (DVD Drive). | + | |
| - | Установи переключатель в положение Файл образа (ISO) (Image file). | + | |
| - | Нажми Обзор (Browse) и укажи путь к скачанному файлу C: | + | |
| - | Нажми Применить (Apply) и запусти ВМ tom_2. | + | |
30.05.2026.1780173678.txt.gz · Последнее изменение: — VladPolskiy
