Инструменты пользователя

Инструменты сайта


software:linux_server:iso_lfs_server:iso_lfs_server

Это старая версия документа!


Содержание

iso lfs server

Рабочий план

Начнем с этапа написания плана. Разбить все этапы на шаги (ориентируясь на 4 часа в день) Разработка собственного дистрибутива на базе LFS с веб-установщиком — это марафон.
Разбивка на этапы по 4 часа в день поможет не перегореть и видеть прогресс.Ниже представлен план на первые 15 рабочих дней (3 недели).

Неделя 1: Фундамент и Автоматизация (Хост-система)

Цель: Подготовить «завод» (скрипты), который будет собирать систему.

День 1: Среда разработки.

  • Установка Hyper-V, развертывание Ubuntu Server.
  • Настройка SSH для удобной работы с кодом.
  • Создание структуры папок /lfs-builder (packages, sources, logs, scripts).

День 2: Инструментарий сборщика.

  • Написание config.conf (переменные окружения).
  • Создание скрипта download.sh для автоматического скачивания всех пакетов LFS (через wget-list).
  • Проверка целостности (md5sum).

День 3: Двигатель (Build Engine).

  1. Написание главного скрипта build.sh.Реализация логики логирования и обработки ошибок (чтобы сборка останавливалась при ошибке make).

День 4: Кросс-компилятор (Глава 5 LFS).

  • Написание скриптов для Binutils (Pass 1) и GCC (Pass 1).
  • Запуск и отладка. Это самые долгие компиляции.

День 5: Завершение временных инструментов (Глава 6).

  • Сборка оставшихся утилит (M4, Ncurses, Bash, Coreutils и др.), работающих во временной папке.

Неделя 2: Вход в Chroot и Ядро Системы

Цель: Собрать финальную систему, в которую мы сможем «зайти».

День 6: Вход в Chroot.

  • Написание скрипта mount-chroot.sh (монтирование /dev, /proc, /sys).
  • Настройка окружения внутри chroot.

День 7-8: Основная система (Глава 8 LFS).

  • Автоматизация сборки критических пакетов: Glibc, Zlib, Binutils (Pass 2), GCC (Pass 2).

Примечание: Это «сердце» системы, здесь чаще всего возникают ошибки.

День 9: Завершение системных утилит.

  • Сборка менеджеров пакетов (если нужны) и базовых сетевых утилит (IProute2).

День 10: Ядро (Kernel) и Очистка.

Настройка конфигурации ядра (.config) с поддержкой USB, SquashFS и OverlayFS.

  • Компиляция ядра. Очистка системы от лишних файлов документации и статических библиотек (уменьшение размера).

Неделя 3: Серверная часть и Веб-установщик

Цель: Превратить LFS в сервер с вашим интерфейсом.

День 11: Сеть и Безопасность .

  • Сборка OpenSSL и OpenSSH.
  • Настройка автоматического запуска SSH при загрузке.

День 12: Веб-стек (Nginx + PHP) .

  • Сборка Nginx и PHP (в режиме CLI или FPM).
  • Настройка портов 5050 и 5051 в конфиге Nginx.

День 13: Веб-интерфейс (Frontend/Backend).

  • Написание вашей формы на PHP/JS.Реализация логики 2FA (библиотека для QR-кода).
  • Создание скрипта start_deploy.sh, который веб-морда будет запускать для установки системы на HDD.

День 14: Создание Live-образа (SquashFS + Initramfs).

  • Упаковка системы в rootfs.squashfs.
  • Написание скрипта init для Initramfs (монтирование сети и запуск веб-сервера).

День 15: Сборка ISO и Тест.

  • Сборка финального ISO через xorriso.
  • Первый тестовый запуск в Hyper-V «без монитора»: попытка зайти на веб-морду по IP.

Контроль и Списки

Чтобы проект не превратился в хаос при перерывах или смене ПК, мы будем использовать методику «Контрольных точек» и «Списка состояния».
Ниже — структура вопросов, которые вы должны задавать себе в конце каждой 4-часовой сессии.

1. Единый "Бортовой журнал" (Markdown-файл)

Создайте в корне папки /lfs-builder файл STATUS.md. В конце каждого дня копируйте туда ответы на эти вопросы.

