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

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


software:linux_server:iso_lfs_server:iso_lfs_server

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
software:linux_server:iso_lfs_server:iso_lfs_server [2026/05/14 01:35] – [Запуск компиляции (День 4)] VladPolskiysoftware:linux_server:iso_lfs_server:iso_lfs_server [2026/05/14 20:18] (текущий) – [День 4: Кросс-компилятор (Глава 5 LFS).] VladPolskiy
Строка 2208: Строка 2208:
   * Собирается полноценная разделяемая библиотека libstdc++ [12.1].   * Собирается полноценная разделяемая библиотека libstdc++ [12.1].
   * Итоговые исполняемые файлы прописываются в каталог /mnt/lfs/usr/bin/ [12.1].   * Итоговые исполняемые файлы прописываются в каталог /mnt/lfs/usr/bin/ [12.1].
 +<note shadow>
 +{{:software:linux_server:iso_lfs_server:iso_lfs_server_x_50.png|}}
 +</note>
 +На скриншоте зафиксирована классическая ошибка компиляции GCC версии 13 на современных дистрибутивах хост-систем: error: 'flags' may be used uninitialized [-Werror=maybe-uninitialized] в файле sanitizer_common/sanitizer_posix.cpp.
 +==🔍 В чем причина ошибки==
 +Компилятор хоста Ubuntu задействует новые, более строгие правила статического анализа кода [12.1]. Он обнаружил потенциальную проблему, когда переменная flags внутри библиотеки libsanitizer может остаться неинициализированной [12.1]. Из-за встроенного флага -Werror это предупреждение принудительно превратилось в критическую ошибку, которая и остановила весь make [12.1].
 +\\  
 +Поскольку эта внутренняя библиотека отладки (libsanitizer) не критична для работы базового кросс-компилятора временной среды, а книга LFS 12.1 рекомендует полностью подавлять такие ошибки компилятора хоста [12.1], мы решим этот вопрос радикально и надежно. Мы передадим флаг отключения санитайзеров --disable-libsanitizer на этапе конфигурации GCC Pass 2 [12.1].
 +====🛠️ Модификация скрипта packages/022-gcc-p2.sh====
 +Выполните команду в терминале хоста для полной перезаписи сценария. В конфигуратор добавлен официальный флаг обхода проблемных отладочных библиотек:
 +<code bash #bash>
 +cat << 'EOF' > ~/lfs-builder/packages/022-gcc-p2.sh
 +#!/bin/bash
 +set -e
  
