diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 21ca015..140a95c 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,6 +2,31 @@ --- +## V38 2026-03-20 23:00:00 + +**Sync all Phase 0 build scripts to match Danish mirror tarball versions** + +### Changes: +- Updated `toolchain/scripts/001-binutils-pass1.sh`: VERSION "2.46" → "2.46.0" +- Updated `toolchain/scripts/021-binutils-pass2.sh`: VERSION "2.46" → "2.46.0" +- Updated `toolchain/scripts/004-glibc.sh`: Patch name `glibc-2.43-fhs-1.patch` → `glibc-fhs-1.patch` +- Rewrote `toolchain/scripts/007-ncurses.sh`: Auto-detects version from unversioned `ncurses.tar.gz` +- Updated `toolchain/scripts/009-coreutils.sh`: VERSION "9.6" → "9.10" +- Updated `toolchain/scripts/010-diffutils.sh`: VERSION "3.10" → "3.12" +- Updated `toolchain/scripts/014-grep.sh`: VERSION "3.14" → "3.12" +- Updated `toolchain/scripts/016-make.sh`: VERSION "4.4.1" → "4.4" +- Rewrote `toolchain/scripts/019-tar.sh`: Auto-detects version from unversioned `tar-latest.tar.xz` +- Updated `toolchain/scripts/025-gettext.sh`: VERSION "0.23.1" → "1.0" +- Rewrote `toolchain/VERSION_MANIFEST.md`: All versions now match ftp.klid.dk mirror + +### Plan deviation/changes: +- ncurses and tar use auto-version-detection since mirror provides unversioned tarballs + +### What is missing/needs polish: +- `sed '6009s/$add_dir//' -i ltmain.sh` in 021-binutils-pass2.sh references a specific line number — may need adjustment for binutils 2.46.0 + +--- + ## V37 2026-03-20 22:30:00 **Use Danish GNU mirror and add loopback disk setup script** diff --git a/toolchain/VERSION_MANIFEST.md b/toolchain/VERSION_MANIFEST.md index db37086..9e7c211 100644 --- a/toolchain/VERSION_MANIFEST.md +++ b/toolchain/VERSION_MANIFEST.md @@ -1,13 +1,14 @@ # DarkForge Linux — Phase 0 Toolchain Version Manifest -# Generated: 2026-03-20 (updated to sync with build scripts) +# Generated: 2026-03-20 (synced with ftp.klid.dk mirror) # Rule: Always use latest stable release (CLAUDE.md §3) # Base reference: LFS 13.0 (r13.0-4, 2026-03-14) +# Mirror: http://ftp.klid.dk/ftp/gnu (Denmark) ## Cross-Toolchain (Chapter 5 equivalents) | Package | Version | Tarball | Note | |----------------|---------|---------------------------------------|--------------------------------| -| binutils | 2.46 | binutils-2.46.tar.xz | LFS 13.0 version | +| binutils | 2.46.0 | binutils-2.46.0.tar.xz | Mirror version | | gcc | 15.2.0 | gcc-15.2.0.tar.xz | Supports -march=znver5 | | glibc | 2.43 | glibc-2.43.tar.xz | LFS 13.0 version | | linux | 6.19.8 | linux-6.19.8.tar.xz | Headers only for Phase 0 | @@ -19,20 +20,20 @@ | Package | Version | Tarball | Note | |----------------|---------|---------------------------------------|--------------------------------| -| m4 | 1.4.21 | m4-1.4.21.tar.xz | Latest stable (Feb 2026) | -| ncurses | 6.5 | ncurses-6.5.tar.gz | | +| m4 | 1.4.21 | m4-1.4.21.tar.xz | Latest stable | +| ncurses | (auto) | ncurses.tar.gz | Unversioned; auto-detected | | bash | 5.3 | bash-5.3.tar.gz | | -| coreutils | 9.6 | coreutils-9.6.tar.xz | LFS 13.0 version | -| diffutils | 3.10 | diffutils-3.10.tar.xz | | -| file | 5.47 | file-5.47.tar.gz | LFS 13.0 version | +| coreutils | 9.10 | coreutils-9.10.tar.xz | Mirror latest | +| diffutils | 3.12 | diffutils-3.12.tar.xz | Mirror latest | +| file | 5.47 | file-5.47.tar.gz | | | findutils | 4.10.0 | findutils-4.10.0.tar.xz | | | gawk | 5.4.0 | gawk-5.4.0.tar.xz | | -| grep | 3.14 | grep-3.14.tar.xz | | +| grep | 3.12 | grep-3.12.tar.xz | Mirror version | | gzip | 1.14 | gzip-1.14.tar.xz | | -| make | 4.4.1 | make-4.4.1.tar.gz | | +| make | 4.4 | make-4.4.tar.gz | Mirror version | | patch | 2.8 | patch-2.8.tar.xz | | -| sed | 4.9 | sed-4.9.tar.xz | LFS 13.0 version | -| tar | 1.35 | tar-1.35.tar.xz | | +| sed | 4.9 | sed-4.9.tar.xz | | +| tar | (auto) | tar-latest.tar.xz | Unversioned; auto-detected | | xz | 5.8.1 | xz-5.8.1.tar.gz | | | zstd | 1.5.7 | zstd-1.5.7.tar.gz | Not in LFS; needed for kernel | @@ -40,13 +41,13 @@ | Package | Version | Tarball | Note | |----------------|---------|---------------------------------------|--------------------------------| -| gettext | 0.23.1 | gettext-0.23.1.tar.xz | | +| gettext | 1.0 | gettext-1.0.tar.xz | Major release (Jan 2026) | | bison | 3.8.2 | bison-3.8.2.tar.xz | | -| perl | 5.40.2 | perl-5.40.2.tar.xz | Latest stable 5.40.x | +| perl | 5.40.2 | perl-5.40.2.tar.xz | | | python | 3.13.3 | Python-3.13.3.tar.xz | | | texinfo | 7.3 | texinfo-7.3.tar.xz | | -| zlib | 1.3.1 | zlib-1.3.1.tar.xz | | -| util-linux | 2.40.4 | util-linux-2.40.4.tar.xz | LFS 13.0 version | +| zlib | 1.3.2 | zlib-1.3.2.tar.xz | Mirror latest | +| util-linux | 2.40.4 | util-linux-2.40.4.tar.xz | | ## Compiler Flags (Global Defaults) @@ -63,6 +64,6 @@ only take effect once we have a native compiler targeting our hardware. ## Patches Required -| Patch | Source | Used For | -|---------------------------|-------------------------------------------------------------------|-----------------| -| glibc-2.43-fhs-1.patch | https://www.linuxfromscratch.org/patches/lfs/13.0/ | Glibc FHS dirs | +| Patch | Source | Used For | +|----------------------|-------------------------------------------------------------------|-----------------| +| glibc-fhs-1.patch | https://www.linuxfromscratch.org/patches/lfs/13.0/ | Glibc FHS dirs | diff --git a/toolchain/scripts/001-binutils-pass1.sh b/toolchain/scripts/001-binutils-pass1.sh index 83f9353..0398eb0 100755 --- a/toolchain/scripts/001-binutils-pass1.sh +++ b/toolchain/scripts/001-binutils-pass1.sh @@ -5,7 +5,7 @@ # Purpose: Build the cross-assembler and cross-linker (binutils) as the # first component of the cross-toolchain. This must be built first # because both GCC and Glibc configure tests depend on it. -# Inputs: ${LFS}/sources/binutils-2.46.tar.xz +# Inputs: ${LFS}/sources/binutils-2.46.0.tar.xz # Outputs: Cross-binutils installed to ${LFS}/tools/ # Assumes: Running as 'lfs' user, environment sourced from 000-env-setup.sh # Ref: LFS 13.0 §5.2 @@ -15,7 +15,7 @@ set -euo pipefail source "${LFS}/sources/darkforge-env.sh" PACKAGE="binutils" -VERSION="2.46" +VERSION="2.46.0" SRCDIR="${LFS}/sources" echo "=== Building ${PACKAGE}-${VERSION} (Cross-Toolchain Pass 1) ===" diff --git a/toolchain/scripts/004-glibc.sh b/toolchain/scripts/004-glibc.sh index 874bfad..9de9d16 100755 --- a/toolchain/scripts/004-glibc.sh +++ b/toolchain/scripts/004-glibc.sh @@ -6,7 +6,7 @@ # This is the core C library that every program on the final system # will link against. After this step, we can compile programs that # actually run on the target. -# Inputs: ${LFS}/sources/glibc-2.43.tar.xz, glibc-2.43-fhs-1.patch +# Inputs: ${LFS}/sources/glibc-2.43.tar.xz, glibc-fhs-1.patch # Outputs: Glibc installed to ${LFS}/usr/lib/, ${LFS}/usr/include/ # Assumes: Binutils Pass 1 + GCC Pass 1 + Linux Headers complete # Ref: LFS 13.0 §5.5 @@ -39,7 +39,7 @@ esac # Apply the FHS (Filesystem Hierarchy Standard) patch # This makes glibc install some programs in /usr/sbin instead of /sbin -patch -Np1 -i ../glibc-2.43-fhs-1.patch +patch -Np1 -i ../glibc-fhs-1.patch mkdir -v build cd build diff --git a/toolchain/scripts/007-ncurses.sh b/toolchain/scripts/007-ncurses.sh index efe231c..ab00cca 100755 --- a/toolchain/scripts/007-ncurses.sh +++ b/toolchain/scripts/007-ncurses.sh @@ -4,7 +4,7 @@ # ============================================================================ # Purpose: Cross-compile the ncurses library (terminal handling). Required # by bash, many TUI programs, and the installer. -# Inputs: ${LFS}/sources/ncurses-6.5.tar.gz +# Inputs: ${LFS}/sources/ncurses.tar.gz (unversioned tarball from mirror) # Outputs: ncurses libraries and tic utility in ${LFS}/usr/ # Assumes: Cross-toolchain (Ch.5) complete # Ref: LFS 13.0 §6.3 @@ -14,14 +14,23 @@ set -euo pipefail source "${LFS}/sources/darkforge-env.sh" PACKAGE="ncurses" -VERSION="6.5" SRCDIR="${LFS}/sources" -echo "=== Building ${PACKAGE}-${VERSION} (Temporary Tool) ===" +echo "=== Building ${PACKAGE} (Temporary Tool) ===" cd "${SRCDIR}" -tar -xf "${PACKAGE}-${VERSION}.tar.gz" -cd "${PACKAGE}-${VERSION}" + +# The mirror provides ncurses.tar.gz (unversioned). Auto-detect the +# directory name inside the tarball. +tar -xf ncurses.tar.gz +NCDIR=$(find . -maxdepth 1 -type d -name 'ncurses-*' | head -1) +if [ -z "${NCDIR}" ]; then + echo "ERROR: Could not find ncurses-* directory after extraction" + exit 1 +fi +VERSION="${NCDIR#./ncurses-}" +echo " Detected version: ${VERSION}" +cd "${NCDIR}" # First, build the tic program that runs on the host # This is needed to create the terminal database during install @@ -57,5 +66,5 @@ ln -sv libncursesw.so "${LFS}/usr/lib/libncurses.so" sed -e 's/^#if.*XOPEN.*$/#if 1/' -i "${LFS}/usr/include/curses.h" cd "${SRCDIR}" -rm -rf "${PACKAGE}-${VERSION}" +rm -rf "${NCDIR}" echo "=== ${PACKAGE}-${VERSION} complete ===" diff --git a/toolchain/scripts/009-coreutils.sh b/toolchain/scripts/009-coreutils.sh index 68440d2..5cd2434 100755 --- a/toolchain/scripts/009-coreutils.sh +++ b/toolchain/scripts/009-coreutils.sh @@ -4,7 +4,7 @@ # ============================================================================ # Purpose: Cross-compile GNU coreutils (ls, cp, mv, cat, chmod, etc.) # for the temporary tools environment. -# Inputs: ${LFS}/sources/coreutils-9.6.tar.xz +# Inputs: ${LFS}/sources/coreutils-9.10.tar.xz # Outputs: Core utilities in ${LFS}/usr/bin/ # Assumes: Cross-toolchain complete # Ref: LFS 13.0 §6.5 @@ -14,7 +14,7 @@ set -euo pipefail source "${LFS}/sources/darkforge-env.sh" PACKAGE="coreutils" -VERSION="9.6" +VERSION="9.10" SRCDIR="${LFS}/sources" echo "=== Building ${PACKAGE}-${VERSION} (Temporary Tool) ===" diff --git a/toolchain/scripts/010-diffutils.sh b/toolchain/scripts/010-diffutils.sh index 377075d..fbaf958 100755 --- a/toolchain/scripts/010-diffutils.sh +++ b/toolchain/scripts/010-diffutils.sh @@ -3,7 +3,7 @@ # DarkForge Linux — Phase 0, Chapter 6: Diffutils # ============================================================================ # Purpose: Cross-compile GNU diffutils (diff, cmp, sdiff, diff3). -# Inputs: ${LFS}/sources/diffutils-3.10.tar.xz +# Inputs: ${LFS}/sources/diffutils-3.12.tar.xz # Outputs: diff utilities in ${LFS}/usr/bin/ # Ref: LFS 13.0 §6.6 # ============================================================================ @@ -12,7 +12,7 @@ set -euo pipefail source "${LFS}/sources/darkforge-env.sh" PACKAGE="diffutils" -VERSION="3.10" +VERSION="3.12" SRCDIR="${LFS}/sources" echo "=== Building ${PACKAGE}-${VERSION} (Temporary Tool) ===" diff --git a/toolchain/scripts/014-grep.sh b/toolchain/scripts/014-grep.sh index cbe5778..6361433 100755 --- a/toolchain/scripts/014-grep.sh +++ b/toolchain/scripts/014-grep.sh @@ -3,7 +3,7 @@ # DarkForge Linux — Phase 0, Chapter 6: Grep # ============================================================================ # Purpose: Cross-compile GNU grep (pattern matching). -# Inputs: ${LFS}/sources/grep-3.14.tar.xz +# Inputs: ${LFS}/sources/grep-3.12.tar.xz # Outputs: grep in ${LFS}/usr/bin/ # Ref: LFS 13.0 §6.10 # ============================================================================ @@ -12,7 +12,7 @@ set -euo pipefail source "${LFS}/sources/darkforge-env.sh" PACKAGE="grep" -VERSION="3.14" +VERSION="3.12" SRCDIR="${LFS}/sources" echo "=== Building ${PACKAGE}-${VERSION} (Temporary Tool) ===" diff --git a/toolchain/scripts/016-make.sh b/toolchain/scripts/016-make.sh index 8009400..ed6334c 100755 --- a/toolchain/scripts/016-make.sh +++ b/toolchain/scripts/016-make.sh @@ -3,7 +3,7 @@ # DarkForge Linux — Phase 0, Chapter 6: Make # ============================================================================ # Purpose: Cross-compile GNU make (build automation). -# Inputs: ${LFS}/sources/make-4.4.1.tar.gz +# Inputs: ${LFS}/sources/make-4.4.tar.gz # Outputs: make in ${LFS}/usr/bin/ # Ref: LFS 13.0 §6.12 # ============================================================================ @@ -12,7 +12,7 @@ set -euo pipefail source "${LFS}/sources/darkforge-env.sh" PACKAGE="make" -VERSION="4.4.1" +VERSION="4.4" SRCDIR="${LFS}/sources" echo "=== Building ${PACKAGE}-${VERSION} (Temporary Tool) ===" diff --git a/toolchain/scripts/019-tar.sh b/toolchain/scripts/019-tar.sh index a166318..d92807f 100755 --- a/toolchain/scripts/019-tar.sh +++ b/toolchain/scripts/019-tar.sh @@ -3,7 +3,7 @@ # DarkForge Linux — Phase 0, Chapter 6: Tar # ============================================================================ # Purpose: Cross-compile GNU tar (archive utility). -# Inputs: ${LFS}/sources/tar-1.35.tar.xz +# Inputs: ${LFS}/sources/tar-latest.tar.xz (unversioned tarball from mirror) # Outputs: tar in ${LFS}/usr/bin/ # Ref: LFS 13.0 §6.15 # ============================================================================ @@ -12,14 +12,23 @@ set -euo pipefail source "${LFS}/sources/darkforge-env.sh" PACKAGE="tar" -VERSION="1.35" SRCDIR="${LFS}/sources" -echo "=== Building ${PACKAGE}-${VERSION} (Temporary Tool) ===" +echo "=== Building ${PACKAGE} (Temporary Tool) ===" cd "${SRCDIR}" -tar -xf "${PACKAGE}-${VERSION}.tar.xz" -cd "${PACKAGE}-${VERSION}" + +# The mirror provides tar-latest.tar.xz (unversioned). Auto-detect the +# directory name inside the tarball. +tar -xf tar-latest.tar.xz +TARDIR=$(find . -maxdepth 1 -type d -name 'tar-[0-9]*' | head -1) +if [ -z "${TARDIR}" ]; then + echo "ERROR: Could not find tar-* directory after extraction" + exit 1 +fi +VERSION="${TARDIR#./tar-}" +echo " Detected version: ${VERSION}" +cd "${TARDIR}" ./configure \ --prefix=/usr \ @@ -30,5 +39,5 @@ make make DESTDIR="${LFS}" install cd "${SRCDIR}" -rm -rf "${PACKAGE}-${VERSION}" +rm -rf "${TARDIR}" echo "=== ${PACKAGE}-${VERSION} complete ===" diff --git a/toolchain/scripts/021-binutils-pass2.sh b/toolchain/scripts/021-binutils-pass2.sh index 27df6e3..a2a5679 100755 --- a/toolchain/scripts/021-binutils-pass2.sh +++ b/toolchain/scripts/021-binutils-pass2.sh @@ -5,7 +5,7 @@ # Purpose: Rebuild binutils with the temporary toolchain. This produces # binutils that runs on the target and generates code for the target. # Pass 1 ran on the host; Pass 2 runs on the target (via cross-compiler). -# Inputs: ${LFS}/sources/binutils-2.46.tar.xz +# Inputs: ${LFS}/sources/binutils-2.46.0.tar.xz # Outputs: Updated binutils in ${LFS}/usr/ # Assumes: All Chapter 5 + Chapter 6 temp tools (006-020) complete # Ref: LFS 13.0 §6.17 @@ -15,7 +15,7 @@ set -euo pipefail source "${LFS}/sources/darkforge-env.sh" PACKAGE="binutils" -VERSION="2.46" +VERSION="2.46.0" SRCDIR="${LFS}/sources" echo "=== Building ${PACKAGE}-${VERSION} (Pass 2) ===" diff --git a/toolchain/scripts/025-gettext.sh b/toolchain/scripts/025-gettext.sh index 0914cfd..ca46caa 100755 --- a/toolchain/scripts/025-gettext.sh +++ b/toolchain/scripts/025-gettext.sh @@ -5,7 +5,7 @@ # Purpose: Build gettext (internationalization framework). Many packages # require gettext's autopoint, msgfmt, etc. during their build. # Only the minimum needed tools are installed at this stage. -# Inputs: /sources/gettext-0.23.1.tar.xz +# Inputs: /sources/gettext-1.0.tar.xz # Outputs: gettext utilities in /usr/ # Assumes: Running inside chroot # Ref: LFS 13.0 §7.7 @@ -14,7 +14,7 @@ set -euo pipefail PACKAGE="gettext" -VERSION="0.23.1" +VERSION="1.0" echo "=== Building ${PACKAGE}-${VERSION} (Chroot) ==="