MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap
Revision 36 as of 2024-06-21 20:45:44
  • LinuxFromScratch

Contents

  1. LinuxFromScratch
    1. Build cross compiler system
      1. gcc
    2. Build system based on the cross compiler
    3. Add partition in VM to host LFS build
  2. initramfs with static program
    1. Hello world USB boot
      1. Build install-mbr
      2. create-usb-boot-hello-world.sh

LinuxFromScratch

  • https://www.linuxfromscratch.org/

Linux From Scratch (LFS) is a project that provides you with step-by-step instructions for building your own custom Linux system, entirely from source code.

  • https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html

  • https://www.linuxfromscratch.org/hints/downloads/files/boot-cd_easy.txt

List of the required downloads for LFS 11.3

  • https://www.linuxfromscratch.org/lfs/downloads/stable/wget-list

   1 # https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html
   2 uname -a
   3 # Linux debian 5.10.0-22-amd64 #1 SMP Debian 5.10.178-3 (2023-04-22) x86_64 GNU/Linux
   4 cd ~
   5 mkdir lfs
   6 cd lfs
   7 wget https://www.linuxfromscratch.org/lfs/downloads/stable/wget-list
   8 xargs -l wget < wget-list
   9 
  10 # wget --input-file=wget-list --continue --directory-prefix=$LFS/sources
  11 mkdir sources
  12 mv *patch  *xz *gz   *bz2  sources/
  13 
  14 # As root 
  15 sudo bash
  16 cd sources 
  17 chmod 666 . -R
  18 
  19 export LFS=/home/vagrant/lfs
  20 echo $LFS
  21 mkdir -pv $LFS
  22 
  23 cd $LFS 
  24 mkdir sources
  25 wget https://www.linuxfromscratch.org/lfs/downloads/stable/wget-list
  26 xargs -l wget < wget-list
  27 cd ..
  28  
  29 cat > version-check.sh << "EOF"
  30 #!/bin/bash
  31 # Simple script to list version numbers of critical development tools
  32 export LC_ALL=C
  33 bash --version | head -n1 | cut -d" " -f2-4
  34 MYSH=$(readlink -f /bin/sh)
  35 echo "/bin/sh -> $MYSH"
  36 echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
  37 unset MYSH
  38 
  39 echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
  40 bison --version | head -n1
  41 
  42 if [ -h /usr/bin/yacc ]; then
  43   echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
  44 elif [ -x /usr/bin/yacc ]; then
  45   echo yacc is `/usr/bin/yacc --version | head -n1`
  46 else
  47   echo "yacc not found"
  48 fi
  49 
  50 echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
  51 diff --version | head -n1
  52 find --version | head -n1
  53 gawk --version | head -n1
  54 
  55 if [ -h /usr/bin/awk ]; then
  56   echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
  57 elif [ -x /usr/bin/awk ]; then
  58   echo awk is `/usr/bin/awk --version | head -n1`
  59 else
  60   echo "awk not found"
  61 fi
  62 
  63 gcc --version | head -n1
  64 g++ --version | head -n1
  65 grep --version | head -n1
  66 gzip --version | head -n1
  67 cat /proc/version
  68 m4 --version | head -n1
  69 make --version | head -n1
  70 patch --version | head -n1
  71 echo Perl `perl -V:version`
  72 python3 --version
  73 sed --version | head -n1
  74 tar --version | head -n1
  75 makeinfo --version | head -n1  # texinfo version
  76 xz --version | head -n1
  77 
  78 echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
  79 if [ -x dummy ]
  80   then echo "g++ compilation OK";
  81   else echo "g++ compilation failed"; fi
  82 rm -f dummy.c dummy
  83 EOF
  84 
  85 sudo rm /bin/sh
  86 sudo ln -s /bin/bash /bin/sh
  87 sudo apt install bison texinfo gawk 
  88 
  89 bash version-check.sh
  90 
  91 # As root user  
  92 sudo bash 
  93 export LFS=/home/vagrant/lfs
  94 mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}
  95 
  96 for i in bin lib sbin; do
  97   ln -sv usr/$i $LFS/$i
  98 done
  99 
 100 case $(uname -m) in
 101   x86_64) mkdir -pv $LFS/lib64 ;;
 102 esac
 103 
 104 mkdir -pv $LFS/tools
 105 groupadd lfs
 106 useradd -s /bin/bash -g lfs -m -k /dev/null lfs
 107 echo -e "lfs\nlfs\n" | passwd lfs
 108 
 109 chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools,sources}
 110 chgrp -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools,sources}
 111 chmod 755 sources/ 
 112  
 113 case $(uname -m) in
 114   x86_64) chown -v lfs $LFS/lib64 ;;
 115 esac