Вопросы к себе (для фиксации прогресса):

  • Где я? (Название этапа и номер последнего успешно собранного пакета).
  • Что введено в строй? (Список скриптов, которые уже работают без ошибок).
  • Где возник затык? (Ошибки компиляции или логики, которые не успел решить).
  • Что нажать первым завтра? (Конкретная команда: например, bash packages/045-glibc.sh).
  • Где лежат исходники? (При смене ПК: «Всё залито на GitHub» или «Архив на флешке»).

2. Структурированные вопросы к ИИ (для возобновления работы)

Если вы сменили компьютер или вернулись к проекту через неделю, скопируйте этот блок вопросов и отправьте мне, дополнив вашими данными:

  • Запрос для восстановления контекста:«Я продолжаю разработку LFS-сервера с веб-установщиком.
  • Текущий этап: [Например: Глава 6, временные инструменты].
  • Последний успех: Пакет [Например: GCC Pass 1].
  • Среда: [Например: Hyper-V, Ubuntu 22.04].
  • Проблема, на которой остановился: [Например: Ошибка сегментирования при сборке Glibc].

Напомни план на текущий день и помоги проверить скрипт для следующего пакета — [Название пакета].»

3. Таблица-чеклист (Ваша карта проекта)

Скопируйте эту таблицу в свой файл статуса. Ставьте [x] по мере выполнения.

ЭтапШагСтатусКомментарий
0. ПодготовкаСреда Hyper-V + Скрипт download.sh [ ]
1. ИнструментыГлава 5: Кросс-компилятор (Binutils/GCC) [ ]
2. ИнструментыГлава 6: Временная система (Bash/Coreutils) [ ]
3. ChrootСкрипт входа + Монтирование VFS [ ]
4. СистемаГлава 8: Финальная сборка Glibc/GCC [ ]
5. СерверNginx + PHP + SSH [ ]
6. ИнтерфейсВеб-морда + 2FA (PHP/JS) [ ]
7. ISOСкрипт init + SquashFS + xorriso [ ]

4. Практический совет по "перезагрузке"

Чтобы легко менять ПК, храните папку /lfs-builder/packages (ваши скрипты) в Git-репозитории (GitHub/Gitea). Сами исходники (/sources) и собранную систему переносить не обязательно — скрипты соберут их заново, но код ваших скриптов — это интеллект проекта, его терять нельзя.

День 1: Среда разработки.

Установка Hyper-V, развертывание Ubuntu Server.

Включение компонентов Hyper-V в Windows 10

Включить компоненты Hyper-V в Windows 10 можно встроенными средствами системы, но только в редакциях Pro (Профессиональная), Enterprise (Корпоративная) и Education (Для образовательных учреждений). В домашней версии (Windows 10 Home) данный компонент официально не поддерживается.

Включение через графический интерфейс (Панель управления)

Это самый простой и наглядный способ активации компонента:
Нажмите комбинацию клавиш Win + R, введите optionalfeatures и нажмите Enter.

В открывшемся окне «Компоненты Windows» найдите пункт Hyper-V.

Установите галочку напротив него (убедитесь, что отмечены оба внутренних подпункта:

  • Средства управления Hyper-V и Платформа Hyper-V).

Нажмите ОК. Дождитесь окончания установки файлов и обязательно перезагрузите компьютер.

Как запустить и проверить работу Hyper-V?

После перезагрузки откройте меню «Пуск» и начните вводить в поиск Диспетчер Hyper-V для управления виртуальными машинами.

Если пункт Hyper-V в списке компонентов серый или неактивный, проверьте статус виртуализации на вкладке «Производительность» → «ЦП» в Диспетчере задач. Там должно быть указано: Виртуализация: Включено.

Запуск Диспетчера Hyper-V:

Через поиск: Нажмите клавишу Windows (Пуск), введите «Диспетчер Hyper-V» (или Hyper-V Manager) и выберите соответствующее приложение. Запуск от имени администратора

Создание виртуальной машины

Для создания виртуальной машины в Диспетчере Hyper-V выполните следующие шаги. Перед началом подготовьте установочный ISO-образ операционной системы Ubuntu 26.04 LTS.

⚙️ Шаг 1: Настройка виртуального коммутатора (для доступа в интернет)

