Big script

This commit is contained in:
2026-03-20 15:09:30 +01:00
parent dc2ac2f768
commit a2ca02a856
92 changed files with 5842 additions and 0 deletions

153
toolchain/scripts/103-glibc.sh Executable file
View File

@@ -0,0 +1,153 @@
#!/bin/bash
# ============================================================================
# DarkForge Linux — Phase 3, Chapter 8.5: Glibc (Final, Native)
# ============================================================================
# Purpose: Build and install the final glibc for the target system.
# This is the CRITICAL step that brings the system from cross-compiled
# to fully native. All subsequent packages will link against this glibc.
# Includes locale generation, timezone setup, and NSS configuration.
# Inputs: /sources/glibc-2.43.tar.xz, /sources/glibc-fhs-1.patch
# Outputs: /usr/lib/libc.so.6, /usr/include/c++/, locales, timezone data
# Ref: LFS 13.0 §8.5 — CRITICAL SECTION
# ============================================================================
set -euo pipefail
source /sources/toolchain-scripts/100-chroot-env.sh
PACKAGE="glibc"
VERSION="2.43"
echo "=== Building ${PACKAGE}-${VERSION} (Phase 3, CRITICAL) ==="
pkg_extract "${PACKAGE}-${VERSION}.tar.xz"
cd "${PACKAGE}-${VERSION}"
# Apply FHS (Filesystem Hierarchy Standard) patch
# This ensures certain programs install to /usr/sbin instead of /sbin
echo ">>> Applying glibc-fhs-1.patch..."
patch -Np1 -i ../glibc-fhs-1.patch
# Create the build directory
mkdir -v build
cd build
# Configure glibc for native compilation on the target system
# --enable-kernel=5.4: Require kernel 5.4+ (we're running 6.19.8)
# --disable-nscd: We don't need the Name Service Cache Daemon
# --disable-timezone-tools: We'll set timezone manually
# --with-headers: Point to the kernel headers we installed in Phase 0
echo ">>> Configuring glibc..."
../configure \
--prefix=/usr \
--disable-werror \
--enable-kernel=5.4 \
--enable-stack-protector=strong \
--with-headers=/usr/include \
--disable-nscd \
--disable-timezone-tools
# Build glibc
echo ">>> Building glibc (this takes a while)..."
make
# Install glibc
echo ">>> Installing glibc..."
make DESTDIR=/ install
# ============================================================================
# Locale Generation — CRITICAL for UTF-8 support
# ============================================================================
echo ""
echo ">>> Generating locale data..."
# Create the en_US.UTF-8 locale (essential for development and user systems)
# This step creates binary locale files that programs use for character handling
localedef -i en_US -f UTF-8 en_US.UTF-8
# Verify locale was created
if locale -a | grep -q en_US.UTF-8; then
echo "PASS: en_US.UTF-8 locale created"
else
echo "FAIL: Could not create en_US.UTF-8 locale"
exit 1
fi
# ============================================================================
# Timezone Setup
# ============================================================================
echo ""
echo ">>> Setting up timezone data..."
# The timezone database is kept in /usr/share/zoneinfo
# Default to UTC (can be overridden during system installation)
# Copy the timezone file and create the symlink
if [ -f /usr/share/zoneinfo/UTC ]; then
ln -sfv ../usr/share/zoneinfo/UTC /etc/localtime
echo "PASS: Timezone symlink created (UTC)"
else
echo "FAIL: /usr/share/zoneinfo/UTC not found"
exit 1
fi
# ============================================================================
# Create /etc/nsswitch.conf — Critical for name service resolution
# ============================================================================
echo ""
echo ">>> Creating /etc/nsswitch.conf..."
cat > /etc/nsswitch.conf << 'NSS_EOF'
# Begin /etc/nsswitch.conf
# This file is used by the name service switch functionality in glibc
# It controls how hostname lookups, user/group lookups, etc. are resolved
passwd: files
group: files
shadow: files
hosts: files dns
networks: files
protocols: files
services: files
ethers: files
rpc: files
# End /etc/nsswitch.conf
NSS_EOF
echo "PASS: /etc/nsswitch.conf created"
# ============================================================================
# Verify glibc installation
# ============================================================================
echo ""
echo ">>> Running glibc sanity checks..."
# Test 1: Verify libc.so.6 is present
if [ -f /usr/lib/libc.so.6 ]; then
echo "PASS: /usr/lib/libc.so.6 exists"
else
echo "FAIL: /usr/lib/libc.so.6 NOT FOUND"
exit 1
fi
# Test 2: Verify we can call ldd
if ldd --version &>/dev/null; then
echo "PASS: ldd works"
else
echo "FAIL: ldd is broken"
exit 1
fi
# Test 3: Run a simple C program to test libc
echo "int main() { return 0; }" > /tmp/test.c
gcc /tmp/test.c -o /tmp/test
/tmp/test
echo "PASS: Basic C program execution works"
rm -f /tmp/test /tmp/test.c
cd ..
pkg_cleanup "${PACKAGE}-${VERSION}"
echo ""
echo "=== ${PACKAGE}-${VERSION} complete ==="
echo "=== CRITICAL: glibc is now native on the target system ==="