This commit is contained in:
2026-03-20 14:33:48 +01:00
parent bb5f9d05b3
commit 784d11d4f5
2 changed files with 45 additions and 0 deletions

View File

@@ -2,6 +2,27 @@
---
## V44 2026-03-21 01:30:00
**Fix zlib chicken-and-egg: bootstrap host libz.so.1 into chroot before building**
### Changes:
- Updated `023a-chroot-build-all.sh`: Before entering the chroot, copies the host
system's `libz.so.1` into `$LFS/usr/lib/`. This breaks the circular dependency:
ld needs libz.so.1 → can't link without it → can't build zlib without linking.
The temporary copy lets ld work, so zlib's configure tests pass, and the real
zlib build (024a-zlib.sh) replaces the temporary copy with a proper one.
### Plan deviation/changes:
- None
### What is missing/needs polish:
- The host-copied libz.so.1 is a temporary hack. It gets replaced by the real
zlib build immediately. If the host doesn't have zlib, the user needs to
install it first (pacman -S zlib on Arch).
---
## V43 2026-03-21 01:15:00
**Add zlib build to chroot phase — ld needs libz.so.1 at runtime**

View File

@@ -38,6 +38,30 @@ echo " DarkForge Linux — Chroot Build Phase (Chapter 7)"
echo "============================================================"
echo ""
# --- Bootstrap libz.so.1 from host -------------------------------------------
# Chicken-and-egg problem: the linker (ld) from binutils pass 2 was built with
# zlib support and dynamically links against libz.so.1. But zlib isn't installed
# in the chroot yet. Without libz.so.1, ld can't run, so nothing can link, so
# we can't even build zlib properly. Fix: copy the host's libz into the chroot
# temporarily. The real zlib build (024a-zlib.sh) will replace it.
warn "Bootstrapping libz.so.1 from host into chroot..."
HOST_LIBZ=$(find /usr/lib /usr/lib64 /lib /lib64 -name 'libz.so.1*' -type f 2>/dev/null | head -1)
if [ -z "${HOST_LIBZ}" ]; then
# Try ldconfig cache
HOST_LIBZ=$(ldconfig -p 2>/dev/null | grep 'libz.so.1 ' | awk '{print $NF}' | head -1)
fi
if [ -n "${HOST_LIBZ}" ]; then
cp -Lv "${HOST_LIBZ}" "${LFS}/usr/lib/libz.so.1"
# Also create the .so symlink for the linker
ln -sfv libz.so.1 "${LFS}/usr/lib/libz.so"
ok "Copied host libz.so.1 → ${LFS}/usr/lib/libz.so.1"
ok "ld should now be able to link inside the chroot"
else
warn "Could not find host libz.so.1 — zlib build in chroot may fail"
warn "Install zlib on the host: sudo pacman -S zlib"
fi
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'