Если виртуальной машине нужен интернет, сначала настройте сеть: В правом меню Диспетчера Hyper-V нажмите «Диспетчер виртуальных коммутаторов…».Выберите тип «Внешний» и нажмите «Создать виртуальный коммутатор».Дайте ему имя (например, Internet или Lan_Network), выберите вашу сетевую карту (Realtek или Qualcomm) и нажмите «ОК».

Создание виртуальной машины

В Диспетчере Hyper-V нажмите Создать → Виртуальная машина.

Укажите имя и расположение:

Задайте имя (например, Ubuntu-Server-26.10) и выберите папку для хранения файлов ВМ (для примера: D:\Hyper-V\).

Укажите поколение:

Строго выбирайте Поколение 2 (Generation 2) для поддержки UEFI и современной интеграции.

Выделение памяти:

Задайте объем ОЗУ (минимум 1024 МБ, рекомендуется от 8192 МБ). Флажок «Использовать динамическую память» для Linux на этапе установки рекомендуется снять (можно включить позже).

Настройка сети:

В выпадающем списке подключений выберите ранее созданный (например, Internet или Lan_Network).

Подключение виртуального жесткого диска:

Выберите «Создать виртуальный жесткий диск», укажите имя файла формата .vhdx и задайте его размер (минимум 20 ГБ, по умолчанию обычно ставится 127 ГБ).

Параметры установки:

Выберите пункт «Установить операционную систему из файла загрузочного образа» и укажите путь к скачанному .iso-образу Ubuntu Server. Нажмите Готово.

Завершение работы мастера создания виртуальной машины

Сверти параметры желаемой установки и завершите работу мастера создания виртуальной машины нажатием кнопки «Готово».

Критически важная настройка перед запуском ВМ

По умолчанию ВМ Поколения 2 в Hyper-V используют безопасную загрузку Windows, которая не даст запуститься установщику Ubuntu Linux. Нажмите правой кнопкой мыши на созданную ВМ и выберите Параметры (Settings).

Перейдите во вкладку Безопасность (Security). → В блоке «Безопасная загрузка» (Secure Boot) измените шаблон с Microsoft Windows на Центр сертификации Майкрософт для UEFI (Microsoft UEFI Certificate Authority) либо полностью снимите флажок «Включить безопасную загрузку».

Перейдите во вкладку Процессор (Processor) и выделите серверу минимум 4 виртуальных ядра. Нажмите Применить и ОК.

Развертывание Ubuntu Server

Развертывание Ubuntu Server 26.04 LTS «Resolute Raccoon» (выпущен 23 апреля 2026г.) основано на консольном установщике с поддержкой ядра Linux 7.0 и ИИ-инструментов. Установка включает выбор языка, настройку сети, разметку диска (ext4, LVM), создание пользователя и установку OpenSSH. Доступны образы для архитектур x86_64, ARM64 и облачных платформ.

Загрузка образа:

Скачайте официальный ISO-образ Ubuntu 26.04 LTS Server с сайта Canonical.

Установка ОС Ubuntu Server

Нажмите на ВМ правой кнопкой мыши → Подключить (Connect),

затем нажмите кнопку Пуск (Start).

На экране GRUB выберите первый пункт: Try or Install Ubuntu Server.

Пройдите стандартные шаги мастера установки:

Выберите язык интерфейса и подтвердите нажатием клавиши «ENTER»

и раскладку клавиатуры подтвердив выбором «Done».

Тип установки: Выберите базовый профиль Ubuntu Server (по умолчанию).

Сетевые настройки: Убедитесь, что интерфейс автоматически получил IP-адрес по DHCP.

Настройка архива (Mirror): Оставьте адрес репозитория по умолчанию.

Разметка диска: Активируйте опцию Use an entire disk. Внимание! По умолчанию Ubuntu Server настраивает систему LVM и выделяет под корневой раздел / только 50% диска.

Чтобы использовать весь накопитель сразу,

вручную отредактируйте параметры разметки логического тома (LVM)

на максимальный размер диска перед подтверждением.

Профиль пользователя: Введите ваше имя, имя сервера (hostname), имя пользователя и надежный пароль.

SSH-сервер: Обязательно отметьте галочкой пункт Install OpenSSH server для последующего удаленного администрирования.

Дополнительные пакеты (Snaps): Нажмите Done, пропуская выбор дополнительных утилит (их можно поставить позже).Начнется процесс установки.