-====== День 4: Кросс-компилятор (Глава LFS). ======+# Очищаем переменные хоста, чтобы они не ломали кросс-компиляцию 
 +unset CFLAGS 
 +unset CXXFLAGS 
 + 
 +# Распаковываем математические библиотеки внутрь корня GCC 
 +tar -xf ../mpfr-4.2.1.tar.xz && mv -v mpfr-4.2.1 mpfr 
 +tar -xf ../gmp-6.3.0.tar.xz  && mv -v gmp-6.3.0 gmp 
 +tar -xf ../mpc-1.3.1.tar.gz  && mv -v mpc-1.3.1 mpc 
 + 
 +# Настройка динамического линкера под x86_64 
 +case $(uname -m) in 
 +  x86_64) 
 +    sed -e '/m64=/s/lib64/lib/' -i.bak gcc/config/i386/t-linux64 
 + ;; 
 +esac 
 + 
 +# Отключаем устаревший макрос Dialogue, если он присутствует 
 +sed '/Dialogue on/d' -i gcc/cp/cfns.gperf || true 
 + 
 +mkdir -v build 
 +cd       build 
 + 
 +# Предотвращаем конфликты сборки лимитов libstdc++ 
 +mkdir -pv $LFS_TGT/libstdc++-v3/src/.libs 
 + 
 +# --disable-libsanitizer отключает проблемный модуль отладки памяти 
 +# --disable-werror гарантирует, что мелкие предупреждения не сорвут сборку 
 +../configure \ 
 +    --build=$(../config.guess) \ 
 +    --host=$LFS_TGT \ 
 +    --target=$LFS_TGT \ 
 +    --prefix=/usr \ 
 +    --with-glibc-version=2.39 \ 
 +    --with-sysroot=$LFS \ 
 +    --enable-languages=c,c++ \ 
 +    --enable-default-pie \ 
 +    --enable-default-ssp \ 
 +    --disable-nls \ 
 +    --disable-multilib \ 
 +    --disable-libsanitizer \ 
 +    --disable-werror 
 + 
 +make $MAKEFLAGS 
 +make DESTDIR=$LFS install 
 + 
 +# Создаем критически важную ссылку на cc, чтобы chroot-среда видела компилятор по умолчанию 
 +ln -sfv gcc $LFS/usr/bin/cc 
 +EOF 
 + 
 +chmod +x ~/lfs-builder/packages/022-gcc-p2.sh 
 +</code> 
 +===🚀 Повторный запуск компиляции=== 
 +Так как при падении важный экспорт переменной PATH мог сброситься в текущей сессии вашего терминала, выполните команду вместе с принудительным экспортом, чтобы гарантировать видимость утилит кросс-компилятора [12.1]: 
 +<code bash #bash> 
 +cd ~/lfs-builder 
 +export PATH=$LFS/tools/bin:$PATH 
 +./scripts/build.sh gcc-13.2.0.tar.xz packages/022-gcc-p2.sh 
 +</code> 
 +Теперь компилятор хоста полностью пропустит сборку проблемной библиотеки libsanitizer, преодолеет этот барьер и успешно доведет компиляцию второго прохода GCC до финального победного статуса [12.1]. 
 +\\   
 + 
 +====== День 7 ====== 
 + Памятка для продолженияГде мы находимся и с чего начать завтраЧтобы завтра мгновенно войти в рабочий ритм и продолжить проект без потери контекста, ниже приведено полное техническое описание текущего состояния и пошаговый план старта Дня 6.📂 1. Состояние инфраструктуры на момент остановкиКаталог /mnt/lfs (Диск sdb1): Полностью сформирован «каркас» будущей операционной системы [12.1]. Внутри /mnt/lfs/usr/bin, /mnt/lfs/usr/lib и /mnt/lfs/tools находятся полностью независимые компилятор GCC 13.2.0, утилиты Binutils 2.42, библиотека Glibc 2.39 и 15 базовых утилит автоматизации (Bash, Make, Sed, Tar и др.) [12.1].Каталог ~/lfs-builder (Хост Ubuntu 24.04): Папка packages/ содержит эталонные скрипты с 001 по 022. Все они отработали успешно. Папка scripts/ содержит исправленный движок build.sh, диспетчер run_day5.sh и готовые утилиты для входа в chroot и создания бэкапов.Резервные копии (~/lfs-backups/): Созданы два архива — слепок компилятора первого прохода и финальный слепок всей корневой системы lfs-system-day5-final.tar.xz.🗺️ 2. План действий на завтра: День 6 (Переход в Chroot)Завтра мы полностью изолируем проект от хост-системы. Мы больше не будем использовать компиляторы вашей Ubuntu. Все последующие пакеты будут собираться «внутри себя» [12.1].Пошаговый алгоритм старта следующего дня:Шаг 1. Проверка монтирования диска:После включения машины убедитесь, что диск sdb1 стабильно примонтирован в /mnt/lfs (через вашу рабочую конфигурацию fstab):bashdf -h | grep lfs 
 +==================================================================== 
 +=====🔑 ПЛАН НА ДЕНЬ 6: ИЗОЛЯЦИЯ И ПОДГОТОВКА CHROOT (Глава LFS)=====  
 +Сегодня мы полностью разрываем связь с хост-системой Ubuntu. Все дальнейшие действия происходят внутри изолированной chroot-среды, где ваш диск /mnt/lfs станет корневым разделом / [12.1].Сценарий входа scripts/chroot_enter.sh уже готов, поэтому мы начинаем с выполнения следующих шагов. 
 + 
 +==== 🛠️ Создание и запуск скрипта scripts/chroot_enter.sh==== 
 +Выполните эту команду в терминале от пользователя eva. Она запишет файл, выдаст права на исполнение и сразу запустит процесс входа: 
 +Используйте код с осторожностью.Шаг 2. Вход в изолированную chroot-среду:Запустите подготовленный скрипт. Он автоматически примонтирует виртуальные файловые системы ядра хоста (/dev, /proc, /sys) внутрь вашего диска и переключит корень системы [12.1]:bashcd ~/lfs-builder 
 +./scripts/chroot_enter.sh 
 +Используйте код с осторожностью.Ваш терминал изменит вид на: (lfs chroot) root:/#. С этого момента вы находитесь внутри своего собственного Linux-сервера [12.1].Шаг 3. Создание базовой структуры и конфигурации (Глава 7 LFS):Прямо внутри chroot-окружения мы создадим системные файлы пользователей и групп, настроим права доступа и инициализируем пустые файлы системных логов, чтобы полноценный make install финальных пакетов не падал из-за отсутствия пользователя root или группы wheel [12.1].
 ===== Написание скриптов для Binutils (Pass 1) и GCC (Pass 1). ===== ===== Написание скриптов для Binutils (Pass 1) и GCC (Pass 1). =====
 ===== Запуск и отладка. Это самые долгие компиляции. ===== ===== Запуск и отладка. Это самые долгие компиляции. =====
 ====== День 5: Завершение временных инструментов (Глава 6). ====== ====== День 5: Завершение временных инструментов (Глава 6). ======
 ===== Сборка оставшихся утилит (M4, Ncurses, Bash, Coreutils и др.), работающих во временной папке. ===== ===== Сборка оставшихся утилит (M4, Ncurses, Bash, Coreutils и др.), работающих во временной папке. =====
software/linux_server/iso_lfs_server/iso_lfs_server.1778711725.txt.gz · Последнее изменение: VladPolskiy

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