cat << 'EOF' > ~/lfs-builder/scripts/build.sh #!/bin/bash set -e set -o pipefail LFS_BUILDER_ROOT="$(cd "$(dirname "${BASH_SOURCE}")/.." && pwd)" if [ -f "$LFS_BUILDER_ROOT/config.conf" ]; then source "$LFS_BUILDER_ROOT/config.conf" else echo "Ошибка: Конфигурационный файл config.conf не найден в $LFS_BUILDER_ROOT!" exit 1 fi if [ -z "$1" ] || [ -z "$2" ]; then echo "Использование: $0 <имя_архива> <скрипт_пакета.sh>" echo "Пример: $0 binutils-2.42.tar.xz packages/001-binutils-p1.sh" exit 1 fi ARCHIVE="$1" PACK_SCRIPT="$2" PKG_NAME=$(basename "$PACK_SCRIPT" .sh) LOG_FILE="$LOGS/${PKG_NAME}.log" echo "=== Запуск сборки пакета: $PKG_NAME ===" echo "Лог компиляции: $LOG_FILE" cd "$SOURCES" echo "Распаковка $ARCHIVE..." if [ ! -f "$ARCHIVE" ]; then echo "Ошибка: Архив $ARCHIVE не найден в $SOURCES!" exit 1 fi # Универсальная и безопасная распаковка tar tar -xf "$ARCHIVE" # Фиксируем точное имя созданной папки SRC_DIR=$(ls -td */ | grep -v "lost+found" | head -n1 | cut -d'/' -f1) cd "$SRC_DIR" echo "Переход в каталог исходников: $SRC_DIR" set +e bash "$LFS_BUILDER_ROOT/$PACK_SCRIPT" 2>&1 | tee "$LOG_FILE" EXIT_CODE=${PIPESTATUS} set -e cd "$SOURCES" echo "Удаление временной директории исходников $SRC_DIR..." rm -rf "$SRC_DIR" if [ $EXIT_CODE -eq 0 ]; then echo "=== [УСПЕХ] Пакет $PKG_NAME собран успешно! ===" else echo "=== [ОШИБКА] Сбой при сборке $PKG_NAME. См. лог: $LOG_FILE ===" exit $EXIT_CODE fi EOF chmod +x ~/lfs-builder/scripts/build.sh