После его завершения выберите команду Reboot Now.

Если Hyper-V попросит извлечь установочный диск, просто нажмите клавишу Enter

Войдите в систему, введя логин и пароль

PuTTY, ключи SSH и обновление системы.

Добавим ip-адрес (в нашем примере 192.168.1.65) в программу PuTTY — клиентская программа для работы с сетевыми протоколами.

И в появившееся окно вводим логин и пароль

Установите инструменты сборки:

После установки Ubuntu выполните команду, которая подготовит хост к сборке

#bash
sudo apt update && sudo apt install build-essential bison flex texinfo gawk

Выведим информацию обо всех доступных блочных устройствах: жестких дисках (HDD), SSD, USB-накопителях, разделах и логических томах (LVM/RAID)

#bash
lsblk

Добавление второго диска:

В настройках виртуальной машины в Hyper-V добавьте еще один чистый виртуальный жесткий диск (VHDX) размером около 50-100 ГБ.
Именно на этом чистом диске мы будем «строить» ваш будущий LFS-сервер.
Откройте Диспетчер Hyper-V (Hyper-V Manager). В списке виртуальных машин найдите нужную.Нажмите на нее правой кнопкой мыши и выберите «Параметры…» (Settings)

Выберите Виртуальный жесткий диск и нажмите Создать.

Выбирети тип диска: Динамически расширяемый

Укажите имя диска и местоположение

Настройте диск (рекомендуется под lfs 100 Гб)

Проверьте параметры и подтвердите создание диска

Примените изменения окна «Параметров» и нажмите «ОК».

Выведим информацию обо всех доступных блочных устройствах: жестких дисках (HDD), SSD, USB-накопителях, разделах и логических томах (LVM/RAID)

#bash
lsblk

Найдите ваш диск:Введите команду lsblk. Скорее всего, ваш диск на 100 ГБ будет называться /dev/sdb.

Если это так, используйте это имя. Разметка диска (создаем один раздел на весь объем):

#bash
sudo fdisk /dev/sdb

Внутри fdisk вводите команды по очереди:

  • 'g' (создаст новую пустую таблицу разделов GPT)
  • 'n' (создаст новый раздел)
  • 'Enter' (номер 1)
  • 'Enter' (первый сектор)
  • 'Enter' (последний сектор - выберется весь объем)
  • 'w' (записать изменения и выйти) - запишет изменения на диск и выйдет

Форматирование и монтирование

Форматируем диск нижеприведенной командой. Для LFS стандартным и самым надежным выбором является файловая система ext4.

#bash
sudo mkfs.ext4 /dev/sdb1

Создаем точку монтирования, если она не создана

#bash
sudo mkdir -pv /mnt/lfs

Монтируем диск

#bash
sudo mount -v -t ext4 /dev/sdb1 /mnt/lfs

Выведим информацию обо всех доступных блочных устройствах: жестких дисках (HDD), SSD, USB-накопителях, разделах и логических томах (LVM/RAID)

#bash
lsblk

Даем права вашему пользователю, чтобы скрипты работали без sudo

#bash
sudo chown -v $USER /mnt/lfs

Создание структуры папок /lfs-builder (packages, sources, logs, scripts).

Папки lfs и lfs-builder с подкаталогами packages, sources, logs и scripts относятся к процессу автоматизированной сборки операционной системы Linux From Scratch (LFS) из исходных кодов.

Каталог /lfs-builder

/lfs-builder (или чаще просто $LFS, указывающая на определенный раздел, например, /mnt/lfs) используется в проекте Linux From Scratch (LFS — «Linux с нуля»)

Суть этой папки:

  • Рабочее пространство: Это специально выделенное место на диске (отдельный раздел или каталог), где происходит сборка вашей собственной операционной системы GNU/Linux из исходных кодов.
  • Изоляция: В этой папке создается изолированная файловая система, чтобы процесс сборки не затронул файлы установленной хост-системы (вашего основного Linux-дистрибутива).
  • Содержимое: Внутри $LFS находятся:
    • sources: Исходные коды пакетов (архивы .tar.gz и др.).
    • tools: Временные инструменты сборки (компилятор, ассемблер, библиотеки), которые собираются в начале.
    • bin, etc, lib, usr и т.д.: Корневая файловая система будущей новой ОС.В контексте сборки LFS, переменная окружения LFS указывает на эту папку, чтобы все команды выполнялись внутри нее, например: export LFS=/mnt/lfs

