diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 7128ccf..bc8d7d0 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,6 +2,27 @@ --- +## V41 2026-03-21 00:30:00 + +**Fix chroot PATH and add combined chroot build runner** + +### Changes: +- Fixed `023-chroot-setup.sh`: Added `/tools/bin` to chroot PATH. The cross-compiled + GCC lives at `/tools/bin/gcc` inside the chroot — without it in PATH, configure + fails with "C compiler cannot create executables" +- Added `023a-chroot-build-all.sh`: Combined runner that enters chroot and executes + scripts 024-031 in sequence with logging. No more manual copy-paste of 8 commands. +- Updated `toolchain/bootstrap.sh`: Now runs all 6 steps end-to-end including chroot + phase. Single `sudo -E bash toolchain/bootstrap.sh` does everything. + +### Plan deviation/changes: +- None + +### What is missing/needs polish: +- None + +--- + ## V40 2026-03-21 00:00:00 **Fix cross-compile configure failures in diffutils, grep, coreutils, tar, findutils** diff --git a/toolchain/bootstrap.sh b/toolchain/bootstrap.sh index bd81ff4..6df5901 100644 --- a/toolchain/bootstrap.sh +++ b/toolchain/bootstrap.sh @@ -7,7 +7,8 @@ # 2. Set up directory structure, lfs user, env files # 3. Download source tarballs # 4. Copy toolchain scripts to $LFS so lfs user can access them -# 5. Launch build-all.sh as the lfs user +# 5. Build cross-toolchain as lfs user (Chapters 5+6) +# 6. Enter chroot and build Chapter 7 tools # # Usage: sudo -E bash toolchain/bootstrap.sh # (run from the project root, e.g. /home/danny/darkforge) @@ -53,28 +54,28 @@ echo "" # ============================================================================= # Step 1: Create fresh loopback filesystem # ============================================================================= -info "STEP 1/5: Setting up build filesystem..." +info "STEP 1/6: Setting up build filesystem..." bash "${SCRIPT_SRC}/000-setup-disk.sh" echo "" # ============================================================================= # Step 2: Set up directory structure, lfs user, and env # ============================================================================= -info "STEP 2/5: Setting up environment..." +info "STEP 2/6: Setting up environment..." bash "${SCRIPT_SRC}/000-env-setup.sh" echo "" # ============================================================================= # Step 3: Download all source tarballs # ============================================================================= -info "STEP 3/5: Downloading source tarballs..." +info "STEP 3/6: Downloading source tarballs..." bash "${SCRIPT_SRC}/000a-download-sources.sh" echo "" # ============================================================================= # Step 4: Copy toolchain scripts to $LFS/sources/toolchain-scripts/ # ============================================================================= -info "STEP 4/5: Copying toolchain scripts to ${LFS}/sources/toolchain-scripts/..." +info "STEP 4/6: Copying toolchain scripts to ${LFS}/sources/toolchain-scripts/..." SCRIPTS_DEST="${LFS}/sources/toolchain-scripts" rm -rf "${SCRIPTS_DEST}" mkdir -p "${SCRIPTS_DEST}" @@ -87,7 +88,7 @@ echo "" # ============================================================================= # Step 5: Run build-all.sh as lfs user # ============================================================================= -info "STEP 5/5: Building cross-toolchain as lfs user..." +info "STEP 5/6: Building cross-toolchain as lfs user..." echo " This will take a while (30-60+ minutes on 32 threads)." echo " Logs will be in: ${LFS}/sources/logs/" echo "" @@ -106,22 +107,27 @@ env -i HOME=/home/lfs TERM="${TERM}" \ fail "Build failed! Check logs in ${LFS}/sources/logs/" } +ok "Cross-compilation phase (Chapters 5+6) complete!" +echo "" + +# ============================================================================= +# Step 6: Set up chroot and run Chapter 7 scripts +# ============================================================================= +info "STEP 6/6: Setting up chroot and building Chapter 7 tools..." +echo "" + +bash "${SCRIPTS_DEST}/023-chroot-setup.sh" +bash "${SCRIPTS_DEST}/023a-chroot-build-all.sh" + echo "" echo "============================================================" -echo -e "${GREEN} Phase 0 cross-compilation complete!${NC}" +echo -e "${GREEN} Phase 0 is FULLY COMPLETE!${NC}" echo "============================================================" echo "" -echo "Next steps (run as root):" +echo "The DarkForge toolchain chroot is ready." +echo "To enter the chroot manually:" echo "" -echo " # Enter the chroot environment:" -echo " sudo -E bash ${SCRIPTS_DEST}/023-chroot-setup.sh" -echo "" -echo " # Then inside chroot, run these in order:" -echo " bash /sources/toolchain-scripts/024-chroot-essentials.sh" -echo " bash /sources/toolchain-scripts/025-gettext.sh" -echo " bash /sources/toolchain-scripts/026-bison.sh" -echo " bash /sources/toolchain-scripts/027-perl.sh" -echo " bash /sources/toolchain-scripts/028-python.sh" -echo " bash /sources/toolchain-scripts/029-texinfo.sh" -echo " bash /sources/toolchain-scripts/030-util-linux.sh" -echo " bash /sources/toolchain-scripts/031-cleanup.sh" +echo " sudo chroot ${LFS} /usr/bin/env -i \\" +echo " HOME=/root TERM=\${TERM} \\" +echo " PATH=/usr/bin:/usr/sbin:/tools/bin \\" +echo " MAKEFLAGS=\"-j32\" /bin/bash --login" diff --git a/toolchain/scripts/023-chroot-setup.sh b/toolchain/scripts/023-chroot-setup.sh index 251a652..8ef45df 100755 --- a/toolchain/scripts/023-chroot-setup.sh +++ b/toolchain/scripts/023-chroot-setup.sh @@ -84,8 +84,9 @@ echo " chroot \"${LFS}\" /usr/bin/env -i \\" echo " HOME=/root \\" echo " TERM=\"\${TERM}\" \\" echo " PS1='(darkforge chroot) \\u:\\w\\\$ ' \\" -echo " PATH=/usr/bin:/usr/sbin \\" +echo " PATH=/usr/bin:/usr/sbin:/tools/bin \\" echo " MAKEFLAGS=\"-j32\" \\" echo " /bin/bash --login" echo "" -echo "Then run the chroot build scripts (024-xxx) from inside the chroot." +echo "Or run all chroot scripts automatically:" +echo " bash ${LFS}/sources/toolchain-scripts/023a-chroot-build-all.sh" diff --git a/toolchain/scripts/023a-chroot-build-all.sh b/toolchain/scripts/023a-chroot-build-all.sh new file mode 100644 index 0000000..5104b01 --- /dev/null +++ b/toolchain/scripts/023a-chroot-build-all.sh @@ -0,0 +1,111 @@ +#!/bin/bash +# ============================================================================ +# DarkForge Linux — Phase 0, Chapter 7: Run All Chroot Build Scripts +# ============================================================================ +# Purpose: Enters the chroot and runs scripts 024-031 in sequence. +# This is a convenience wrapper — run it on the HOST as root, +# AFTER 023-chroot-setup.sh has mounted virtual filesystems. +# Usage: sudo bash /mnt/darkforge/sources/toolchain-scripts/023a-chroot-build-all.sh +# Inputs: LFS environment variable (default: /mnt/darkforge) +# Outputs: Completed chroot tools (gettext, bison, perl, python, texinfo, util-linux) +# Assumes: 023-chroot-setup.sh already ran, virtual filesystems mounted +# ============================================================================ + +set -euo pipefail + +LFS="${LFS:-/mnt/darkforge}" +SCRIPTS="/sources/toolchain-scripts" + +# Color output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +ok() { echo -e "${GREEN}>>> $*${NC}"; } +warn() { echo -e "${YELLOW}>>> $*${NC}"; } +fail() { echo -e "${RED}>>> $*${NC}"; exit 1; } + +[ "$(id -u)" -eq 0 ] || fail "This script must be run as root." + +# Verify chroot is ready (virtual filesystems mounted) +if ! mountpoint -q "${LFS}/proc" 2>/dev/null; then + fail "${LFS}/proc is not mounted. Run 023-chroot-setup.sh first." +fi + +echo "============================================================" +echo " DarkForge Linux — Chroot Build Phase (Chapter 7)" +echo "============================================================" +echo "" + +# Build a script that runs inside the chroot +# We write it to a temp file inside $LFS so the chroot can see it +cat > "${LFS}/tmp/chroot-build-runner.sh" << 'CHROOT_EOF' +#!/bin/bash +set -euo pipefail + +SCRIPTS="/sources/toolchain-scripts" +LOG_DIR="/sources/logs" +mkdir -p "${LOG_DIR}" + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +run_script() { + local script="$1" + local name + name=$(basename "${script}" .sh) + local logfile="${LOG_DIR}/${name}.log" + + echo -e "${YELLOW}>>> [$(date '+%H:%M:%S')] Starting: ${name}${NC}" + + if bash "${script}" 2>&1 | tee "${logfile}"; then + echo -e "${GREEN}>>> [$(date '+%H:%M:%S')] PASSED: ${name}${NC}" + echo "" + else + echo -e "${RED}>>> [$(date '+%H:%M:%S')] FAILED: ${name}${NC}" + echo "Log file: ${logfile}" + exit 1 + fi +} + +echo "=== Chapter 7: Chroot Build Scripts ===" +echo "" + +run_script "${SCRIPTS}/024-chroot-essentials.sh" +run_script "${SCRIPTS}/025-gettext.sh" +run_script "${SCRIPTS}/026-bison.sh" +run_script "${SCRIPTS}/027-perl.sh" +run_script "${SCRIPTS}/028-python.sh" +run_script "${SCRIPTS}/029-texinfo.sh" +run_script "${SCRIPTS}/030-util-linux.sh" +run_script "${SCRIPTS}/031-cleanup.sh" + +echo "" +echo "============================================================" +echo " Chapter 7 chroot builds complete!" +echo "============================================================" +CHROOT_EOF + +chmod +x "${LFS}/tmp/chroot-build-runner.sh" + +# Enter chroot and run the build script +# PATH includes /tools/bin where the cross-compiled gcc lives +chroot "${LFS}" /usr/bin/env -i \ + HOME=/root \ + TERM="${TERM}" \ + PS1='(darkforge chroot) \u:\w\$ ' \ + PATH=/usr/bin:/usr/sbin:/tools/bin \ + MAKEFLAGS="-j32" \ + /bin/bash /tmp/chroot-build-runner.sh + +# Clean up +rm -f "${LFS}/tmp/chroot-build-runner.sh" + +echo "" +echo -e "${GREEN}Phase 0 is FULLY COMPLETE.${NC}" +echo "" +echo "The toolchain chroot environment is ready." +echo "Next: Phase 1 (dpack) or Phase 3 (base system packages)."