Build cross compiler system

   1 # Logged in as lfs user 
   2 su - lfs
   3 
   4 cat > ~/.bash_profile << "EOF"
   5 exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
   6 EOF
   7 
   8 cat > ~/.bashrc << "EOF"
   9 set +h
  10 umask 022
  11 LFS=/home/vagrant/lfs
  12 LC_ALL=POSIX
  13 LFS_TGT=$(uname -m)-lfs-linux-gnu
  14 PATH=/usr/bin
  15 if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
  16 PATH=$LFS/tools/bin:$PATH
  17 CONFIG_SITE=$LFS/usr/share/config.site
  18 export LFS LC_ALL LFS_TGT PATH CONFIG_SITE
  19 EOF
  20 
  21 source ~/.bash_profile
  22 source ~/.bashrc 
  23 echo $LFS
  24 
  25 # Basic build steps 
  26 # cd /mnt/lfs/sources/
  27 # untar package as lfs user
  28 # go to package folder 
  29 # build 
  30 # go back to /mnt/lfs/sources/
  31 # delete extracted package 
  32 
  33 # binutils as lfs user  
  34 cd $LFS/sources/ 
  35 tar xvif binutils*.xz
  36 cd $(ls binutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
  37 mkdir -v build
  38 cd build
  39 ../configure --prefix=$LFS/tools \
  40              --with-sysroot=$LFS \
  41              --target=$LFS_TGT   \
  42              --disable-nls       \
  43              --enable-gprofng=no \
  44              --disable-werror
  45 make
  46 make install 
  47 cd $LFS/sources/ 
  48 rm -rf $(ls binutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

gcc

cd $LFS/sources/ 
tar xvif gcc*.xz
cd $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

tar -xf ../mpfr-4.2.0.tar.xz
mv -v mpfr-4.2.0 mpfr
tar -xf ../gmp-6.2.1.tar.xz
mv -v gmp-6.2.1 gmp
tar -xf ../mpc-1.3.1.tar.gz
mv -v mpc-1.3.1 mpc

case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' \
        -i.orig gcc/config/i386/t-linux64
 ;;
esac

mkdir -v build
cd       build

../configure                  \
    --target=$LFS_TGT         \
    --prefix=$LFS/tools       \
    --with-glibc-version=2.37 \
    --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 $LFS/sources/ 
rm -rf $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
        
# Linux-6.1.11 API Headers
cd $LFS/sources/ 
tar xvif linux*.xz
cd $(ls linux*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
make mrproper
make headers
find usr/include -type f ! -name '*.h' -delete
cp -rv usr/include $LFS/usr
cd $LFS/sources/ 
rm -rf $(ls linux*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# glibc 
cd $LFS/sources/ 
tar xvif glibc*.xz
cd $(ls glibc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
case $(uname -m) in
    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
    ;;
    x86_64) 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
    ;;
esac

patch -Np1 -i ../glibc-2.37-fhs-1.patch
mkdir -v build
cd       build
echo "rootsbindir=/usr/sbin" > configparms
../configure                             \
      --prefix=/usr                      \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=3.2                \
      --with-headers=$LFS/usr/include    \
      libc_cv_slibdir=/usr/lib
make 

make DESTDIR=$LFS install

sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
echo 'int main(){}' | $LFS_TGT-gcc -xc -
readelf -l a.out | grep ld-linux 
rm -v a.out

$LFS/tools/libexec/gcc/$LFS_TGT/12.2.0/install-tools/mkheaders
cd $LFS/sources/ 
rm -rf $(ls glibc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# Libstdc++
cd $LFS/sources/ 
tar xvif gcc*.xz
cd $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

mkdir -v 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++/12.2.0
make

make DESTDIR=$LFS install
rm -v $LFS/usr/lib/lib{stdc++,stdc++fs,supc++}.la       
cd $LFS/sources/ 
rm -rf $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# m4
cd $LFS/sources/ 
tar xvif m4*.xz
cd $(ls m4*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr   \
            --host=$LFS_TGT \
            --build=$(build-aux/config.guess)
make
make[1]: Leaving directory '/home/vagrant/lfs/sources/m4-1.4.19'
make: *** [Makefile:1974: all] Error 2

cd $LFS/sources/ 
tar xvif gcc*.xz
cd $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
  `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h  
$LFS/tools/libexec/gcc/$LFS_TGT/12.2.0/install-tools/mkheaders
cd $LFS/sources/ 
cd $(ls m4*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
make 
make DESTDIR=$LFS install
cd $LFS/sources/ 
rm -rf $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
rm -rf $(ls m4*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# ncurses
cd $LFS/sources/ 
tar xvzf ncurses*.gz
cd $(ls ncurses*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )

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          \
            --enable-widec
time make

make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install
echo "INPUT(-lncursesw)" > $LFS/usr/lib/libncurses.so

cd $LFS/sources/ 
rm -rf $(ls ncurses*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )

# bash 
cd $LFS/sources/ 
tar xvzf bash*.gz
cd $(ls bash*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )

./configure --prefix=/usr                      \
            --build=$(sh support/config.guess) \
            --host=$LFS_TGT                    \
            --without-bash-malloc

time make
make DESTDIR=$LFS install
ln -sv bash $LFS/bin/sh

cd $LFS/sources/ 
rm -rf $(ls bash*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )

# coreutils
cd $LFS/sources/ 
tar xvif coreutils*.xz
cd $(ls coreutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr                     \
            --host=$LFS_TGT                   \
            --build=$(build-aux/config.guess) \
            --enable-install-program=hostname \
            --enable-no-install-program=kill,uptime
                        

time 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 $(ls coreutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# diffutils 
cd $LFS/sources/ 
tar xvif diffutils*.xz
cd $(ls diffutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr --host=$LFS_TGT
time make
make DESTDIR=$LFS install

cd $LFS/sources/ 
rm -rf $(ls diffutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# file 
cd $LFS/sources/ 
tar xvzf file*.gz
cd $(ls file*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )

mkdir build
pushd build
  ../configure --disable-bzlib      \
               --disable-libseccomp \
               --disable-xzlib      \
               --disable-zlib
  make
popd

./configure --prefix=/usr --host=$LFS_TGT --build=$(./config.guess)
time make FILE_COMPILE=$(pwd)/build/src/file
make DESTDIR=$LFS install
rm -v $LFS/usr/lib/libmagic.la

cd $LFS/sources/ 
rm -rf $(ls file*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )

# findutils 
cd $LFS/sources/ 
tar xvif findutils*.xz
cd $(ls findutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./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 $(ls findutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# gawk 
cd $LFS/sources/
APP=gawk 
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

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 $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# grep 
cd $LFS/sources/
APP=grep  
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr   \
            --host=$LFS_TGT
make
make DESTDIR=$LFS install

cd $LFS/sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# gzip
cd $LFS/sources/
APP=gzip  
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr --host=$LFS_TGT
make
make DESTDIR=$LFS install

cd $LFS/sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# make
cd $LFS/sources/
APP=make  
tar xvif $APP*.gz
cd $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )

sed -e '/ifdef SIGPIPE/,+2 d' \
    -e '/undef  FATAL_SIG/i FATAL_SIG (SIGPIPE);' \
    -i src/main.c

./configure --prefix=/usr   \
            --without-guile \
            --host=$LFS_TGT \
            --build=$(build-aux/config.guess)
make
make DESTDIR=$LFS install

cd $LFS/sources/ 
rm -rf $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )

# patch
cd $LFS/sources/
APP=patch  
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )


./configure --prefix=/usr   \
            --host=$LFS_TGT \
            --build=$(build-aux/config.guess)
make
make DESTDIR=$LFS install

cd $LFS/sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# sed
cd $LFS/sources/
APP=sed  
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr   \
            --host=$LFS_TGT
make
make DESTDIR=$LFS install

cd $LFS/sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# tar
cd $LFS/sources/
APP=tar  
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr                     \
            --host=$LFS_TGT                   \
            --build=$(build-aux/config.guess)
make
make DESTDIR=$LFS install

cd $LFS/sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# xz
cd $LFS/sources/
APP=xz  
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr                     \
            --host=$LFS_TGT                   \
            --build=$(build-aux/config.guess) \
            --disable-static                  \
            --docdir=/usr/share/doc/xz-5.4.1
make
make DESTDIR=$LFS install
rm -v $LFS/usr/lib/liblzma.la

cd $LFS/sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# binutils pass 2
cd $LFS/sources/
APP=binutils
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

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

make
make DESTDIR=$LFS install
rm -v $LFS/usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes}.{a,la}

cd $LFS/sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# gcc part 2 
cd $LFS/sources/
APP=gcc 
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

tar -xf ../mpfr-4.2.0.tar.xz
mv -v mpfr-4.2.0 mpfr
tar -xf ../gmp-6.2.1.tar.xz
mv -v gmp-6.2.1 gmp
tar -xf ../mpc-1.3.1.tar.gz
mv -v mpc-1.3.1 mpc

case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
  ;;
esac

sed '/thread_header =/s/@.*@/gthr-posix.h/' \
    -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in

mkdir -v 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-libssp                               \
    --disable-libvtv                               \
    --enable-languages=c,c++

make
make DESTDIR=$LFS install
ln -sv gcc $LFS/usr/bin/cc

cd $LFS/sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# As root user
sudo bash
export LFS=/home/vagrant/lfs  
echo $LFS
/home/vagrant/lfs
cd $LFS
chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools}
case $(uname -m) in
  x86_64) chown -R root:root $LFS/lib64 ;;
esac
mkdir -pv $LFS/{dev,proc,sys,run}
mount -v --bind /dev $LFS/dev

mount -v --bind /dev/pts $LFS/dev/pts
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run

if [ -h $LFS/dev/shm ]; then
  mkdir -pv $LFS/$(readlink $LFS/dev/shm)
else
  mount -t tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
fi

chroot "$LFS" /usr/bin/env -i   \
    HOME=/root                  \
    TERM="$TERM"                \
    PS1='(lfs chroot) \u:\w\$ ' \
    PATH=/usr/bin:/usr/sbin     \
    /bin/bash --login
# in chroot state the bash prompt will say "I have no name!"
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/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

ln -sv /proc/self/mounts /etc/mtab

cat > /etc/hosts << "EOF"
127.0.0.1  localhost $(hostname)
::1        localhost
EOF

cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/usr/bin/false
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
EOF

cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem: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:
usb: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:
EOF

echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd
echo "tester:x:101:" >> /etc/group
install -o tester -d /home/tester

exec /usr/bin/bash --login

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

# gettext
cd /sources/
APP=gettext  
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --disable-shared
make
cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin

cd /sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# bison 
cd /sources/
APP=bison   
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr \
            --docdir=/usr/share/doc/bison-3.8.2
make
make install
cd /sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# perl 
cd /sources/
APP=perl 
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

sh Configure -des                                        \
             -Dprefix=/usr                               \
             -Dvendorprefix=/usr                         \
             -Dprivlib=/usr/lib/perl5/5.36/core_perl     \
             -Darchlib=/usr/lib/perl5/5.36/core_perl     \
             -Dsitelib=/usr/lib/perl5/5.36/site_perl     \
             -Dsitearch=/usr/lib/perl5/5.36/site_perl    \
             -Dvendorlib=/usr/lib/perl5/5.36/vendor_perl \
             -Dvendorarch=/usr/lib/perl5/5.36/vendor_perl
make
make install

cd /sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# python 
cd /sources/
APP=Python 
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr   \
            --enable-shared \
            --without-ensurepip
make
make install
cd /sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# texinfo
cd /sources/
APP=texinfo 
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

./configure --prefix=/usr
make
make install

cd /sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# util-linux
cd /sources/
APP=util-linux 
tar xvif $APP*.xz
cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

mkdir -pv /var/lib/hwclock
./configure ADJTIME_PATH=/var/lib/hwclock/adjtime    \
            --libdir=/usr/lib    \
            --docdir=/usr/share/doc/util-linux-2.38.1 \
            --disable-chfn-chsh  \
            --disable-login      \
            --disable-nologin    \
            --disable-su         \
            --disable-setpriv    \
            --disable-runuser    \
            --disable-pylibmount \
            --disable-static     \
            --without-python     \
            runstatedir=/run
make
make install

cd /sources/ 
rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )

# Cleaning
rm -rf /usr/share/{info,man,doc}/*
find /usr/{lib,libexec} -name \*.la -delete
rm -rf /tools

# Backup as root 
exit # leave chroot 
echo $LFS
mountpoint -q $LFS/dev/shm && umount $LFS/dev/shm
umount $LFS/dev/pts
umount $LFS/{sys,proc,run,dev}
cd $LFS
tar -cJpf $HOME/lfs-temp-tools-11.3.tar.xz .

# Restore as root if required 
echo $LFS 
cd $LFS
rm -rf ./*
tar -xpf $HOME/lfs-temp-tools-11.3.tar.xz

Build system based on the cross compiler

   1 # Prepare Virtual Kernel File Systems
   2 findmnt | grep $LFS
   3 mkdir -pv $LFS/{dev,proc,sys,run}
   4 mount -v --bind /dev $LFS/dev
   5 mount -v --bind /dev/pts $LFS/dev/pts
   6 mount -vt proc proc $LFS/proc
   7 mount -vt sysfs sysfs $LFS/sys
   8 mount -vt tmpfs tmpfs $LFS/run
   9 if [ -h $LFS/dev/shm ]; then
  10   mkdir -pv $LFS/$(readlink $LFS/dev/shm)
  11 else
  12   mount -t tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
  13 fi
  14 
  15 # Enter the chroot env
  16 chroot "$LFS" /usr/bin/env -i   \
  17     HOME=/root                  \
  18     TERM="$TERM"                \
  19     PS1='(lfs chroot) \u:\w\$ ' \
  20     PATH=/usr/bin:/usr/sbin     \
  21     /bin/bash --login
  22 
  23 # man pages 
  24 cd /sources/
  25 APP=man-pages
  26 tar xvif $APP*.xz
  27 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
  28 make prefix=/usr install
  29 cd /sources/ 
  30 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
  31 
  32 # iana 
  33 cd /sources/
  34 APP=iana
  35 tar xvif $APP*.gz
  36 cd $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
  37 
  38 cp services protocols /etc
  39 
  40 cd /sources/ 
  41 rm -rf $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
  42 
  43 # glibc
  44 cd /sources/
  45 APP=glibc
  46 tar xvif $APP*.xz
  47 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
  48 
  49 patch -Np1 -i ../glibc-2.37-fhs-1.patch
  50 sed '/width -=/s/workend - string/number_length/' \
  51     -i stdio-common/vfprintf-process-arg.c
  52 mkdir -v build
  53 cd       build
  54 
  55 echo "rootsbindir=/usr/sbin" > configparms
  56 ../configure --prefix=/usr                            \
  57              --disable-werror                         \
  58              --enable-kernel=3.2                      \
  59              --enable-stack-protector=strong          \
  60              --with-headers=/usr/include              \
  61              libc_cv_slibdir=/usr/lib
  62 
  63 make
  64 make check
  65 touch /etc/ld.so.conf
  66 
  67 sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile
  68 make install
  69 sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd
  70 cp -v ../nscd/nscd.conf /etc/nscd.conf
  71 mkdir -pv /var/cache/nscd
  72 
  73 mkdir -pv /usr/lib/locale
  74 
  75 localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true
  76 
  77 localedef -i en_US -f ISO-8859-1 en_US
  78 localedef -i en_US -f UTF-8 en_US.UTF-8
  79 
  80 localedef -i pt_PT -f ISO-8859-1 pt_PT
  81 localedef -i pt_PT@euro -f ISO-8859-15 pt_PT@euro
  82 localedef -i pt_PT -f UTF-8 pt_PT.UTF-8
  83 
  84 make localedata/install-locales
  85 localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true
  86 localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true
  87 
  88 cat > /etc/nsswitch.conf << "EOF"
  89 passwd: files
  90 group: files
  91 shadow: files
  92 
  93 hosts: files dns
  94 networks: files
  95 
  96 protocols: files
  97 services: files
  98 ethers: files
  99 rpc: files
 100 EOF
 101 
 102 tar -xf ../../tzdata2022g.tar.gz
 103 
 104 ZONEINFO=/usr/share/zoneinfo
 105 mkdir -pv $ZONEINFO/{posix,right}
 106 
 107 for tz in etcetera southamerica northamerica europe africa antarctica  \
 108           asia australasia backward; do
 109     zic -L /dev/null   -d $ZONEINFO       ${tz}
 110     zic -L /dev/null   -d $ZONEINFO/posix ${tz}
 111     zic -L leapseconds -d $ZONEINFO/right ${tz}
 112 done
 113 
 114 cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
 115 zic -d $ZONEINFO -p America/New_York
 116 unset ZONEINFO
 117 
 118 echo -e "7\n 37\n 1\n 1\n" | tzselect
 119 # 7\n 37\n 1\n 1\n
 120 # Europe Portugal Mainland yes 
 121 ln -sfv /usr/share/zoneinfo/Europe/Portugal /etc/localtime
 122 
 123 cat > /etc/ld.so.conf << "EOF"
 124 /usr/local/lib
 125 /opt/lib
 126 # Add an include directory
 127 include /etc/ld.so.conf.d/*.conf
 128 EOF
 129 
 130 mkdir -pv /etc/ld.so.conf.d
 131 cd /sources/ 
 132 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 133 
 134 # zlib 
 135 cd /sources/
 136 APP=zlib
 137 tar xvif $APP*.xz
 138 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 139 
 140 ./configure --prefix=/usr
 141 make
 142 make check
 143 make install
 144 rm -fv /usr/lib/libz.a
 145 
 146 cd /sources/ 
 147 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 148 
 149 # bzip2
 150 cd /sources/
 151 APP=bzip2 
 152 tar xvif $APP*.gz
 153 cd $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 154 
 155 patch -Np1 -i ../bzip2-1.0.8-install_docs-1.patch
 156 sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile
 157 sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile
 158 make -f Makefile-libbz2_so
 159 make clean
 160 make
 161 make PREFIX=/usr install
 162 cp -av libbz2.so.* /usr/lib
 163 ln -sv libbz2.so.1.0.8 /usr/lib/libbz2.so
 164 
 165 cp -v bzip2-shared /usr/bin/bzip2
 166 for i in /usr/bin/{bzcat,bunzip2}; do
 167   ln -sfv bzip2 $i
 168 done
 169 
 170 rm -fv /usr/lib/libbz2.a
 171 
 172 cd /sources/ 
 173 rm -rf $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 174 
 175 # xz
 176 cd /sources/
 177 APP=xz
 178 tar xvif $APP*.xz
 179 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 180 
 181 ./configure --prefix=/usr    \
 182             --disable-static \
 183             --docdir=/usr/share/doc/xz-5.4.1
 184 
 185 make
 186 make check
 187 make install
 188 
 189 cd /sources/ 
 190 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 191 
 192 # zstd
 193 cd /sources/
 194 APP=zstd
 195 tar xvif $APP*.gz
 196 cd $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 197 
 198 make prefix=/usr
 199 make check
 200 make prefix=/usr install
 201 rm -v /usr/lib/libzstd.a
 202 
 203 cd /sources/ 
 204 rm -rf $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 205 
 206 # file
 207 cd /sources/
 208 APP=file
 209 EXTENSION=gz
 210 tar xvif $APP*.$EXTENSION
 211 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 212 
 213 ./configure --prefix=/usr
 214 make
 215 make check
 216 make install
 217 
 218 cd /sources/ 
 219 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 220 
 221 # readline
 222 cd /sources/
 223 APP=readline
 224 tar xvif $APP*.gz
 225 cd $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 226 
 227 sed -i '/MV.*old/d' Makefile.in
 228 sed -i '/{OLDSUFF}/c:' support/shlib-install
 229 patch -Np1 -i ../readline-8.2-upstream_fix-1.patch
 230 
 231 ./configure --prefix=/usr    \
 232             --disable-static \
 233             --with-curses    \
 234             --docdir=/usr/share/doc/readline-8.2
 235 
 236 make SHLIB_LIBS="-lncursesw"
 237 make SHLIB_LIBS="-lncursesw" install
 238 install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-8.2
 239 
 240 cd /sources/ 
 241 rm -rf $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 242 
 243 # m4
 244 cd /sources/
 245 APP=m4 
 246 EXTENSION=xz
 247 tar xvif $APP*.$EXTENSION
 248 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 249 
 250 ./configure --prefix=/usr
 251 make
 252 make check
 253 make install
 254 
 255 cd /sources/ 
 256 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 257 
 258 # bc
 259 cd /sources/
 260 APP=bc
 261 EXTENSION=xz
 262 tar xvif $APP*.$EXTENSION
 263 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 264 
 265 CC=gcc ./configure --prefix=/usr -G -O3 -r
 266 make
 267 make test
 268 make install
 269 
 270 cd /sources/ 
 271 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 272 
 273 # flex
 274 cd /sources/
 275 APP=flex
 276 EXTENSION=gz
 277 tar xvif $APP*.$EXTENSION
 278 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 279 
 280 ./configure --prefix=/usr \
 281             --docdir=/usr/share/doc/flex-2.6.4 \
 282             --disable-static
 283 
 284 make
 285 make check
 286 make install
 287 ln -sv flex /usr/bin/lex
 288 
 289 cd /sources/ 
 290 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 291 
 292 # tcl 
 293 cd /sources/
 294 APP=tcl8.6.13-src
 295 EXTENSION=gz
 296 FOLDER=tcl8.6.13
 297 tar xvzf $APP*.$EXTENSION
 298 cd $FOLDER
 299 
 300 SRCDIR=$(pwd)
 301 cd unix
 302 ./configure --prefix=/usr           \
 303             --mandir=/usr/share/man
 304 
 305 make
 306 sed -e "s|$SRCDIR/unix|/usr/lib|" \
 307     -e "s|$SRCDIR|/usr/include|"  \
 308     -i tclConfig.sh
 309 
 310 sed -e "s|$SRCDIR/unix/pkgs/tdbc1.1.5|/usr/lib/tdbc1.1.5|" \
 311     -e "s|$SRCDIR/pkgs/tdbc1.1.5/generic|/usr/include|"    \
 312     -e "s|$SRCDIR/pkgs/tdbc1.1.5/library|/usr/lib/tcl8.6|" \
 313     -e "s|$SRCDIR/pkgs/tdbc1.1.5|/usr/include|"            \
 314     -i pkgs/tdbc1.1.5/tdbcConfig.sh
 315 
 316 sed -e "s|$SRCDIR/unix/pkgs/itcl4.2.3|/usr/lib/itcl4.2.3|" \
 317     -e "s|$SRCDIR/pkgs/itcl4.2.3/generic|/usr/include|"    \
 318     -e "s|$SRCDIR/pkgs/itcl4.2.3|/usr/include|"            \
 319     -i pkgs/itcl4.2.3/itclConfig.sh
 320 
 321 unset SRCDIR
 322 
 323 make test
 324 make install
 325 
 326 chmod -v u+w /usr/lib/libtcl8.6.so
 327 
 328 make install-private-headers
 329 ln -sfv tclsh8.6 /usr/bin/tclsh
 330 mv /usr/share/man/man3/{Thread,Tcl_Thread}.3
 331 cd ..
 332 tar -xf ../tcl8.6.13-html.tar.gz --strip-components=1
 333 mkdir -v -p /usr/share/doc/tcl-8.6.13
 334 cp -v -r  ./html/* /usr/share/doc/tcl-8.6.13
 335 
 336 cd /sources/ 
 337 rm -rf $FOLDER
 338 
 339 # expect
 340 cd /sources/
 341 APP=expect
 342 EXTENSION=gz
 343 tar xvif $APP*.$EXTENSION
 344 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 345 
 346 ./configure --prefix=/usr           \
 347             --with-tcl=/usr/lib     \
 348             --enable-shared         \
 349             --mandir=/usr/share/man \
 350             --with-tclinclude=/usr/include
 351 
 352 make
 353 make test
 354 make install
 355 ln -svf expect5.45.4/libexpect5.45.4.so /usr/lib
 356                         
 357 cd /sources/ 
 358 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 359 
 360 
 361 # dejagnu
 362 cd /sources/
 363 APP=dejagnu
 364 EXTENSION=gz
 365 tar xvif $APP*.$EXTENSION
 366 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 367                         
 368 mkdir -v build
 369 cd       build
 370 
 371 ../configure --prefix=/usr
 372 makeinfo --html --no-split -o doc/dejagnu.html ../doc/dejagnu.texi
 373 makeinfo --plaintext       -o doc/dejagnu.txt  ../doc/dejagnu.texi
 374 
 375 make install
 376 install -v -dm755  /usr/share/doc/dejagnu-1.6.3
 377 install -v -m644   doc/dejagnu.{html,txt} /usr/share/doc/dejagnu-1.6.3
 378 
 379 make check
 380 
 381 cd /sources/ 
 382 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 383 
 384 
 385 # binutils
 386 cd /sources/
 387 APP=binutils
 388 EXTENSION=xz
 389 tar xvif $APP*.$EXTENSION
 390 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 391 
 392 expect -c "spawn ls"
 393 mkdir -v build
 394 cd       build
 395 
 396 ../configure --prefix=/usr       \
 397              --sysconfdir=/etc   \
 398              --enable-gold       \
 399              --enable-ld=default \
 400              --enable-plugins    \
 401              --enable-shared     \
 402              --disable-werror    \
 403              --enable-64-bit-bfd \
 404              --with-system-zlib
 405 make tooldir=/usr
 406 
 407 make -k check
 408 grep '^FAIL:' $(find -name '*.log')
 409 # expected to 12 tests fail 
 410 grep '^FAIL:' $(find -name '*.log') | wc -l 
 411 
 412 make tooldir=/usr install
 413 rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,sframe,opcodes}.a
 414 rm -fv /usr/share/man/man1/{gprofng,gp-*}.1
 415 
 416 cd /sources/ 
 417 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 418 
 419 # gmp
 420 cd /sources/
 421 APP=gmp
 422 EXTENSION=xz
 423 tar xvif $APP*.$EXTENSION
 424 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 425 
 426 cp -v configfsf.guess config.guess
 427 cp -v configfsf.sub   config.sub
 428 
 429 ./configure --prefix=/usr    \
 430             --enable-cxx     \
 431             --disable-static \
 432             --docdir=/usr/share/doc/gmp-6.2.1
 433 make
 434 make html
 435 make check 2>&1 | tee gmp-check-log
 436 awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log
 437 # check all 197 pass 
 438 make install
 439 make install-html
 440 
 441 cd /sources/ 
 442 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 443 
 444 
 445 # mpfr
 446 cd /sources/
 447 APP=mpfr
 448 EXTENSION=xz
 449 tar xvif $APP*.$EXTENSION
 450 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 451 
 452 sed -e 's/+01,234,567/+1,234,567 /' \
 453     -e 's/13.10Pd/13Pd/'            \
 454     -i tests/tsprintf.c
 455 
 456 ./configure --prefix=/usr        \
 457             --disable-static     \
 458             --enable-thread-safe \
 459             --docdir=/usr/share/doc/mpfr-4.2.0
 460 make
 461 make html
 462 make check
 463 # ensure that all 197 tests passed
 464 make install
 465 make install-html
 466 
 467 cd /sources/ 
 468 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 469 
 470 # mpc 
 471 cd /sources/
 472 APP=mpc
 473 EXTENSION=gz
 474 tar xvif $APP*.$EXTENSION
 475 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 476 
 477 
 478 ./configure --prefix=/usr    \
 479             --disable-static \
 480             --docdir=/usr/share/doc/mpc-1.3.1
 481 
 482 make
 483 make html
 484 make check
 485 make install
 486 make install-html
 487 
 488 cd /sources/ 
 489 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 490 
 491 # attr
 492 cd /sources/
 493 APP=attr
 494 EXTENSION=gz
 495 tar xvif $APP*.$EXTENSION
 496 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 497 
 498 ./configure --prefix=/usr     \
 499             --disable-static  \
 500             --sysconfdir=/etc \
 501             --docdir=/usr/share/doc/attr-2.5.1
 502 
 503 make
 504 make check
 505 make install
 506 
 507 cd /sources/ 
 508 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 509 
 510 # acl
 511 cd /sources/
 512 APP=acl
 513 EXTENSION=xz
 514 tar xvif $APP*.$EXTENSION
 515 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 516 
 517 ./configure --prefix=/usr         \
 518             --disable-static      \
 519             --docdir=/usr/share/doc/acl-2.3.1
 520 
 521 make
 522 make install
 523 
 524 cd /sources/ 
 525 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 526 
 527 # libcap
 528 cd /sources/
 529 APP=libcap
 530 EXTENSION=xz
 531 tar xvif $APP*.$EXTENSION
 532 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 533 
 534 sed -i '/install -m.*STA/d' libcap/Makefile
 535 make prefix=/usr lib=lib
 536 make test
 537 make prefix=/usr lib=lib install
 538 
 539 cd /sources/ 
 540 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 541 
 542 # shadow
 543 cd /sources/
 544 APP=shadow
 545 EXTENSION=xz
 546 tar xvif $APP*.$EXTENSION
 547 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 548 
 549 sed -i 's/groups$(EXEEXT) //' src/Makefile.in
 550 find man -name Makefile.in -exec sed -i 's/groups\.1 / /'   {} \;
 551 find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \;
 552 find man -name Makefile.in -exec sed -i 's/passwd\.5 / /'   {} \;
 553 
 554 sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD SHA512:' \
 555     -e 's@#\(SHA_CRYPT_..._ROUNDS 5000\)@\100@'       \
 556     -e 's:/var/spool/mail:/var/mail:'                 \
 557     -e '/PATH=/{s@/sbin:@@;s@/bin:@@}'                \
 558     -i etc/login.defs
 559 
 560 # no cracklib support   
 561 
 562 touch /usr/bin/passwd
 563 ./configure --sysconfdir=/etc \
 564             --disable-static  \
 565             --with-group-name-max-length=32
 566 
 567 make
 568 make exec_prefix=/usr install
 569 make -C man install-man
 570 
 571 pwconv
 572 grpconv
 573 mkdir -p /etc/default
 574 useradd -D --gid 999
 575 
 576 sed -i '/MAIL/s/yes/no/' /etc/default/useradd
 577 # input root pwd
 578 passwd root
 579                         
 580 cd /sources/ 
 581 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 582 
 583 # gcc
 584 cd /sources/
 585 APP=gcc
 586 EXTENSION=xz
 587 tar xvif $APP*.$EXTENSION
 588 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 589 
 590 case $(uname -m) in
 591   x86_64)
 592     sed -e '/m64=/s/lib64/lib/' \
 593         -i.orig gcc/config/i386/t-linux64
 594   ;;
 595 esac
 596 
 597 mkdir -v build
 598 cd       build
 599 
 600 ../configure --prefix=/usr            \
 601              LD=ld                    \
 602              --enable-languages=c,c++ \
 603              --enable-default-pie     \
 604              --enable-default-ssp     \
 605              --disable-multilib       \
 606              --disable-bootstrap      \
 607              --with-system-zlib
 608 
 609 time make # 43 SBU # real       65m28.356s
 610 ulimit -s 32768
 611 chown -Rv tester .
 612 su tester -c "PATH=$PATH make -k check" # started 16:14
 613 ../contrib/test_summary
 614 
 615 make install
 616 chown -v -R root:root \
 617     /usr/lib/gcc/$(gcc -dumpmachine)/12.2.0/include{,-fixed}
 618 ln -svr /usr/bin/cpp /usr/lib
 619 ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/12.2.0/liblto_plugin.so \
 620         /usr/lib/bfd-plugins/
 621 
 622 echo 'int main(){}' > dummy.c
 623 cc dummy.c -v -Wl,--verbose &> dummy.log
 624 readelf -l a.out | grep ': /lib'
 625 # should show
 626 # [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
 627 
 628 grep -E -o '/usr/lib.*/S?crt[1in].*succeeded' dummy.log
 629 grep -B4 '^ /usr/include' dummy.log
 630 grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
 631 grep "/lib.*/libc.so.6 " dummy.log
 632 rm -v dummy.c a.out dummy.log
 633 
 634 mkdir -pv /usr/share/gdb/auto-load/usr/lib
 635 mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib
 636 
 637 cd /sources/ 
 638 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 639 
 640 # pkg-config
 641 cd /sources/
 642 APP=pkg-config
 643 EXTENSION=gz
 644 tar xvif $APP*.$EXTENSION
 645 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 646 
 647 ./configure --prefix=/usr              \
 648             --with-internal-glib       \
 649             --disable-host-tool        \
 650             --docdir=/usr/share/doc/pkg-config-0.29.2
 651 make
 652 make check
 653 make install
 654 
 655 cd /sources/ 
 656 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 657 
 658 # ncurses
 659 cd /sources/
 660 APP=ncurses
 661 EXTENSION=gz
 662 tar xvif $APP*.$EXTENSION
 663 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 664 
 665 ./configure --prefix=/usr           \
 666             --mandir=/usr/share/man \
 667             --with-shared           \
 668             --without-debug         \
 669             --without-normal        \
 670             --with-cxx-shared       \
 671             --enable-pc-files       \
 672             --enable-widec          \
 673             --with-pkg-config-libdir=/usr/lib/pkgconfig
 674 
 675 make
 676 make DESTDIR=$PWD/dest install
 677 install -vm755 dest/usr/lib/libncursesw.so.6.4 /usr/lib
 678 rm -v  dest/usr/lib/libncursesw.so.6.4
 679 cp -av dest/* /
 680 
 681 for lib in ncurses form panel menu ; do
 682     rm -vf                    /usr/lib/lib${lib}.so
 683     echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so
 684     ln -sfv ${lib}w.pc        /usr/lib/pkgconfig/${lib}.pc
 685 done
 686 
 687 rm -vf                     /usr/lib/libcursesw.so
 688 echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so
 689 ln -sfv libncurses.so      /usr/lib/libcurses.so
 690 
 691 mkdir -pv      /usr/share/doc/ncurses-6.4
 692 cp -v -R doc/* /usr/share/doc/ncurses-6.4
 693 
 694 cd /sources/ 
 695 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 696 
 697 # sed 
 698 cd /sources/
 699 APP=sed
 700 EXTENSION=xz
 701 tar xvif $APP*.$EXTENSION
 702 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 703 
 704 ./configure --prefix=/usr
 705 
 706 make
 707 make html
 708 chown -Rv tester .
 709 su tester -c "PATH=$PATH make check"
 710 
 711 make install
 712 install -d -m755           /usr/share/doc/sed-4.9
 713 install -m644 doc/sed.html /usr/share/doc/sed-4.9
 714 
 715 cd /sources/ 
 716 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 717 
 718 # psmisc
 719 cd /sources/
 720 APP=psmisc
 721 EXTENSION=xz
 722 tar xvif $APP*.$EXTENSION
 723 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 724 
 725 ./configure --prefix=/usr
 726 make
 727 make install
 728 
 729 cd /sources/ 
 730 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 731 
 732 # gettext
 733 cd /sources/
 734 APP=gettext
 735 EXTENSION=xz
 736 tar xvif $APP*.$EXTENSION
 737 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 738 
 739 ./configure --prefix=/usr    \
 740             --disable-static \
 741             --docdir=/usr/share/doc/gettext-0.21.1
 742 
 743 make
 744 make check
 745 make install
 746 chmod -v 0755 /usr/lib/preloadable_libintl.so
 747 
 748 cd /sources/ 
 749 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 750 
 751 # bison 
 752 cd /sources/
 753 APP=bison
 754 EXTENSION=xz
 755 tar xvif $APP*.$EXTENSION
 756 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 757 
 758 ./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.8.2
 759 make
 760 make check
 761 make install
 762 
 763 cd /sources/ 
 764 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 765 
 766 # grep
 767 cd /sources/
 768 APP=grep
 769 EXTENSION=xz
 770 tar xvif $APP*.$EXTENSION
 771 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 772 
 773 sed -i "s/echo/#echo/" src/egrep.sh
 774 ./configure --prefix=/usr
 775 make
 776 make check
 777 make install
 778 
 779 cd /sources/ 
 780 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 781 
 782 # bash
 783 cd /sources/
 784 APP=bash
 785 EXTENSION=gz
 786 tar xvif $APP*.$EXTENSION
 787 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 788 
 789 ./configure --prefix=/usr             \
 790             --without-bash-malloc     \
 791             --with-installed-readline \
 792             --docdir=/usr/share/doc/bash-5.2.15
 793 
 794 make
 795 chown -Rv tester .
 796 su -s /usr/bin/expect tester << EOF
 797 set timeout -1
 798 spawn make tests
 799 expect eof
 800 lassign [wait] _ _ _ value
 801 exit $value
 802 EOF
 803 
 804 make install
 805 exec /usr/bin/bash --login
 806 
 807 cd /sources/ 
 808 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 809 
 810 # libtool
 811 cd /sources/
 812 APP=libtool
 813 EXTENSION=xz
 814 tar xvif $APP*.$EXTENSION
 815 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 816 
 817 ./configure --prefix=/usr
 818 make
 819 make -k check
 820 make install
 821 rm -fv /usr/lib/libltdl.a
 822 
 823 cd /sources/ 
 824 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 825 
 826 # gdbm
 827 cd /sources/
 828 APP=gdbm
 829 EXTENSION=gz
 830 tar xvif $APP*.$EXTENSION
 831 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 832 
 833 ./configure --prefix=/usr    \
 834             --disable-static \
 835             --enable-libgdbm-compat
 836 
 837 make
 838 make check
 839 make install
 840 
 841 cd /sources/ 
 842 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 843 
 844 # gperf
 845 cd /sources/
 846 APP=gperf
 847 EXTENSION=gz
 848 tar xvif $APP*.$EXTENSION
 849 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 850 
 851 ./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1
 852 make
 853 make -j1 check
 854 make install
 855 
 856 cd /sources/ 
 857 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 858 
 859 # expat
 860 cd /sources/
 861 APP=expat
 862 EXTENSION=xz
 863 tar xvif $APP*.$EXTENSION
 864 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 865 
 866 ./configure --prefix=/usr    \
 867             --disable-static \
 868             --docdir=/usr/share/doc/expat-2.5.0
 869 
 870 make
 871 make check
 872 make install
 873 install -v -m644 doc/*.{html,css} /usr/share/doc/expat-2.5.0
 874 
 875 cd /sources/ 
 876 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 877 
 878 # inetutils 
 879 cd /sources/
 880 APP=inetutils
 881 EXTENSION=xz
 882 tar xvif $APP*.$EXTENSION
 883 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 884 
 885 ./configure --prefix=/usr        \
 886             --bindir=/usr/bin    \
 887             --localstatedir=/var \
 888             --disable-logger     \
 889             --disable-whois      \
 890             --disable-rcp        \
 891             --disable-rexec      \
 892             --disable-rlogin     \
 893             --disable-rsh        \
 894             --disable-servers
 895 
 896 make
 897 make check
 898 make install
 899 mv -v /usr/{,s}bin/ifconfig
 900 cd /sources/ 
 901 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 902 
 903 # less
 904 cd /sources/
 905 APP=less
 906 EXTENSION=gz
 907 tar xvif $APP*.$EXTENSION
 908 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 909 
 910 ./configure --prefix=/usr --sysconfdir=/etc
 911 make
 912 make install
 913 
 914 cd /sources/ 
 915 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 916 
 917 # perl
 918 cd /sources/
 919 APP=perl
 920 EXTENSION=xz
 921 tar xvif $APP*.$EXTENSION
 922 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 923 
 924 export BUILD_ZLIB=False
 925 export BUILD_BZIP2=0
 926 
 927 sh Configure -des                                         \
 928              -Dprefix=/usr                                \
 929              -Dvendorprefix=/usr                          \
 930              -Dprivlib=/usr/lib/perl5/5.36/core_perl      \
 931              -Darchlib=/usr/lib/perl5/5.36/core_perl      \
 932              -Dsitelib=/usr/lib/perl5/5.36/site_perl      \
 933              -Dsitearch=/usr/lib/perl5/5.36/site_perl     \
 934              -Dvendorlib=/usr/lib/perl5/5.36/vendor_perl  \
 935              -Dvendorarch=/usr/lib/perl5/5.36/vendor_perl \
 936              -Dman1dir=/usr/share/man/man1                \
 937              -Dman3dir=/usr/share/man/man3                \
 938              -Dpager="/usr/bin/less -isR"                 \
 939              -Duseshrplib                                 \
 940              -Dusethreads
 941 make
 942 make test
 943 make install
 944 unset BUILD_ZLIB BUILD_BZIP2
 945 
 946 cd /sources/ 
 947 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 948 
 949 # XML-Parser
 950 cd /sources/
 951 APP=XML-Parser
 952 EXTENSION=gz
 953 tar xvif $APP*.$EXTENSION
 954 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 955 
 956 perl Makefile.PL
 957 make
 958 make test
 959 make install
 960 
 961 cd /sources/ 
 962 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 963 
 964 # intltool-0.51.0.tar.gz
 965 cd /sources/
 966 APP=intltool
 967 EXTENSION=gz
 968 tar xvif $APP*.$EXTENSION
 969 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 970 
 971 sed -i 's:\\\${:\\\$\\{:' intltool-update.in
 972 ./configure --prefix=/usr
 973 make
 974 make check
 975 make install
 976 install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO
 977 
 978 cd /sources/ 
 979 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 980 
 981 # autoconf-2.71.tar.xz
 982 cd /sources/
 983 APP=autoconf
 984 EXTENSION=xz
 985 tar xvif $APP*.$EXTENSION
 986 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 987 
 988 sed -e 's/SECONDS|/&SHLVL|/'               \
 989     -e '/BASH_ARGV=/a\        /^SHLVL=/ d' \
 990     -i.orig tests/local.at
 991 
 992 ./configure --prefix=/usr
 993 make
 994 make check
 995 make install
 996 
 997 cd /sources/ 
 998 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 999 
1000 # automake-1.16.5.tar.xz
1001 cd /sources/
1002 APP=automake
1003 EXTENSION=xz
1004 tar xvif $APP*.$EXTENSION
1005 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1006 
1007 ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.16.5
1008 
1009 make
1010 make -j4 check
1011 make install
1012 
1013 cd /sources/ 
1014 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1015 
1016 # openssl-3.0.8.tar.gz
1017 cd /sources/
1018 APP=openssl
1019 EXTENSION=gz
1020 tar xvif $APP*.$EXTENSION
1021 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1022 
1023 ./config --prefix=/usr         \
1024          --openssldir=/etc/ssl \
1025          --libdir=lib          \
1026          shared                \
1027          zlib-dynamic
1028 
1029 make
1030 make test
1031 sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile
1032 make MANSUFFIX=ssl install
1033 mv -v /usr/share/doc/openssl /usr/share/doc/openssl-3.0.8
1034 cp -vfr doc/* /usr/share/doc/openssl-3.0.8
1035 
1036 cd /sources/ 
1037 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1038 
1039 # kmod-30.tar.xz
1040 cd /sources/
1041 APP=kmod
1042 EXTENSION=xz
1043 tar xvif $APP*.$EXTENSION
1044 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1045 
1046 ./configure --prefix=/usr          \
1047             --sysconfdir=/etc      \
1048             --with-openssl         \
1049             --with-xz              \
1050             --with-zstd            \
1051             --with-zlib
1052 
1053 make
1054 make install
1055 
1056 for target in depmod insmod modinfo modprobe rmmod; do
1057   ln -sfv ../bin/kmod /usr/sbin/$target
1058 done
1059 
1060 ln -sfv kmod /usr/bin/lsmod
1061 
1062 cd /sources/ 
1063 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1064 
1065 # elfutils-0.188.tar.bz2
1066 cd /sources/
1067 APP=elfutils
1068 EXTENSION=bz2
1069 tar xvif $APP*.$EXTENSION
1070 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1071 
1072 ./configure --prefix=/usr                \
1073             --disable-debuginfod         \
1074             --enable-libdebuginfod=dummy
1075 
1076 make
1077 make check
1078 make -C libelf install
1079 install -vm644 config/libelf.pc /usr/lib/pkgconfig
1080 rm /usr/lib/libelf.a
1081 
1082 cd /sources/ 
1083 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1084 
1085 # libffi-3.4.4.tar.gz
1086 cd /sources/
1087 APP=libffi
1088 EXTENSION=gz
1089 tar xvzf $APP*.$EXTENSION
1090 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1091 
1092 ./configure --prefix=/usr          \
1093             --disable-static       \
1094             --with-gcc-arch=native
1095 
1096 make
1097 make check
1098 make install
1099 
1100 cd /sources/ 
1101 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1102 
1103 # Python-3.11.2.tar.xz
1104 cd /sources/
1105 APP=Python-3
1106 EXTENSION=xz
1107 tar xvif $APP*.$EXTENSION
1108 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1109 
1110 ./configure --prefix=/usr        \
1111             --enable-shared      \
1112             --with-system-expat  \
1113             --with-system-ffi    \
1114             --enable-optimizations
1115 
1116 make
1117 make install
1118 
1119 cat > /etc/pip.conf << "EOF"
1120 [global]
1121 root-user-action = ignore
1122 disable-pip-version-check = true
1123 EOF
1124 
1125 install -v -dm755 /usr/share/doc/python-3.11.2/html
1126 
1127 tar --strip-components=1  \
1128     --no-same-owner       \
1129     --no-same-permissions \
1130     -C /usr/share/doc/python-3.11.2/html \
1131     -xvf ../python-3.11.2-docs-html.tar.bz2
1132 
1133 cd /sources/ 
1134 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1135 
1136 # wheel-0.38.4.tar.gz
1137 cd /sources/
1138 APP=wheel
1139 EXTENSION=gz
1140 tar xvzf $APP*.$EXTENSION
1141 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1142 
1143 PYTHONPATH=src pip3 wheel -w dist --no-build-isolation --no-deps $PWD
1144 pip3 install --no-index --find-links=dist wheel
1145 
1146 cd /sources/ 
1147 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1148 
1149 # ninja-1.11.1.tar.gz
1150 cd /sources/
1151 APP=ninja
1152 EXTENSION=gz
1153 tar xvzf $APP*.$EXTENSION
1154 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1155 
1156 export NINJAJOBS=4
1157 
1158 sed -i '/int Guess/a \
1159   int   j = 0;\
1160   char* jobs = getenv( "NINJAJOBS" );\
1161   if ( jobs != NULL ) j = atoi( jobs );\
1162   if ( j > 0 ) return j;\
1163 ' src/ninja.cc
1164 
1165 python3 configure.py --bootstrap
1166 
1167 ./ninja ninja_test
1168 ./ninja_test --gtest_filter=-SubprocessTest.SetWithLots
1169 
1170 install -vm755 ninja /usr/bin/
1171 install -vDm644 misc/bash-completion /usr/share/bash-completion/completions/ninja
1172 install -vDm644 misc/zsh-completion  /usr/share/zsh/site-functions/_ninja
1173 
1174 cd /sources/ 
1175 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1176 
1177 # meson-1.0.0.tar.gz
1178 cd /sources/
1179 APP=meson
1180 EXTENSION=gz
1181 tar xvzf $APP*.$EXTENSION
1182 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1183 
1184 pip3 wheel -w dist --no-build-isolation --no-deps $PWD
1185 pip3 install --no-index --find-links dist meson
1186 install -vDm644 data/shell-completions/bash/meson /usr/share/bash-completion/completions/meson
1187 install -vDm644 data/shell-completions/zsh/_meson /usr/share/zsh/site-functions/_meson
1188 
1189 cd /sources/ 
1190 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1191 
1192 # coreutils-9.1.tar.xz
1193 cd /sources/
1194 APP=coreutils
1195 EXTENSION=xz
1196 tar xvif $APP*.$EXTENSION
1197 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1198 
1199 patch -Np1 -i ../coreutils-9.1-i18n-1.patch
1200 
1201 autoreconf -fiv
1202 FORCE_UNSAFE_CONFIGURE=1 ./configure \
1203             --prefix=/usr            \
1204             --enable-no-install-program=kill,uptime
1205 
1206 make
1207 make NON_ROOT_USERNAME=tester check-root
1208 
1209 echo "dummy:x:102:tester" >> /etc/group
1210 
1211 chown -Rv tester . 
1212 su tester -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"
1213 sed -i '/dummy/d' /etc/group
1214 
1215 make install
1216 
1217 mv -v /usr/bin/chroot /usr/sbin
1218 mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
1219 sed -i 's/"1"/"8"/' /usr/share/man/man8/chroot.8
1220 
1221 cd /sources/ 
1222 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1223 
1224 # check-0.15.2.tar.gz
1225 cd /sources/
1226 APP=check
1227 EXTENSION=gz
1228 tar xvzf $APP*.$EXTENSION
1229 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1230 
1231 
1232 ./configure --prefix=/usr --disable-static
1233 
1234 make
1235 make check
1236 make docdir=/usr/share/doc/check-0.15.2 install
1237 
1238 cd /sources/ 
1239 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1240 
1241 # diffutils-3.9.tar.xz
1242 cd /sources/
1243 APP=diffutils
1244 EXTENSION=xz
1245 tar xvif $APP*.$EXTENSION
1246 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1247 
1248 ./configure --prefix=/usr
1249 make
1250 make check
1251 make install
1252 
1253 cd /sources/ 
1254 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1255 
1256 # gawk-5.2.1.tar.xz
1257 cd /sources/
1258 APP=gawk
1259 EXTENSION=xz
1260 tar xvif $APP*.$EXTENSION
1261 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1262 
1263 sed -i 's/extras//' Makefile.in
1264 ./configure --prefix=/usr
1265 make
1266 make check
1267 make LN='ln -f' install
1268 mkdir -pv                                   /usr/share/doc/gawk-5.2.1
1269 cp    -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-5.2.1
1270 
1271 cd /sources/ 
1272 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1273 
1274 # findutils-4.9.0.tar.xz
1275 cd /sources/
1276 APP=findutils
1277 EXTENSION=xz
1278 tar xvif $APP*.$EXTENSION
1279 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1280 
1281 case $(uname -m) in
1282     i?86)   TIME_T_32_BIT_OK=yes ./configure --prefix=/usr --localstatedir=/var/lib/locate ;;
1283     x86_64) ./configure --prefix=/usr --localstatedir=/var/lib/locate ;;
1284 esac
1285 
1286 make
1287 chown -Rv tester .
1288 su tester -c "PATH=$PATH make check"
1289 make install
1290 
1291 cd /sources/ 
1292 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1293 
1294 # groff-1.22.4.tar.gz
1295 cd /sources/
1296 APP=groff
1297 EXTENSION=gz
1298 tar xvzf $APP*.$EXTENSION
1299 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1300 
1301 PAGE=A4 ./configure --prefix=/usr
1302 
1303 make
1304 make install
1305 
1306 cd /sources/ 
1307 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1308 
1309 # grub-2.06.tar.xz
1310 cd /sources/
1311 APP=grub
1312 EXTENSION=xz
1313 tar xvif $APP*.$EXTENSION
1314 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1315 
1316 unset {C,CPP,CXX,LD}FLAGS
1317 patch -Np1 -i ../grub-2.06-upstream_fixes-1.patch
1318 
1319 ./configure --prefix=/usr          \
1320             --sysconfdir=/etc      \
1321             --disable-efiemu       \
1322             --disable-werror
1323 
1324 make
1325 make install
1326 mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions
1327 
1328 cd /sources/ 
1329 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1330 
1331 # gzip-1.12.tar.xz
1332 cd /sources/
1333 APP=gzip
1334 EXTENSION=xz
1335 tar xvif $APP*.$EXTENSION
1336 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1337 
1338 ./configure --prefix=/usr
1339 make
1340 make check
1341 make install
1342 
1343 cd /sources/ 
1344 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1345 
1346 # iproute2-6.1.0.tar.xz
1347 cd /sources/
1348 APP=iproute2
1349 EXTENSION=xz
1350 tar xvif $APP*.$EXTENSION
1351 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1352 
1353 sed -i /ARPD/d Makefile
1354 rm -fv man/man8/arpd.8
1355 
1356 make NETNS_RUN_DIR=/run/netns
1357 make SBINDIR=/usr/sbin install
1358 mkdir -pv             /usr/share/doc/iproute2-6.1.0
1359 cp -v COPYING README* /usr/share/doc/iproute2-6.1.0
1360 
1361 cd /sources/ 
1362 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1363 
1364 # kbd-2.5.1.tar.xz
1365 cd /sources/
1366 APP=kbd
1367 EXTENSION=xz
1368 tar xvif $APP*.$EXTENSION
1369 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1370 
1371 patch -Np1 -i ../kbd-2.5.1-backspace-1.patch
1372 
1373 sed -i '/RESIZECONS_PROGS=/s/yes/no/' configure
1374 sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in
1375 
1376 ./configure --prefix=/usr --disable-vlock
1377 
1378 make
1379 make check
1380 make install
1381 
1382 mkdir -pv           /usr/share/doc/kbd-2.5.1
1383 cp -R -v docs/doc/* /usr/share/doc/kbd-2.5.1
1384 
1385 cd /sources/ 
1386 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1387 
1388 # libpipeline-1.5.7.tar.gz
1389 cd /sources/
1390 APP=libpipeline
1391 EXTENSION=gz
1392 tar xvzf $APP*.$EXTENSION
1393 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1394 
1395 ./configure --prefix=/usr
1396 make
1397 make check
1398 make install
1399 
1400 cd /sources/ 
1401 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1402 
1403 # make-4.4.tar.gz
1404 cd /sources/
1405 APP=make
1406 EXTENSION=gz
1407 tar xvzf $APP*.$EXTENSION
1408 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1409 
1410 sed -e '/ifdef SIGPIPE/,+2 d' \
1411     -e '/undef  FATAL_SIG/i FATAL_SIG (SIGPIPE);' \
1412     -i src/main.c
1413 
1414 ./configure --prefix=/usr
1415 make
1416 make check
1417 make install
1418 
1419 cd /sources/ 
1420 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1421 
1422 # patch-2.7.6.tar.xz
1423 cd /sources/
1424 APP=patch
1425 EXTENSION=xz
1426 tar xvif $APP*.$EXTENSION
1427 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1428 
1429 ./configure --prefix=/usr
1430 make
1431 make check
1432 make install
1433 
1434 cd /sources/ 
1435 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1436 
1437 # tar-1.34.tar.xz
1438 cd /sources/
1439 APP=tar
1440 EXTENSION=xz
1441 tar xvif $APP*.$EXTENSION
1442 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1443 
1444 FORCE_UNSAFE_CONFIGURE=1  \
1445 ./configure --prefix=/usr
1446 
1447 make
1448 make check
1449 make install
1450 make -C doc install-html docdir=/usr/share/doc/tar-1.34
1451 
1452 cd /sources/ 
1453 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1454 
1455 # texinfo-7.0.2.tar.xz
1456 cd /sources/
1457 APP=texinfo
1458 EXTENSION=xz
1459 tar xvif $APP*.$EXTENSION
1460 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1461 
1462 ./configure --prefix=/usr
1463 make
1464 make check
1465 make install
1466 make TEXMF=/usr/share/texmf install-tex
1467 
1468 cd /sources/ 
1469 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1470 
1471 # vim-9.0.1273.tar.xz
1472 cd /sources/
1473 APP=vim
1474 EXTENSION=xz
1475 tar xvif $APP*.$EXTENSION
1476 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1477 
1478 echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
1479 ./configure --prefix=/usr
1480 make
1481 chown -Rv tester .
1482 su tester -c "LANG=en_US.UTF-8 make -j1 test" &> vim-test.log
1483 make install
1484 
1485 ln -sv vim /usr/bin/vi
1486 for L in  /usr/share/man/{,*/}man1/vim.1; do
1487     ln -sv vim.1 $(dirname $L)/vi.1
1488 done
1489 
1490 ln -sv ../vim/vim90/doc /usr/share/doc/vim-9.0.1273
1491 
1492 cat > /etc/vimrc << "EOF"
1493 source $VIMRUNTIME/defaults.vim
1494 let skip_defaults_vim=1
1495 
1496 set nocompatible
1497 set backspace=2
1498 set mouse=
1499 syntax on
1500 if (&term == "xterm") || (&term == "putty")
1501   set background=dark
1502 endif
1503 
1504 EOF
1505 
1506 cd /sources/ 
1507 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )

   1 # eudev-3.2.11.tar.gz
   2 cd /sources/
   3 APP=eudev
   4 EXTENSION=gz
   5 tar xvzf $APP*.$EXTENSION
   6 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
   7 
   8 sed -i '/udevdir/a udev_dir=${udevdir}' src/udev/udev.pc.in
   9 ./configure --prefix=/usr           \
  10             --bindir=/usr/sbin      \
  11             --sysconfdir=/etc       \
  12             --enable-manpages       \
  13             --disable-static
  14 
  15 make
  16 mkdir -pv /usr/lib/udev/rules.d
  17 mkdir -pv /etc/udev/rules.d
  18 
  19 make check
  20 make install
  21 
  22 tar -xvf ../udev-lfs-20171102.tar.xz
  23 make -f udev-lfs-20171102/Makefile.lfs install
  24 
  25 udevadm hwdb --update
  26 
  27 cd /sources/ 
  28 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
  29 
  30 # man-db-2.11.2.tar.xz
  31 cd /sources/
  32 APP=man-db
  33 EXTENSION=xz
  34 tar xvif $APP*.$EXTENSION
  35 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
  36 
  37 ./configure --prefix=/usr                         \
  38             --docdir=/usr/share/doc/man-db-2.11.2 \
  39             --sysconfdir=/etc                     \
  40             --disable-setuid                      \
  41             --enable-cache-owner=bin              \
  42             --with-browser=/usr/bin/lynx          \
  43             --with-vgrind=/usr/bin/vgrind         \
  44             --with-grap=/usr/bin/grap             \
  45             --with-systemdtmpfilesdir=            \
  46             --with-systemdsystemunitdir=
  47 make
  48 make check
  49 make install
  50                         
  51 cd /sources/ 
  52 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
  53 
  54 # procps-ng-4.0.2.tar.xz
  55 cd /sources/
  56 APP=procps
  57 EXTENSION=xz
  58 tar xvif $APP*.$EXTENSION
  59 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
  60 
  61 ./configure --prefix=/usr                           \
  62             --docdir=/usr/share/doc/procps-ng-4.0.2 \
  63             --disable-static                        \
  64             --disable-kill
  65 
  66 make
  67 make check
  68 make install
  69                         
  70 cd /sources/ 
  71 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
  72 
  73 # util-linux-2.38.1.tar.xz
  74 cd /sources/
  75 APP=util-linux
  76 EXTENSION=xz
  77 tar xvif $APP*.$EXTENSION
  78 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
  79 
  80 ./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \
  81             --bindir=/usr/bin    \
  82             --libdir=/usr/lib    \
  83             --sbindir=/usr/sbin  \
  84             --disable-chfn-chsh  \
  85             --disable-login      \
  86             --disable-nologin    \
  87             --disable-su         \
  88             --disable-setpriv    \
  89             --disable-runuser    \
  90             --disable-pylibmount \
  91             --disable-static     \
  92             --without-python     \
  93             --without-systemd    \
  94             --without-systemdsystemunitdir \
  95             --docdir=/usr/share/doc/util-linux-2.38.1
  96 
  97 make
  98 chown -Rv tester .
  99 su tester -c "make -k check"
 100 make install
 101                         
 102 cd /sources/ 
 103 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 104 
 105 # e2fsprogs-1.47.0.tar.gz
 106 cd /sources/
 107 APP=e2fsprogs
 108 EXTENSION=gz
 109 tar xvzf $APP*.$EXTENSION
 110 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 111 
 112 mkdir -v build
 113 cd       build
 114 
 115 ../configure --prefix=/usr           \
 116              --sysconfdir=/etc       \
 117              --enable-elf-shlibs     \
 118              --disable-libblkid      \
 119              --disable-libuuid       \
 120              --disable-uuidd         \
 121              --disable-fsck
 122 
 123 make
 124 make check
 125 make install
 126 rm -fv /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a
 127 gunzip -v /usr/share/info/libext2fs.info.gz
 128 install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info
 129 makeinfo -o      doc/com_err.info ../lib/et/com_err.texinfo
 130 install -v -m644 doc/com_err.info /usr/share/info
 131 install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info
 132 sed 's/metadata_csum_seed,//' -i /etc/mke2fs.conf
 133                         
 134 cd /sources/ 
 135 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 136 
 137 # sysklogd-1.5.1.tar.gz
 138 cd /sources/
 139 APP=sysklogd
 140 EXTENSION=gz
 141 tar xvzf $APP*.$EXTENSION
 142 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 143 
 144 sed -i '/Error loading kernel symbols/{n;n;d}' ksym_mod.c
 145 sed -i 's/union wait/int/' syslogd.c
 146 
 147 make
 148 make BINDIR=/sbin install
 149 
 150 cat > /etc/syslog.conf << "EOF"
 151 auth,authpriv.* -/var/log/auth.log
 152 *.*;auth,authpriv.none -/var/log/sys.log
 153 daemon.* -/var/log/daemon.log
 154 kern.* -/var/log/kern.log
 155 mail.* -/var/log/mail.log
 156 user.* -/var/log/user.log
 157 *.emerg *
 158 EOF
 159                         
 160 cd /sources/ 
 161 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 162 
 163 # sysvinit-3.06.tar.xz
 164 cd /sources/
 165 APP=sysvinit
 166 EXTENSION=xz
 167 tar xvif $APP*.$EXTENSION
 168 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 169 
 170 patch -Np1 -i ../sysvinit-3.06-consolidated-1.patch
 171 make
 172 make install
 173                         
 174 cd /sources/ 
 175 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 176 
 177 # Stripping 
 178 save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])
 179              libc.so.6
 180              libthread_db.so.1
 181              libquadmath.so.0.0.0
 182              libstdc++.so.6.0.30
 183              libitm.so.1.0.0
 184              libatomic.so.1.2.0"
 185 
 186 cd /usr/lib
 187 
 188 for LIB in $save_usrlib; do
 189     objcopy --only-keep-debug $LIB $LIB.dbg
 190     cp $LIB /tmp/$LIB
 191     strip --strip-unneeded /tmp/$LIB
 192     objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
 193     install -vm755 /tmp/$LIB /usr/lib
 194     rm /tmp/$LIB
 195 done
 196 
 197 online_usrbin="bash find strip"
 198 online_usrlib="libbfd-2.40.so
 199                libsframe.so.0.0.0
 200                libhistory.so.8.2
 201                libncursesw.so.6.4
 202                libm.so.6
 203                libreadline.so.8.2
 204                libz.so.1.2.13
 205                $(cd /usr/lib; find libnss*.so* -type f)"
 206 
 207 for BIN in $online_usrbin; do
 208     cp /usr/bin/$BIN /tmp/$BIN
 209     strip --strip-unneeded /tmp/$BIN
 210     install -vm755 /tmp/$BIN /usr/bin
 211     rm /tmp/$BIN
 212 done
 213 
 214 for LIB in $online_usrlib; do
 215     cp /usr/lib/$LIB /tmp/$LIB
 216     strip --strip-unneeded /tmp/$LIB
 217     install -vm755 /tmp/$LIB /usr/lib
 218     rm /tmp/$LIB
 219 done
 220 
 221 for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
 222          $(find /usr/lib -type f -name \*.a)                 \
 223          $(find /usr/{bin,sbin,libexec} -type f); do
 224     case "$online_usrbin $online_usrlib $save_usrlib" in
 225         *$(basename $i)* )
 226             ;;
 227         * ) strip --strip-unneeded $i
 228             ;;
 229     esac
 230 done
 231 
 232 unset BIN LIB save_usrlib online_usrbin online_usrlib
 233 
 234 # Cleaning Up 
 235 rm -rf /tmp/*
 236 find /usr/lib /usr/libexec -name \*.la -delete
 237 find /usr -depth -name $(uname -m)-lfs-linux-gnu\* | xargs rm -rf
 238 userdel -r tester
 239 
 240 # lfs-bootscripts-20230101.tar.xz
 241 cd /sources/
 242 APP=lfs-bootscripts
 243 EXTENSION=xz
 244 tar xvif $APP*.$EXTENSION
 245 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 246 
 247 make install
 248                         
 249 cd /sources/ 
 250 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 251 
 252 bash /usr/lib/udev/init-net-rules.sh
 253 cat /etc/udev/rules.d/70-persistent-net.rules
 254 
 255 cat > /etc/sysconfig/ifconfig.eth0 << "EOF"
 256 ONBOOT=yes
 257 IFACE=eth0
 258 SERVICE=ipv4-static
 259 IP=192.168.1.2
 260 GATEWAY=192.168.1.1
 261 PREFIX=24
 262 BROADCAST=192.168.1.255
 263 EOF
 264 
 265 cat > /etc/resolv.conf << "EOF"
 266 domain <Your Domain Name>
 267 nameserver <IP address of your primary nameserver>
 268 nameserver <IP address of your secondary nameserver>
 269 EOF
 270 
 271 echo "vitux" > /etc/hostname
 272 
 273 cat > /etc/hosts << "EOF"
 274 127.0.0.1 localhost.localdomain localhost
 275 127.0.1.1 vitux.bitarus.mooo.com
 276 ::1       localhost ip6-localhost ip6-loopback
 277 ff02::1   ip6-allnodes
 278 ff02::2   ip6-allrouters
 279 EOF
 280 
 281 cat > /etc/inittab << "EOF"
 282 id:3:initdefault:
 283 si::sysinit:/etc/rc.d/init.d/rc S
 284 l0:0:wait:/etc/rc.d/init.d/rc 0
 285 l1:S1:wait:/etc/rc.d/init.d/rc 1
 286 l2:2:wait:/etc/rc.d/init.d/rc 2
 287 l3:3:wait:/etc/rc.d/init.d/rc 3
 288 l4:4:wait:/etc/rc.d/init.d/rc 4
 289 l5:5:wait:/etc/rc.d/init.d/rc 5
 290 l6:6:wait:/etc/rc.d/init.d/rc 6
 291 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
 292 su:S06:once:/sbin/sulogin
 293 s1:1:respawn:/sbin/sulogin
 294 1:2345:respawn:/sbin/agetty --noclear tty1 9600
 295 2:2345:respawn:/sbin/agetty tty2 9600
 296 3:2345:respawn:/sbin/agetty tty3 9600
 297 4:2345:respawn:/sbin/agetty tty4 9600
 298 5:2345:respawn:/sbin/agetty tty5 9600
 299 6:2345:respawn:/sbin/agetty tty6 9600
 300 EOF
 301 
 302 cat > /etc/sysconfig/clock << "EOF"
 303 UTC=1
 304 # Set this to any options you might need to give to hwclock,
 305 # such as machine hardware clock type for Alphas.
 306 CLOCKPARAMS=
 307 EOF
 308 
 309 cat > /etc/sysconfig/console << "EOF"
 310 KEYMAP="pt-latin1"
 311 FONT="lat1-16 -m 8859-1"
 312 UNICODE="1"
 313 EOF
 314 
 315 locale -a
 316 locale -a | grep -i pt
 317 kk_KZ.pt154
 318 pt_BR
 319 pt_BR.iso88591
 320 pt_BR.utf8
 321 pt_PT
 322 pt_PT.iso88591
 323 pt_PT.iso885915@euro
 324 pt_PT.utf8
 325 pt_PT@euro
 326 
 327 cat > /etc/profile << "EOF"
 328 export LANG=pt_PT.utf8
 329 EOF
 330 
 331 cat > /etc/inputrc << "EOF"
 332 # Modified by Chris Lynn <roryo@roryo.dynup.net>
 333 # Allow the command prompt to wrap to the next line
 334 set horizontal-scroll-mode Off
 335 # Enable 8-bit input
 336 set meta-flag On
 337 set input-meta On
 338 # Turns off 8th bit stripping
 339 set convert-meta Off
 340 # Keep the 8th bit for display
 341 set output-meta On
 342 # none, visible or audible
 343 set bell-style none
 344 # All of the following map the escape sequence of the value
 345 # contained in the 1st argument to the readline specific functions
 346 "\eOd": backward-word
 347 "\eOc": forward-word
 348 # for linux console
 349 "\e[1~": beginning-of-line
 350 "\e[4~": end-of-line
 351 "\e[5~": beginning-of-history
 352 "\e[6~": end-of-history
 353 "\e[3~": delete-char
 354 "\e[2~": quoted-insert
 355 # for xterm
 356 "\eOH": beginning-of-line
 357 "\eOF": end-of-line
 358 # for Konsole
 359 "\e[H": beginning-of-line
 360 "\e[F": end-of-line
 361 EOF
 362 
 363 cat > /etc/shells << "EOF"
 364 /bin/sh
 365 /bin/bash
 366 EOF
 367 
 368 cat > /etc/fstab << "EOF"
 369 # file-system  mount-point  type     options             dump  fsck
 370 #                                                              order
 371 
 372 #/dev/<xxx>     /            <fff>    defaults            1     1
 373 #/dev/<yyy>     swap         swap     pri=1               0     0
 374 proc           /proc        proc     nosuid,noexec,nodev 0     0
 375 sysfs          /sys         sysfs    nosuid,noexec,nodev 0     0
 376 devpts         /dev/pts     devpts   gid=5,mode=620      0     0
 377 tmpfs          /run         tmpfs    defaults            0     0
 378 devtmpfs       /dev         devtmpfs mode=0755,nosuid    0     0
 379 tmpfs          /dev/shm     tmpfs    nosuid,nodev        0     0
 380 EOF
 381 
 382 # linux-6.1.11.tar.xz
 383 cd /sources/
 384 APP=linux
 385 EXTENSION=xz
 386 tar xvif $APP*.$EXTENSION
 387 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 388 
 389 make mrproper
 390 make menuconfig
 391                 
 392 # Processor type and features --->
 393 #    [*] Build a relocatable kernel [CONFIG_RELOCATABLE]
 394 #    [*]   Randomize the address of the kernel image (KASLR) [CONFIG_RANDOMIZE_BASE]
 395 # General setup --->
 396 #    [ ] Compile the kernel with warnings as errors [CONFIG_WERROR]
 397 #    < > Enable kernel headers through /sys/kernel/kheaders.tar.xz [CONFIG_IKHEADERS]
 398 # General architecture-dependent options  --->
 399 #    [*] Stack Protector buffer overflow detection [CONFIG_STACKPROTECTOR]
 400 #    [*]   Strong Stack Protector [CONFIG_STACKPROTECTOR_STRONG]
 401 # Device Drivers  --->
 402 #   Graphics support --->
 403 #    Frame buffer Devices --->
 404 #       <*> Support for frame buffer devices --->
 405 #    Console display driver support --->
 406 #       [*] Framebuffer Console support [CONFIG_FRAMEBUFFER_CONSOLE]
 407 #   Generic Driver Options  --->
 408 #    [ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
 409 #    [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
 410 #    [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs [CONFIG_DEVTMPFS_MOUNT]
 411 # Processor type and features --->
 412 #   [*] Support x2apic [CONFIG_X86_X2APIC]
 413 # Device Drivers --->
 414 #   [*] PCI Support ---> [CONFIG_PCI]
 415 #     [*] Message Signaled Interrupts (MSI and MSI-X) [CONFIG_PCI_MSI]
 416 #   [*] IOMMU Hardware Support ---> [CONFIG_IOMMU_SUPPORT]
 417 #     [*] Support for Interrupt Remapping [CONFIG_IRQ_REMAP]
 418 
 419 /sources/linux-6.1.11# find . -name .config
 420 ./.config
 421 
 422 cat .config | grep -e CONFIG_IRQ_REMAP -e CONFIG_IOMMU_SUPPORT=y -e CONFIG_PCI_MSI=y -e CONFIG_PCI=y -e CONFIG_X86_X2APIC=y  \
 423 -e CONFIG_DEVTMPFS_MOUNT -e CONFIG_DEVTMPFS=y -e CONFIG_UEVENT_HELPER -e CONFIG_FRAMEBUFFER_CONSOLE=y \
 424 -e CONFIG_STACKPROTECTOR=y -e CONFIG_STACKPROTECTOR_STRONG=y -e CONFIG_RELOCATABLE=y -e CONFIG_RANDOMIZE_BASE=y \
 425 -e CONFIG_WERROR -e CONFIG_IKHEADERS
 426 
 427 # # CONFIG_WERROR is not set
 428 # # CONFIG_IKHEADERS is not set
 429 # CONFIG_RELOCATABLE=y
 430 # CONFIG_RANDOMIZE_BASE=y
 431 # CONFIG_STACKPROTECTOR=y
 432 # CONFIG_STACKPROTECTOR_STRONG=y
 433 # CONFIG_PCI=y
 434 # CONFIG_PCI_MSI=y
 435 # # CONFIG_UEVENT_HELPER is not set
 436 # CONFIG_DEVTMPFS=y
 437 # CONFIG_DEVTMPFS_MOUNT=y
 438 # CONFIG_FRAMEBUFFER_CONSOLE=y
 439 # CONFIG_IOMMU_SUPPORT=y
 440 # CONFIG_IRQ_REMAP=y
 441 
 442 # https://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt
 443 
 444 make help 
 445 make
 446 make modules_install
 447 
 448 cp -iv arch/x86/boot/bzImage /boot/vmlinuz-6.1.11-lfs-11.3
 449 cp -iv System.map /boot/System.map-6.1.11
 450 cp -iv .config /boot/config-6.1.11
 451 install -d /usr/share/doc/linux-6.1.11
 452 cp -r Documentation/* /usr/share/doc/linux-6.1.11
 453 
 454 install -v -m755 -d /etc/modprobe.d
 455 
 456 cat > /etc/modprobe.d/usb.conf << "EOF"
 457 install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
 458 install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
 459 EOF
 460                 
 461 cd $LFS/sources/ 
 462 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
 463 
 464 echo 11.3 > /etc/lfs-release
 465 
 466 cat > /etc/lsb-release << "EOF"
 467 DISTRIB_ID="Linux From Scratch"
 468 DISTRIB_RELEASE="11.3"
 469 DISTRIB_CODENAME="Vitux"
 470 DISTRIB_DESCRIPTION="Linux From Scratch"
 471 EOF
 472 
 473 cat > /etc/os-release << "EOF"
 474 NAME="Linux From Scratch"
 475 VERSION="11.3"
 476 ID=lfs
 477 PRETTY_NAME="Linux From Scratch 11.3"
 478 VERSION_CODENAME="Vitux"
 479 EOF
 480 
 481 cd / # as chroot
 482 du . -hs
 483 # 2.0G
 484 du  sources/ -hs
 485 # 603M  sources/
 486 sh version-check.sh
 487 
 488 # To make a backup, leave the chroot environment:
 489 exit
 490 mountpoint -q $LFS/dev/shm && umount $LFS/dev/shm
 491 umount $LFS/dev/pts
 492 umount $LFS/{sys,proc,run,dev}
 493 LFS=/home/vagrant/lfs 
 494 echo $LFS
 495 cd $LFS
 496 time tar -cJpf /root/lfs-build-11.3.tar.xz .
 497 # real  17m18.550s
 498 tar tvaf /root/lfs-build-11.3.tar.xz
 499 # -p, --preserve-permissions
 500 # -f, --file=ARCHIVE
 501 # -J, --xz Filter the archive through xz
 502 
 503 scp lfs*xz xyz@xyz.com:/media/LFS/

Add partition in VM to host LFS build

   1 # Add dymamic disk 8 GB to debian built with vagrant ....
   2 vagrant halt 
   3 # VirtualBox, debian VM, settings storage sata add hard disk 
   4 # Create VDI dynamically allocated with 8 GB 
   5 vagrant up 
   6 # sd 2:0:0:0: [sdb] 16777216 512-byte logical blocks: (8.59 GB/8.00 GiB)
   7 sudo cfdisk /dev/sdb
   8 # label type gpt 
   9 # new 8GB linux fs 
  10 # write yes quit 
  11 sudo mkfs -v -t ext4 /dev/sdb1 
  12 export LFS=/mnt/lfs
  13 sudo mkdir -pv $LFS
  14 sudo mount -v -t ext4 /dev/sdb1 $LFS
  15 sudo bash 
  16 
  17 # change fstab in debian host
  18 cat >>/etc/fstab << "EOF"
  19 /dev/sdb1  /mnt/lfs ext4   defaults      1     1
  20 EOF 
  21 
  22 exit 
  23 sudo bash 
  24 export LFS=/mnt/lfs
  25 cd ~
  26 cp lfs-build-11.3.tar.xz $LFS
  27 
  28 cd $LFS
  29 rm -rf ./*
  30 tar -xpf /root/lfs-build-11.3.tar.xz
  31 ls 
  32 chown root:root $LFS/*
  33 cat $LFS/etc/inittab
  34 cat $LFS/etc/fstab
  35 
  36 # Update LFS fstab
  37 cat >>$LFS/etc/fstab << "EOF"
  38 /dev/sdb1  / ext4   defaults      1     1
  39 EOF 
  40 
  41 # Update debian grub to have an entry to LFS
  42 cat >>/etc/grub.d/40_custom << "EOF"
  43 menuentry "GNU/Linux, Linux 6.1.11-lfs-11.3" {
  44         linux   /boot/vmlinuz-6.1.11-lfs-11.3 root=/dev/sdb1 ro
  45 }
  46 EOF
  47 
  48 update-grub
  49 
  50 vagrant reload 
  51 # select grun entry for lfs 
  52 # login with root:root 
  53 df -h # uses 2.7G
  54 rm lfs-build-11.3.tar.xz
  55 rm -rf sources/* 
  56 df -h # uses 1.4 GB
  57 

initramfs with static program

  • https://www.kernel.org/doc/html/latest/filesystems/ramfs-rootfs-initramfs.html#contents-of-initramfs

A good first step is to get initramfs to run a statically linked "hello world" program as init

   1 sudo apt install qemu-system genisoimage
   2 
   3 cd /tmp 
   4 wget https://saimei.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-12.1.0-amd64-netinst.iso
   5 sudo mount -o loop /vagrant/debian-12.1.0-amd64-netinst.iso /mnt/iso
   6 
   7 # reuse isolinux from debian iso
   8 mkdir /tmp/debiancd 
   9 mkdir /tmp/debiancd/isolinux 
  10 mkdir /tmp/debiancd/install.amd 
  11 cd /mnt/iso
  12 cp isolinux/isolinux.cfg isolinux/*c32 isolinux/menu.cfg isolinux/txt.cfg /tmp/debiancd/isolinux 
  13 cp install.amd/initrd.gz install.amd/vmlinuz /tmp/debiancd/install.amd/
  14 cp /mnt/iso/isolinux/isolinux.bin /tmp/debiancd/isolinux/
  15 
  16 # isolinux.cfg
  17 cat > debiancd/isolinux/isolinux.cfg << EOF 
  18 default bootcd
  19 prompt 1
  20 timeout 40
  21 
  22 label bootcd
  23   kernel /install.amd/vmlinuz
  24   append initrd=/install.amd/test.cpio.gz vga=788
  25 EOF
  26 
  27 # hello.c
  28 cat > hello.c << EOF
  29 #include <stdio.h>
  30 #include <unistd.h>
  31 
  32 int main(int argc, char *argv[])
  33 {
  34   printf("Hello world!\n");
  35   sleep(999999999);
  36 }
  37 EOF
  38 gcc -static hello.c -o init
  39 
  40 # build cpio initramfs
  41 echo init | cpio -o -H newc | gzip > test.cpio.gz
  42 cp test.cpio.gz debiancd/install.amd/test.cpio.gz
  43 
  44 cd /tmp/
  45 mkisofs -o /tmp/output.iso  -R -l -L -D -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V "LFS_$(date +%Y%m%d)" /tmp/debiancd/ 
  46 rm /vagrant/output.iso
  47 cp output.iso /vagrant
  48 
  49 # the output.iso can be launched in VirtualBox booting the iso in a VM Other Linux, Linux 64 bit 
  50 
  51 # test with qemu
  52 qemu-system-x86_64  -kernel debiancd/install.amd/vmlinuz -initrd test.cpio.gz /dev/zero
  53 # test with qemu with kernel in debian system
  54 qemu-system-x86_64  -kernel /boot/vmlinuz-5.10.0-22-amd64 -initrd test.cpio.gz /dev/zero
  55 # test with qemu with kernel from lfs
  56 qemu-system-x86_64  -kernel /home/vagrant/lfs/boot/lfskernel -initrd test.cpio.gz /dev/zero
  57 # test with qemu with kernel from lfs
  58 qemu-system-x86_64  -kernel /home/vagrant/lfs/boot/vmlinuz-6.1.11-lfs-11.3 -initrd test.cpio.gz /dev/zero

Hello world USB boot

Build install-mbr

   1 cd tmp/
   2 wget http://deb.debian.org/debian/pool/main/m/mbr/mbr_1.2.1.tar.xz
   3 tar tvaf mbr_1.2.1.tar.xz
   4 cd mbr-1.2.1/
   5 ls
   6 ./configure
   7 make clean
   8 make
   9 make install

create-usb-boot-hello-world.sh

Create a FAT16 partition using cfdisk /dev/sdX. We can find the right device using dmesg or lsblk commands.

   1 lsblk
   2 cfdisk (dev/sdc
   3 # new partition FAT16
   4 

   1 lsblk
   2 read -p "Target device: " DEVICE
   3 echo "Install MBR on device $DEVICE"
   4 read -p "Enter to continue"
   5 install-mbr $DEVICE --force
   6 
   7 PARTITION=${DEVICE}1
   8 echo "Format $PARTITION"
   9 read -p "Enter to continue"
  10 # create an MS-DOS FAT filesystem
  11 mkdosfs $PARTITION
  12 echo "Install syslinux"
  13 read -p "Enter to continue"
  14 # install the SYSLINUX bootloader on a FAT filesystem
  15 syslinux $PARTITION
  16 
  17 echo "Build ramfs"
  18 rm -rf ramfs/
  19 mkdir ramfs
  20 cd ramfs
  21 
  22 cat > hello.c << EOF
  23 #include <dirent.h>
  24 #include <stdio.h>
  25 #include <unistd.h>
  26 #include <string.h>
  27 
  28 int main(void) {
  29   char data[256];
  30   DIR *d;
  31   struct dirent *dir;
  32   printf("Hello world!\n");
  33 
  34   d = opendir("/dev");
  35   if (d) {
  36     while ((dir = readdir(d)) != NULL) {
  37       printf("%s\n", dir->d_name);
  38     }
  39     closedir(d);
  40   }
  41   int loop=1;
  42   while(loop == 1){
  43     printf("> ");
  44     scanf("%s",data);
  45     printf("<%s>\n", data);
  46     if( strcmp("exit",data) == 0) loop=0;
  47   }
  48   // sleep(3600);
  49   return(0);
  50 }
  51 EOF
  52 # compile static code
  53 gcc -static hello.c -o init
  54 # build cpio gz
  55 find . | cpio -H newc -o | gzip > ../ramfs.gz
  56 # copy data to initramfs
  57 mount $PARTITION /mnt
  58 cd /mnt
  59 cat > syslinux.cfg << EOF
  60 default vmlinuz
  61 append initrd=initrd.gz init=/init
  62 EOF
  63 
  64 cp /boot/vmlinuz vmlinuz # slackware kernel
  65 #cp /root/vmlinuz-6.1.11-lfs-11.3 vmlinuz
  66 cp /root/ramfs.gz initrd.gz
  67 ls .
  68 cd ~
  69 umount /mnt/
  70 sync
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01