Назначение папок

  • sources/ (Исходные коды) - сюда скачиваются официальные архивы исходного кода (.tar.gz, .tar.xz) всех базовых компонентов будущей ОС (ядро Linux, компилятор GCC, системная библиотека Glibc, утилиты Bash, Coreutils и т.д.). Именно из этих файлов утилита будет компилировать систему.
  • scripts/ (Сценарии сборки) - содержит автоматические сценарии (обычно .sh на Bash). Каждый скрипт отвечает за сборку конкретного пакета (например, 01-binutils.sh, 02-gcc.sh). Они автоматизируют рутинные команды: распаковку архива, запуск ./configure, make и make install.
  • packages/ (Готовые пакеты) - есто, куда сохраняются скомпилированные бинарные пакеты, если сборщик использует пакетный менеджер (например, создает .pkg.tar.xz или .rpm в процессе). Также здесь могут временно находиться файлы, уже готовые к развертыванию в целевую систему.
  • logs/ (Журналы сборки) - cюда записывается весь текстовый вывод процесса компиляции (ошибки, предупреждения, отчеты тестов make check). Так как сборка LFS длится часами и содержит тысячи строк логов, папка критически важна для отладки: если компиляция упала, причину ищут в файле вроде logs/gcc-build.log.

Создаем папку /packages в домашнем каталоге /lfs-builder:

Команда mkdir -pv ~/lfs-builder/packages используется для создания структуры каталогов в операционных системах на базе Linux. Она подготавливает директорию для хранения пакетов исходного кода, необходимых для сборки собственной операционной системы в рамках проекта LFS (Linux From Scratch)

#bash
mkdir -pv ~/lfs-builder/packages

Разбор команды по частя

  • мmkdir (make directory) — стандартная утилита Linux для создания новых папок (каталогов).
  • -p (parents) — флаг, который позволяет создавать вложенные папки вместе со всеми недостающими родительскими каталогами. Если целевая папка уже существует, команда не выдаст ошибку.
  • -v (verbose) — флаг детализации. Выводит в терминал сообщение о каждой созданной директории, подтверждая успешное выполнение действия.
  • ~/lfs-builder/packages — путь к создаваемой папке:~ (тильда) — короткое обозначение домашнего каталога текущего пользователя (например, /home/lfs)
  • .lfs-builder/packages — имя создаваемой цепочки папок (сначала создается lfs-builder, а внутри нее каталог packages).

Эта команда создает символическую ссылку в корневой директории, связывающую путь /lfs-builder с папкой lfs-builder в домашнем каталоге текущего пользователя.

#bash
sudo ln -sv ~/lfs-builder /lfs-builder

Разбор команды по частям

  • sudo — запускает команду с правами администратора (root), так как создание файлов и папок в корневом каталоге (/) обычному пользователю запрещено.
  • ln — стандартная утилита Linux для создания ссылок между файлами или директориями.
  • -s (symbolic) — указывает создать символическую ссылку (софт-линк), а не жесткую.
  • -v (verbose) — включает подробный вывод, заставляя команду напечатать в терминал имя каждого связанного файла (например: '/lfs-builder' → '/home/user/lfs-builder').
  • ~/lfs-builder — исходный объект (цель). Знак тильды (~) автоматически разворачивается в путь к домашней директории текущего пользователя (например, /home/имя_пользователя/lfs-builder).
  • /lfs-builder — путь и имя создаваемой ссылки в корневой файловой системе.

Команда df -h | grep lfs используется для проверки статуса монтирования раздела LFS. Она позволяет быстро узнать, подключен ли отдельный жесткий диск или раздел для сборки Linux From Scratch к вашей текущей системе, а также оценить свободное место на нем.

#bash
df -h | grep lfs

Разбор команды по частям

  • df (disk free) — утилита для вывода информации о дисковом пространстве файловых систем.
  • -h (human-readable) — флаг, который переводит размеры в понятный человеку формат (в гигабайтах ГБ или мегабайтах МБ вместо байт)
  • | (pipe / конвейер) — перенаправляет текстовый вывод команды df на вход команды grep
  • grep lfs — фильтр, который ищет и выводит только те строки, которые содержат текст «lfs».

