# glibc.recipe.py pkgname = "glibc" pkgver = "2.42" atomic = True source = f"https://ftpmirror.gnu.org/gnu/glibc/glibc-{pkgver}.tar.xz" builddir = f"/tmp/fempkg/build/{pkgname}/{pkgname}-{pkgver}" fembuilddir = f"/tmp/fempkg/build/{pkgname}" outputdir = "/home/gabry/lfs-repo/binpkg" manifestdir = "/home/gabry/lfs-repo/manifests" destdir = f"{fembuilddir}/DESTDIR" deps = [] build = [ # Extract tarball f"mkdir -p {fembuilddir} && cd {fembuilddir} && tar -xvf /var/lib/fempkg/pkgs/{pkgname}-{pkgver}.tar.xz && wget " f"https://www.linuxfromscratch.org/patches/lfs/development/glibc-{pkgver}-fhs-1.patch " f"https://www.iana.org/time-zones/repository/releases/tzdata2025b.tar.gz https://www.linuxfromscratch.org/patches/lfs/development/glibc-" f"{pkgver}-upstream_fixes-1.patch", # Apply patches f"cd {builddir} && patch -Np1 -i ../glibc-{pkgver}-upstream_fixes-1.patch", f"cd {builddir} && patch -Np1 -i ../glibc-{pkgver}-fhs-1.patch", # sed fix (operate inside source tree) f"cd {builddir} && " # DONT REMOVE THE ADDITIONAL SPACES (idk if important but it works so KEEP IT AAAAA) f"sed -i -e '/unistd.h/i #include ' -e '/libc_rwlock_init/c\\ __libc_rwlock_define_initialized (, reset_lock);\\ " f"memcpy (&lock, &reset_lock, sizeof (lock));' stdlib/abort.c", # Create 64-bit build dir & configure f"cd {builddir} && mkdir -v build", f"cd {builddir}/build && echo 'rootsbindir=/usr/sbin' > configparms", ( f"cd {builddir}/build && ../configure --prefix=/usr " "--disable-werror --disable-nscd libc_cv_slibdir=/usr/lib " "--enable-stack-protector=strong --enable-kernel=5.4" ), # Build 64-bit f"cd {builddir}/build && make -j$(nproc)", # Prevent the installation test script from aborting install (adjust Makefile) # edit the top-level Makefile (one dir up from build) f"cd {builddir}/build && sed '/test-installation/s@\\$(PERL)@echo not running@' -i ../Makefile", # Install 64-bit f"cd {builddir}/build && make DESTDIR={destdir} install", # fix ldd RTLDLIST edit (as in LFS instructions) f"sed '/RTLDLIST=/s@/usr@@g' -i {destdir}/usr/bin/ldd", # Install locales from the build dir (objdir must be set) f"cd {builddir}/build && make DESTDIR={destdir} localedata/install-locales ", f"mkdir -pv {destdir}/etc", # Create nsswitch.conf (heredoc) f"""cat > {destdir}/etc/nsswitch.conf << "EOF" passwd: files group: files shadow: files hosts: files dns networks: files protocols: files services: files ethers: files rpc: files EOF""", # Timezone setup: ensure ZONEINFO is exported for the whole block and run in /sourc # Timezone setup: ensure we stay in /sources ( f"mkdir -pv {builddir}/localodoto && cd {builddir}/localodoto && tar -xf ../../tzdata2025b.tar.gz && mkdir -pv {destdir}/usr/share/licenses/tzdata/ && cp -pv LICENSE {destdir}/usr/share/licenses/tzdata/ && " f"ZONEINFO={destdir}/usr/share/zoneinfo && " "mkdir -pv $ZONEINFO/{posix,right} && " # Compile all timezones into DESTDIR "for tz in etcetera southamerica northamerica europe africa antarctica asia australasia backward; do " " zic -L /dev/null -d $ZONEINFO ${tz}; " " zic -L /dev/null -d $ZONEINFO/posix ${tz}; " " zic -L leapseconds -d $ZONEINFO/right ${tz}; " "done && " # Copy metadata files (zone.tab etc.) to DESTDIR f"cp -v zone.tab zone1970.tab iso3166.tab {destdir}/usr/share/zoneinfo && " # Set default timezone inside DESTDIR (not host system!) f"zic -d {destdir}/usr/share/zoneinfo -p America/New_York && " # Install the default /etc/localtime into DESTDIR f"mkdir -p {destdir}/etc && " f"ln -sfv ../usr/share/zoneinfo/Europe/Rome {destdir}/etc/localtime" ), f"mkdir -pv {destdir}/etc/ld.so.conf.d", # --- 32-bit Glibc build (do this inside the same build dir) --- # clean objdir but keep source tree f"cd {builddir}/build && rm -rf ./*", f"cd {builddir}/build && find .. -name '*.a' -delete", # configure 32-bit build from build dir (use CC/CXX -m32) ( f"cd {builddir}/build && " "CC=\"gcc -m32\" CXX=\"g++ -m32\" ../configure " "--prefix=/usr " "--host=i686-pc-linux-gnu " "--build=$(../scripts/config.guess) " "--libdir=/usr/lib32 " "--libexecdir=/usr/lib32 " "--disable-werror " "--disable-nscd " "libc_cv_slibdir=/usr/lib32 " "--enable-stack-protector=strong " "--enable-kernel=5.4" ), # build & install 32-bit into DESTDIR then copy files to root locations f"cd {builddir}/build && make -j$(nproc)", f"cd {builddir}/build && make DESTDIR={destdir} install", f"install -v -d -m755 {destdir}/usr/share/licenses/{pkgname}/", f"install -v -m644 {builddir}/COPYING.LIB {destdir}/usr/share/licenses/{pkgname}/COPYING.LIB", f"install -v -m644 {builddir}/COPYING {destdir}/usr/share/licenses/{pkgname}/COPYING", # Make tarball + manifests f"mkdir -p {outputdir} && cd {destdir} && tar --transform 's|^\\.||' -I zstd -cf {outputdir}/{pkgname}-{pkgver}.tar.zst .", f"mkdir -p {manifestdir} && tar -tf {outputdir}/{pkgname}-{pkgver}.tar.zst | grep -v '/$' > {manifestdir}/{pkgname}.txt", ]