133 lines
5.2 KiB
Python
133 lines
5.2 KiB
Python
# 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 <string.h>' -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",
|
|
]
|