На этапе подготовки сборки вы монтируете целевой раздел (например, в точку /mnt/lfs).

  • Если раздел примонтирован: команда выведет строку с информацией о диске (размер, занято место, доступно место, процент использования и точка монтирования /mnt/lfs).
  • Если раздел НЕ примонтирован: команда вернет пустую строку. Это сигнал, что перед началом работы нужно выполнить команду mount.

Создаем каталоги /sources,logs,scripts в /lfs-builder:

Флаг -p создаст всю цепочку папок, если родительский каталог /lfs-builder еще не существует.

#bash
mkdir -p /lfs-builder/{sources,logs,scripts}

В нашем случае Флаг -p опускаем

#bash
mkdir /lfs-builder/{sources,logs,scripts}

Установка полных прав для владельца (не root) (чтение, запись, исполнение)

#bash
sudo chmod -R 755 /lfs-builder

Проверка результата

Убедиться, что каталоги созданы и права выставлены корректно, можно командой:

#bash
ls -la /lfs-builder

В выводе вы должны увидеть, что у всех папок владельцем значится lfs, а права имеют вид drwxwxrwx.
Права вида drwxwxrwx означают максимальный (полный) уровень доступа к каталогу для абсолютно всех пользователей в системе.
Для папок проекта /lfs-builder (особенно sources, logs, packages, scripts) режим 777 имеет свои плюсы и минусы:

  • Плюс: Скрипты сборщика и любые пользователи (включая root и lfs) гарантированно смогут записывать логи, скачивать пакеты и запускать сценарии без ошибок «Permission denied».
  • Минус: Это небезопасно в реальных многопользовательских системах, так как любой непривилегированный процесс или гость сможет удалить или подменить файлы исходного кода ОС.

Файл config.conf

Файл config.conf — это текстовый файл конфигурации (настроек), который используется программами и скриптами для хранения параметров работы. В контексте сборки Linux From Scratch (LFS) или автоматизированных скриптов (например, lfs-automated-builder) этот файл содержит ключевые переменные окружения.

Что обычно находится внутри config.conf

В этом файле задаются глобальные настройки, чтобы не вводить их вручную при каждой сборке. Типичное содержимое включает: LFS=/mnt/lfs — путь к точке монтирования целевого раздела LFS. LFS_TGT=x86_64-lfs-linux-gnu — префикс целевой архитектуры для кросс-компиляции. MAKEFLAGS="-j$(nproc)" — количество ядер процессора, используемых для ускорения сборки пакетов. LFS_USER=lfs — имя непривилегированного пользователя, от имени которого собираются начальные инструменты. Зайдите в папку сборщика:

#bash
cd ~/lfs-builder

Создайте файл:

#bash
nano config.conf

Вставьте туда следующий текст:

config.conf
#!/bin/bash
# Путь к новой системе
export LFS=/mnt/lfs
# Параметры кросс-компиляции
export LFS_TGT=x86_64-lfs-linux-gnu
# Ускорение сборки (используем все ядра CPU)
export MAKEFLAGS="-j$(nproc)"
# Пути к исходникам и логам
export SOURCES=$LFS/sources
export LOGS=$HOME/lfs-builder/logs
# Создаем папку для логов, если её нет
mkdir -pv $LOGS

(Нажмите Ctrl+O, Enter, затем Ctrl+X для сохранения и выхода)

Файл download.sh

Файл download.sh — это скрипт автоматизации на языке Bash, предназначенный для скачивания пакетов исходного кода (тарболов .tar.gz, .tar.xz) и патчей, необходимых для сборки операционной системы Linux From Scratch (LFS).

Что делает этот скрипт

При запуске скрипт выполняет следующие задачи:

  • Чтение списка пакетов: обращается к текстовому файлу (например, wget-list), где перечислены URL-адреса всех программ для текущей версии LFS.
  • Скачивание файлов: поочередно загружает исходные коды (GCC, Glibc, Binutils, ядро Linux и др.) с помощью утилит wget или curl.
  • Проверка целостности: часто сверяет контрольные суммы скачанных архивов (MD5/SHA256) со списком md5sums, чтобы исключить повреждение файлов.
  • Сохранение в целевую папку: автоматически складывает загруженные архивы в правильный каталог, обычно в $LFS/sources или созданную ранее ~/lfs-builder/packages.

