30.05.2026
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| 30.05.2026 [2026/05/30 17:48] – VladPolskiy | 30.05.2026 [2026/06/03 07:31] (текущий) – внешнее изменение 127.0.0.1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ***arch | + | ====== Ручная сборка Arch ISO (Headless + WebUI) ====== |
| - | Установить дополнительно | ||
| - | Для установки и первичной настройки загрузчика | ||
| - | https:// | ||
| - | syslinux в неинтерактивном | ||
| - | (автоматическом) режиме используйте менеджер пакетов и утилиты конфигурации, | ||
| - | выполнив команды | ||
| - | sudo pacman -S syslinux --noconfirm | ||
| - | sudo extlinux --install / | ||
| - | Для | + | ===== Этап 1. Подготовка |
| - | выполните следующие шаги: | + | Выполняется на живом хосте tom_1 (IP: 192.168.1.72). Диск sdb выступает временным |
| - | 1. Проверка файлов конфигурации: убедитесь, что | + | накопителем-донором. с доступом в интернет. |
| - | ls -la / | + | |
| - | 2. Проверка модулей: убедитесь, что файлы ядра syslinux | + | ==== 1.1 Создание рабочих |
| - | ls -la /usr/ | + | Схема создаваемой структуры: |
| + | < | ||
| + | /home | ||
| + | └── eva | ||
| + | ├── new_iso | ||
| + | │ ├── boot | ||
| + | │ └── etc | ||
| + | │ | ||
| + | └── original_iso_image | ||
| + | └── archlinux-x86_64.iso | ||
| + | </code> | ||
| - | 3. Генерация таблицы: | + | <code bash #bash> |
| - | чтобы загрузчик знал, на каком диске установлена система. | + | # original_iso_image - для оригинального |
| + | mkdir -p ~/ | ||
| + | # new_iso - рабочай директория, где будем собирать новый образа | ||
| + | mkdir -p ~/ | ||
| + | </ | ||
| + | Как это работает | ||
| + | * mkdir имя_папки — создает новую директорию. | ||
| - | ***arch установить пакет rsync в авторежиме и проверить установку | ||
| - | ***Для автоматической установки rsync в Arch Linux и проверки его наличия | + | Проаерка создания |
| - | выполните одну команду в терминале: | + | <code bash #bash> |
| + | # original_iso_image - для оригинального образа iso | ||
| + | ls -ld ~/ | ||
| + | # new_iso - рабочай директория, где будем | ||
| + | ls -ld ~/ | ||
| + | </ | ||
| + | Как это работает | ||
| + | * ls -ld имя_папки — выводит информацию о конкретной папке и её правах без показа содержимого. | ||
| - | sudo pacman | + | ==== 1.2 Разметка виртуального диска sdb (будущий arch-flash) ==== |
| - | Разбор команды | + | ===Просмотр списка |
| - | sudo pacman -Syy — принудительно обновляет базы данных пакетов. | + | Самый наглядный |
| - | --noconfirm — автоматически одобряет все | + | |
| - | && — запускает следующую команду только при успешной установке. | + | |
| - | rsync --version — выводит версию утилиты для проверки её работоспособности. | + | |
| - | ***arch установить пакет tree в авторежиме и проверить установку | + | <code bash #bash> |
| + | lsblk | ||
| + | </ | ||
| - | sudo pacman -S --noconfirm tree && tree --version | + | скрипт создаст правильную структуру для |
| - | + | <note blue> | |
| - | Разбор | + | sdb1 — BIOS Boot (1 МБ) -> для загрузки старого |
| - | sudo pacman -Syy — принудительно обновляет базы данных пакетов. | + | sdb2 — EFI System |
| - | --noconfirm — автоматически одобряет все запросы и отключает интерактивный режим. | + | sdb3 — Linux root (Все оставшееся место, |
| - | && — запускает следующую команду только при успешной установке. | + | </note> |
| - | tree --version — выводит версию утилиты для проверки её работоспособности. | + | |
| - | + | ||
| - | + | ||
| - | ***Доустанавливаем утилиту для FAT32 | + | |
| - | dosfstools — содержит | + | |
| - | семейства FAT (включая mkfs.vfat, mkfs.msdos). Это критически важно | + | |
| - | для создания системного EFI-раздела. | + | |
| - | btrfs-progs — содержит инструменты для управления файловой системой Btrfs | + | |
| - | (включая mkfs.btrfs, работу с подтомами и снимками). | + | |
| - | ***arch установить пакет dosfstools в авторежиме и проверить установку | + | |
| - | + | ||
| - | sudo pacman -S --noconfirm dosfstools && mkfs.vfat --version | + | |
| - | + | ||
| - | Разбор команды | + | |
| - | sudo pacman -Syy — принудительно обновляет базы данных пакетов. | + | |
| - | --noconfirm — автоматически одобряет все запросы и отключает интерактивный режим. | + | |
| - | && | + | |
| - | mkfs.vfat --version — вызывает одну из основных утилит пакета | + | |
| - | + | ||
| - | + | ||
| - | ***arch установить пакет btrfs progs в авторежиме и проверить установку | + | |
| - | + | ||
| - | sudo pacman | + | |
| - | + | ||
| - | Разбор команды | + | |
| - | sudo pacman -Syy — принудительно обновляет базы данных пакетов. | + | |
| - | --noconfirm — автоматически одобряет все запросы и отключает интерактивный режим. | + | |
| - | && — запускает следующую команду только при успешной установке. | + | |
| - | btrfs --version — выводит версию утилиты, | + | |
| - | + | ||
| - | ***arch проверить версию bootctl | + | |
| - | Поскольку bootctl встроен в пакет systemd, его версия всегда совпадает | + | |
| - | с версией systemd, установленной в вашей системе. | + | |
| - | bootctl --version | + | |
| - | pacman -Q systemd | + | |
| - | + | ||
| - | ***arch установить пакет arch-install-scripts в авторежиме и проверить установку | + | |
| - | + | ||
| - | sudo pacman -S --noconfirm arch-install-scripts && pacstrap -h | + | |
| - | + | ||
| - | sudo pacman -S — запускает установку пакета | + | |
| - | --noconfirm — отключает интерактивные запросы для работы в автоматическом | + | |
| - | && — переходит к следующему шагу только при успешном завершении установки. | + | |
| - | pacstrap -h — вызывает справку утилиты pacstrap | + | |
| - | + | ||
| - | + | ||
| - | ***arch установить пакет efibootmgr в авторежиме и проверить установку | + | |
| - | pacman | + | |
| - | для | + | |
| - | pacman -S intel-ucode | + | |
| - | pacman -S amd-ucode | + | |
| - | + | ||
| - | grub-install --version | + | |
| - | + | ||
| - | + | ||
| - | ***arch | + | |
| - | + | ||
| - | sudo pacman -S os-prober | + | |
| - | + | ||
| - | pacman -Q os-prober | + | |
| - | + | ||
| - | + | ||
| - | прочти | + | |
| - | и укажи пути правки как было, как должно быть с указанием пунктов | + | |
| - | + | ||
| - | ---------------------------------------------------------------------- | + | |
| - | 1.3.1. Распределение ролей при работе в Hyper-V | + | |
| - | tom_1 - эталонный хост, основная тестовая ВМ в Hyper-V для сборки iso образа, | + | |
| - | arch-flash - виртуальный диск ы Hyper-V | + | |
| - | tom_2 - изолированный виртуальный хост, | + | |
| - | Добавление ролей при работе 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 (Этап 4А против Этапа 5): | + | |
| - | мы влючаем 2 вида: либо Этап 4А / либо Этапа 5 | + | |
| - | 2. Смешение сущностей «RootFS» | + | Используйте один из следующих вариантов размеи дисков с |
| - | ~/new_iso/ в ней мы собираем новый образ | + | использованием утилит fdisk или sfdisk |
| - | sdb1 - это boot для arch-flash | + | |
| - | sdb2 - это root для arch-flash | + | |
| - | 3. Ошибки в синтаксисе путей: | + | 1.2.1 Использование утилиты fdisk |
| - | В пункте 3.3.4.2 в параметре Server указано: | + | <code bash #bash> |
| - | через notepad++ указанно верно | + | |
| - | Server = file:/// | + | |
| - | --------------------------------------------------------------------------- | + | |
| - | Ручная сборка Arch ISO (Headless + WebUI) | + | |
| - | Этап | + | |
| - | Выполняется на живом хосте tom_1 (IP: 192.168.1.72). Диск sdb выступает временным | + | |
| - | накопителем-донором. с доступом в интернет. | + | |
| - | + | ||
| - | 1.1 Создание рабочих директорий: | + | |
| - | mkdir -p ~/ | + | |
| - | + | ||
| - | 1.2 Разметка виртуального диска sdb (будущий arch-flash): | + | |
| - | + | ||
| - | скрипт создаст правильную структуру для UEFI + BIOS: | + | |
| - | sdb1 — BIOS Boot (1 МБ) -> для загрузки старого BIOS. | + | |
| - | sdb2 — EFI System (1 ГБ, FAT32) -> для загрузки UEFI (ваш boot). | + | |
| - | sdb3 — Linux root (Все оставшееся место, BTRFS) | + | |
| sudo fdisk /dev/sdb <<EOF | sudo fdisk /dev/sdb <<EOF | ||
| g | g | ||
| Строка 177: | Строка 67: | ||
| +1M | +1M | ||
| t | t | ||
| - | bios | + | 4 |
| n | n | ||
| 2 | 2 | ||
| Строка 184: | Строка 74: | ||
| t | t | ||
| 2 | 2 | ||
| - | uefi | + | 1 |
| n | n | ||
| 3 | 3 | ||
| + | |||
| w | w | ||
| EOF | EOF | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | 1.2.2 Использование утилиты sfdisk | ||
| + | <code bash #bash> | ||
| + | sudo sfdisk /dev/sdb << EOF | ||
| + | label: gpt | ||
| + | device: /dev/sdb | ||
| + | unit: sectors | ||
| + | |||
| + | /dev/sdb1 : start= | ||
| + | /dev/sdb2 : start= | ||
| + | /dev/sdb3 : start= | ||
| + | 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 " | ||
| + | </ | ||
| - | утилита isohybrid (из пакета syslinux) сама запишет туда | ||
| - | MBR-загрузчик на этапе сборки ISO. | ||
| + | // | ||
| + | 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 Время и Офлайн-режим ==== | ||
| + | Во время установки Arch Linux с помощью скрипта archinstall или официального образа служба | ||
| + | синхронизации времени включается автоматически. По умолчанию за это отвечает служба systemd-timesyncd | ||
| + | |||
| - | 3.2 Время и Офлайн-режим | + | ===3.2.1 Настройка времени (Универсальное UTC + запрет синхронизации): |
| - | 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 для полной изоляции | ||
| Строка 297: | Строка 602: | ||
| в локальный кэш: | в локальный кэш: | ||
| 3.3.3.1 Откройте конфигурационный файл: | 3.3.3.1 Откройте конфигурационный файл: | ||
| + | <code bash #bash> | ||
| sudo nano / | sudo nano / | ||
| + | </ | ||
| 3.3.4 Настройка файла: | 3.3.4 Настройка файла: | ||
| Строка 308: | Строка 614: | ||
| 3.3.4.2 В самый конец файла добавь твою локальную секцию [custom]. | 3.3.4.2 В самый конец файла добавь твою локальную секцию [custom]. | ||
| Итоговый блок репозиториев в / | Итоговый блок репозиториев в / | ||
| - | #ini | + | <code bash pacman.conf> |
| # Полностью отключаем внешние репозитории | # Полностью отключаем внешние репозитории | ||
| #[core] | #[core] | ||
| Строка 320: | Строка 626: | ||
| SigLevel = Optional TrustAll | SigLevel = Optional TrustAll | ||
| Server = file:/// | Server = file:/// | ||
| + | </ | ||
| + | После правки | ||
| + | < | ||
| + | #[core] | ||
| + | #Include = / | ||
| + | |||
| + | # | ||
| + | #Include = / | ||
| + | |||
| + | #[extra] | ||
| + | #Include = / | ||
| + | |||
| + | # Добавляем изолированный локальный репозиторий | ||
| + | [custom] | ||
| + | SigLevel = Optional TrustAll | ||
| + | Server = file:/// | ||
| + | </ | ||
| + | // | ||
| + | затем Enter для подтверждения записи файла, | ||
| + | и наконец Ctrl + X для выхода)// | ||
| - | 3.3.5 Проверка внутри Chroot: | + | ==== 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=eth0 enp* | + | Name=en* |
| + | Name=eth* | ||
| [Network] | [Network] | ||
| Address=192.168.1.150/ | Address=192.168.1.150/ | ||
| Gateway=192.168.1.1 | Gateway=192.168.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 / |
| - | (меняем listen 80 на listen 7000). | + | </ |
| + | |||
| + | Найдите блок server { ... } и проверьте/ | ||
| + | |||
| + | <code bash nginx.conf> | ||
| + | listen | ||
| + | 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) ==== | ||
| + | <code bash #bash> | ||
| + | # Так как rsync скопировал реальный fstab с UUID хоста tom_1, | ||
| + | # мы полностью очищаем его внутри chroot, чтобы Live-система на tom_2 работала в ОЗУ без привязки к дискам. | ||
| + | true > /etc/fstab | ||
| + | </ | ||
| + | |||
| + | |||
| + | ( Если система при загрузке в ОЗУ затребует 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) |
| + | Привязка к глобальной метке | ||
| + | <code bash #bash> | ||
| sudo nano ~/ | sudo nano ~/ | ||
| + | </ | ||
| + | |||
| Содержимое: | Содержимое: | ||
| - | ini | + | <code bash ini> |
| - | title Arch Linux Custom | + | # Для ~/ |
| + | title Arch Linux Custom | ||
| linux / | linux / | ||
| initrd / | initrd / | ||
| - | options archisolabel=ARCH_202605 console=ttyS0, | + | options archisolabel==ARCH_202605 |
| + | </ | ||
| - | 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 | ||
| TIMEOUT 30 | TIMEOUT 30 | ||
| DEFAULT arch | DEFAULT arch | ||
| + | |||
| LABEL arch | LABEL arch | ||
| - | | + | LINUX / |
| - | INITRD | + | INITRD / |
| - | APPEND archisolabel=ARCH_202605 console=ttyS0, | + | APPEND archisolabel==ARCH_202605 |
| - | ─── ВЫБЕРИТЕ ОДИН ИЗ ВАРИАНТОВ СБОРКИ ─── | + | </code> |
| - | 【 ВАРИАНТ А 】 Сборка "на лету" | + | |
| - | Метод собирает ISO прямо из рабочей директории, | + | |
| - | Этап 5А Генерация UEFI-образа и сборка ISO через xorriso | + | ==== 4.4. Настройка родного initramfs для поддержки SquashFS и OverlayFS ==== |
| - | Финальный аккорд. | + | Чтобы система загрузилась в режиме «только чтение» из SquashFS, но позволяла изменять файлы в ОЗУ (принцип LiveCD), |
| - | Создаем efi.img прямо | + | стандартный initramfs должен |
| - | собрал | + | уметь работать с модулями loop и overlay. |
| - | 4А.1 Создание внутреннего efi.img внутри структуры | + | |
| + | Выполните следующие действия на хосте tom_1: | ||
| + | Зайдите в окружение Chroot: | ||
| + | <code bash #bash> | ||
| + | sudo arch-chroot ~/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | Включите поддержку модулей в конфигурации сборщика: | ||
| + | <code bash #bash> | ||
| + | nano / | ||
| + | </ | ||
| + | |||
| + | |||
| + | Найдите строку MODULES=(...) и добавьте туда модули для работы с петлевыми устройствами и | ||
| + | сжатыми файловыми системами: | ||
| + | <code bash #bash> | ||
| + | MODULES=(loop overlay squashfs vfat btrfs) | ||
| + | </ | ||
| + | |||
| + | |||
| + | Проверьте хуки: | ||
| + | В строке 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) | ||
| + | </ | ||
| + | |||
| + | |||
| + | Пересоберите initramfs: | ||
| + | Генерируем новый образ загрузки, | ||
| + | <code bash #bash> | ||
| + | mkinitcpio -p linux | ||
| + | </ | ||
| + | |||
| + | |||
| + | Выйдите из chroot: | ||
| + | <code bash #bash> | ||
| + | exit | ||
| + | </ | ||
| + | |||
| + | ===== Этап 5. Выбор варианта | ||
| + | 【 ВАРИАНТ А 】 | ||
| + | \\ | ||
| + | Сборка "на лету" | ||
| + | Метод собирает ISO прямо из рабочей директории, | ||
| + | //(Идеально для быстрых тестов.)// | ||
| + | \\ | ||
| + | 【 ВАРИАНТ Б 】 | ||
| + | \\ | ||
| + | Сборка через изолированную структуру | ||
| + | ~/ | ||
| + | |||
| + | [ Этап 3. Настройка через Chroot ] | ||
| + | │ | ||
| + | ▼ | ||
| + | [ Этап 4. Конфигурация loader.conf ] | ||
| + | │ | ||
| + | | ||
| + | | ||
| + | 【 ВАРИАНТ А 】 【 ВАРИАНТ Б 】 | ||
| + | | ||
| + | (Быстрый метод) (Классический | ||
| + | | ||
| + | | ||
| + | [ Этап 5А ] [ Этап 5Б ] | ||
| + | Генерация | ||
| + | | ||
| + | | ||
| + | | ||
| + | │ | ||
| + | ▼ | ||
| + | [ Этап 6. Экспорт и запуск в Hyper-V ] | ||
| + | |||
| + | |||
| + | |||
| + | ===== Этап 5А. Генерация UEFI-образа, | ||
| + | 【 ВАРИАНТ А 】 | ||
| + | \\ | ||
| + | Сборка "на лету" прямо из ~/new_iso/ (Быстрый метод)\\ | ||
| + | Метод собирает ISO прямо из рабочей директории, где смонтирован диск sdb. | ||
| + | \\ | ||
| + | // | ||
| + | |||
| + | ==== 5А.1 Создание внутренней | ||
| + | # 1. Создаем целевой каталог внутри сборки | ||
| + | <code bash #bash> | ||
| + | mkdir -p ~/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | # 2. Упаковываем RootFS во временный файл в /tmp/ хоста | ||
| + | <code bash #bash> | ||
| + | sudo mksquashfs ~/new_iso / | ||
| + | </ | ||
| + | |||
| + | # 3. Перемещаем готовый изолированный образ | ||
| + | <code bash #bash> | ||
| + | sudo mv / | ||
| + | </ | ||
| + | |||
| + | ==== 5А.2 Создание внутреннего efi.img внутри структуры | ||
| + | # 1. Создаем образ efi.img во временной папке хоста в ~/ | ||
| + | <code bash #bash> | ||
| sudo dd if=/ | sudo dd if=/ | ||
| - | sudo mkfs.vfat -F 16 -n "ARCH_EFI" ~/ | + | sudo mkfs.vfat -F 16 -n "ARCH_202605" ~/ |
| + | </ | ||
| + | # 2. Монтируем его для наполнения | ||
| + | <code bash #bash> | ||
| mkdir -p / | mkdir -p / | ||
| - | sudo mount -o loop ~/new_iso/ | + | sudo mount -o loop /tmp/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. Размонтируем и удаляем точку монтирования | ||
| + | <code bash #bash> | ||
| sudo umount / | sudo umount / | ||
| + | rmdir / | ||
| + | </ | ||
| + | ==== 5А.3 Прямой запуск xorriso сборки гибридного ISO ==== | ||
| + | # Запускаем сборку из директории ~/new_iso/. Результат положим в корень домашней директории. | ||
| - | 5А.2 Прямой запуск xorriso сборки гибридного ISO для Варианта А: | + | <code bash #bash> |
| - | Запускаем сборку прямо из директории ~/new_iso/. Результат положим рядом с | + | |
| - | папками в корень домашней директории. | + | |
| sudo xorriso -as mkisofs \ | sudo xorriso -as mkisofs \ | ||
| -iso-level 3 \ | -iso-level 3 \ | ||
| Строка 452: | Строка 1056: | ||
| -e boot/ | -e boot/ | ||
| -no-emul-boot -isohybrid-gpt-basdat \ | -no-emul-boot -isohybrid-gpt-basdat \ | ||
| + | -hide EFI \ | ||
| + | -hide loader \ | ||
| -output ~/ | -output ~/ | ||
| ~/new_iso/ | ~/new_iso/ | ||
| + | </ | ||
| - | + | ==== 5А.4 Безопасное размонтирование диска донора | |
| - | 5А.3 Безопасное размонтирование диска донора | + | # Только теперь, |
| - | //(Только теперь, | + | <code bash #bash> |
| - | Размонтируем разделы диска sdb, чтобы пересобрать их в структуру ISO. | + | # Размонтируем разделы диска sdb, которые |
| sudo umount ~/ | sudo umount ~/ | ||
| - | sudo umount ~/new_iso/ | + | sudo umount ~/new_iso |
| + | rm -f /tmp/ | ||
| + | </ | ||
| - | Переходите сразу к Этапу | + | <note blue> |
| + | Примечание: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Этап 5Б. Подготовка структуры и сборка ISO через xorriso ===== | ||
| 【 ВАРИАНТ Б 】Сборка через изолированную структуру | 【 ВАРИАНТ Б 】Сборка через изолированную структуру | ||
| ~/ | ~/ | ||
| - | Этап | + | <note blue> |
| + | Этот этап | ||
| + | позволяя упаковать систему в SquashFS и создать гибридный | ||
| + | ISO-образ, | ||
| + | </ | ||
| // | // | ||
| освобождая диск донор sdb сразу.)// | освобождая диск донор sdb сразу.)// | ||
| - | 5Б.1 Создание | + | ==== 5Б.1 Создание структуры и копирование данных |
| - | копирование данных | + | Создаем рабочую |
| + | # Создаем чистую директорию | ||
| + | |||
| + | <code bash #bash> | ||
| mkdir -p ~/ | mkdir -p ~/ | ||
| - | # Синхронизируем содержимое sdb в папку для xorriso | + | </code> |
| - | sudo rsync -aAXv ~/new_iso/ ~/ | + | |
| - | 5Б.2 Размонтируем | + | # Синхронизируем содержимое sdb в папку сборки для xorriso |
| + | |||
| + | <code bash #bash> | ||
| + | sudo rsync -aAXv --exclude={"/ | ||
| + | </ | ||
| + | |||
| + | ==== 5Б.2 Освобождение диска-донора ==== | ||
| + | Размонтируем | ||
| + | |||
| + | <code bash #bash> | ||
| sudo umount ~/ | sudo umount ~/ | ||
| sudo umount ~/new_iso | sudo umount ~/new_iso | ||
| + | </ | ||
| + | |||
| + | ==== 5Б.3 Упаковка RootFS в SquashFS ==== | ||
| + | Упаковываем файловую систему в сжатый образ airootfs.sfs с использованием zstd, | ||
| + | исключая служебные каталоги: | ||
| + | |||
| + | # 1. Создаем целевой каталог внутри изолированной структуры | ||
| + | |||
| + | <code bash #bash> | ||
| + | mkdir -p ~/ | ||
| + | </ | ||
| + | |||
| + | # 2. Упаковываем RootFS во временный файл из папки ~/ | ||
| + | |||
| + | <code bash #bash> | ||
| + | sudo mksquashfs ~/ | ||
| + | </ | ||
| + | |||
| + | # 3. Перемещаем готовый изолированный образ внутрь правильной структуры | ||
| + | |||
| + | <code bash #bash> | ||
| + | sudo mv / | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| - | 5Б.3 Создаем финальный загрузочный | + | ==== 5Б.4 Создание скрипта сборки ISO глобальной меткой ARCH_202605. |
| - | 5Б.3.1 Скрипт автоматизации сборки ISO через xorriso | + | |
| Так как мы собираем чистый гибридный UEFI/BIOS образ вручную (без archiso), | Так как мы собираем чистый гибридный UEFI/BIOS образ вручную (без archiso), | ||
| нам нужен готовый скрипт, | нам нужен готовый скрипт, | ||
| Строка 490: | Строка 1144: | ||
| Выполняется на хосте tom_1, вне Chroot. | Выполняется на хосте tom_1, вне Chroot. | ||
| - | 5Б.3.1.1 Создай файл скрипта: | + | ==== 5Б.4.1. Создай файл скрипта |
| + | <code bash #bash> | ||
| nano ~/ | nano ~/ | ||
| + | </ | ||
| - | 5.2.1.2 Вставь в него следующий код: | + | ==== 5Б.4.2. Вставь в него следующий код |
| + | <code bash #bash> | ||
| #!/bin/bash | #!/bin/bash | ||
| Строка 500: | Строка 1157: | ||
| OUTPUT_ISO=" | OUTPUT_ISO=" | ||
| VOLUME_ID=" | VOLUME_ID=" | ||
| + | TMP_EFI_MNT="/ | ||
| echo "=== Старт автоматической сборки гибридного ISO (BIOS + UEFI) ===" | echo "=== Старт автоматической сборки гибридного ISO (BIOS + UEFI) ===" | ||
| Строка 509: | Строка 1167: | ||
| fi | fi | ||
| - | # 2. Генерация EFI-образа для загрузки UEFI | + | # 2. Безопасный бэкап файлов загрузчика перед операциями, |
| - | echo "-> Подготовка EFI boot image..." | + | # Если sdb2 уже размонтирован, |
| + | echo "→ Синхронизация файлов загрузчика..." | ||
| + | mkdir -p / | ||
| + | mkdir -p / | ||
| + | |||
| + | if mountpoint -q ~/ | ||
| + | cp -r ~/ | ||
| + | cp -r ~/ | ||
| + | else | ||
| + | if [ -d " | ||
| + | cp -r " | ||
| + | cp -r " | ||
| + | else | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | # 3. Генерация EFI-образа для загрузки UEFI | ||
| + | echo "→ Подготовка EFI boot image..." | ||
| + | rm -f " | ||
| dd if=/ | dd if=/ | ||
| - | mkfs.vfat -F 16 -n "ARCH_EFI" " | + | mkfs.vfat -F 16 -n "ARCH_202605" " |
| - | # Монтируем efi.img и копируем туда файлы загрузчика systemd-boot | + | # 4. Монтируем efi.img и копируем туда файлы загрузчика systemd-boot |
| mkdir -p / | mkdir -p / | ||
| - | sudo mount -o loop " | + | sudo mount -o loop " |
| - | sudo mkdir -p / | + | |
| - | sudo cp "$SOURCE_DIR/ | + | |
| - | sudo mkdir -p / | + | |
| - | sudo cp " | + | |
| - | sudo cp " | + | |
| - | sudo umount / | + | |
| - | rm -rf / | + | |
| - | # 3. Сборка полноценного гибридного ISO через xorriso | + | |
| - | echo "-> Запуск xorriso (Сборка гибридного образа)..." | + | # 5. Проверяем успешность монтирования перед тем, как работать с директорией |
| + | if mountpoint -q $TMP_EFI_MNT; | ||
| + | echo "→ Наполнение efi.img файлами загрузчика..." | ||
| + | sudo mkdir -p $TMP_EFI_MNT/ | ||
| + | sudo mkdir -p $TMP_EFI_MNT/ | ||
| + | |||
| + | # Копируем из гарантированного бэкапа | ||
| + | sudo cp / | ||
| + | sudo cp / | ||
| + | sudo cp / | ||
| + | |||
| + | sudo umount $TMP_EFI_MNT | ||
| + | rmdir $TMP_EFI_MNT | ||
| + | rm -rf / | ||
| + | else | ||
| + | echo " | ||
| + | rmdir $TMP_EFI_MNT | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # 6. Безопасная проверка готовности каталога boot перед сборкой ISO | ||
| + | # Вместо деструктивного удаления файлов, | ||
| + | echo "→ Проверка загрузочной структуры в boot..." | ||
| + | if [ ! -f " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # Чтобы xorriso не затягивал дублирующие папки EFI и loader в корень ISO | ||
| + | # (они уже упакованы внутрь efi.img), мы укажем утилите xorriso исключить их | ||
| + | # прямо во время сборки на Шаге 7 с помощью флага -hide. | ||
| + | |||
| + | # 7. Сборка полноценного гибридного ISO через xorriso | ||
| + | echo "→ Запуск xorriso (Сборка гибридного образа)..." | ||
| xorriso -as mkisofs \ | xorriso -as mkisofs \ | ||
| -iso-level 3 \ | -iso-level 3 \ | ||
| Строка 538: | Строка 1242: | ||
| -e boot/ | -e boot/ | ||
| -no-emul-boot -isohybrid-gpt-basdat \ | -no-emul-boot -isohybrid-gpt-basdat \ | ||
| + | -hide EFI \ | ||
| + | -hide loader \ | ||
| -output " | -output " | ||
| " | " | ||
| + | |||
| if [ $? -eq 0 ]; then | if [ $? -eq 0 ]; then | ||
| Строка 549: | Строка 1256: | ||
| exit 1 | exit 1 | ||
| fi | fi | ||
| + | </ | ||
| - | 5Б.4 Сделай скрипт исполняемым и запусти его: | + | ==== 5Б.5 Запуск сборки ==== |
| + | Делаем скрипт исполняемым и запускаем | ||
| + | |||
| + | <code bash #bash> | ||
| chmod +x ~/ | chmod +x ~/ | ||
| ~/ | ~/ | ||
| + | </ | ||
| // | // | ||
| Строка 561: | Строка 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. | ||
| - | 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:\ISO\arch-custom-202605.iso. | + | |
| - | Нажми Применить (Apply) и запусти ВМ tom_2. | + | |
30.05.2026.1780152500.txt.gz · Последнее изменение: — VladPolskiy
