commit 297a61b9435ce80c9472aeea49a7930c8154f832 Author: L0m1g Date: Wed Mar 5 08:11:12 2025 +0100 Premier battement d’Orin. La forge est allumée, la roche est chauffée, les outils sont prêts. Sous l’œil du goéland et le souffle de l’hermine, la première pierre d’Erminig est posée. Ce n’est qu’un début. Le vent tourne, la mer se lève. diff --git a/Dockerfile b/Dockerfile new file mode 100755 index 0000000..b38c4f9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM ubuntu:24.04 + +RUN apt -y update && apt -y upgrade && apt -y dist-upgrade +RUN apt -y install binutils bison gawk g++ m4 make patch python3 texinfo pigz pixz zstd wget sudo xz-utils + +RUN apt -y clean +RUN rm /bin/sh && ln -s bash /bin/sh +COPY lfs-12.2.sh / + diff --git a/DockerfileErminig b/DockerfileErminig new file mode 100755 index 0000000..89973c9 --- /dev/null +++ b/DockerfileErminig @@ -0,0 +1,3 @@ +FROM scratch +ADD orin-rootfs.tar / +CMD ["/bin/bash"] diff --git a/INSTRUCTIONS.md b/INSTRUCTIONS.md new file mode 100644 index 0000000..55d3cc4 --- /dev/null +++ b/INSTRUCTIONS.md @@ -0,0 +1,33 @@ +# Contruction de l'image +``` +docker build -t build-lfs:0.1 . +``` + +# Creation d'un système temporaire +``` +docker run -it --rm --privileged -v ./build:/mnt/lfs build-lfs:0.1 /bin/bash /lfs-12.2.sh` +``` + + +# Compilation de Orin +``` +docker run -it --rm --privileged -v ./build:/mnt/lfs build-lfs:0.1 /bin/bash +mkdir /mnt/lfs/dev/pts +mount -t devpts none /mnt/lfs/dev/pts +mknod -m 666 /mnt/lfs/dev/ptmx +chroot /mnt/lfs +cd /root +bash post-chroot +``` + +# On prépare l'archive +# Commencer par sortir du chroot +``` +tar --xattrs -cpf /tmp/erminig-rootfs.tar -C /mnt/lfs . +``` + +# Hors du conteneur +``` +sudo docker build -t orin:0.1 -f ./DockerfileErminig . +``` + diff --git a/README.md b/README.md new file mode 100644 index 0000000..ba67013 --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +Erminig-Orin + +La forge d’Erminig + +Ici, c’est pas une distro, c’est une toolchain. +La première pierre d’Erminig, celle qui a coûté du café, des insultes et quelques années de santé mentale. + +Si t’es là par accident, fuis. +Si t’es là par curiosité, tu peux regarder. +Si t’es là pour comprendre, t’es probablement déjà trop loin. + +Orin, c’est la base minimale, posée à la main, destinée à engendrer le système complet. +Sans Orin, pas d’Erminig. + +Philosophie + • Minimal à l’extrême – juste de quoi compiler, tester, et redémarrer. + • Zéro concession – chaque paquet, chaque binaire est là pour une raison. + • Pas pour toi – Si t’as besoin d’un guide, regarde ailleurs. + • Pas une distro, une base – Les paquets, c’est Govel et Pak qui les gèrent. Ici, c’est juste le socle. + +Licence + +Sous licence DOUARN – Défi Ouvert Utilisable Avec Risques Notables. +En gros : si ça casse, c’est ta faute. Et ça cassera. + +![Licence DOUARN](assets/licence-douarn.png) + +Histoire + +Erminig-Orin est née d’une obsession vieille de plusieurs années. +Compiler sa propre base, poser chaque brique, comprendre chaque putain de fichier. +C’est pas une distro clé en main. C’est une déclaration d’indépendance numérique. diff --git a/assets/licence-douarn.png b/assets/licence-douarn.png new file mode 100644 index 0000000..e5b085c Binary files /dev/null and b/assets/licence-douarn.png differ diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..e3d2f2b --- /dev/null +++ b/install.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +LFS=/home/lomig/dev/lfs +sudo umount -Rl $LFS/* +sudo rm -rf $LFS/* +mkdir -pv $LFS/{dev/{pts,shm},proc,sys,run} + +podman build -t build-lfs:0.1 . + +sudo mount -v --bind /dev $LFS/dev +sudo mount -vt devpts devpts -o gid=5,mode=0620 $LFS/dev/pts +sudo mount -vt proc proc $LFS/proc +sudo mount -vt sysfs sysfs $LFS/sys +sudo mount -vt tmpfs tmpfs $LFS/run +if [ -h $LFS/dev/shm ]; then + install -v -d -m 1777 $LFS$(realpath /dev/shm) +else + sudo mount -vt tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm +fi +podman run --rm -it --privileged -v /home/lomig/dev/lfs:/mnt/lfs build-lfs:0.1 /bin/bash /lfs-12.2.sh + +sudo cp /etc/resolv.conf $LFS/etc/resolv.conf +sudo mkdir -p $LFS/etc/ssl/certs +sudo wget https://curl.se/ca/cacert.pem -O $LFS/etc/ssl/certs/ca-certificates.crt +sudo cp ../Govel/govel $LFS/usr/bin/govel +sudo chroot "$LFS" /usr/bin/env -i \ + HOME=/root \ + TERM="$TERM" \ + PS1='(lfs chroot) \u:\w\$ ' \ + PATH=/usr/bin:/usr/sbin \ + MAKEFLAGS="-j$(nproc)" \ + TESTSUITEFLAGS="-j$(nproc)" \ + /bin/bash /root/post-chroot +umount -Rl $LFS/* >> /dev/null 2>&1 diff --git a/lfs-12.2.sh b/lfs-12.2.sh new file mode 100755 index 0000000..20f1857 --- /dev/null +++ b/lfs-12.2.sh @@ -0,0 +1,2684 @@ +#!/usr/bin/env bash +# + +#set -eux -o pipefail +export LFS=/mnt/lfs +export MAKEFLAGS=-j32 +set +h +umask 022 +LC_ALL=POSIX +LFS_TGT=$(uname -m)-lfs-linux-gnu +PATH=/usr/bin +if [ ! -L /bin ]; then PATH=/bin:$PATH; fi +PATH=$LFS/tools/bin:$PATH +CONFIG_SITE=$LFS/usr/share/config.site +export LFS LC_ALL LFS_TGT PATH CONFIG_SITE + +#sudo umount -R $LFS/{proc,sys,run,dev/{pts,shm,}} +#sudo rm -rf $LFS + + +function 3.1-get_sources(){ + mkdir -pv $LFS/sources + chmod -v a+wt $LFS/sources + wget https://lfs.maru-na.net/lfs/view/stable/wget-list-sysv + wget https://lfs.maru-na.net/lfs/view/stable/md5sums + wget --input-file=wget-list-sysv --continue --directory-prefix=$LFS/sources + wget https://sourceforge.net/projects/expat/files/expat/2.6.4/expat-2.6.4.tar.xz --directory-prefix=$LFS/sources +} + +function 4.2-folder_structure(){ + mkdir -pv $LFS/sources + chmod -v a+wt $LFS/sources + mkdir -pv $LFS/{root,etc,var} $LFS/usr/{bin,lib,sbin} + + for i in bin lib sbin; do + ln -svf usr/$i $LFS/$i + done + + case $(uname -m) in + x86_64) mkdir -pv $LFS/lib64 ;; + esac + + mkdir -pv $LFS/tools +} + +#function 4.4-configure_environment(){ +# source /home/lomig/dev/bash_profile +# source /home/lomig/dev/bashrc +#} + + +function 5.2-binutils(){ + echo "binutils" + cd $LFS/sources + tar -xf binutils-${1}.tar.xz + cd binutils-${1} + mkdir -v build + cd build + ../configure --prefix=$LFS/tools \ + --with-sysroot=$LFS \ + --target=$LFS_TGT \ + --disable-nls \ + --enable-gprofng=no \ + --disable-werror \ + --enable-new-dtags \ + --enable-default-hash-style=gnu + make + make install + + cd $LFS/sources + rm -rf binutils-${1} +} + +function 5.3-gcc(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf gcc-${1}.tar.xz + cd gcc-${1} + tar --use-compress-program=pixz -xf ../mpfr-4.2.1.tar.xz + mv -v mpfr-4.2.1 mpfr + tar --use-compress-program=pixz -xf ../gmp-6.3.0.tar.xz + mv -v gmp-6.3.0 gmp + tar --use-compress-program=pigz -xf ../mpc-1.3.1.tar.gz + mv -v mpc-1.3.1 mpc + + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + mkdir build + cd build + ../configure \ + --target=$LFS_TGT \ + --prefix=$LFS/tools \ + --with-glibc-version=2.40 \ + --with-sysroot=$LFS \ + --with-newlib \ + --without-headers \ + --enable-default-pie \ + --enable-default-ssp \ + --disable-nls \ + --disable-shared \ + --disable-multilib \ + --disable-threads \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --enable-languages=c,c++ + make + make install + cd .. + cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ + `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h + + cd $LFS/sources + rm -rf gcc-${1} +} + +function 5.4-linux_headers(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf linux-${1}.tar.xz + cd linux-${1} + make mrproper + make headers + find usr/include -type f ! -name '*.h' -delete + cp -rv usr/include $LFS/usr + + cd $LFS/sources + rm -rf linux-${1} +} + +function 5.5-glibc(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf glibc-${1}.tar.xz + cd glibc-${1} + ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 + ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3 + patch -Np1 -i ../glibc-2.40-fhs-1.patch + + mkdir build + cd build + echo "rootsbindir=/usr/sbin" > configparms + ../configure \ + --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(../scripts/config.guess) \ + --enable-kernel=4.19 \ + --with-headers=$LFS/usr/include \ + --disable-nscd \ + libc_cv_slibdir=/usr/lib + make + make DESTDIR=$LFS install + + sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd + echo 'int main(){}' | gcc -xc - + readelf -l a.out | grep ld-linux + rm -v a.out + + cd $LFS/sources + rm -rf glibc-${1} +} + +function 5.6-libstdcpp(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf gcc-${1}.tar.xz + cd gcc-${1} + mkdir build + cd build + ../libstdc++-v3/configure \ + --host=$LFS_TGT \ + --build=$(../config.guess) \ + --prefix=/usr \ + --disable-multilib \ + --disable-nls \ + --disable-libstdcxx-pch \ + --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/14.2.0 + make + make DESTDIR=$LFS install + rm -v $LFS/usr/lib/lib{stdc++{,exp,fs},supc++}.la + + cd $LFS/sources + rm -rf gcc-${1} +} + +function 6.2-m4(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf m4-${1}.tar.xz + cd m4-${1} + ./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) + make + make DESTDIR=$LFS install + + cd $LFS/sources + rm -rf m4-${1} +} + +function 6.3-ncurses(){ + cd $LFS/sources + tar --use-compress-program=pigz -xf ncurses-${1}.tar.gz + cd ncurses-${1} + sed -i s/mawk// configure + mkdir build + pushd build + ../configure + make -C include + make -C progs tic + popd + ./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(./config.guess) \ + --mandir=/usr/share/man \ + --with-manpage-format=normal \ + --with-shared \ + --without-normal \ + --with-cxx-shared \ + --without-debug \ + --without-ada \ + --disable-stripping + make + make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install + ln -sv libncursesw.so $LFS/usr/lib/libncurses.so + sed -e 's/^#if.*XOPEN.*$/#if 1/' \ + -i $LFS/usr/include/curses.h + + cd $LFS/sources + rm -rf ncurses-${1} +} + +function 6.4-bash(){ + cd $LFS/sources + tar --use-compress-program=pigz -xf bash-${1}.tar.gz + cd bash-${1} + ./configure --prefix=/usr \ + --build=$(sh support/config.guess) \ + --host=$LFS_TGT \ + --without-bash-malloc \ + bash_cv_strtold_broken=no + make + make DESTDIR=$LFS install + ln -sv bash $LFS/bin/sh + + cd $LFS/sources + rm -rf bash-${1} +} + +function 6.5-coreutils(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf coreutils-${1}.tar.xz + cd coreutils-${1} + ./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) \ + --enable-install-program=hostname \ + --enable-no-install-program=kill,uptime + make + make DESTDIR=$LFS install + mv -v $LFS/usr/bin/chroot $LFS/usr/sbin + mkdir -pv $LFS/usr/share/man/man8 + mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8 + sed -i 's/"1"/"8"/' $LFS/usr/share/man/man8/chroot.8 + + cd $LFS/sources + rm -rf coreutils-${1} +} + +function 6.6-diffutils(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf diffutils-${1}.tar.xz + cd diffutils-${1} + + ./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(./build-aux/config.guess) + make + make DESTDIR=$LFS install + + cd $LFS/sources + rm -rf diffutils-${1} +} + +function 6.7-file(){ + cd $LFS/sources + tar --use-compress-program=pigz -xf file-${1}.tar.gz + cd file-${1} + + mkdir build + pushd build + ../configure --disable-bzlib \ + --disable-libseccomp \ + --disable-xzlib \ + --disable-zlib + make + popd + ./configure --prefix=/usr --host=$LFS_TGT --build=$(./config.guess) + make FILE_COMPILE=$(pwd)/build/src/file + make DESTDIR=$LFS install + rm -v $LFS/usr/lib/libmagic.la + + cd $LFS/sources + rm -rf file-${1} +} + +function 6.8-findutils(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf findutils-${1}.tar.xz + cd findutils-${1} + ./configure --prefix=/usr \ + --localstatedir=/var/lib/locate \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) + make + make DESTDIR=$LFS install + + cd $LFS/sources + rm -rf findutils-${1} +} + +function 6.9-gawk(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf gawk-${1}.tar.xz + cd gawk-${1} + sed -i 's/extras//' Makefile.in + ./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) + make + make DESTDIR=$LFS install + + cd $LFS/sources + rm -rf gawk-${1} +} + +function 6.10-grep(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf grep-${1}.tar.xz + cd grep-${1} + ./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(./build-aux/config.guess) + make + make DESTDIR=$LFS install + + cd $LFS/sources + rm -rf grep-${1} +} + +function 6.11-gzip(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf gzip-${1}.tar.xz + cd gzip-${1} + ./configure --prefix=/usr --host=$LFS_TGT + make + make DESTDIR=$LFS install + + cd $LFS/sources + rm -rf gzip-${1} +} + +function 6.12-make(){ + cd $LFS/sources + tar --use-compress-program=pigz -xf make-${1}.tar.gz + cd make-${1} + ./configure --prefix=/usr \ + --without-guile \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) + make + make DESTDIR=$LFS install + + cd $LFS/sources + rm -rf make-${1} +} + +function 6.13-patch(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf patch-${1}.tar.xz + cd patch-${1} + ./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) + make + make DESTDIR=$LFS install + + cd $LFS/sources + rm -rf patch-${1} +} + +function 6.14-sed(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf sed-${1}.tar.xz + cd sed-${1} + ./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(./build-aux/config.guess) + make + make DESTDIR=$LFS install + + cd $LFS/sources + rm -rf sed-${1} +} + +function 6.15-tar(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf tar-${1}.tar.xz + cd tar-${1} + ./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) + make + make DESTDIR=$LFS install + + cd $LFS/sources + rm -rf tar-${1} +} + +function 6.16-xz(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf xz-${1}.tar.xz + cd xz-${1} + ./configure --prefix=/usr \ + --host=$LFS_TGT \ + --build=$(build-aux/config.guess) \ + --disable-static \ + --docdir=/usr/share/doc/xz-${1} + make + make DESTDIR=$LFS install + rm -v $LFS/usr/lib/liblzma.la + + cd $LFS/sources + rm -rf xz-${1} +} + +function 6.17-binutils(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf binutils-${1}.tar.xz + cd binutils-${1} + sed '6009s/$add_dir//' -i ltmain.sh + mkdir -v build + cd build + ../configure \ + --prefix=/usr \ + --build=$(../config.guess) \ + --host=$LFS_TGT \ + --disable-nls \ + --enable-shared \ + --enable-gprofng=no \ + --disable-werror \ + --enable-64-bit-bfd \ + --enable-new-dtags \ + --enable-default-hash-style=gnu + make + make DESTDIR=$LFS install + + rm -v $LFS/usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes,sframe}.{a,la} + + cd $LFS/sources + rm -rf binutils-${1} +} + +function 6.18-gcc(){ + cd $LFS/sources + tar --use-compress-program=pixz -xf gcc-${1}.tar.xz + cd gcc-${1} + tar --use-compress-program=pixz -xf ../mpfr-4.2.1.tar.xz + mv -v mpfr-4.2.1 mpfr + tar --use-compress-program=pixz -xf ../gmp-6.3.0.tar.xz + mv -v gmp-6.3.0 gmp + tar --use-compress-program=pigz -xf ../mpc-1.3.1.tar.gz + mv -v mpc-1.3.1 mpc + + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + sed '/thread_header =/s/@.*@/gthr-posix.h/' \ + -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in + mkdir build + cd build + ../configure \ + --build=$(../config.guess) \ + --host=$LFS_TGT \ + --target=$LFS_TGT \ + LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \ + --prefix=/usr \ + --with-build-sysroot=$LFS \ + --enable-default-pie \ + --enable-default-ssp \ + --disable-nls \ + --disable-multilib \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libsanitizer \ + --disable-libssp \ + --disable-libvtv \ + --enable-languages=c,c++ + make + make DESTDIR=$LFS install + ln -sv gcc $LFS/usr/bin/cc + + cd $LFS/sources + rm -rf gcc-${1} +} + + + +function 7.3-prepare-filesystem(){ + mkdir -pv $LFS/{dev,proc,sys,run} + mkdir /dev/pts + mount -t devpts devpts /dev/pts + /sbin/chroot /mnt/lfs /usr/bin/env -i HOME=/root TERM="$TERM" PATH=/usr/bin:/usr/sbin:/bin:/sbin /root/post-chroot +} + +function 7.5-create-folders(){ + cat << 'EOF' > $LFS/root/7.5-create-folders +#!/bin/bash +set -eux -o pipefail +rm -rf /dev/null +mknod -m 600 /dev/console c 5 1 +mknod -m 666 /dev/null c 1 3 +mkdir -pv /{boot,home,mnt,opt,srv} +mkdir -pv /etc/{opt,sysconfig} +mkdir -pv /lib/firmware +mkdir -pv /media/{floppy,cdrom} +mkdir -pv /usr/{,local/}{include,src} +mkdir -pv /usr/lib/locale +mkdir -pv /usr/local/{bin,lib,sbin} +mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man} +mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo} +mkdir -pv /usr/{,local/}share/man/man{1..8} +mkdir -pv /var/{cache,local,log,mail,opt,spool} +mkdir -pv /var/lib/{color,misc,locate} + +ln -sfv /run /var/run +ln -sfv /run/lock /var/lock + +install -dv -m 0750 /root +install -dv -m 1777 /tmp /var/tmp +EOF +} + +function 7.6-create-symbolic-links(){ + cat << 'EOF' > $LFS/root/7.6-create-symbolic-links +#!/bin/bash +set -eux -o pipefail +ln -sfv /proc/self/mounts /etc/mtab +cat > /etc/hosts << EOFa +127.0.0.1 localhost erminig +::1 localhost +EOFa +cat > /etc/passwd << EOFb +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/dev/null:/usr/bin/false +penn:x:3:3:penn:/var/lib/govel:/bin/bash +daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false +messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false +uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false +nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/false +EOFb + +cat > /etc/group << EOFc +root:x:0: +bin:x:1:daemon +sys:x:2: +penn:x:3: +tape:x:4: +tty:x:5: +daemon:x:6: +floppy:x:7: +disk:x:8: +lp:x:9: +dialout:x:10: +audio:x:11: +video:x:12: +utmp:x:13: +kmem:x:14: +cdrom:x:15: +adm:x:16: +messagebus:x:18: +input:x:24: +mail:x:34: +kvm:x:61: +uuidd:x:80: +wheel:x:97: +users:x:999: +nogroup:x:65534: +EOFc + +localedef -i C -f UTF-8 C.UTF-8 +echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd +echo "tester:x:101:" >> /etc/group +install -o tester -d /home/tester + +touch /var/log/{btmp,lastlog,faillog,wtmp} +chgrp -v utmp /var/log/lastlog +chmod -v 664 /var/log/lastlog +chmod -v 600 /var/log/btmp +EOF +} + +function 7.7-gettext(){ +cat << EOF > $LFS/root/7.7-gettext +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf gettext-0.22.5.tar.xz +cd gettext-0.22.5 +./configure --disable-shared +make +cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin +EOF +} + +function 7.8-bison(){ + cat << EOF > $LFS/root/7.8-bison +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf bison-3.8.2.tar.xz +cd bison-3.8.2 +./configure --prefix=/usr \ + --docdir=/usr/share/doc/bison-3.8.2 +make +make install +EOF +} + +function 7.9-perl(){ + cat << EOF > $LFS/root/7.9-perl +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf perl-5.40.0.tar.xz +cd perl-5.40.0 +sh Configure -des \ + -D prefix=/usr \ + -D vendorprefix=/usr \ + -D useshrplib \ + -D privlib=/usr/lib/perl5/5.40/core_perl \ + -D archlib=/usr/lib/perl5/5.40/core_perl \ + -D sitelib=/usr/lib/perl5/5.40/site_perl \ + -D sitearch=/usr/lib/perl5/5.40/site_perl \ + -D vendorlib=/usr/lib/perl5/5.40/vendor_perl \ + -D vendorarch=/usr/lib/perl5/5.40/vendor_perl +make +make install +EOF +} + +function 7.10-python(){ + cat << EOF > $LFS/root/7.10-python +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf Python-3.12.5.tar.xz +cd Python-3.12.5 +./configure --prefix=/usr \ + --enable-shared \ + --without-ensurepip +make +make install +EOF +} + +function 7.11-texinfo(){ + cat << EOF > $LFS/root/7.11-texinfo +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf texinfo-7.1.tar.xz +cd texinfo-7.1 +./configure --prefix=/usr +make +make install +EOF +} + +function 7.12-util-linux(){ + cat << EOF > $LFS/root/7.12-util-linux +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf util-linux-2.40.2.tar.xz +cd util-linux-2.40.2 +mkdir -pv /var/lib/hwclock +./configure --libdir=/usr/lib \ + --runstatedir=/run \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-static \ + --disable-liblastlog2 \ + --without-python \ + ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --docdir=/usr/share/doc/util-linux-2.40.2 +make +make install +EOF +} + +function 7.13-cleaning(){ + cat << 'EOF' > $LFS/root/7.13-cleaning +#!/bin/bash +set -eux -o pipefail +rm -rf /usr/share/{info,man,doc}/* +find /usr/{lib,libexec} -name \*.la -delete +rm -rf /tools +EOF +} + +function 8.3-man-pages(){ + cat << 'EOF' > $LFS/root/8.3-man-pages +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf man-pages-6.9.1.tar.xz +cd man-pages-6.9.1 +rm -v man3/crypt* +make prefix=/usr install +cd /sources +rm -rf man-pages-6.9.1 +EOF +} + +function 8.4-iana-etc(){ + cat << 'EOF' > $LFS/root/8.4-iana-etc +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf iana-etc-20240806.tar.gz +cd iana-etc-20240806 +cp services protocols /etc +cd /sources +rm -rf iana-etc-20240806 +EOF +} + +function 8.5-glibc(){ + cat << 'EOF' > $LFS/root/8.5-glibc +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf glibc-2.40.tar.xz +cd glibc-2.40 +patch -Np1 -i ../glibc-2.40-fhs-1.patch +mkdir build +cd build +echo "rootsbindir=/usr/sbin" > configparms +../configure --prefix=/usr \ + --disable-werror \ + --enable-kernel=4.19 \ + --enable-stack-protector=strong \ + --disable-nscd \ + libc_cv_slibdir=/usr/lib +make +touch /etc/ld.so.conf +sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile +make install +sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd +localedef -i C -f UTF-8 C.UTF-8 +localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8 +localedef -i de_DE -f ISO-8859-1 de_DE +localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro +localedef -i de_DE -f UTF-8 de_DE.UTF-8 +localedef -i el_GR -f ISO-8859-7 el_GR +localedef -i en_GB -f ISO-8859-1 en_GB +localedef -i en_GB -f UTF-8 en_GB.UTF-8 +localedef -i en_HK -f ISO-8859-1 en_HK +localedef -i en_PH -f ISO-8859-1 en_PH +localedef -i en_US -f ISO-8859-1 en_US +localedef -i en_US -f UTF-8 en_US.UTF-8 +localedef -i es_ES -f ISO-8859-15 es_ES@euro +localedef -i es_MX -f ISO-8859-1 es_MX +localedef -i fa_IR -f UTF-8 fa_IR +localedef -i fr_FR -f ISO-8859-1 fr_FR +localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro +localedef -i fr_FR -f UTF-8 fr_FR.UTF-8 +localedef -i is_IS -f ISO-8859-1 is_IS +localedef -i is_IS -f UTF-8 is_IS.UTF-8 +localedef -i it_IT -f ISO-8859-1 it_IT +localedef -i it_IT -f ISO-8859-15 it_IT@euro +localedef -i it_IT -f UTF-8 it_IT.UTF-8 +localedef -i ja_JP -f EUC-JP ja_JP +localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true +localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 +localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro +localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R +localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 +localedef -i se_NO -f UTF-8 se_NO.UTF-8 +localedef -i ta_IN -f UTF-8 ta_IN.UTF-8 +localedef -i tr_TR -f UTF-8 tr_TR.UTF-8 +localedef -i zh_CN -f GB18030 zh_CN.GB18030 +localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS +localedef -i zh_TW -f UTF-8 zh_TW.UTF-8 +make localedata/install-locales + +cd /sources +rm -rf glibc-2.40 +cat > /etc/nsswitch.conf << "EOFa" +# Begin /etc/nsswitch.conf + +passwd: files +group: files +shadow: files + +hosts: files dns +networks: files + +protocols: files +services: files +ethers: files +rpc: files + +# End /etc/nsswitch.conf +EOFa + +cat > /etc/ld.so.conf << "EOFb" +# Begin /etc/ld.so.conf +/usr/local/lib +/opt/lib + +EOFb + +cat >> /etc/ld.so.conf << "EOFc" +# Add an include directory +include /etc/ld.so.conf.d/*.conf + +EOFc +mkdir -pv /etc/ld.so.conf.d + +EOF +} + +function 8.6-zlib(){ + cat << 'EOF' > $LFS/root/8.6-zlib +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf zlib-1.3.1.tar.gz +cd zlib-1.3.1 +./configure --prefix=/usr +make +make install +rm -fv /usr/lib/libz.a +cd /sources +rm -rf zlib-1.3.1 +EOF +} + +function 8.7-bzip2(){ + cat << 'EOF' > $LFS/root/8.7-bzip2 +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf bzip2-1.0.8.tar.gz +cd bzip2-1.0.8 +patch -Np1 -i ../bzip2-1.0.8-install_docs-1.patch +sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile +sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile +make -f Makefile-libbz2_so +make clean +make +make PREFIX=/usr install +cp -av libbz2.so.* /usr/lib +ln -sfv libbz2.so.1.0.8 /usr/lib/libbz2.so +cp -v bzip2-shared /usr/bin/bzip2 +for i in /usr/bin/{bzcat,bunzip2}; do + ln -sfv bzip2 $i +done +rm -fv /usr/lib/libbz2.a +cd /sources +rm -rf bzip2-1.0.8 +EOF +} + +function 8.8-xz(){ + cat << 'EOF' > $LFS/root/8.8-xz +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf xz-5.6.2.tar.xz +cd xz-5.6.2 +./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/xz-5.6.2 +make +make install +cd /sources +rm -rf xz-5.6.2 +EOF +} + +function 8.9-lz4(){ + cat << 'EOF' > $LFS/root/8.9-lz4 +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf lz4-1.10.0.tar.gz +cd lz4-1.10.0 +make BUILD_STATIC=no PREFIX=/usr +make BUILD_STATIC=no PREFIX=/usr install +cd /sources +rm -rf lz4-1.10.0 +EOF +} + +function 8.10-zstd(){ + cat << 'EOF' > $LFS/root/8.10-zstd +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf zstd-1.5.6.tar.gz +cd zstd-1.5.6 +make prefix=/usr +make prefix=/usr install +rm -v /usr/lib/libzstd.a +cd /sources +rm -rf zstd-1.5.6 +EOF +} + +function 8.11-file(){ + cat << 'EOF' > $LFS/root/8.11-file +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf file-5.45.tar.gz +cd file-5.45 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf file-5.45 +EOF +} + +function 8.12-readline(){ + cat << 'EOF' > $LFS/root/8.12-readline +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf readline-8.2.13.tar.gz +cd readline-8.2.13 +sed -i '/MV.*old/d' Makefile.in +sed -i '/{OLDSUFF}/c:' support/shlib-install +sed -i 's/-Wl,-rpath,[^ ]*//' support/shobj-conf +./configure --prefix=/usr \ + --disable-static \ + --with-curses \ + --docdir=/usr/share/doc/readline-8.2.13 +make SHLIB_LIBS="-lncursesw" +make SHLIB_LIBS="-lncursesw" install +install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-8.2.13 +cd /sources +rm -rf readline-8.2.13 +EOF +} + +function 8.13-m4(){ + cat << 'EOF' > $LFS/root/8.13-m4 +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf m4-1.4.19.tar.xz +cd m4-1.4.19 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf m4-1.4.19 +EOF +} + +function 8.14-bc(){ + cat << 'EOF' > $LFS/root/8.14-bc +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf bc-6.7.6.tar.xz +cd bc-6.7.6 +CC=gcc ./configure --prefix=/usr -G -O3 -r +make +make install +cd /sources +rm -rf bc-6.7.6 +EOF +} + +function 8.15-flex(){ + cat << 'EOF' > $LFS/root/8.15-flex +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf flex-2.6.4.tar.gz +cd flex-2.6.4 +./configure --prefix=/usr \ + --docdir=/usr/share/doc/flex-2.6.4 \ + --disable-static +make +make install +ln -sv flex /usr/bin/lex +ln -sv flex.1 /usr/share/man/man1/lex.1 +cd /sources +rm -rf flex-2.6.4 +EOF +} + +function 8.16-tcl(){ + cat << 'EOF' > $LFS/root/8.16-tcl +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf tcl8.6.14-src.tar.gz +cd tcl8.6.14 +SRCDIR=$(pwd) +cd unix +./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --disable-rpath +make + +sed -e "s|$SRCDIR/unix|/usr/lib|" \ + -e "s|$SRCDIR|/usr/include|" \ + -i tclConfig.sh + +sed -e "s|$SRCDIR/unix/pkgs/tdbc1.1.7|/usr/lib/tdbc1.1.7|" \ + -e "s|$SRCDIR/pkgs/tdbc1.1.7/generic|/usr/include|" \ + -e "s|$SRCDIR/pkgs/tdbc1.1.7/library|/usr/lib/tcl8.6|" \ + -e "s|$SRCDIR/pkgs/tdbc1.1.7|/usr/include|" \ + -i pkgs/tdbc1.1.7/tdbcConfig.sh + +sed -e "s|$SRCDIR/unix/pkgs/itcl4.2.4|/usr/lib/itcl4.2.4|" \ + -e "s|$SRCDIR/pkgs/itcl4.2.4/generic|/usr/include|" \ + -e "s|$SRCDIR/pkgs/itcl4.2.4|/usr/include|" \ + -i pkgs/itcl4.2.4/itclConfig.sh + +unset SRCDIR +make install +chmod -v u+w /usr/lib/libtcl8.6.so +make install-private-headers +ln -sfv tclsh8.6 /usr/bin/tclsh +mv /usr/share/man/man3/{Thread,Tcl_Thread}.3 +cd /sources +rm -rf tcl8.6.14 +EOF +} + +function 8.17-expect(){ + cat << 'EOF' > $LFS/root/8.17-expect +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf expect5.45.4.tar.gz +cd expect5.45.4 +python3 -c 'from pty import spawn; spawn(["echo", "ok"])' +patch -Np1 -i ../expect-5.45.4-gcc14-1.patch +./configure --prefix=/usr \ + --with-tcl=/usr/lib \ + --enable-shared \ + --disable-rpath \ + --mandir=/usr/share/man \ + --with-tclinclude=/usr/include +make +make install +ln -svf expect5.45.4/libexpect5.45.4.so /usr/lib +cd /sources +rm -rf expect5.45.4 +EOF +} + +function 8.18-dejagnu(){ + cat << 'EOF' > $LFS/root/8.18-dejagnu +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf dejagnu-1.6.3.tar.gz +cd dejagnu-1.6.3 +mkdir -v build +cd build +../configure --prefix=/usr +makeinfo --html --no-split -o doc/dejagnu.html ../doc/dejagnu.texi +makeinfo --plaintext -o doc/dejagnu.txt ../doc/dejagnu.texi +make install +install -v -dm755 /usr/share/doc/dejagnu-1.6.3 +install -v -m644 doc/dejagnu.{html,txt} /usr/share/doc/dejagnu-1.6.3 +cd /sources +rm -rf dejagnu-1.6.3 +EOF +} + +function 8.19-pkgconf(){ + cat << 'EOF' > $LFS/root/8.19-pkgconf +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf pkgconf-2.3.0.tar.xz +cd pkgconf-2.3.0 +./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/pkgconf-2.3.0 +make +make install +ln -sv pkgconf /usr/bin/pkg-config +ln -sv pkgconf.1 /usr/share/man/man1/pkg-config.1 +cd /sources +rm -rf pkgconf-2.3.0 +EOF +} + +function 8.20-binutils(){ + cat << 'EOF' > $LFS/root/8.20-binutils +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf binutils-2.43.1.tar.xz +cd binutils-2.43.1 +mkdir -v build +cd build +../configure --prefix=/usr \ + --sysconfdir=/etc \ + --enable-gold \ + --enable-ld=default \ + --enable-plugins \ + --enable-shared \ + --disable-werror \ + --enable-64-bit-bfd \ + --enable-new-dtags \ + --with-system-zlib \ + --enable-default-hash-style=gnu +make tooldir=/usr +make tooldir=/usr install +rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,gprofng,opcodes,sframe}.a +cd /sources +rm -rf binutils-2.43.1 +EOF +} + +function 8.21-gmp(){ + cat << 'EOF' > $LFS/root/8.21-gmp +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf gmp-6.3.0.tar.xz +cd gmp-6.3.0 +./configure --prefix=/usr \ + --enable-cxx \ + --disable-static \ + --docdir=/usr/share/doc/gmp-6.3.0 +make +make install +cd /sources +rm -rf gmp-6.3.0 +EOF +} + +function 8.22-mpfr(){ + cat << 'EOF' > $LFS/root/8.22-mpfr +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf mpfr-4.2.1.tar.xz +cd mpfr-4.2.1 +./configure --prefix=/usr \ + --disable-static \ + --enable-thread-safe \ + --docdir=/usr/share/doc/mpfr-4.2.1 +make +make install +cd /sources +rm -rf mpfr-4.2.1 +EOF +} + +function 8.23-mpc(){ + cat << 'EOF' > $LFS/root/8.23-mpc +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf mpc-1.3.1.tar.gz +cd mpc-1.3.1 +./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/mpc-1.3.1 +make +make install +cd /sources +rm -rf mpc-1.3.1 +EOF +} + +function 8.24-attr(){ + cat << 'EOF' > $LFS/root/8.24-attr +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf attr-2.5.2.tar.gz +cd attr-2.5.2 +./configure --prefix=/usr \ + --disable-static \ + --sysconfdir=/etc \ + --docdir=/usr/share/doc/attr-2.5.2 +make +make install +cd /sources +rm -rf attr-2.5.2 +EOF +} + +function 8.25-acl(){ + cat << 'EOF' > $LFS/root/8.25-acl +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf acl-2.3.2.tar.xz +cd acl-2.3.2 +./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/acl-2.3.2 +make +make install +cd /sources +rm -rf acl-2.3.2 +EOF +} + +function 8.26-libcap(){ + cat << 'EOF' > $LFS/root/8.26-libcap +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf libcap-2.70.tar.xz +cd libcap-2.70 +sed -i '/install -m.*STA/d' libcap/Makefile +make prefix=/usr lib=lib +make prefix=/usr lib=lib install +cd /sources +rm -rf libcap-2.70 +EOF +} + +function 8.27-libxcrypt(){ + cat << 'EOF' > $LFS/root/8.27-libxcrypt +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf libxcrypt-4.4.36.tar.xz +cd libxcrypt-4.4.36 +./configure --prefix=/usr \ + --enable-hashes=strong,glibc \ + --enable-obsolete-api=no \ + --disable-static \ + --disable-failure-tokens +make +make install +cd /sources +rm -rf libxcrypt-4.4.36 +EOF +} + +function 8.28-shadow(){ + cat << 'EOF' > $LFS/root/8.28-shadow +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf shadow-4.16.0.tar.xz +cd shadow-4.16.0 +sed -i 's/groups$(EXEEXT) //' src/Makefile.in +find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \; +find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \; +find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \; +sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD YESCRYPT:' \ + -e 's:/var/spool/mail:/var/mail:' \ + -e '/PATH=/{s@/sbin:@@;s@/bin:@@}' \ + -i etc/login.defs +touch /usr/bin/passwd +./configure --sysconfdir=/etc \ + --disable-static \ + --with-{b,yes}crypt \ + --without-libbsd \ + --with-group-name-max-length=32 +make +make exec_prefix=/usr install +pwconv +grpconv +mkdir -p /etc/default +useradd -D --gid 999 +cd /sources +rm -rf shadow-4.16.0 +EOF +} + +function 8.29-gcc(){ + cat << 'EOF' > $LFS/root/8.29-gcc +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf gcc-14.2.0.tar.xz +cd gcc-14.2.0 +sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 +mkdir build +cd build +../configure --prefix=/usr \ + LD=ld \ + --enable-languages=c,c++ \ + --enable-default-pie \ + --enable-default-ssp \ + --enable-host-pie \ + --disable-multilib \ + --disable-bootstrap \ + --disable-fixincludes \ + --with-system-zlib +make +make install +ln -svr /usr/bin/cpp /usr/lib +ln -sv gcc.1 /usr/share/man/man1/cc.1 +ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/14.2.0/liblto_plugin.so \ + /usr/lib/bfd-plugins/ +echo 'int main(){}' > dummy.c +cc dummy.c -v -Wl,--verbose &> dummy.log +readelf -l a.out | grep ': /lib' +grep -E -o '/usr/lib.*/S?crt[1in].*succeeded' dummy.log +grep -B4 '^ /usr/include' dummy.log +grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g' +grep "/lib.*/libc.so.6 " dummy.log +grep found dummy.log +rm -v dummy.c a.out dummy.log +mkdir -pv /usr/share/gdb/auto-load/usr/lib +mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib +cd /sources +rm -rf gcc-14.2.0 +EOF +} + +function 8.30-ncurses(){ + cat << 'EOF' > $LFS/root/8.30-ncurses +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf ncurses-6.5.tar.gz +cd ncurses-6.5 +./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --with-shared \ + --without-debug \ + --without-normal \ + --with-cxx-shared \ + --enable-pc-files \ + --with-pkg-config-libdir=/usr/lib/pkgconfig +make +make DESTDIR=$PWD/dest install +install -vm755 dest/usr/lib/libncursesw.so.6.5 /usr/lib +rm -v dest/usr/lib/libncursesw.so.6.5 +sed -e 's/^#if.*XOPEN.*$/#if 1/' \ + -i dest/usr/include/curses.h +cp -av dest/* / +for lib in ncurses form panel menu ; do + ln -sfv lib${lib}w.so /usr/lib/lib${lib}.so + ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc +done +ln -sfv libncursesw.so /usr/lib/libcurses.so +cp -v -R doc -T /usr/share/doc/ncurses-6.5 +cd /sources +rm -rf ncurses-6.5 +EOF +} + +function 8.31-sed(){ + cat << 'EOF' > $LFS/root/8.31-sed +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf sed-4.9.tar.xz +cd sed-4.9 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf sed-4.9 +EOF +} + +function 8.32-psmisc(){ + cat << 'EOF' > $LFS/root/8.32-psmisc +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf psmisc-23.7.tar.xz +cd psmisc-23.7 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf psmisc-23.7 +EOF +} + +function 8.33-gettext(){ + cat << 'EOF' > $LFS/root/8.33-gettext +#!/bin/bash +cd /sources +tar -xf gettext-0.22.5.tar.xz +cd gettext-0.22.5 +./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/gettext-0.22.5 +make +rm -rf /sources/gettext-0.22.5 +set -eux -o pipefail +cd /sources +tar -xf gettext-0.22.5.tar.xz +cd gettext-0.22.5 +./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/gettext-0.22.5 +make +make install +chmod -v 0755 /usr/lib/preloadable_libintl.so +cd /sources +rm -rf gettext-0.22.5 +EOF +} + +function 8.34-bison(){ + cat << 'EOF' > $LFS/root/8.34-bison +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf bison-3.8.2.tar.xz +cd bison-3.8.2 +./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.8.2 +make +make install +cd /sources +rm -rf bison-3.8.2 +EOF +} + +function 8.35-grep(){ + cat << 'EOF' > $LFS/root/8.35-grep +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf grep-3.11.tar.xz +cd grep-3.11 +sed -i "s/echo/#echo/" src/egrep.sh +./configure --prefix=/usr +make +make install +cd /sources +rm -rf grep-3.11 +EOF +} + +function 8.36-bash(){ + cat << 'EOF' > $LFS/root/8.36-bash +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf bash-5.2.32.tar.gz +cd bash-5.2.32 +./configure --prefix=/usr \ + --without-bash-malloc \ + --with-installed-readline \ + bash_cv_strtold_broken=no \ + --docdir=/usr/share/doc/bash-5.2.32 +make +make install +#exec /usr/bin/bash --login +cd /sources +rm -rf bash-5.2.32 +EOF +} + +function 8.37-libtool(){ + cat << 'EOF' > $LFS/root/8.37-libtool +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf libtool-2.4.7.tar.xz +cd libtool-2.4.7 +./configure --prefix=/usr +make +make install +rm -fv /usr/lib/libltdl.a +cd /sources +rm -rf libtool-2.4.7 +EOF +} + +function 8.38-gdbm(){ + cat << 'EOF' > $LFS/root/8.38-gdbm +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf gdbm-1.24.tar.gz +cd gdbm-1.24 +./configure --prefix=/usr \ + --disable-static \ + --enable-libgdbm-compat +make +make install +cd /sources +rm -rf gdbm-1.24 +EOF +} + +function 8.39-gperf(){ + cat << 'EOF' > $LFS/root/8.39-gperf +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf gperf-3.1.tar.gz +cd gperf-3.1 +./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1 +make +make install +cd /sources +rm -rf gperf-3.1 +EOF +} + +function 8.40-expat(){ + cat << 'EOF' > $LFS/root/8.40-expat +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf expat-2.6.4.tar.xz +cd expat-2.6.4 +./configure --prefix=/usr \ + --disable-static \ + --docdir=/usr/share/doc/expat-2.6.4 +make +make install +cd /sources +rm -rf expat-2.6.4 +EOF +} + +function 8.41-inetutils(){ + cat << 'EOF' > $LFS/root/8.41-inetutils +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf inetutils-2.5.tar.xz +cd inetutils-2.5 +sed -i 's/def HAVE_TERMCAP_TGETENT/ 1/' telnet/telnet.c +./configure --prefix=/usr \ + --bindir=/usr/bin \ + --localstatedir=/var \ + --disable-logger \ + --disable-whois \ + --disable-rcp \ + --disable-rexec \ + --disable-rlogin \ + --disable-rsh \ + --disable-servers +make +make install +mv -v /usr/{,s}bin/ifconfig +cd /sources +rm -rf inetutils-2.5 +EOF +} + +function 8.42-less(){ + cat << 'EOF' > $LFS/root/8.42-less +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf less-661.tar.gz +cd less-661 +./configure --prefix=/usr --sysconfdir=/etc +make +make install +cd /sources +rm -rf less-661 +EOF +} + +function 8.43-perl(){ + cat << 'EOF' > $LFS/root/8.43-perl +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf perl-5.40.0.tar.xz +cd perl-5.40.0 +export BUILD_ZLIB=False +export BUILD_BZIP2=0 +sh Configure -des \ + -D prefix=/usr \ + -D vendorprefix=/usr \ + -D privlib=/usr/lib/perl5/5.40/core_perl \ + -D archlib=/usr/lib/perl5/5.40/core_perl \ + -D sitelib=/usr/lib/perl5/5.40/site_perl \ + -D sitearch=/usr/lib/perl5/5.40/site_perl \ + -D vendorlib=/usr/lib/perl5/5.40/vendor_perl \ + -D vendorarch=/usr/lib/perl5/5.40/vendor_perl \ + -D man1dir=/usr/share/man/man1 \ + -D man3dir=/usr/share/man/man3 \ + -D pager="/usr/bin/less -isR" \ + -D useshrplib \ + -D usethreads +make +make install +unset BUILD_ZLIB BUILD_BZIP2 +cd /sources +rm -rf perl-5.40.0 +EOF +} + +function 8.44-xml-parser(){ + cat << 'EOF' > $LFS/root/8.44-xml-parser +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf XML-Parser-2.47.tar.gz +cd XML-Parser-2.47 +perl Makefile.PL +make +make install +cd /sources +rm -rf XML-Parser-2.47 +EOF +} + +function 8.45-intltool(){ + cat << 'EOF' > $LFS/root/8.45-intltool +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf intltool-0.51.0.tar.gz +cd intltool-0.51.0 +sed -i 's:\\\${:\\\$\\{:' intltool-update.in +./configure --prefix=/usr +make +make install +install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO +cd /sources +rm -rf intltool-0.51.0 +EOF +} + +function 8.46-autoconf(){ + cat << 'EOF' > $LFS/root/8.46-autoconf +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf autoconf-2.72.tar.xz +cd autoconf-2.72 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf autoconf-2.72 +EOF +} + +function 8.47-automake(){ + cat << 'EOF' > $LFS/root/8.47-automake +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf automake-1.17.tar.xz +cd automake-1.17 +./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.17 +make +make install +cd /sources +rm -rf automake-1.17 +EOF +} + +function 8.48-openssl(){ + cat << 'EOF' > $LFS/root/8.48-openssl +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf openssl-3.3.1.tar.gz +cd openssl-3.3.1 +./config --prefix=/usr \ + --openssldir=/etc/ssl \ + --libdir=lib \ + shared \ + zlib-dynamic +make +sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile +make MANSUFFIX=ssl install +mv -v /usr/share/doc/openssl /usr/share/doc/openssl-3.3.1 +cd /sources +rm -rf openssl-3.3.1 +EOF +} + +function 8.49-kmod(){ + cat << 'EOF' > $LFS/root/8.49-kmod +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf kmod-33.tar.xz +cd kmod-33 +./configure --prefix=/usr \ + --sysconfdir=/etc \ + --with-openssl \ + --with-xz \ + --with-zstd \ + --with-zlib \ + --disable-manpages +make +make install +for target in depmod insmod modinfo modprobe rmmod; do + ln -sfv ../bin/kmod /usr/sbin/$target + rm -fv /usr/bin/$target +done +cd /sources +rm -rf kmod-33 +EOF +} + +function 8.50-libelf(){ + cat << 'EOF' > $LFS/root/8.50-libelf +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf elfutils-0.191.tar.bz2 +cd elfutils-0.191 +./configure --prefix=/usr \ + --disable-debuginfod \ + --enable-libdebuginfod=dummy +make +make -C libelf install +install -vm644 config/libelf.pc /usr/lib/pkgconfig +rm /usr/lib/libelf.a +cd /sources +rm -rf elfutils-0.191 +EOF +} + +function 8.51-libffi(){ + cat << 'EOF' > $LFS/root/8.51-libffi +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf libffi-3.4.6.tar.gz +cd libffi-3.4.6 +./configure --prefix=/usr \ + --disable-static \ + --with-gcc-arch=native +make +make install +cd /sources +rm -rf libffi-3.4.6 +EOF +} + +function 8.52-python(){ + cat << 'EOF' > $LFS/root/8.52-python +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf Python-3.12.5.tar.xz +cd Python-3.12.5 +./configure --prefix=/usr \ + --enable-shared \ + --with-system-expat \ + --enable-optimizations +make +make install +ln -s /usr/bin/python3 /usr/bin/python +cat > /etc/pip.conf << EOFa +[global] +root-user-action = ignore +disable-pip-version-check = true +EOFa +cat > /etc/pip.conf << EOFb +[global] +root-user-action = ignore +disable-pip-version-check = true +EOFb +cd /sources +rm -rf Python-3.12.5 +EOF +} + +function 8.53-flit-core(){ + cat << 'EOF' > $LFS/root/8.53-flit-core +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf flit_core-3.9.0.tar.gz +cd flit_core-3.9.0 +pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD +pip3 install --no-index --no-user --find-links dist flit_core +cd /sources +rm -rf flit_core-3.9.0 +EOF +} + +function 8.54-wheel(){ + cat << 'EOF' > $LFS/root/8.54-wheel +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf wheel-0.44.0.tar.gz +cd wheel-0.44.0 +pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD +pip3 install --no-index --find-links=dist wheel +cd /sources +rm -rf wheel-0.44.0 +EOF +} + +function 8.55-setuptools(){ + cat << 'EOF' > $LFS/root/8.55-setuptools +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf setuptools-72.2.0.tar.gz +cd setuptools-72.2.0 +pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD +pip3 install --no-index --find-links dist setuptools +cd /sources +rm -rf setuptools-72.2.0 +EOF +} + +function 8.56-ninja(){ + cat << 'EOF' > $LFS/root/8.56-ninja +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf ninja-1.12.1.tar.gz +cd ninja-1.12.1 +export NINJAJOBS=4 +sed -i '/int Guess/a \ + int j = 0;\ + char* jobs = getenv( "NINJAJOBS" );\ + if ( jobs != NULL ) j = atoi( jobs );\ + if ( j > 0 ) return j;\ +' src/ninja.cc +python3 configure.py --bootstrap +install -vm755 ninja /usr/bin/ +install -vDm644 misc/bash-completion /usr/share/bash-completion/completions/ninja +install -vDm644 misc/zsh-completion /usr/share/zsh/site-functions/_ninja +cd /sources +rm -rf ninja-1.12.1 +EOF +} + +function 8.57-meson(){ + cat << 'EOF' > $LFS/root/8.57-meson +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf meson-1.5.1.tar.gz +cd meson-1.5.1 +pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD +pip3 install --no-index --find-links dist meson +install -vDm644 data/shell-completions/bash/meson /usr/share/bash-completion/completions/meson +install -vDm644 data/shell-completions/zsh/_meson /usr/share/zsh/site-functions/_meson +cd /sources +rm -rf meson-1.5.1 +EOF +} + +function 8.58-coreutils(){ + cat << EOF > $LFS/root/8.58-coreutils +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf coreutils-9.5.tar.xz +cd coreutils-9.5 +patch -Np1 -i ../coreutils-9.5-i18n-2.patch +autoreconf -fiv +FORCE_UNSAFE_CONFIGURE=1 ./configure \ + --prefix=/usr \ + --enable-no-install-program=kill,uptime +make +make install +mv -v /usr/bin/chroot /usr/sbin +mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8 +sed -i 's/"1"/"8"/' /usr/share/man/man8/chroot.8 +cd /sources +rm -rf coreutils-9.5 +EOF +} + +function 8.59-check(){ + cat << 'EOF' > $LFS/root/8.59-check +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf check-0.15.2.tar.gz +cd check-0.15.2 +./configure --prefix=/usr --disable-static +make +make docdir=/usr/share/doc/check-0.15.2 install +cd /sources +rm -rf check-0.15.2 +EOF +} + +function 8.60-diffutils(){ + cat << 'EOF' > $LFS/root/8.60-diffutils +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf diffutils-3.10.tar.xz +cd diffutils-3.10 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf diffutils-3.10 +EOF +} + +function 8.61-gawk(){ + cat << 'EOF' > $LFS/root/8.61-gawk +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf gawk-5.3.0.tar.xz +cd gawk-5.3.0 +sed -i 's/extras//' Makefile.in +./configure --prefix=/usr +make +rm -f /usr/bin/gawk-5.3.0 +make install +ln -sv gawk.1 /usr/share/man/man1/awk.1 +cd /sources +rm -rf gawk-5.3.0 +EOF +} + +function 8.62-findutils(){ + cat << 'EOF' > $LFS/root/8.62-findutils +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf findutils-4.10.0.tar.xz +cd findutils-4.10.0 +./configure --prefix=/usr --localstatedir=/var/lib/locate +make +make install +cd /sources +rm -rf findutils-4.10.0 +EOF +} + +function 8.63-groff(){ + cat << 'EOF' > $LFS/root/8.63-groff +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf groff-1.23.0.tar.gz +cd groff-1.23.0 +PAGE=A4 ./configure --prefix=/usr +make +make install +cd /sources +rm -rf groff-1.23.0 +EOF +} + +function 8.64-grub(){ + cat << 'EOF' > $LFS/root/8.64-grub +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf grub-2.12.tar.xz +cd grub-2.12 +unset {C,CPP,CXX,LD}FLAGS +echo depends bli part_gpt > grub-core/extra_deps.lst +./configure --prefix=/usr \ + --sysconfdir=/etc \ + --disable-efiemu \ + --disable-werror +make +make install +mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions +cd /sources +rm -rf grub-2.12 +EOF +} + +function 8.65-gzip(){ + cat << 'EOF' > $LFS/root/8.65-gzip +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf gzip-1.13.tar.xz +cd gzip-1.13 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf gzip-1.13 +EOF +} + +function 8.66-iproute(){ + cat << 'EOF' > $LFS/root/8.66-iproute +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf iproute2-6.10.0.tar.xz +cd iproute2-6.10.0 +sed -i /ARPD/d Makefile +rm -fv man/man8/arpd.8 +make NETNS_RUN_DIR=/run/netns +make SBINDIR=/usr/sbin install +cd /sources +rm -rf iproute2-6.10.0 +EOF +} + +function 8.67-kbd(){ + cat << 'EOF' > $LFS/root/8.67-kbd +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf kbd-2.6.4.tar.xz +cd kbd-2.6.4 +patch -Np1 -i ../kbd-2.6.4-backspace-1.patch +sed -i '/RESIZECONS_PROGS=/s/yes/no/' configure +sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in +./configure --prefix=/usr --disable-vlock +make +make install +cd /sources +rm -rf kbd-2.6.4 +EOF +} + +function 8.68-libpipeline(){ + cat << 'EOF' > $LFS/root/8.68-libpipeline +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf libpipeline-1.5.7.tar.gz +cd libpipeline-1.5.7 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf libpipeline-1.5.7 +EOF +} + +function 8.69-make(){ + cat << 'EOF' > $LFS/root/8.69-make +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf make-4.4.1.tar.gz +cd make-4.4.1 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf make-4.4.1 +EOF +} + +function 8.70-patch(){ + cat << 'EOF' > $LFS/root/8.70-patch +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf patch-2.7.6.tar.xz +cd patch-2.7.6 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf patch-2.7.6 +EOF +} + +function 8.71-tar(){ + cat << 'EOF' > $LFS/root/8.71-tar +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf tar-1.35.tar.xz +cd tar-1.35 +FORCE_UNSAFE_CONFIGURE=1 \ +./configure --prefix=/usr +make +make install +cd /sources +rm -rf tar-1.35 +EOF +} + +function 8.72-texinfo(){ + cat << 'EOF' > $LFS/root/8.72-texinfo +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf texinfo-7.1.tar.xz +cd texinfo-7.1 +./configure --prefix=/usr +make +make install +cd /sources +rm -rf texinfo-7.1 +EOF +} + +function 8.73-vim(){ + cat << 'EOF' > $LFS/root/8.73-vim +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf vim-9.1.0660.tar.gz +cd vim-9.1.0660 +echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h +./configure --prefix=/usr +make +make install +cat > /etc/vimrc << "EOFa" +" Début de /etc/vimrc + +" Ensure defaults are set before customizing settings, not after +source $VIMRUNTIME/defaults.vim +let skip_defaults_vim=1 + +set nocompatible +set backspace=2 +set mouse= +syntax on +if (&term == "xterm") || (&term == "putty") + set background=dark +endif + +" Fin de /etc/vimrc +EOFa +cd /sources +rm -rf vim-9.1.0660 +EOF +} + +function 8.74-markupsafe(){ + cat << 'EOF' > $LFS/root/8.74-markupsafe +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf MarkupSafe-2.1.5.tar.gz +cd MarkupSafe-2.1.5 +pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD +pip3 install --no-index --no-user --find-links dist Markupsafe +cd /sources +rm -rf MarkupSafe-2.1.5 +EOF +} + +function 8.75-jinja2(){ + cat << 'EOF' > $LFS/root/8.75-jinja2 +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf jinja2-3.1.4.tar.gz +cd jinja2-3.1.4 +pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD +pip3 install --no-index --no-user --find-links dist Jinja2 +cd /sources +rm -rf jinja2-3.1.4 +EOF +} + +function 8.76-udev(){ + cat << 'EOF' > $LFS/root/8.76-udev +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf systemd-256.4.tar.gz +cd systemd-256.4 +sed -i -e 's/GROUP="render"/GROUP="video"/' \ + -e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in +sed '/systemd-sysctl/s/^/#/' -i rules.d/99-systemd.rules.in +sed '/NETWORK_DIRS/s/systemd/udev/' -i src/basic/path-lookup.h +mkdir -p build +cd build + +meson setup .. \ + --prefix=/usr \ + --buildtype=release \ + -D mode=release \ + -D dev-kvm-mode=0660 \ + -D link-udev-shared=false \ + -D logind=false \ + -D vconsole=false +export udev_helpers=$(grep "'name' :" ../src/udev/meson.build | \ + awk '{print $3}' | tr -d ",'" | grep -v 'udevadm') +ninja udevadm systemd-hwdb \ + $(ninja -n | grep -Eo '(src/(lib)?udev|rules.d|hwdb.d)/[^ ]*') \ + $(realpath libudev.so --relative-to .) \ + $udev_helpers +install -vm755 -d {/usr/lib,/etc}/udev/{hwdb.d,rules.d,network} +install -vm755 -d /usr/{lib,share}/pkgconfig +install -vm755 udevadm /usr/bin/ +install -vm755 systemd-hwdb /usr/bin/udev-hwdb +ln -svfn ../bin/udevadm /usr/sbin/udevd +cp -av libudev.so{,*[0-9]} /usr/lib/ +install -vm644 ../src/libudev/libudev.h /usr/include/ +install -vm644 src/libudev/*.pc /usr/lib/pkgconfig/ +install -vm644 src/udev/*.pc /usr/share/pkgconfig/ +install -vm644 ../src/udev/udev.conf /etc/udev/ +install -vm644 rules.d/* ../rules.d/README /usr/lib/udev/rules.d/ +install -vm644 $(find ../rules.d/*.rules \ + -not -name '*power-switch*') /usr/lib/udev/rules.d/ +install -vm644 hwdb.d/* ../hwdb.d/{*.hwdb,README} /usr/lib/udev/hwdb.d/ +install -vm755 $udev_helpers /usr/lib/udev +install -vm644 ../network/99-default.link /usr/lib/udev/network +tar -xvf ../../udev-lfs-20230818.tar.xz +make -f udev-lfs-20230818/Makefile.lfs install +unset udev_helpers +cd /sources +rm -rf systemd-256.4 +EOF +} + +function 8.77-man-db(){ + cat << 'EOF' > $LFS/root/8.77-man-db +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf man-db-2.12.1.tar.xz +cd man-db-2.12.1 +./configure --prefix=/usr \ + --docdir=/usr/share/doc/man-db-2.12.1 \ + --sysconfdir=/etc \ + --disable-setuid \ + --enable-cache-owner=bin \ + --with-browser=/usr/bin/lynx \ + --with-vgrind=/usr/bin/vgrind \ + --with-grap=/usr/bin/grap \ + --with-systemdtmpfilesdir= \ + --with-systemdsystemunitdir= +make +make install +cd /sources +rm -rf man-db-2.12.1 +EOF +} + +function 8.78-procps-ng(){ + cat << 'EOF' > $LFS/root/8.78-procps-ng +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf procps-ng-4.0.4.tar.xz +cd procps-ng-4.0.4 +./configure --prefix=/usr \ + --docdir=/usr/share/doc/procps-ng-4.0.4 \ + --disable-static \ + --disable-kill +make +make install +cd /sources +rm -rf procps-ng-4.0.4 +EOF +} + +function 8.79-util-linux(){ + cat << 'EOF' > $LFS/root/8.79-util-linux +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf util-linux-2.40.2.tar.xz +cd util-linux-2.40.2 +./configure --bindir=/usr/bin \ + --libdir=/usr/lib \ + --runstatedir=/run \ + --sbindir=/usr/sbin \ + --disable-chfn-chsh \ + --disable-login \ + --disable-nologin \ + --disable-su \ + --disable-setpriv \ + --disable-runuser \ + --disable-pylibmount \ + --disable-liblastlog2 \ + --disable-static \ + --without-python \ + --without-systemd \ + --without-systemdsystemunitdir \ + ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --docdir=/usr/share/doc/util-linux-2.40.2 +make +make install +cd /sources +rm -rf util-linux-2.40.2 +EOF +} + +function 8.80-e2fsprogs(){ + cat << 'EOF' > $LFS/root/8.80-e2fsprogs +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf e2fsprogs-1.47.1.tar.gz +cd e2fsprogs-1.47.1 +mkdir -v build +cd build +../configure --prefix=/usr \ + --sysconfdir=/etc \ + --enable-elf-shlibs \ + --disable-libblkid \ + --disable-libuuid \ + --disable-uuidd \ + --disable-fsck +make +make install +rm -fv /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a +gunzip -v /usr/share/info/libext2fs.info.gz +install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info +cd /sources +rm -rf e2fsprogs-1.47.1 +EOF +} + +function 8.81-sysklogd(){ + cat << 'EOF' > $LFS/root/8.81-sysklogd +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf sysklogd-2.6.1.tar.gz +cd sysklogd-2.6.1 +./configure --prefix=/usr \ + --sysconfdir=/etc \ + --runstatedir=/run \ + --without-logger +make +make install +cat > /etc/syslog.conf << EOFa +# Début de /etc/syslog.conf + +auth,authpriv.* -/var/log/auth.log +*.*;auth,authpriv.none -/var/log/sys.log +daemon.* -/var/log/daemon.log +kern.* -/var/log/kern.log +mail.* -/var/log/mail.log +user.* -/var/log/user.log +*.emerg * + +# Ne pas ouvrir de ports internet. +secure_mode 2 + +# Fin de /etc/syslog.conf +EOFa +cd /sources +rm -rf sysklogd-2.6.1 +EOF +} + +function 8.82-libpsl(){ + cat << 'EOF' > $LFS/root/8.82-libpsl +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf libpsl-0.21.5.tar.gz +cd libpsl-0.21.5 +mkdir build +cd build +meson setup --prefix=/usr --buildtype=release +ninja +ninja install +cd /sources +rm -rf libpsl-0.21.5 +EOF +} + +function 8.83-curl(){ + cat << 'EOF' > $LFS/root/8.83-curl +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf curl-8.11.0.tar.xz +cd curl-8.11.0 +./configure --prefix=/usr \ + --disable-static \ + --with-openssl \ + --with-ca-path=/etc/ssl/certs +make +make install +cd /sources +rm -rf curl-8.11.0 +EOF +} + +function 8.84-cpio(){ + cat << 'EOF' > $LFS/root/8.84-cpio +#!/bin/bash +set -eux -o pipefail +cd /sources +tar -xf cpio-2.15.tar.bz2 +cd cpio-2.15 +./configure --prefix=/usr \ + --enable-mt \ + --with-rmt=/usr/libexec/rmt +make +make install +cd /sources +rm -rf cpio-2.15 +EOF +} + +function 8.85-dracut(){ + cat << 'EOF' > $LFS/root/8.85-dracut +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf dracut-105.tar.gz +cd dracut-ng-105 +./configure --prefix=/usr --disable-documentation +make +make install +cd /sources +rm -rf dracut-059 +EOF +} + +function 8.86-fakeroot(){ + cat << 'EOF' > $LFS/root/8.86-fakeroot +#!/bin/bash +set -eux -o pipefail +cd /sources +tar xf fakeroot-1.36.tar.gz +cd fakeroot-1.36 +./configure --prefix=/usr +make +make install +libtool --finish /usr/lib +cd /sources +rm -rf fakeroot-1.36 +EOF +} + +function 8.87-erminig-tools(){ + cat << 'EOF' > $LFS/root/8.87-erminig-tools +#!/bin/bash +set -eux -o pipefail +install -d -o 3 -g 3 /usr/src +install -d -o 3 -g 3 /var/{cache,lib,log,tmp}/govel +install -d /var/cache/keo +EOF +} + +function post-chroot(){ + 7.5-create-folders + 7.6-create-symbolic-links + 7.7-gettext + 7.8-bison + 7.9-perl + 7.10-python + 7.11-texinfo + 7.12-util-linux + 7.13-cleaning + 8.3-man-pages + 8.4-iana-etc + 8.5-glibc + 8.6-zlib + 8.7-bzip2 + 8.8-xz + 8.9-lz4 + 8.10-zstd + 8.11-file + 8.12-readline + 8.13-m4 + 8.14-bc + 8.15-flex + 8.16-tcl + 8.17-expect + 8.18-dejagnu + 8.19-pkgconf + 8.20-binutils + 8.21-gmp + 8.22-mpfr + 8.23-mpc + 8.24-attr + 8.25-acl + 8.26-libcap + 8.27-libxcrypt + 8.28-shadow + 8.29-gcc + 8.30-ncurses + 8.31-sed + 8.32-psmisc + 8.33-gettext + 8.34-bison + 8.35-grep + 8.36-bash + 8.37-libtool + 8.38-gdbm + 8.39-gperf + 8.40-expat + 8.41-inetutils + 8.42-less + 8.43-perl + 8.44-xml-parser + 8.45-intltool + 8.46-autoconf + 8.47-automake + 8.48-openssl + 8.49-kmod + 8.50-libelf + 8.51-libffi + 8.52-python + 8.53-flit-core + 8.54-wheel + 8.55-setuptools + 8.56-ninja + 8.57-meson + 8.58-coreutils + 8.59-check + 8.60-diffutils + 8.61-gawk + 8.62-findutils + 8.63-groff + 8.64-grub + 8.65-gzip + 8.66-iproute + 8.67-kbd + 8.68-libpipeline + 8.69-make + 8.70-patch + 8.71-tar + 8.72-texinfo + 8.73-vim + 8.74-markupsafe + 8.75-jinja2 + 8.76-udev + 8.77-man-db + 8.78-procps-ng + 8.79-util-linux + 8.80-e2fsprogs + 8.81-sysklogd + 8.82-libpsl + 8.83-curl + 8.84-cpio + 8.85-dracut + 8.86-fakeroot + 8.87-erminig-tools + cat << 'EOF' > $LFS/root/post-chroot +#!/bin/bash +set -eux -o pipefail +bash /root/7.5-create-folders +bash /root/7.6-create-symbolic-links +bash /root/7.7-gettext +bash /root/7.8-bison +bash /root/7.9-perl +bash /root/7.10-python +bash /root/7.11-texinfo +bash /root/7.12-util-linux +bash /root/7.13-cleaning +#bash /root/8.3-man-pages +bash /root/8.4-iana-etc +bash /root/8.5-glibc +bash /root/8.6-zlib +bash /root/8.7-bzip2 +bash /root/8.8-xz +bash /root/8.9-lz4 +bash /root/8.10-zstd +bash /root/8.11-file +bash /root/8.12-readline +bash /root/8.13-m4 +bash /root/8.14-bc +bash /root/8.15-flex +bash /root/8.16-tcl +bash /root/8.17-expect +bash /root/8.18-dejagnu +bash /root/8.19-pkgconf +bash /root/8.20-binutils +bash /root/8.21-gmp +bash /root/8.22-mpfr +bash /root/8.23-mpc +bash /root/8.24-attr +bash /root/8.25-acl +bash /root/8.26-libcap +bash /root/8.27-libxcrypt +bash /root/8.28-shadow +bash /root/8.29-gcc +bash /root/8.30-ncurses +bash /root/8.31-sed +bash /root/8.32-psmisc +bash /root/8.33-gettext +bash /root/8.34-bison +bash /root/8.35-grep +bash /root/8.36-bash +bash /root/8.37-libtool +bash /root/8.38-gdbm +bash /root/8.39-gperf +bash /root/8.40-expat +#bash /root/8.41-inetutils +bash /root/8.42-less +bash /root/8.43-perl +bash /root/8.44-xml-parser +bash /root/8.45-intltool +bash /root/8.46-autoconf +bash /root/8.47-automake +bash /root/8.48-openssl +bash /root/8.49-kmod +bash /root/8.50-libelf +bash /root/8.51-libffi +bash /root/8.52-python +bash /root/8.53-flit-core +bash /root/8.54-wheel +bash /root/8.55-setuptools +bash /root/8.56-ninja +bash /root/8.57-meson +bash /root/8.58-coreutils +bash /root/8.59-check +bash /root/8.60-diffutils +bash /root/8.61-gawk +bash /root/8.62-findutils +bash /root/8.63-groff +bash /root/8.64-grub +bash /root/8.65-gzip +bash /root/8.66-iproute +bash /root/8.67-kbd +bash /root/8.68-libpipeline +bash /root/8.69-make +bash /root/8.70-patch +bash /root/8.71-tar +bash /root/8.72-texinfo +bash /root/8.73-vim +bash /root/8.74-markupsafe +bash /root/8.75-jinja2 +#bash /root/8.76-udev +#bash /root/8.77-man-db +#bash /root/8.78-procps-ng +#bash /root/8.79-util-linux +#bash /root/8.80-e2fsprogs +#bash /root/8.81-sysklogd +#bash /root/8.82-libpsl +#bash /root/8.83-curl +#bash /root/8.84-cpio +#bash /root/8.85-dracut +#bash /root/8.86-fakeroot +#bash /root/8.87-erminig-tools +EOF +} + +function main(){ + echo "Get sources" + 3.1-get_sources + echo "Folder structure" + 4.2-folder_structure + #4.4-configure_environment + echo "Binutils" + 5.2-binutils 2.43.1 + 5.3-gcc 14.2.0 + 5.4-linux_headers 6.10.5 + 5.5-glibc 2.40 + 5.6-libstdcpp 14.2.0 + 6.2-m4 1.4.19 + 6.3-ncurses 6.5 + 6.4-bash 5.2.32 + 6.5-coreutils 9.5 + 6.6-diffutils 3.10 + 6.7-file 5.45 + 6.8-findutils 4.10.0 + 6.9-gawk 5.3.0 + 6.10-grep 3.11 + 6.11-gzip 1.13 + 6.12-make 4.4.1 + 6.13-patch 2.7.6 + 6.14-sed 4.9 + 6.15-tar 1.35 + 6.16-xz 5.6.2 + 6.17-binutils 2.43.1 + 6.18-gcc 14.2.0 + 7.3-prepare-filesystem + post-chroot +} + +main diff --git a/version-check.sh b/version-check.sh new file mode 100644 index 0000000..98bd83d --- /dev/null +++ b/version-check.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# A script to list version numbers of critical development tools + +# If you have tools installed in other directories, adjust PATH here AND +# in ~lfs/.bashrc (section 4.4) as well. + +LC_ALL=C +PATH=/usr/bin:/bin + +bail() { echo "FATAL: $1"; exit 1; } +grep --version > /dev/null 2> /dev/null || bail "grep does not work" +sed '' /dev/null || bail "sed does not work" +sort /dev/null || bail "sort does not work" + +ver_check() +{ + if ! type -p $2 &>/dev/null + then + echo "ERROR: Cannot find $2 ($1)"; return 1; + fi + v=$($2 --version 2>&1 | grep -E -o '[0-9]+\.[0-9\.]+[a-z]*' | head -n1) + if printf '%s\n' $3 $v | sort --version-sort --check &>/dev/null + then + printf "OK: %-9s %-6s >= $3\n" "$1" "$v"; return 0; + else + printf "ERROR: %-9s is TOO OLD ($3 or later required)\n" "$1"; + return 1; + fi +} + +ver_kernel() +{ + kver=$(uname -r | grep -E -o '^[0-9\.]+') + if printf '%s\n' $1 $kver | sort --version-sort --check &>/dev/null + then + printf "OK: Linux Kernel $kver >= $1\n"; return 0; + else + printf "ERROR: Linux Kernel ($kver) is TOO OLD ($1 or later required)\n" "$kver"; + return 1; + fi +} + +# Coreutils first because --version-sort needs Coreutils >= 7.0 +ver_check Coreutils sort 8.1 || bail "Coreutils too old, stop" +ver_check Bash bash 3.2 +ver_check Binutils ld 2.13.1 +ver_check Bison bison 2.7 +ver_check Diffutils diff 2.8.1 +ver_check Findutils find 4.2.31 +ver_check Gawk gawk 4.0.1 +ver_check GCC gcc 5.2 +ver_check "GCC (C++)" g++ 5.2 +ver_check Grep grep 2.5.1a +ver_check Gzip gzip 1.3.12 +ver_check M4 m4 1.4.10 +ver_check Make make 4.0 +ver_check Patch patch 2.5.4 +ver_check Perl perl 5.8.8 +ver_check Python python3 3.4 +ver_check Sed sed 4.1.5 +ver_check Tar tar 1.22 +ver_check Texinfo texi2any 5.0 +ver_check Xz xz 5.0.0 +ver_kernel 4.19 + +if mount | grep -q 'devpts on /dev/pts' && [ -e /dev/ptmx ] +then echo "OK: Linux Kernel supports UNIX 98 PTY"; +else echo "ERROR: Linux Kernel does NOT support UNIX 98 PTY"; fi + +alias_check() { + if $1 --version 2>&1 | grep -qi $2 + then printf "OK: %-4s is $2\n" "$1"; + else printf "ERROR: %-4s is NOT $2\n" "$1"; fi +} +echo "Aliases:" +alias_check awk GNU +alias_check yacc Bison +alias_check sh Bash + +echo "Compiler check:" +if printf "int main(){}" | g++ -x c++ - +then echo "OK: g++ works"; +else echo "ERROR: g++ does NOT work"; fi +rm -f a.out + +if [ "$(nproc)" = "" ]; then + echo "ERROR: nproc is not available or it produces empty output" +else + echo "OK: nproc reports $(nproc) logical cores are available" +fi