Пример содержимого изнутри

Внутри скрипта обычно находится код подобного вида:

#bash
#!/bin/bash
# Загрузка списка URL и скачивание в папку источников
cd $LFS/sources
wget --input-file=wget-list --continue --directory-prefix=$LFS/sources

Ссылка на рабочий репозиторий lfs-packages 12.1, откуда можно взять любой пакет, описанный в этом руководстве, пример команды:

#bash
wget https://ftp.clfs.org/pub/lfs/lfs-packages/12.1/... .tar.gz .tar.xz

Чистый рабочий скрипт download.sh с правильным URL
Скопируйте этот блок кода целиком и вставьте его правой кнопкой мыши в консоль PuTTy (находясь в папке ~/lfs-builder):

#bash
cat << 'EOF' > ~/lfs-builder/download.sh
#!/bin/bash
source ./config.conf
 
URL="ftp.clfs.org/pub/lfs/lfs-packages/12.1/"
 
PACKAGES=(
  "Jinja2-3.1.3.tar.gz" "MarkupSafe-2.1.5.tar.gz" "Python-3.12.2.tar.xz"
  "XML-Parser-2.47.tar.gz" "acl-2.3.2.tar.xz" "attr-2.5.2.tar.gz"
  "autoconf-2.72.tar.xz" "automake-1.16.5.tar.xz" "bash-5.2.21.tar.gz"
  "bash-5.2.21-upstream_fixes-1.patch" "bc-6.7.5.tar.xz" "binutils-2.42.tar.xz"
  "bison-3.8.2.tar.xz" "bzip2-1.0.8.tar.gz" "bzip2-1.0.8-install_docs-1.patch"
  "check-0.15.2.tar.gz" "coreutils-9.4.tar.xz" "coreutils-9.4-i18n-1.patch"
  "dbus-1.14.10.tar.xz" "dejagnu-1.6.3.tar.gz" "diffutils-3.10.tar.xz"
  "e2fsprogs-1.47.0.tar.gz" "elfutils-0.190.tar.bz2" "expat-2.6.0.tar.xz"
  "expect5.45.4.tar.gz" "file-5.45.tar.gz" "findutils-4.9.0.tar.xz"
  "flex-2.6.4.tar.gz" "flit_core-3.9.0.tar.gz" "gawk-5.3.0.tar.xz"
  "gcc-13.2.0.tar.xz" "gdbm-1.23.tar.gz" "gettext-0.22.4.tar.xz"
  "glibc-2.39.tar.xz" "glibc-2.39-fhs-1.patch" "gmp-6.3.0.tar.xz"
  "gperf-3.1.tar.gz" "grep-3.11.tar.xz" "groff-1.23.0.tar.gz"
  "grub-2.12.tar.xz" "gzip-1.13.tar.xz" "iana-etc-20240125.tar.gz"
  "inetutils-2.5.tar.xz" "intltool-0.51.0.tar.gz" "iproute2-6.7.0.tar.xz"
  "kbd-2.6.4.tar.xz" "kbd-2.6.4-backspace-1.patch" "kmod-31.tar.xz"
  "less-643.tar.gz" "lfs-bootscripts-20231015.tar.xz" "libcap-2.69.tar.xz"
  "libffi-3.4.4.tar.gz" "libpipeline-1.5.7.tar.gz" "libtool-2.4.7.tar.xz"
  "libxcrypt-4.4.36.tar.xz" "linux-6.7.4.tar.xz" "m4-1.4.19.tar.xz"
  "make-4.4.1.tar.gz" "man-db-2.12.0.tar.xz" "man-pages-6.06.tar.xz"
  "meson-1.3.2.tar.gz" "mpc-1.3.1.tar.gz" "mpfr-4.2.1.tar.xz"
  "ncurses-6.4-20230520.tar.xz" "ninja-1.11.1.tar.gz" "openssl-3.2.1.tar.gz"
  "patch-2.7.6.tar.xz" "perl-5.38.2.tar.xz" "pkgconf-2.1.1.tar.xz"
  "procps-ng-4.0.4.tar.xz" "psmisc-23.6.tar.xz" "readline-8.2.tar.gz"
  "readline-8.2-upstream_fixes-3.patch" "sed-4.9.tar.xz" "setuptools-69.1.0.tar.gz"
  "shadow-4.14.5.tar.xz" "sysklogd-1.5.1.tar.gz" "systemd-255.tar.gz"
  "systemd-255-upstream_fixes-1.patch" "sysvinit-3.08.tar.xz"
  "sysvinit-3.08-consolidated-1.patch" "tar-1.35.tar.xz" "tcl8.6.13-src.tar.gz"
  "texinfo-7.1.tar.xz" "tzdata2024a.tar.gz" "udev-lfs-20230818.tar.xz"
  "util-linux-2.39.3.tar.xz" "vim-9.1.0041.tar.gz" "wheel-0.42.0.tar.gz"
  "xz-5.4.6.tar.xz" "zlib-1.3.1.tar.gz" "zstd-1.5.5.tar.gz"
)
 
mkdir -pv "$SOURCES"
cd "$SOURCES" || exit 1
 
for pkg in "${PACKAGES[@]}"; do
  wget --continue "${URL}/${pkg}"
done
EOF

Запуск конвейера

Выполните команды очистки, фиксации и старта:

#bash
# Переход в рабочую директорию
cd ~/lfs-builder
#Исправление формата текстового файла
sed -i 's/\r$//' download.sh
# Выдача прав на выполнение
chmod +x download.sh
# Запуск скрипта загрузки
bash ./download.sh

Скрипт начнет массово скачивать из интернета архивы (например, gcc.tar.xz, glibc.tar.xz, ядра Linux) во внутреннюю папку (обычно это /sources). Эти архивы — фундамент, из которого потом скомпилируют вашу ОС.

Анализ и зачистка папки источников

Запустим следубщую команду

#bash
ls -lh /mnt/lfs/sources

Выведем список всех файлов в вашей целевой директории с отображением их реальных размеров:

  • Любые файлы с именем index.html* (это ошибочно скачанные заглушки сайтов).
  • Ошибочный файл списка wget-list, если он остался со старыми HTML-тегами.
  • Другую версию binutils-2.44.tar.gz (мы строим систему строго на стабильной базе 2.42 из спецификации).

Команда для гарантированной зачистки мусора:

#bash
rm -fv /mnt/lfs/sources/index.html*
rm -fv /mnt/lfs/sources/binutils-2.44.tar.gz

Проверка целостности базовой тройки

Убедитесь, что три главных кита нашей будущей системы скачались полностью и без повреждений:

  • binutils-2.42.tar.xz — должен весить около 26 МБ.
  • gcc-13.2.0.tar.xz — должен весить около 84 МБ.
  • glibc-2.39.tar.xz — должен весить около 18 МБ.

Запуск вашего эталонного скрипта

Теперь, когда у нас есть проверенный файл download.sh хост-системы, мы можем перепроверить загруженные пакеты:

#bash
cd ~/lfs-builder
# Запускаем конвейер
bash ./download.sh

Благодаря флагу --continue в скрипте, утилита проверит ваши уже скачанные binutils, gcc и glibc, увидит, что они целы, и начнет выкачивать все остальные 90+ пакетов по цепочке.

Финальная проверка количества файлов

Давайте убедимся, что на диске лежит полный комплект для сборки нашего сервера. Выполните команду:

#bash
ls -1 /mnt/lfs/sources | wc -l

Цифра в терминале должна быть в районе 90 (91-93 файла вместе с системными патчами).
91 файл на скриншоте — это идеальный, эталонный показатель для полной сборки LFS 12.1. Это значит, что у вас на диске лежат абсолютно все исходники программ, библиотек и необходимые официальные патчи ядра и утилит.

День 3: Двигатель (Build Engine).

Написание главного скрипта build.sh.Реализация логики логирования и обработки ошибок (чтобы сборка останавливалась при ошибке make).

День 4: Кросс-компилятор (Глава 5 LFS).

Написание скриптов для Binutils (Pass 1) и GCC (Pass 1).

Запуск и отладка. Это самые долгие компиляции.

День 5: Завершение временных инструментов (Глава 6).

Сборка оставшихся утилит (M4, Ncurses, Bash, Coreutils и др.), работающих во временной папке.

Только авторизованные участники могут оставлять комментарии.
software/linux_server/iso_lfs_server/iso_lfs_server.1778694961.txt.gz · Последнее изменение: VladPolskiy

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki