LinuxFromScratch

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.

List of the required downloads for LFS 11.3

AAAA

   1 # https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html
   2 
   3 cd ~
   4 mkdir lfs
   5 cd lfs
   6 wget https://www.linuxfromscratch.org/lfs/downloads/stable/wget-list
   7 xargs -l wget < wget-list
   8 
   9 # wget --input-file=wget-list --continue --directory-prefix=$LFS/sources
  10 mkdir sources
  11 mv *patch  *xz *gz   *bz2  sources/
  12 
  13 # As root 
  14 cd sources 
  15 chmod 666 . -R
  16 
  17 export LFS=/home/vagrant/lfs
  18 echo $LFS
  19 mkdir -pv $LFS
  20 
  21 cd $LFS 
  22 mkdir sources
  23 wget https://www.linuxfromscratch.org/lfs/downloads/stable/wget-list
  24 xargs -l wget < wget-list
  25 cd ..
  26  
  27 cat > version-check.sh << "EOF"
  28 #!/bin/bash
  29 # Simple script to list version numbers of critical development tools
  30 export LC_ALL=C
  31 bash --version | head -n1 | cut -d" " -f2-4
  32 MYSH=$(readlink -f /bin/sh)
  33 echo "/bin/sh -> $MYSH"
  34 echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
  35 unset MYSH
  36 
  37 echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
  38 bison --version | head -n1
  39 
  40 if [ -h /usr/bin/yacc ]; then
  41   echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
  42 elif [ -x /usr/bin/yacc ]; then
  43   echo yacc is `/usr/bin/yacc --version | head -n1`
  44 else
  45   echo "yacc not found"
  46 fi
  47 
  48 echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
  49 diff --version | head -n1
  50 find --version | head -n1
  51 gawk --version | head -n1
  52 
  53 if [ -h /usr/bin/awk ]; then
  54   echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
  55 elif [ -x /usr/bin/awk ]; then
  56   echo awk is `/usr/bin/awk --version | head -n1`
  57 else
  58   echo "awk not found"
  59 fi
  60 
  61 gcc --version | head -n1
  62 g++ --version | head -n1
  63 grep --version | head -n1
  64 gzip --version | head -n1
  65 cat /proc/version
  66 m4 --version | head -n1
  67 make --version | head -n1
  68 patch --version | head -n1
  69 echo Perl `perl -V:version`
  70 python3 --version
  71 sed --version | head -n1
  72 tar --version | head -n1
  73 makeinfo --version | head -n1  # texinfo version
  74 xz --version | head -n1
  75 
  76 echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
  77 if [ -x dummy ]
  78   then echo "g++ compilation OK";
  79   else echo "g++ compilation failed"; fi
  80 rm -f dummy.c dummy
  81 EOF
  82 
  83 sudo rm /bin/sh
  84 sudo ln -s /bin/bash /bin/sh
  85 sudo apt install bison texinfo gawk 
  86 
  87 bash version-check.sh
  88 
  89 # As root user  
  90 sudo bash 
  91 export LFS=/home/vagrant/lfs
  92 mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}
  93 
  94 for i in bin lib sbin; do
  95   ln -sv usr/$i $LFS/$i
  96 done
  97 
  98 case $(uname -m) in
  99   x86_64) mkdir -pv $LFS/lib64 ;;
 100 esac
 101 
 102 mkdir -pv $LFS/tools
 103 groupadd lfs
 104 useradd -s /bin/bash -g lfs -m -k /dev/null lfs
 105 echo -e "lfs\nlfs\n" | passwd lfs
 106 
 107 chown -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools,sources}
 108 chgrp -v lfs $LFS/{usr{,/*},lib,var,etc,bin,sbin,tools,sources}
 109 chmod 755 sources/ 
 110  
 111 case $(uname -m) in
 112   x86_64) chown -v lfs $LFS/lib64 ;;
 113 esac
 114 
 115 # Logged in as lfs user 
 116 su - lfs
 117 
 118 cat > ~/.bash_profile << "EOF"
 119 exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
 120 EOF
 121 
 122 cat > ~/.bashrc << "EOF"
 123 set +h
 124 umask 022
 125 LFS=/home/vagrant/lfs
 126 LC_ALL=POSIX
 127 LFS_TGT=$(uname -m)-lfs-linux-gnu
 128 PATH=/usr/bin
 129 if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
 130 PATH=$LFS/tools/bin:$PATH
 131 CONFIG_SITE=$LFS/usr/share/config.site
 132 export LFS LC_ALL LFS_TGT PATH CONFIG_SITE
 133 EOF
 134 
 135 source ~/.bash_profile
 136 source ~/.bashrc 
 137 echo $LFS
 138 
 139 # Basic build steps 
 140 # cd /mnt/lfs/sources/
 141 # untar package as lfs user
 142 # go to package folder 
 143 # build 
 144 # go back to /mnt/lfs/sources/
 145 # delete extracted package 
 146 
 147 # binutils as lfs user  
 148 cd $LFS/sources/ 
 149 tar xvif binutils*.xz
 150 cd $(ls binutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 151 mkdir -v build
 152 cd build
 153 ../configure --prefix=$LFS/tools \
 154              --with-sysroot=$LFS \
 155              --target=$LFS_TGT   \
 156              --disable-nls       \
 157              --enable-gprofng=no \
 158              --disable-werror
 159 make
 160 make install 
 161 cd $LFS/sources/ 
 162 rm -rf $(ls binutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 163 
 164 # gcc 
 165 cd $LFS/sources/ 
 166 tar xvif gcc*.xz
 167 cd $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 168 
 169 tar -xf ../mpfr-4.2.0.tar.xz
 170 mv -v mpfr-4.2.0 mpfr
 171 tar -xf ../gmp-6.2.1.tar.xz
 172 mv -v gmp-6.2.1 gmp
 173 tar -xf ../mpc-1.3.1.tar.gz
 174 mv -v mpc-1.3.1 mpc
 175 
 176 case $(uname -m) in
 177   x86_64)
 178     sed -e '/m64=/s/lib64/lib/' \
 179         -i.orig gcc/config/i386/t-linux64
 180  ;;
 181 esac
 182 
 183 mkdir -v build
 184 cd       build
 185 
 186 ../configure                  \
 187     --target=$LFS_TGT         \
 188     --prefix=$LFS/tools       \
 189     --with-glibc-version=2.37 \
 190     --with-sysroot=$LFS       \
 191     --with-newlib             \
 192     --without-headers         \
 193     --enable-default-pie      \
 194     --enable-default-ssp      \
 195     --disable-nls             \
 196     --disable-shared          \
 197     --disable-multilib        \
 198     --disable-threads         \
 199     --disable-libatomic       \
 200     --disable-libgomp         \
 201     --disable-libquadmath     \
 202     --disable-libssp          \
 203     --disable-libvtv          \
 204     --disable-libstdcxx       \
 205     --enable-languages=c,c++
 206 make 
 207 make install
 208 38m
 209 
 210 cd $LFS/sources/ 
 211 rm -rf $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 212         
 213 # Linux-6.1.11 API Headers
 214 cd $LFS/sources/ 
 215 tar xvif linux*.xz
 216 cd $(ls linux*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 217 make mrproper
 218 make headers
 219 find usr/include -type f ! -name '*.h' -delete
 220 cp -rv usr/include $LFS/usr
 221 cd $LFS/sources/ 
 222 rm -rf $(ls linux*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 223 
 224 # glibc 
 225 cd $LFS/sources/ 
 226 tar xvif glibc*.xz
 227 cd $(ls glibc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 228 case $(uname -m) in
 229     i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
 230     ;;
 231     x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
 232             ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
 233     ;;
 234 esac
 235 
 236 patch -Np1 -i ../glibc-2.37-fhs-1.patch
 237 mkdir -v build
 238 cd       build
 239 echo "rootsbindir=/usr/sbin" > configparms
 240 ../configure                             \
 241       --prefix=/usr                      \
 242       --host=$LFS_TGT                    \
 243       --build=$(../scripts/config.guess) \
 244       --enable-kernel=3.2                \
 245       --with-headers=$LFS/usr/include    \
 246       libc_cv_slibdir=/usr/lib
 247 make 
 248 
 249 make DESTDIR=$LFS install
 250 
 251 sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
 252 echo 'int main(){}' | $LFS_TGT-gcc -xc -
 253 readelf -l a.out | grep ld-linux 
 254 rm -v a.out
 255 
 256 $LFS/tools/libexec/gcc/$LFS_TGT/12.2.0/install-tools/mkheaders
 257 cd $LFS/sources/ 
 258 rm -rf $(ls glibc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 259 
 260 # Libstdc++
 261 cd $LFS/sources/ 
 262 tar xvif gcc*.xz
 263 cd $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 264 
 265 mkdir -v build
 266 cd       build
 267 
 268 ../libstdc++-v3/configure           \
 269     --host=$LFS_TGT                 \
 270     --build=$(../config.guess)      \
 271     --prefix=/usr                   \
 272     --disable-multilib              \
 273     --disable-nls                   \
 274     --disable-libstdcxx-pch         \
 275     --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/12.2.0
 276 make
 277 
 278 make DESTDIR=$LFS install
 279 rm -v $LFS/usr/lib/lib{stdc++,stdc++fs,supc++}.la       
 280 cd $LFS/sources/ 
 281 rm -rf $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 282 
 283 # m4
 284 cd $LFS/sources/ 
 285 tar xvif m4*.xz
 286 cd $(ls m4*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 287 
 288 ./configure --prefix=/usr   \
 289             --host=$LFS_TGT \
 290             --build=$(build-aux/config.guess)
 291 make
 292 make[1]: Leaving directory '/home/vagrant/lfs/sources/m4-1.4.19'
 293 make: *** [Makefile:1974: all] Error 2
 294 
 295 cd $LFS/sources/ 
 296 tar xvif gcc*.xz
 297 cd $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 298 cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
 299   `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h  
 300 $LFS/tools/libexec/gcc/$LFS_TGT/12.2.0/install-tools/mkheaders
 301 cd $LFS/sources/ 
 302 cd $(ls m4*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 303 make 
 304 make DESTDIR=$LFS install
 305 cd $LFS/sources/ 
 306 rm -rf $(ls gcc*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 307 rm -rf $(ls m4*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 308 
 309 # ncurses
 310 cd $LFS/sources/ 
 311 tar xvzf ncurses*.gz
 312 cd $(ls ncurses*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 313 
 314 sed -i s/mawk// configure
 315 
 316 mkdir build
 317 pushd build
 318   ../configure
 319   make -C include
 320   make -C progs tic
 321 popd
 322 
 323 ./configure --prefix=/usr                \
 324             --host=$LFS_TGT              \
 325             --build=$(./config.guess)    \
 326             --mandir=/usr/share/man      \
 327             --with-manpage-format=normal \
 328             --with-shared                \
 329             --without-normal             \
 330             --with-cxx-shared            \
 331             --without-debug              \
 332             --without-ada                \
 333             --disable-stripping          \
 334             --enable-widec
 335 time make
 336 
 337 make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install
 338 echo "INPUT(-lncursesw)" > $LFS/usr/lib/libncurses.so
 339 
 340 cd $LFS/sources/ 
 341 rm -rf $(ls ncurses*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 342 
 343 # bash 
 344 cd $LFS/sources/ 
 345 tar xvzf bash*.gz
 346 cd $(ls bash*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 347 
 348 ./configure --prefix=/usr                      \
 349             --build=$(sh support/config.guess) \
 350             --host=$LFS_TGT                    \
 351             --without-bash-malloc
 352 
 353 time make
 354 make DESTDIR=$LFS install
 355 ln -sv bash $LFS/bin/sh
 356 
 357 cd $LFS/sources/ 
 358 rm -rf $(ls bash*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 359 
 360 # coreutils
 361 cd $LFS/sources/ 
 362 tar xvif coreutils*.xz
 363 cd $(ls coreutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 364 
 365 ./configure --prefix=/usr                     \
 366             --host=$LFS_TGT                   \
 367             --build=$(build-aux/config.guess) \
 368             --enable-install-program=hostname \
 369             --enable-no-install-program=kill,uptime
 370                         
 371 
 372 time make
 373 make DESTDIR=$LFS install
 374 
 375 mv -v $LFS/usr/bin/chroot              $LFS/usr/sbin
 376 mkdir -pv $LFS/usr/share/man/man8
 377 mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8
 378 sed -i 's/"1"/"8"/'                    $LFS/usr/share/man/man8/chroot.8
 379 
 380 cd $LFS/sources/ 
 381 rm -rf $(ls coreutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 382 
 383 # diffutils 
 384 cd $LFS/sources/ 
 385 tar xvif diffutils*.xz
 386 cd $(ls diffutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 387 
 388 ./configure --prefix=/usr --host=$LFS_TGT
 389 time make
 390 make DESTDIR=$LFS install
 391 
 392 cd $LFS/sources/ 
 393 rm -rf $(ls diffutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 394 
 395 # file 
 396 cd $LFS/sources/ 
 397 tar xvzf file*.gz
 398 cd $(ls file*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 399 
 400 mkdir build
 401 pushd build
 402   ../configure --disable-bzlib      \
 403                --disable-libseccomp \
 404                --disable-xzlib      \
 405                --disable-zlib
 406   make
 407 popd
 408 
 409 ./configure --prefix=/usr --host=$LFS_TGT --build=$(./config.guess)
 410 time make FILE_COMPILE=$(pwd)/build/src/file
 411 make DESTDIR=$LFS install
 412 rm -v $LFS/usr/lib/libmagic.la
 413 
 414 cd $LFS/sources/ 
 415 rm -rf $(ls file*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 416 
 417 # findutils 
 418 cd $LFS/sources/ 
 419 tar xvif findutils*.xz
 420 cd $(ls findutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 421 
 422 ./configure --prefix=/usr                   \
 423             --localstatedir=/var/lib/locate \
 424             --host=$LFS_TGT                 \
 425             --build=$(build-aux/config.guess)
 426 make
 427 make DESTDIR=$LFS install
 428 
 429 cd $LFS/sources/ 
 430 rm -rf $(ls findutils*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 431 
 432 # gawk 
 433 cd $LFS/sources/
 434 APP=gawk 
 435 tar xvif $APP*.xz
 436 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 437 
 438 sed -i 's/extras//' Makefile.in
 439 ./configure --prefix=/usr   \
 440             --host=$LFS_TGT \
 441             --build=$(build-aux/config.guess)
 442 make
 443 make DESTDIR=$LFS install
 444 
 445 cd $LFS/sources/ 
 446 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 447 
 448 # grep 
 449 cd $LFS/sources/
 450 APP=grep  
 451 tar xvif $APP*.xz
 452 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 453 
 454 ./configure --prefix=/usr   \
 455             --host=$LFS_TGT
 456 make
 457 make DESTDIR=$LFS install
 458 
 459 cd $LFS/sources/ 
 460 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 461 
 462 # gzip
 463 cd $LFS/sources/
 464 APP=gzip  
 465 tar xvif $APP*.xz
 466 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 467 
 468 ./configure --prefix=/usr --host=$LFS_TGT
 469 make
 470 make DESTDIR=$LFS install
 471 
 472 cd $LFS/sources/ 
 473 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 474 
 475 # make
 476 cd $LFS/sources/
 477 APP=make  
 478 tar xvif $APP*.gz
 479 cd $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 480 
 481 sed -e '/ifdef SIGPIPE/,+2 d' \
 482     -e '/undef  FATAL_SIG/i FATAL_SIG (SIGPIPE);' \
 483     -i src/main.c
 484 
 485 ./configure --prefix=/usr   \
 486             --without-guile \
 487             --host=$LFS_TGT \
 488             --build=$(build-aux/config.guess)
 489 make
 490 make DESTDIR=$LFS install
 491 
 492 cd $LFS/sources/ 
 493 rm -rf $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 494 
 495 # patch
 496 cd $LFS/sources/
 497 APP=patch  
 498 tar xvif $APP*.xz
 499 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 500 
 501 
 502 ./configure --prefix=/usr   \
 503             --host=$LFS_TGT \
 504             --build=$(build-aux/config.guess)
 505 make
 506 make DESTDIR=$LFS install
 507 
 508 cd $LFS/sources/ 
 509 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 510 
 511 # sed
 512 cd $LFS/sources/
 513 APP=sed  
 514 tar xvif $APP*.xz
 515 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 516 
 517 ./configure --prefix=/usr   \
 518             --host=$LFS_TGT
 519 make
 520 make DESTDIR=$LFS install
 521 
 522 cd $LFS/sources/ 
 523 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 524 
 525 # tar
 526 cd $LFS/sources/
 527 APP=tar  
 528 tar xvif $APP*.xz
 529 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 530 
 531 ./configure --prefix=/usr                     \
 532             --host=$LFS_TGT                   \
 533             --build=$(build-aux/config.guess)
 534 make
 535 make DESTDIR=$LFS install
 536 
 537 cd $LFS/sources/ 
 538 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 539 
 540 # xz
 541 cd $LFS/sources/
 542 APP=xz  
 543 tar xvif $APP*.xz
 544 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 545 
 546 ./configure --prefix=/usr                     \
 547             --host=$LFS_TGT                   \
 548             --build=$(build-aux/config.guess) \
 549             --disable-static                  \
 550             --docdir=/usr/share/doc/xz-5.4.1
 551 make
 552 make DESTDIR=$LFS install
 553 rm -v $LFS/usr/lib/liblzma.la
 554 
 555 cd $LFS/sources/ 
 556 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 557 
 558 # binutils pass 2
 559 cd $LFS/sources/
 560 APP=binutils
 561 tar xvif $APP*.xz
 562 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 563 
 564 sed '6009s/$add_dir//' -i ltmain.sh
 565 mkdir -v build
 566 cd       build
 567 
 568 ../configure                   \
 569     --prefix=/usr              \
 570     --build=$(../config.guess) \
 571     --host=$LFS_TGT            \
 572     --disable-nls              \
 573     --enable-shared            \
 574     --enable-gprofng=no        \
 575     --disable-werror           \
 576     --enable-64-bit-bfd
 577 
 578 make
 579 make DESTDIR=$LFS install
 580 rm -v $LFS/usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes}.{a,la}
 581 
 582 cd $LFS/sources/ 
 583 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 584 
 585 # gcc part 2 
 586 cd $LFS/sources/
 587 APP=gcc 
 588 tar xvif $APP*.xz
 589 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 590 
 591 tar -xf ../mpfr-4.2.0.tar.xz
 592 mv -v mpfr-4.2.0 mpfr
 593 tar -xf ../gmp-6.2.1.tar.xz
 594 mv -v gmp-6.2.1 gmp
 595 tar -xf ../mpc-1.3.1.tar.gz
 596 mv -v mpc-1.3.1 mpc
 597 
 598 case $(uname -m) in
 599   x86_64)
 600     sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
 601   ;;
 602 esac
 603 
 604 sed '/thread_header =/s/@.*@/gthr-posix.h/' \
 605     -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in
 606 
 607 mkdir -v build
 608 cd       build
 609 
 610 ../configure                                       \
 611     --build=$(../config.guess)                     \
 612     --host=$LFS_TGT                                \
 613     --target=$LFS_TGT                              \
 614     LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc      \
 615     --prefix=/usr                                  \
 616     --with-build-sysroot=$LFS                      \
 617     --enable-default-pie                           \
 618     --enable-default-ssp                           \
 619     --disable-nls                                  \
 620     --disable-multilib                             \
 621     --disable-libatomic                            \
 622     --disable-libgomp                              \
 623     --disable-libquadmath                          \
 624     --disable-libssp                               \
 625     --disable-libvtv                               \
 626     --enable-languages=c,c++
 627 
 628 make
 629 make DESTDIR=$LFS install
 630 ln -sv gcc $LFS/usr/bin/cc
 631 
 632 cd $LFS/sources/ 
 633 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 634 
 635 # As root user  
 636 echo $LFS
 637 /home/vagrant/lfs
 638 cd $LFS
 639 chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools}
 640 case $(uname -m) in
 641   x86_64) chown -R root:root $LFS/lib64 ;;
 642 esac
 643 mkdir -pv $LFS/{dev,proc,sys,run}
 644 mount -v --bind /dev $LFS/dev
 645 
 646 mount -v --bind /dev/pts $LFS/dev/pts
 647 mount -vt proc proc $LFS/proc
 648 mount -vt sysfs sysfs $LFS/sys
 649 mount -vt tmpfs tmpfs $LFS/run
 650 
 651 if [ -h $LFS/dev/shm ]; then
 652   mkdir -pv $LFS/$(readlink $LFS/dev/shm)
 653 else
 654   mount -t tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
 655 fi
 656 
 657 chroot "$LFS" /usr/bin/env -i   \
 658     HOME=/root                  \
 659     TERM="$TERM"                \
 660     PS1='(lfs chroot) \u:\w\$ ' \
 661     PATH=/usr/bin:/usr/sbin     \
 662     /bin/bash --login
 663 # in chroot state the bash prompt will say "I have no name!"
 664 mkdir -pv /{boot,home,mnt,opt,srv}
 665 mkdir -pv /etc/{opt,sysconfig}
 666 mkdir -pv /lib/firmware
 667 mkdir -pv /media/{floppy,cdrom}
 668 mkdir -pv /usr/{,local/}{include,src}
 669 mkdir -pv /usr/local/{bin,lib,sbin}
 670 mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
 671 mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo}
 672 mkdir -pv /usr/{,local/}share/man/man{1..8}
 673 mkdir -pv /var/{cache,local,log,mail,opt,spool}
 674 mkdir -pv /var/lib/{color,misc,locate}
 675 
 676 ln -sfv /run /var/run
 677 ln -sfv /run/lock /var/lock
 678 
 679 install -dv -m 0750 /root
 680 install -dv -m 1777 /tmp /var/tmp
 681 
 682 ln -sv /proc/self/mounts /etc/mtab
 683 
 684 cat > /etc/hosts << "EOF"
 685 127.0.0.1  localhost $(hostname)
 686 ::1        localhost
 687 EOF
 688 
 689 cat > /etc/passwd << "EOF"
 690 root:x:0:0:root:/root:/bin/bash
 691 bin:x:1:1:bin:/dev/null:/usr/bin/false
 692 daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false
 693 messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false
 694 uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false
 695 nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/false
 696 EOF
 697 
 698 cat > /etc/group << "EOF"
 699 root:x:0:
 700 bin:x:1:daemon
 701 sys:x:2:
 702 kmem:x:3:
 703 tape:x:4:
 704 tty:x:5:
 705 daemon:x:6:
 706 floppy:x:7:
 707 disk:x:8:
 708 lp:x:9:
 709 dialout:x:10:
 710 audio:x:11:
 711 video:x:12:
 712 utmp:x:13:
 713 usb:x:14:
 714 cdrom:x:15:
 715 adm:x:16:
 716 messagebus:x:18:
 717 input:x:24:
 718 mail:x:34:
 719 kvm:x:61:
 720 uuidd:x:80:
 721 wheel:x:97:
 722 users:x:999:
 723 nogroup:x:65534:
 724 EOF
 725 
 726 echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd
 727 echo "tester:x:101:" >> /etc/group
 728 install -o tester -d /home/tester
 729 
 730 exec /usr/bin/bash --login
 731 
 732 touch /var/log/{btmp,lastlog,faillog,wtmp}
 733 chgrp -v utmp /var/log/lastlog
 734 chmod -v 664  /var/log/lastlog
 735 chmod -v 600  /var/log/btmp
 736 
 737 # gettext
 738 cd /sources/
 739 APP=gettext  
 740 tar xvif $APP*.xz
 741 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 742 
 743 ./configure --disable-shared
 744 make
 745 cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin
 746 
 747 cd /sources/ 
 748 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 749 
 750 # bison 
 751 cd /sources/
 752 APP=bison   
 753 tar xvif $APP*.xz
 754 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 755 
 756 ./configure --prefix=/usr \
 757             --docdir=/usr/share/doc/bison-3.8.2
 758 make
 759 make install
 760 cd /sources/ 
 761 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 762 
 763 # perl 
 764 cd /sources/
 765 APP=perl 
 766 tar xvif $APP*.xz
 767 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 768 
 769 sh Configure -des                                        \
 770              -Dprefix=/usr                               \
 771              -Dvendorprefix=/usr                         \
 772              -Dprivlib=/usr/lib/perl5/5.36/core_perl     \
 773              -Darchlib=/usr/lib/perl5/5.36/core_perl     \
 774              -Dsitelib=/usr/lib/perl5/5.36/site_perl     \
 775              -Dsitearch=/usr/lib/perl5/5.36/site_perl    \
 776              -Dvendorlib=/usr/lib/perl5/5.36/vendor_perl \
 777              -Dvendorarch=/usr/lib/perl5/5.36/vendor_perl
 778 make
 779 make install
 780 
 781 cd /sources/ 
 782 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 783 
 784 # python 
 785 cd /sources/
 786 APP=Python 
 787 tar xvif $APP*.xz
 788 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 789 
 790 ./configure --prefix=/usr   \
 791             --enable-shared \
 792             --without-ensurepip
 793 make
 794 make install
 795 cd /sources/ 
 796 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 797 
 798 # texinfo
 799 cd /sources/
 800 APP=texinfo 
 801 tar xvif $APP*.xz
 802 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 803 
 804 ./configure --prefix=/usr
 805 make
 806 make install
 807 
 808 cd /sources/ 
 809 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 810 
 811 # util-linux
 812 cd /sources/
 813 APP=util-linux 
 814 tar xvif $APP*.xz
 815 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 816 
 817 mkdir -pv /var/lib/hwclock
 818 ./configure ADJTIME_PATH=/var/lib/hwclock/adjtime    \
 819             --libdir=/usr/lib    \
 820             --docdir=/usr/share/doc/util-linux-2.38.1 \
 821             --disable-chfn-chsh  \
 822             --disable-login      \
 823             --disable-nologin    \
 824             --disable-su         \
 825             --disable-setpriv    \
 826             --disable-runuser    \
 827             --disable-pylibmount \
 828             --disable-static     \
 829             --without-python     \
 830             runstatedir=/run
 831 make
 832 make install
 833 
 834 cd /sources/ 
 835 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 836 
 837 # Cleaning
 838 rm -rf /usr/share/{info,man,doc}/*
 839 find /usr/{lib,libexec} -name \*.la -delete
 840 rm -rf /tools
 841 
 842 # Backup as root 
 843 exit # leave chroot 
 844 echo $LFS
 845 mountpoint -q $LFS/dev/shm && umount $LFS/dev/shm
 846 umount $LFS/dev/pts
 847 umount $LFS/{sys,proc,run,dev}
 848 cd $LFS
 849 tar -cJpf $HOME/lfs-temp-tools-11.3.tar.xz .
 850 
 851 # Restore as root if required 
 852 echo $LFS 
 853 cd $LFS
 854 rm -rf ./*
 855 tar -xpf $HOME/lfs-temp-tools-11.3.tar.xz
 856 
 857 # Prepare Virtual Kernel File Systems
 858 findmnt | grep $LFS
 859 mkdir -pv $LFS/{dev,proc,sys,run}
 860 mount -v --bind /dev $LFS/dev
 861 mount -v --bind /dev/pts $LFS/dev/pts
 862 mount -vt proc proc $LFS/proc
 863 mount -vt sysfs sysfs $LFS/sys
 864 mount -vt tmpfs tmpfs $LFS/run
 865 if [ -h $LFS/dev/shm ]; then
 866   mkdir -pv $LFS/$(readlink $LFS/dev/shm)
 867 else
 868   mount -t tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
 869 fi
 870 
 871 # Enter the chroot env
 872 chroot "$LFS" /usr/bin/env -i   \
 873     HOME=/root                  \
 874     TERM="$TERM"                \
 875     PS1='(lfs chroot) \u:\w\$ ' \
 876     PATH=/usr/bin:/usr/sbin     \
 877     /bin/bash --login
 878 
 879 # man pages 
 880 cd /sources/
 881 APP=man-pages
 882 tar xvif $APP*.xz
 883 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 884 make prefix=/usr install
 885 cd /sources/ 
 886 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 887 
 888 # iana 
 889 cd /sources/
 890 APP=iana
 891 tar xvif $APP*.gz
 892 cd $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 893 
 894 cp services protocols /etc
 895 
 896 cd /sources/ 
 897 rm -rf $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
 898 
 899 # glibc
 900 cd /sources/
 901 APP=glibc
 902 tar xvif $APP*.xz
 903 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 904 
 905 patch -Np1 -i ../glibc-2.37-fhs-1.patch
 906 sed '/width -=/s/workend - string/number_length/' \
 907     -i stdio-common/vfprintf-process-arg.c
 908 mkdir -v build
 909 cd       build
 910 
 911 echo "rootsbindir=/usr/sbin" > configparms
 912 ../configure --prefix=/usr                            \
 913              --disable-werror                         \
 914              --enable-kernel=3.2                      \
 915              --enable-stack-protector=strong          \
 916              --with-headers=/usr/include              \
 917              libc_cv_slibdir=/usr/lib
 918 
 919 make
 920 make check
 921 touch /etc/ld.so.conf
 922 
 923 sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile
 924 make install
 925 sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd
 926 cp -v ../nscd/nscd.conf /etc/nscd.conf
 927 mkdir -pv /var/cache/nscd
 928 
 929 mkdir -pv /usr/lib/locale
 930 
 931 localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true
 932 
 933 localedef -i en_US -f ISO-8859-1 en_US
 934 localedef -i en_US -f UTF-8 en_US.UTF-8
 935 
 936 localedef -i pt_PT -f ISO-8859-1 pt_PT
 937 localedef -i pt_PT@euro -f ISO-8859-15 pt_PT@euro
 938 localedef -i pt_PT -f UTF-8 pt_PT.UTF-8
 939 
 940 make localedata/install-locales
 941 localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true
 942 localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true
 943 
 944 cat > /etc/nsswitch.conf << "EOF"
 945 passwd: files
 946 group: files
 947 shadow: files
 948 
 949 hosts: files dns
 950 networks: files
 951 
 952 protocols: files
 953 services: files
 954 ethers: files
 955 rpc: files
 956 EOF
 957 
 958 tar -xf ../../tzdata2022g.tar.gz
 959 
 960 ZONEINFO=/usr/share/zoneinfo
 961 mkdir -pv $ZONEINFO/{posix,right}
 962 
 963 for tz in etcetera southamerica northamerica europe africa antarctica  \
 964           asia australasia backward; do
 965     zic -L /dev/null   -d $ZONEINFO       ${tz}
 966     zic -L /dev/null   -d $ZONEINFO/posix ${tz}
 967     zic -L leapseconds -d $ZONEINFO/right ${tz}
 968 done
 969 
 970 cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
 971 zic -d $ZONEINFO -p America/New_York
 972 unset ZONEINFO
 973 
 974 echo -e "7\n 37\n 1\n 1\n" | tzselect
 975 # 7\n 37\n 1\n 1\n
 976 # Europe Portugal Mainland yes 
 977 ln -sfv /usr/share/zoneinfo/Europe/Portugal /etc/localtime
 978 
 979 cat > /etc/ld.so.conf << "EOF"
 980 /usr/local/lib
 981 /opt/lib
 982 # Add an include directory
 983 include /etc/ld.so.conf.d/*.conf
 984 EOF
 985 
 986 mkdir -pv /etc/ld.so.conf.d
 987 cd /sources/ 
 988 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 989 
 990 # zlib 
 991 cd /sources/
 992 APP=zlib
 993 tar xvif $APP*.xz
 994 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
 995 
 996 ./configure --prefix=/usr
 997 make
 998 make check
 999 make install
1000 rm -fv /usr/lib/libz.a
1001 
1002 cd /sources/ 
1003 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
1004 
1005 # bzip2
1006 cd /sources/
1007 APP=bzip2 
1008 tar xvif $APP*.gz
1009 cd $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
1010 
1011 patch -Np1 -i ../bzip2-1.0.8-install_docs-1.patch
1012 sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile
1013 sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile
1014 make -f Makefile-libbz2_so
1015 make clean
1016 make
1017 make PREFIX=/usr install
1018 cp -av libbz2.so.* /usr/lib
1019 ln -sv libbz2.so.1.0.8 /usr/lib/libbz2.so
1020 
1021 cp -v bzip2-shared /usr/bin/bzip2
1022 for i in /usr/bin/{bzcat,bunzip2}; do
1023   ln -sfv bzip2 $i
1024 done
1025 
1026 rm -fv /usr/lib/libbz2.a
1027 
1028 cd /sources/ 
1029 rm -rf $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
1030 
1031 # xz
1032 cd /sources/
1033 APP=xz
1034 tar xvif $APP*.xz
1035 cd $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
1036 
1037 ./configure --prefix=/usr    \
1038             --disable-static \
1039             --docdir=/usr/share/doc/xz-5.4.1
1040 
1041 make
1042 make check
1043 make install
1044 
1045 cd /sources/ 
1046 rm -rf $(ls $APP*xz | sed  's/\.tar//g' | sed 's/\.xz//g' )
1047 
1048 # zstd
1049 cd /sources/
1050 APP=zstd
1051 tar xvif $APP*.gz
1052 cd $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
1053 
1054 make prefix=/usr
1055 make check
1056 make prefix=/usr install
1057 rm -v /usr/lib/libzstd.a
1058 
1059 cd /sources/ 
1060 rm -rf $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
1061 
1062 # file
1063 cd /sources/
1064 APP=file
1065 EXTENSION=gz
1066 tar xvif $APP*.$EXTENSION
1067 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1068 
1069 ./configure --prefix=/usr
1070 make
1071 make check
1072 make install
1073 
1074 cd /sources/ 
1075 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1076 
1077 # readline
1078 cd /sources/
1079 APP=readline
1080 tar xvif $APP*.gz
1081 cd $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
1082 
1083 sed -i '/MV.*old/d' Makefile.in
1084 sed -i '/{OLDSUFF}/c:' support/shlib-install
1085 patch -Np1 -i ../readline-8.2-upstream_fix-1.patch
1086 
1087 ./configure --prefix=/usr    \
1088             --disable-static \
1089             --with-curses    \
1090             --docdir=/usr/share/doc/readline-8.2
1091 
1092 make SHLIB_LIBS="-lncursesw"
1093 make SHLIB_LIBS="-lncursesw" install
1094 install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-8.2
1095 
1096 cd /sources/ 
1097 rm -rf $(ls $APP*gz | sed  's/\.tar//g' | sed 's/\.gz//g' )
1098 
1099 # m4
1100 cd /sources/
1101 APP=m4 
1102 EXTENSION=xz
1103 tar xvif $APP*.$EXTENSION
1104 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1105 
1106 ./configure --prefix=/usr
1107 make
1108 make check
1109 make install
1110 
1111 cd /sources/ 
1112 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1113 
1114 # bc
1115 cd /sources/
1116 APP=bc
1117 EXTENSION=xz
1118 tar xvif $APP*.$EXTENSION
1119 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1120 
1121 CC=gcc ./configure --prefix=/usr -G -O3 -r
1122 make
1123 make test
1124 make install
1125 
1126 cd /sources/ 
1127 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1128 
1129 # flex
1130 cd /sources/
1131 APP=flex
1132 EXTENSION=gz
1133 tar xvif $APP*.$EXTENSION
1134 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1135 
1136 ./configure --prefix=/usr \
1137             --docdir=/usr/share/doc/flex-2.6.4 \
1138             --disable-static
1139 
1140 make
1141 make check
1142 make install
1143 ln -sv flex /usr/bin/lex
1144 
1145 cd /sources/ 
1146 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1147 
1148 # tcl 
1149 cd /sources/
1150 APP=tcl8.6.13-src
1151 EXTENSION=gz
1152 FOLDER=tcl8.6.13
1153 tar xvzf $APP*.$EXTENSION
1154 cd $FOLDER
1155 
1156 SRCDIR=$(pwd)
1157 cd unix
1158 ./configure --prefix=/usr           \
1159             --mandir=/usr/share/man
1160 
1161 make
1162 sed -e "s|$SRCDIR/unix|/usr/lib|" \
1163     -e "s|$SRCDIR|/usr/include|"  \
1164     -i tclConfig.sh
1165 
1166 sed -e "s|$SRCDIR/unix/pkgs/tdbc1.1.5|/usr/lib/tdbc1.1.5|" \
1167     -e "s|$SRCDIR/pkgs/tdbc1.1.5/generic|/usr/include|"    \
1168     -e "s|$SRCDIR/pkgs/tdbc1.1.5/library|/usr/lib/tcl8.6|" \
1169     -e "s|$SRCDIR/pkgs/tdbc1.1.5|/usr/include|"            \
1170     -i pkgs/tdbc1.1.5/tdbcConfig.sh
1171 
1172 sed -e "s|$SRCDIR/unix/pkgs/itcl4.2.3|/usr/lib/itcl4.2.3|" \
1173     -e "s|$SRCDIR/pkgs/itcl4.2.3/generic|/usr/include|"    \
1174     -e "s|$SRCDIR/pkgs/itcl4.2.3|/usr/include|"            \
1175     -i pkgs/itcl4.2.3/itclConfig.sh
1176 
1177 unset SRCDIR
1178 
1179 make test
1180 make install
1181 
1182 chmod -v u+w /usr/lib/libtcl8.6.so
1183 
1184 make install-private-headers
1185 ln -sfv tclsh8.6 /usr/bin/tclsh
1186 mv /usr/share/man/man3/{Thread,Tcl_Thread}.3
1187 cd ..
1188 tar -xf ../tcl8.6.13-html.tar.gz --strip-components=1
1189 mkdir -v -p /usr/share/doc/tcl-8.6.13
1190 cp -v -r  ./html/* /usr/share/doc/tcl-8.6.13
1191 
1192 cd /sources/ 
1193 rm -rf $FOLDER
1194 
1195 # expect
1196 cd /sources/
1197 APP=expect
1198 EXTENSION=gz
1199 tar xvif $APP*.$EXTENSION
1200 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1201 
1202 ./configure --prefix=/usr           \
1203             --with-tcl=/usr/lib     \
1204             --enable-shared         \
1205             --mandir=/usr/share/man \
1206             --with-tclinclude=/usr/include
1207 
1208 make
1209 make test
1210 make install
1211 ln -svf expect5.45.4/libexpect5.45.4.so /usr/lib
1212                         
1213 cd /sources/ 
1214 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1215 
1216 
1217 # dejagnu
1218 cd /sources/
1219 APP=dejagnu
1220 EXTENSION=gz
1221 tar xvif $APP*.$EXTENSION
1222 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1223                         
1224 mkdir -v build
1225 cd       build
1226 
1227 ../configure --prefix=/usr
1228 makeinfo --html --no-split -o doc/dejagnu.html ../doc/dejagnu.texi
1229 makeinfo --plaintext       -o doc/dejagnu.txt  ../doc/dejagnu.texi
1230 
1231 make install
1232 install -v -dm755  /usr/share/doc/dejagnu-1.6.3
1233 install -v -m644   doc/dejagnu.{html,txt} /usr/share/doc/dejagnu-1.6.3
1234 
1235 make check
1236 
1237 cd /sources/ 
1238 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1239 
1240 
1241 # binutils
1242 cd /sources/
1243 APP=binutils
1244 EXTENSION=xz
1245 tar xvif $APP*.$EXTENSION
1246 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1247 
1248 expect -c "spawn ls"
1249 mkdir -v build
1250 cd       build
1251 
1252 ../configure --prefix=/usr       \
1253              --sysconfdir=/etc   \
1254              --enable-gold       \
1255              --enable-ld=default \
1256              --enable-plugins    \
1257              --enable-shared     \
1258              --disable-werror    \
1259              --enable-64-bit-bfd \
1260              --with-system-zlib
1261 make tooldir=/usr
1262 
1263 make -k check
1264 grep '^FAIL:' $(find -name '*.log')
1265 # expected to 12 tests fail 
1266 grep '^FAIL:' $(find -name '*.log') | wc -l 
1267 
1268 make tooldir=/usr install
1269 rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,sframe,opcodes}.a
1270 rm -fv /usr/share/man/man1/{gprofng,gp-*}.1
1271 
1272 cd /sources/ 
1273 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1274 
1275 # gmp
1276 cd /sources/
1277 APP=gmp
1278 EXTENSION=xz
1279 tar xvif $APP*.$EXTENSION
1280 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1281 
1282 cp -v configfsf.guess config.guess
1283 cp -v configfsf.sub   config.sub
1284 
1285 ./configure --prefix=/usr    \
1286             --enable-cxx     \
1287             --disable-static \
1288             --docdir=/usr/share/doc/gmp-6.2.1
1289 make
1290 make html
1291 make check 2>&1 | tee gmp-check-log
1292 awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log
1293 # check all 197 pass 
1294 make install
1295 make install-html
1296 
1297 cd /sources/ 
1298 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1299 
1300 
1301 # mpfr
1302 cd /sources/
1303 APP=mpfr
1304 EXTENSION=xz
1305 tar xvif $APP*.$EXTENSION
1306 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1307 
1308 sed -e 's/+01,234,567/+1,234,567 /' \
1309     -e 's/13.10Pd/13Pd/'            \
1310     -i tests/tsprintf.c
1311 
1312 ./configure --prefix=/usr        \
1313             --disable-static     \
1314             --enable-thread-safe \
1315             --docdir=/usr/share/doc/mpfr-4.2.0
1316 make
1317 make html
1318 make check
1319 # ensure that all 197 tests passed
1320 make install
1321 make install-html
1322 
1323 cd /sources/ 
1324 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1325 
1326 # mpc 
1327 cd /sources/
1328 APP=mpc
1329 EXTENSION=gz
1330 tar xvif $APP*.$EXTENSION
1331 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1332 
1333 
1334 ./configure --prefix=/usr    \
1335             --disable-static \
1336             --docdir=/usr/share/doc/mpc-1.3.1
1337 
1338 make
1339 make html
1340 make check
1341 make install
1342 make install-html
1343 
1344 cd /sources/ 
1345 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1346 
1347 # attr
1348 cd /sources/
1349 APP=attr
1350 EXTENSION=gz
1351 tar xvif $APP*.$EXTENSION
1352 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1353 
1354 ./configure --prefix=/usr     \
1355             --disable-static  \
1356             --sysconfdir=/etc \
1357             --docdir=/usr/share/doc/attr-2.5.1
1358 
1359 make
1360 make check
1361 make install
1362 
1363 cd /sources/ 
1364 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1365 
1366 # acl
1367 cd /sources/
1368 APP=acl
1369 EXTENSION=xz
1370 tar xvif $APP*.$EXTENSION
1371 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1372 
1373 ./configure --prefix=/usr         \
1374             --disable-static      \
1375             --docdir=/usr/share/doc/acl-2.3.1
1376 
1377 make
1378 make install
1379 
1380 cd /sources/ 
1381 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1382 
1383 # libcap
1384 cd /sources/
1385 APP=libcap
1386 EXTENSION=xz
1387 tar xvif $APP*.$EXTENSION
1388 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1389 
1390 sed -i '/install -m.*STA/d' libcap/Makefile
1391 make prefix=/usr lib=lib
1392 make test
1393 make prefix=/usr lib=lib install
1394 
1395 cd /sources/ 
1396 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1397 
1398 # shadow
1399 cd /sources/
1400 APP=shadow
1401 EXTENSION=xz
1402 tar xvif $APP*.$EXTENSION
1403 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1404 
1405 sed -i 's/groups$(EXEEXT) //' src/Makefile.in
1406 find man -name Makefile.in -exec sed -i 's/groups\.1 / /'   {} \;
1407 find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \;
1408 find man -name Makefile.in -exec sed -i 's/passwd\.5 / /'   {} \;
1409 
1410 sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD SHA512:' \
1411     -e 's@#\(SHA_CRYPT_..._ROUNDS 5000\)@\100@'       \
1412     -e 's:/var/spool/mail:/var/mail:'                 \
1413     -e '/PATH=/{s@/sbin:@@;s@/bin:@@}'                \
1414     -i etc/login.defs
1415 
1416 # no cracklib support   
1417 
1418 touch /usr/bin/passwd
1419 ./configure --sysconfdir=/etc \
1420             --disable-static  \
1421             --with-group-name-max-length=32
1422 
1423 make
1424 make exec_prefix=/usr install
1425 make -C man install-man
1426 
1427 pwconv
1428 grpconv
1429 mkdir -p /etc/default
1430 useradd -D --gid 999
1431 
1432 sed -i '/MAIL/s/yes/no/' /etc/default/useradd
1433 # input root pwd
1434 passwd root
1435                         
1436 cd /sources/ 
1437 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1438 
1439 # gcc
1440 cd /sources/
1441 APP=gcc
1442 EXTENSION=xz
1443 tar xvif $APP*.$EXTENSION
1444 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1445 
1446 case $(uname -m) in
1447   x86_64)
1448     sed -e '/m64=/s/lib64/lib/' \
1449         -i.orig gcc/config/i386/t-linux64
1450   ;;
1451 esac
1452 
1453 mkdir -v build
1454 cd       build
1455 
1456 ../configure --prefix=/usr            \
1457              LD=ld                    \
1458              --enable-languages=c,c++ \
1459              --enable-default-pie     \
1460              --enable-default-ssp     \
1461              --disable-multilib       \
1462              --disable-bootstrap      \
1463              --with-system-zlib
1464 
1465 time make # 43 SBU # real       65m28.356s
1466 ulimit -s 32768
1467 chown -Rv tester .
1468 su tester -c "PATH=$PATH make -k check" # started 16:14
1469 ../contrib/test_summary
1470 
1471 make install
1472 chown -v -R root:root \
1473     /usr/lib/gcc/$(gcc -dumpmachine)/12.2.0/include{,-fixed}
1474 ln -svr /usr/bin/cpp /usr/lib
1475 ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/12.2.0/liblto_plugin.so \
1476         /usr/lib/bfd-plugins/
1477 
1478 echo 'int main(){}' > dummy.c
1479 cc dummy.c -v -Wl,--verbose &> dummy.log
1480 readelf -l a.out | grep ': /lib'
1481 # should show
1482 # [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
1483 
1484 grep -E -o '/usr/lib.*/S?crt[1in].*succeeded' dummy.log
1485 grep -B4 '^ /usr/include' dummy.log
1486 grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
1487 grep "/lib.*/libc.so.6 " dummy.log
1488 rm -v dummy.c a.out dummy.log
1489 
1490 mkdir -pv /usr/share/gdb/auto-load/usr/lib
1491 mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib
1492 
1493 cd /sources/ 
1494 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1495 
1496 # pkg-config
1497 cd /sources/
1498 APP=pkg-config
1499 EXTENSION=gz
1500 tar xvif $APP*.$EXTENSION
1501 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1502 
1503 ./configure --prefix=/usr              \
1504             --with-internal-glib       \
1505             --disable-host-tool        \
1506             --docdir=/usr/share/doc/pkg-config-0.29.2
1507 make
1508 make check
1509 make install
1510 
1511 cd /sources/ 
1512 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1513 
1514 # ncurses
1515 cd /sources/
1516 APP=ncurses
1517 EXTENSION=gz
1518 tar xvif $APP*.$EXTENSION
1519 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1520 
1521 ./configure --prefix=/usr           \
1522             --mandir=/usr/share/man \
1523             --with-shared           \
1524             --without-debug         \
1525             --without-normal        \
1526             --with-cxx-shared       \
1527             --enable-pc-files       \
1528             --enable-widec          \
1529             --with-pkg-config-libdir=/usr/lib/pkgconfig
1530 
1531 make
1532 make DESTDIR=$PWD/dest install
1533 install -vm755 dest/usr/lib/libncursesw.so.6.4 /usr/lib
1534 rm -v  dest/usr/lib/libncursesw.so.6.4
1535 cp -av dest/* /
1536 
1537 for lib in ncurses form panel menu ; do
1538     rm -vf                    /usr/lib/lib${lib}.so
1539     echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so
1540     ln -sfv ${lib}w.pc        /usr/lib/pkgconfig/${lib}.pc
1541 done
1542 
1543 rm -vf                     /usr/lib/libcursesw.so
1544 echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so
1545 ln -sfv libncurses.so      /usr/lib/libcurses.so
1546 
1547 mkdir -pv      /usr/share/doc/ncurses-6.4
1548 cp -v -R doc/* /usr/share/doc/ncurses-6.4
1549 
1550 cd /sources/ 
1551 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1552 
1553 # sed 
1554 cd /sources/
1555 APP=sed
1556 EXTENSION=xz
1557 tar xvif $APP*.$EXTENSION
1558 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1559 
1560 ./configure --prefix=/usr
1561 
1562 make
1563 make html
1564 chown -Rv tester .
1565 su tester -c "PATH=$PATH make check"
1566 
1567 make install
1568 install -d -m755           /usr/share/doc/sed-4.9
1569 install -m644 doc/sed.html /usr/share/doc/sed-4.9
1570 
1571 cd /sources/ 
1572 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1573 
1574 # psmisc
1575 cd /sources/
1576 APP=psmisc
1577 EXTENSION=xz
1578 tar xvif $APP*.$EXTENSION
1579 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1580 
1581 ./configure --prefix=/usr
1582 make
1583 make install
1584 
1585 cd /sources/ 
1586 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1587 
1588 # gettext
1589 cd /sources/
1590 APP=gettext
1591 EXTENSION=xz
1592 tar xvif $APP*.$EXTENSION
1593 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1594 
1595 ./configure --prefix=/usr    \
1596             --disable-static \
1597             --docdir=/usr/share/doc/gettext-0.21.1
1598 
1599 make
1600 make check
1601 make install
1602 chmod -v 0755 /usr/lib/preloadable_libintl.so
1603 
1604 cd /sources/ 
1605 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1606 
1607 # bison 
1608 cd /sources/
1609 APP=bison
1610 EXTENSION=xz
1611 tar xvif $APP*.$EXTENSION
1612 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1613 
1614 ./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.8.2
1615 make
1616 make check
1617 make install
1618 
1619 cd /sources/ 
1620 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1621 
1622 # grep
1623 cd /sources/
1624 APP=grep
1625 EXTENSION=xz
1626 tar xvif $APP*.$EXTENSION
1627 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1628 
1629 sed -i "s/echo/#echo/" src/egrep.sh
1630 ./configure --prefix=/usr
1631 make
1632 make check
1633 make install
1634 
1635 cd /sources/ 
1636 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1637 
1638 # bash
1639 cd /sources/
1640 APP=bash
1641 EXTENSION=gz
1642 tar xvif $APP*.$EXTENSION
1643 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1644 
1645 ./configure --prefix=/usr             \
1646             --without-bash-malloc     \
1647             --with-installed-readline \
1648             --docdir=/usr/share/doc/bash-5.2.15
1649 
1650 make
1651 chown -Rv tester .
1652 su -s /usr/bin/expect tester << EOF
1653 set timeout -1
1654 spawn make tests
1655 expect eof
1656 lassign [wait] _ _ _ value
1657 exit $value
1658 EOF
1659 
1660 make install
1661 exec /usr/bin/bash --login
1662 
1663 cd /sources/ 
1664 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1665 
1666 # libtool
1667 cd /sources/
1668 APP=libtool
1669 EXTENSION=xz
1670 tar xvif $APP*.$EXTENSION
1671 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1672 
1673 ./configure --prefix=/usr
1674 make
1675 make -k check
1676 make install
1677 rm -fv /usr/lib/libltdl.a
1678 
1679 cd /sources/ 
1680 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1681 
1682 # gdbm
1683 cd /sources/
1684 APP=gdbm
1685 EXTENSION=gz
1686 tar xvif $APP*.$EXTENSION
1687 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1688 
1689 ./configure --prefix=/usr    \
1690             --disable-static \
1691             --enable-libgdbm-compat
1692 
1693 make
1694 make check
1695 make install
1696 
1697 cd /sources/ 
1698 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1699 
1700 # gperf
1701 cd /sources/
1702 APP=gperf
1703 EXTENSION=gz
1704 tar xvif $APP*.$EXTENSION
1705 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1706 
1707 ./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1
1708 make
1709 make -j1 check
1710 make install
1711 
1712 cd /sources/ 
1713 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1714 
1715 # expat
1716 cd /sources/
1717 APP=expat
1718 EXTENSION=xz
1719 tar xvif $APP*.$EXTENSION
1720 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1721 
1722 ./configure --prefix=/usr    \
1723             --disable-static \
1724             --docdir=/usr/share/doc/expat-2.5.0
1725 
1726 make
1727 make check
1728 make install
1729 install -v -m644 doc/*.{html,css} /usr/share/doc/expat-2.5.0
1730 
1731 cd /sources/ 
1732 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1733 
1734 # inetutils 
1735 cd /sources/
1736 APP=inetutils
1737 EXTENSION=xz
1738 tar xvif $APP*.$EXTENSION
1739 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1740 
1741 ./configure --prefix=/usr        \
1742             --bindir=/usr/bin    \
1743             --localstatedir=/var \
1744             --disable-logger     \
1745             --disable-whois      \
1746             --disable-rcp        \
1747             --disable-rexec      \
1748             --disable-rlogin     \
1749             --disable-rsh        \
1750             --disable-servers
1751 
1752 make
1753 make check
1754 make install
1755 mv -v /usr/{,s}bin/ifconfig
1756 cd /sources/ 
1757 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1758 
1759 # less
1760 cd /sources/
1761 APP=less
1762 EXTENSION=gz
1763 tar xvif $APP*.$EXTENSION
1764 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1765 
1766 ./configure --prefix=/usr --sysconfdir=/etc
1767 make
1768 make install
1769 
1770 cd /sources/ 
1771 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1772 
1773 # perl
1774 cd /sources/
1775 APP=perl
1776 EXTENSION=xz
1777 tar xvif $APP*.$EXTENSION
1778 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1779 
1780 export BUILD_ZLIB=False
1781 export BUILD_BZIP2=0
1782 
1783 sh Configure -des                                         \
1784              -Dprefix=/usr                                \
1785              -Dvendorprefix=/usr                          \
1786              -Dprivlib=/usr/lib/perl5/5.36/core_perl      \
1787              -Darchlib=/usr/lib/perl5/5.36/core_perl      \
1788              -Dsitelib=/usr/lib/perl5/5.36/site_perl      \
1789              -Dsitearch=/usr/lib/perl5/5.36/site_perl     \
1790              -Dvendorlib=/usr/lib/perl5/5.36/vendor_perl  \
1791              -Dvendorarch=/usr/lib/perl5/5.36/vendor_perl \
1792              -Dman1dir=/usr/share/man/man1                \
1793              -Dman3dir=/usr/share/man/man3                \
1794              -Dpager="/usr/bin/less -isR"                 \
1795              -Duseshrplib                                 \
1796              -Dusethreads
1797 make
1798 make test
1799 make install
1800 unset BUILD_ZLIB BUILD_BZIP2
1801 
1802 cd /sources/ 
1803 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1804 
1805 # XML-Parser
1806 cd /sources/
1807 APP=XML-Parser
1808 EXTENSION=gz
1809 tar xvif $APP*.$EXTENSION
1810 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1811 
1812 perl Makefile.PL
1813 make
1814 make test
1815 make install
1816 
1817 cd /sources/ 
1818 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1819 
1820 # intltool-0.51.0.tar.gz
1821 cd /sources/
1822 APP=intltool
1823 EXTENSION=gz
1824 tar xvif $APP*.$EXTENSION
1825 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1826 
1827 sed -i 's:\\\${:\\\$\\{:' intltool-update.in
1828 ./configure --prefix=/usr
1829 make
1830 make check
1831 make install
1832 install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO
1833 
1834 cd /sources/ 
1835 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1836 
1837 # autoconf-2.71.tar.xz
1838 cd /sources/
1839 APP=autoconf
1840 EXTENSION=xz
1841 tar xvif $APP*.$EXTENSION
1842 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1843 
1844 sed -e 's/SECONDS|/&SHLVL|/'               \
1845     -e '/BASH_ARGV=/a\        /^SHLVL=/ d' \
1846     -i.orig tests/local.at
1847 
1848 ./configure --prefix=/usr
1849 make
1850 make check
1851 make install
1852 
1853 cd /sources/ 
1854 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1855 
1856 # automake-1.16.5.tar.xz
1857 cd /sources/
1858 APP=automake
1859 EXTENSION=xz
1860 tar xvif $APP*.$EXTENSION
1861 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1862 
1863 ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.16.5
1864 
1865 make
1866 make -j4 check
1867 make install
1868 
1869 cd /sources/ 
1870 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1871 
1872 # openssl-3.0.8.tar.gz
1873 cd /sources/
1874 APP=openssl
1875 EXTENSION=gz
1876 tar xvif $APP*.$EXTENSION
1877 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1878 
1879 ./config --prefix=/usr         \
1880          --openssldir=/etc/ssl \
1881          --libdir=lib          \
1882          shared                \
1883          zlib-dynamic
1884 
1885 make
1886 make test
1887 sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile
1888 make MANSUFFIX=ssl install
1889 mv -v /usr/share/doc/openssl /usr/share/doc/openssl-3.0.8
1890 cp -vfr doc/* /usr/share/doc/openssl-3.0.8
1891 
1892 cd /sources/ 
1893 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1894 
1895 # kmod-30.tar.xz
1896 cd /sources/
1897 APP=kmod
1898 EXTENSION=xz
1899 tar xvif $APP*.$EXTENSION
1900 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1901 
1902 ./configure --prefix=/usr          \
1903             --sysconfdir=/etc      \
1904             --with-openssl         \
1905             --with-xz              \
1906             --with-zstd            \
1907             --with-zlib
1908 
1909 make
1910 make install
1911 
1912 for target in depmod insmod modinfo modprobe rmmod; do
1913   ln -sfv ../bin/kmod /usr/sbin/$target
1914 done
1915 
1916 ln -sfv kmod /usr/bin/lsmod
1917 
1918 cd /sources/ 
1919 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1920 
1921 # elfutils-0.188.tar.bz2
1922 cd /sources/
1923 APP=elfutils
1924 EXTENSION=bz2
1925 tar xvif $APP*.$EXTENSION
1926 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1927 
1928 ./configure --prefix=/usr                \
1929             --disable-debuginfod         \
1930             --enable-libdebuginfod=dummy
1931 
1932 make
1933 make check
1934 make -C libelf install
1935 install -vm644 config/libelf.pc /usr/lib/pkgconfig
1936 rm /usr/lib/libelf.a
1937 
1938 cd /sources/ 
1939 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1940 
1941 # libffi-3.4.4.tar.gz
1942 cd /sources/
1943 APP=libffi
1944 EXTENSION=gz
1945 tar xvzf $APP*.$EXTENSION
1946 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1947 
1948 ./configure --prefix=/usr          \
1949             --disable-static       \
1950             --with-gcc-arch=native
1951 
1952 make
1953 make check
1954 make install
1955 
1956 cd /sources/ 
1957 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1958 
1959 # Python-3.11.2.tar.xz
1960 cd /sources/
1961 APP=Python-3
1962 EXTENSION=xz
1963 tar xvif $APP*.$EXTENSION
1964 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1965 
1966 ./configure --prefix=/usr        \
1967             --enable-shared      \
1968             --with-system-expat  \
1969             --with-system-ffi    \
1970             --enable-optimizations
1971 
1972 make
1973 make install
1974 
1975 cat > /etc/pip.conf << "EOF"
1976 [global]
1977 root-user-action = ignore
1978 disable-pip-version-check = true
1979 EOF
1980 
1981 install -v -dm755 /usr/share/doc/python-3.11.2/html
1982 
1983 tar --strip-components=1  \
1984     --no-same-owner       \
1985     --no-same-permissions \
1986     -C /usr/share/doc/python-3.11.2/html \
1987     -xvf ../python-3.11.2-docs-html.tar.bz2
1988 
1989 cd /sources/ 
1990 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1991 
1992 # wheel-0.38.4.tar.gz
1993 cd /sources/
1994 APP=wheel
1995 EXTENSION=gz
1996 tar xvzf $APP*.$EXTENSION
1997 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
1998 
1999 PYTHONPATH=src pip3 wheel -w dist --no-build-isolation --no-deps $PWD
2000 pip3 install --no-index --find-links=dist wheel
2001 
2002 cd /sources/ 
2003 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2004 
2005 # ninja-1.11.1.tar.gz
2006 cd /sources/
2007 APP=ninja
2008 EXTENSION=gz
2009 tar xvzf $APP*.$EXTENSION
2010 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2011 
2012 export NINJAJOBS=4
2013 
2014 sed -i '/int Guess/a \
2015   int   j = 0;\
2016   char* jobs = getenv( "NINJAJOBS" );\
2017   if ( jobs != NULL ) j = atoi( jobs );\
2018   if ( j > 0 ) return j;\
2019 ' src/ninja.cc
2020 
2021 python3 configure.py --bootstrap
2022 
2023 ./ninja ninja_test
2024 ./ninja_test --gtest_filter=-SubprocessTest.SetWithLots
2025 
2026 install -vm755 ninja /usr/bin/
2027 install -vDm644 misc/bash-completion /usr/share/bash-completion/completions/ninja
2028 install -vDm644 misc/zsh-completion  /usr/share/zsh/site-functions/_ninja
2029 
2030 cd /sources/ 
2031 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2032 
2033 # meson-1.0.0.tar.gz
2034 cd /sources/
2035 APP=meson
2036 EXTENSION=gz
2037 tar xvzf $APP*.$EXTENSION
2038 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2039 
2040 pip3 wheel -w dist --no-build-isolation --no-deps $PWD
2041 pip3 install --no-index --find-links dist meson
2042 install -vDm644 data/shell-completions/bash/meson /usr/share/bash-completion/completions/meson
2043 install -vDm644 data/shell-completions/zsh/_meson /usr/share/zsh/site-functions/_meson
2044 
2045 cd /sources/ 
2046 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2047 
2048 # coreutils-9.1.tar.xz
2049 cd /sources/
2050 APP=coreutils
2051 EXTENSION=xz
2052 tar xvif $APP*.$EXTENSION
2053 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2054 
2055 patch -Np1 -i ../coreutils-9.1-i18n-1.patch
2056 
2057 autoreconf -fiv
2058 FORCE_UNSAFE_CONFIGURE=1 ./configure \
2059             --prefix=/usr            \
2060             --enable-no-install-program=kill,uptime
2061 
2062 make
2063 make NON_ROOT_USERNAME=tester check-root
2064 
2065 echo "dummy:x:102:tester" >> /etc/group
2066 
2067 chown -Rv tester . 
2068 su tester -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"
2069 sed -i '/dummy/d' /etc/group
2070 
2071 make install
2072 
2073 mv -v /usr/bin/chroot /usr/sbin
2074 mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
2075 sed -i 's/"1"/"8"/' /usr/share/man/man8/chroot.8
2076 
2077 cd /sources/ 
2078 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2079 
2080 # check-0.15.2.tar.gz
2081 cd /sources/
2082 APP=check
2083 EXTENSION=gz
2084 tar xvzf $APP*.$EXTENSION
2085 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2086 
2087 
2088 ./configure --prefix=/usr --disable-static
2089 
2090 make
2091 make check
2092 make docdir=/usr/share/doc/check-0.15.2 install
2093 
2094 cd /sources/ 
2095 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2096 
2097 # diffutils-3.9.tar.xz
2098 cd /sources/
2099 APP=diffutils
2100 EXTENSION=xz
2101 tar xvif $APP*.$EXTENSION
2102 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2103 
2104 ./configure --prefix=/usr
2105 make
2106 make check
2107 make install
2108 
2109 cd /sources/ 
2110 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2111 
2112 # gawk-5.2.1.tar.xz
2113 cd /sources/
2114 APP=gawk
2115 EXTENSION=xz
2116 tar xvif $APP*.$EXTENSION
2117 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2118 
2119 sed -i 's/extras//' Makefile.in
2120 ./configure --prefix=/usr
2121 make
2122 make check
2123 make LN='ln -f' install
2124 mkdir -pv                                   /usr/share/doc/gawk-5.2.1
2125 cp    -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-5.2.1
2126 
2127 cd /sources/ 
2128 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2129 
2130 # findutils-4.9.0.tar.xz
2131 cd /sources/
2132 APP=findutils
2133 EXTENSION=xz
2134 tar xvif $APP*.$EXTENSION
2135 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2136 
2137 case $(uname -m) in
2138     i?86)   TIME_T_32_BIT_OK=yes ./configure --prefix=/usr --localstatedir=/var/lib/locate ;;
2139     x86_64) ./configure --prefix=/usr --localstatedir=/var/lib/locate ;;
2140 esac
2141 
2142 make
2143 chown -Rv tester .
2144 su tester -c "PATH=$PATH make check"
2145 make install
2146 
2147 cd /sources/ 
2148 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2149 
2150 # groff-1.22.4.tar.gz
2151 cd /sources/
2152 APP=groff
2153 EXTENSION=gz
2154 tar xvzf $APP*.$EXTENSION
2155 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2156 
2157 PAGE=A4 ./configure --prefix=/usr
2158 
2159 make
2160 make install
2161 
2162 cd /sources/ 
2163 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2164 
2165 # grub-2.06.tar.xz
2166 cd /sources/
2167 APP=grub
2168 EXTENSION=xz
2169 tar xvif $APP*.$EXTENSION
2170 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2171 
2172 unset {C,CPP,CXX,LD}FLAGS
2173 patch -Np1 -i ../grub-2.06-upstream_fixes-1.patch
2174 
2175 ./configure --prefix=/usr          \
2176             --sysconfdir=/etc      \
2177             --disable-efiemu       \
2178             --disable-werror
2179 
2180 make
2181 make install
2182 mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions
2183 
2184 cd /sources/ 
2185 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2186 
2187 # gzip-1.12.tar.xz
2188 cd /sources/
2189 APP=gzip
2190 EXTENSION=xz
2191 tar xvif $APP*.$EXTENSION
2192 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2193 
2194 ./configure --prefix=/usr
2195 make
2196 make check
2197 make install
2198 
2199 cd /sources/ 
2200 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2201 
2202 # iproute2-6.1.0.tar.xz
2203 cd /sources/
2204 APP=iproute2
2205 EXTENSION=xz
2206 tar xvif $APP*.$EXTENSION
2207 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2208 
2209 sed -i /ARPD/d Makefile
2210 rm -fv man/man8/arpd.8
2211 
2212 make NETNS_RUN_DIR=/run/netns
2213 make SBINDIR=/usr/sbin install
2214 mkdir -pv             /usr/share/doc/iproute2-6.1.0
2215 cp -v COPYING README* /usr/share/doc/iproute2-6.1.0
2216 
2217 cd /sources/ 
2218 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2219 
2220 # kbd-2.5.1.tar.xz
2221 cd /sources/
2222 APP=kbd
2223 EXTENSION=xz
2224 tar xvif $APP*.$EXTENSION
2225 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2226 
2227 patch -Np1 -i ../kbd-2.5.1-backspace-1.patch
2228 
2229 sed -i '/RESIZECONS_PROGS=/s/yes/no/' configure
2230 sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in
2231 
2232 ./configure --prefix=/usr --disable-vlock
2233 
2234 make
2235 make check
2236 make install
2237 
2238 mkdir -pv           /usr/share/doc/kbd-2.5.1
2239 cp -R -v docs/doc/* /usr/share/doc/kbd-2.5.1
2240 
2241 cd /sources/ 
2242 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2243 
2244 # libpipeline-1.5.7.tar.gz
2245 cd /sources/
2246 APP=libpipeline
2247 EXTENSION=gz
2248 tar xvzf $APP*.$EXTENSION
2249 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2250 
2251 ./configure --prefix=/usr
2252 make
2253 make check
2254 make install
2255 
2256 cd /sources/ 
2257 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2258 
2259 # make-4.4.tar.gz
2260 cd /sources/
2261 APP=make
2262 EXTENSION=gz
2263 tar xvzf $APP*.$EXTENSION
2264 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2265 
2266 sed -e '/ifdef SIGPIPE/,+2 d' \
2267     -e '/undef  FATAL_SIG/i FATAL_SIG (SIGPIPE);' \
2268     -i src/main.c
2269 
2270 ./configure --prefix=/usr
2271 make
2272 make check
2273 make install
2274 
2275 cd /sources/ 
2276 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2277 
2278 # patch-2.7.6.tar.xz
2279 cd /sources/
2280 APP=patch
2281 EXTENSION=xz
2282 tar xvif $APP*.$EXTENSION
2283 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2284 
2285 ./configure --prefix=/usr
2286 make
2287 make check
2288 make install
2289 
2290 cd /sources/ 
2291 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2292 
2293 # tar-1.34.tar.xz
2294 cd /sources/
2295 APP=tar
2296 EXTENSION=xz
2297 tar xvif $APP*.$EXTENSION
2298 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2299 
2300 FORCE_UNSAFE_CONFIGURE=1  \
2301 ./configure --prefix=/usr
2302 
2303 make
2304 make check
2305 make install
2306 make -C doc install-html docdir=/usr/share/doc/tar-1.34
2307 
2308 cd /sources/ 
2309 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2310 
2311 # texinfo-7.0.2.tar.xz
2312 cd /sources/
2313 APP=texinfo
2314 EXTENSION=xz
2315 tar xvif $APP*.$EXTENSION
2316 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2317 
2318 ./configure --prefix=/usr
2319 make
2320 make check
2321 make install
2322 make TEXMF=/usr/share/texmf install-tex
2323 
2324 cd /sources/ 
2325 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2326 
2327 # vim-9.0.1273.tar.xz
2328 cd /sources/
2329 APP=vim
2330 EXTENSION=xz
2331 tar xvif $APP*.$EXTENSION
2332 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2333 
2334 echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
2335 ./configure --prefix=/usr
2336 make
2337 chown -Rv tester .
2338 su tester -c "LANG=en_US.UTF-8 make -j1 test" &> vim-test.log
2339 make install
2340 
2341 ln -sv vim /usr/bin/vi
2342 for L in  /usr/share/man/{,*/}man1/vim.1; do
2343     ln -sv vim.1 $(dirname $L)/vi.1
2344 done
2345 
2346 ln -sv ../vim/vim90/doc /usr/share/doc/vim-9.0.1273
2347 
2348 cat > /etc/vimrc << "EOF"
2349 " Begin /etc/vimrc
2350 
2351 " Ensure defaults are set before customizing settings, not after
2352 source $VIMRUNTIME/defaults.vim
2353 let skip_defaults_vim=1
2354 
2355 set nocompatible
2356 set backspace=2
2357 set mouse=
2358 syntax on
2359 if (&term == "xterm") || (&term == "putty")
2360   set background=dark
2361 endif
2362 
2363 " End /etc/vimrc
2364 EOF
2365 
2366 cd /sources/ 
2367 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2368 
2369 # eudev-3.2.11.tar.gz
2370 cd /sources/
2371 APP=eudev
2372 EXTENSION=gz
2373 tar xvzf $APP*.$EXTENSION
2374 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2375 
2376 sed -i '/udevdir/a udev_dir=${udevdir}' src/udev/udev.pc.in
2377 ./configure --prefix=/usr           \
2378             --bindir=/usr/sbin      \
2379             --sysconfdir=/etc       \
2380             --enable-manpages       \
2381             --disable-static
2382 
2383 make
2384 mkdir -pv /usr/lib/udev/rules.d
2385 mkdir -pv /etc/udev/rules.d
2386 
2387 make check
2388 make install
2389 
2390 tar -xvf ../udev-lfs-20171102.tar.xz
2391 make -f udev-lfs-20171102/Makefile.lfs install
2392 
2393 udevadm hwdb --update
2394 
2395 cd /sources/ 
2396 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2397 
2398 # man-db-2.11.2.tar.xz
2399 cd /sources/
2400 APP=man-db
2401 EXTENSION=xz
2402 tar xvif $APP*.$EXTENSION
2403 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2404 
2405 ./configure --prefix=/usr                         \
2406             --docdir=/usr/share/doc/man-db-2.11.2 \
2407             --sysconfdir=/etc                     \
2408             --disable-setuid                      \
2409             --enable-cache-owner=bin              \
2410             --with-browser=/usr/bin/lynx          \
2411             --with-vgrind=/usr/bin/vgrind         \
2412             --with-grap=/usr/bin/grap             \
2413             --with-systemdtmpfilesdir=            \
2414             --with-systemdsystemunitdir=
2415 make
2416 make check
2417 make install
2418                         
2419 cd /sources/ 
2420 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2421 
2422 # procps-ng-4.0.2.tar.xz
2423 cd /sources/
2424 APP=procps
2425 EXTENSION=xz
2426 tar xvif $APP*.$EXTENSION
2427 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2428 
2429 ./configure --prefix=/usr                           \
2430             --docdir=/usr/share/doc/procps-ng-4.0.2 \
2431             --disable-static                        \
2432             --disable-kill
2433 
2434 make
2435 make check
2436 make install
2437                         
2438 cd /sources/ 
2439 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2440 
2441 # util-linux-2.38.1.tar.xz
2442 cd /sources/
2443 APP=util-linux
2444 EXTENSION=xz
2445 tar xvif $APP*.$EXTENSION
2446 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2447 
2448 ./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \
2449             --bindir=/usr/bin    \
2450             --libdir=/usr/lib    \
2451             --sbindir=/usr/sbin  \
2452             --disable-chfn-chsh  \
2453             --disable-login      \
2454             --disable-nologin    \
2455             --disable-su         \
2456             --disable-setpriv    \
2457             --disable-runuser    \
2458             --disable-pylibmount \
2459             --disable-static     \
2460             --without-python     \
2461             --without-systemd    \
2462             --without-systemdsystemunitdir \
2463             --docdir=/usr/share/doc/util-linux-2.38.1
2464 
2465 make
2466 chown -Rv tester .
2467 su tester -c "make -k check"
2468 make install
2469                         
2470 cd /sources/ 
2471 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2472 
2473 # e2fsprogs-1.47.0.tar.gz
2474 cd /sources/
2475 APP=e2fsprogs
2476 EXTENSION=gz
2477 tar xvzf $APP*.$EXTENSION
2478 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2479 
2480 mkdir -v build
2481 cd       build
2482 
2483 ../configure --prefix=/usr           \
2484              --sysconfdir=/etc       \
2485              --enable-elf-shlibs     \
2486              --disable-libblkid      \
2487              --disable-libuuid       \
2488              --disable-uuidd         \
2489              --disable-fsck
2490 
2491 make
2492 make check
2493 make install
2494 rm -fv /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a
2495 gunzip -v /usr/share/info/libext2fs.info.gz
2496 install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info
2497 makeinfo -o      doc/com_err.info ../lib/et/com_err.texinfo
2498 install -v -m644 doc/com_err.info /usr/share/info
2499 install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info
2500 sed 's/metadata_csum_seed,//' -i /etc/mke2fs.conf
2501                         
2502 cd /sources/ 
2503 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2504 
2505 # sysklogd-1.5.1.tar.gz
2506 cd /sources/
2507 APP=sysklogd
2508 EXTENSION=gz
2509 tar xvzf $APP*.$EXTENSION
2510 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2511 
2512 sed -i '/Error loading kernel symbols/{n;n;d}' ksym_mod.c
2513 sed -i 's/union wait/int/' syslogd.c
2514 
2515 make
2516 make BINDIR=/sbin install
2517 
2518 cat > /etc/syslog.conf << "EOF"
2519 auth,authpriv.* -/var/log/auth.log
2520 *.*;auth,authpriv.none -/var/log/sys.log
2521 daemon.* -/var/log/daemon.log
2522 kern.* -/var/log/kern.log
2523 mail.* -/var/log/mail.log
2524 user.* -/var/log/user.log
2525 *.emerg *
2526 EOF
2527                         
2528 cd /sources/ 
2529 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2530 
2531 # sysvinit-3.06.tar.xz
2532 cd /sources/
2533 APP=sysvinit
2534 EXTENSION=xz
2535 tar xvif $APP*.$EXTENSION
2536 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2537 
2538 patch -Np1 -i ../sysvinit-3.06-consolidated-1.patch
2539 make
2540 make install
2541                         
2542 cd /sources/ 
2543 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2544 
2545 # Stripping 
2546 save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])
2547              libc.so.6
2548              libthread_db.so.1
2549              libquadmath.so.0.0.0
2550              libstdc++.so.6.0.30
2551              libitm.so.1.0.0
2552              libatomic.so.1.2.0"
2553 
2554 cd /usr/lib
2555 
2556 for LIB in $save_usrlib; do
2557     objcopy --only-keep-debug $LIB $LIB.dbg
2558     cp $LIB /tmp/$LIB
2559     strip --strip-unneeded /tmp/$LIB
2560     objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
2561     install -vm755 /tmp/$LIB /usr/lib
2562     rm /tmp/$LIB
2563 done
2564 
2565 online_usrbin="bash find strip"
2566 online_usrlib="libbfd-2.40.so
2567                libsframe.so.0.0.0
2568                libhistory.so.8.2
2569                libncursesw.so.6.4
2570                libm.so.6
2571                libreadline.so.8.2
2572                libz.so.1.2.13
2573                $(cd /usr/lib; find libnss*.so* -type f)"
2574 
2575 for BIN in $online_usrbin; do
2576     cp /usr/bin/$BIN /tmp/$BIN
2577     strip --strip-unneeded /tmp/$BIN
2578     install -vm755 /tmp/$BIN /usr/bin
2579     rm /tmp/$BIN
2580 done
2581 
2582 for LIB in $online_usrlib; do
2583     cp /usr/lib/$LIB /tmp/$LIB
2584     strip --strip-unneeded /tmp/$LIB
2585     install -vm755 /tmp/$LIB /usr/lib
2586     rm /tmp/$LIB
2587 done
2588 
2589 for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
2590          $(find /usr/lib -type f -name \*.a)                 \
2591          $(find /usr/{bin,sbin,libexec} -type f); do
2592     case "$online_usrbin $online_usrlib $save_usrlib" in
2593         *$(basename $i)* )
2594             ;;
2595         * ) strip --strip-unneeded $i
2596             ;;
2597     esac
2598 done
2599 
2600 unset BIN LIB save_usrlib online_usrbin online_usrlib
2601 
2602 # Cleaning Up 
2603 rm -rf /tmp/*
2604 find /usr/lib /usr/libexec -name \*.la -delete
2605 find /usr -depth -name $(uname -m)-lfs-linux-gnu\* | xargs rm -rf
2606 userdel -r tester
2607 
2608 # lfs-bootscripts-20230101.tar.xz
2609 cd /sources/
2610 APP=lfs-bootscripts
2611 EXTENSION=xz
2612 tar xvif $APP*.$EXTENSION
2613 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2614 
2615 make install
2616                         
2617 cd /sources/ 
2618 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2619 
2620 bash /usr/lib/udev/init-net-rules.sh
2621 cat /etc/udev/rules.d/70-persistent-net.rules
2622 
2623 cat > /etc/sysconfig/ifconfig.eth0 << "EOF"
2624 ONBOOT=yes
2625 IFACE=eth0
2626 SERVICE=ipv4-static
2627 IP=192.168.1.2
2628 GATEWAY=192.168.1.1
2629 PREFIX=24
2630 BROADCAST=192.168.1.255
2631 EOF
2632 
2633 cat > /etc/resolv.conf << "EOF"
2634 domain <Your Domain Name>
2635 nameserver <IP address of your primary nameserver>
2636 nameserver <IP address of your secondary nameserver>
2637 EOF
2638 
2639 echo "vitux" > /etc/hostname
2640 
2641 cat > /etc/hosts << "EOF"
2642 127.0.0.1 localhost.localdomain localhost
2643 127.0.1.1 vitux.bitarus.mooo.com
2644 ::1       localhost ip6-localhost ip6-loopback
2645 ff02::1   ip6-allnodes
2646 ff02::2   ip6-allrouters
2647 EOF
2648 
2649 cat > /etc/inittab << "EOF"
2650 id:3:initdefault:
2651 si::sysinit:/etc/rc.d/init.d/rc S
2652 l0:0:wait:/etc/rc.d/init.d/rc 0
2653 l1:S1:wait:/etc/rc.d/init.d/rc 1
2654 l2:2:wait:/etc/rc.d/init.d/rc 2
2655 l3:3:wait:/etc/rc.d/init.d/rc 3
2656 l4:4:wait:/etc/rc.d/init.d/rc 4
2657 l5:5:wait:/etc/rc.d/init.d/rc 5
2658 l6:6:wait:/etc/rc.d/init.d/rc 6
2659 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
2660 su:S06:once:/sbin/sulogin
2661 s1:1:respawn:/sbin/sulogin
2662 1:2345:respawn:/sbin/agetty --noclear tty1 9600
2663 2:2345:respawn:/sbin/agetty tty2 9600
2664 3:2345:respawn:/sbin/agetty tty3 9600
2665 4:2345:respawn:/sbin/agetty tty4 9600
2666 5:2345:respawn:/sbin/agetty tty5 9600
2667 6:2345:respawn:/sbin/agetty tty6 9600
2668 EOF
2669 
2670 cat > /etc/sysconfig/clock << "EOF"
2671 UTC=1
2672 # Set this to any options you might need to give to hwclock,
2673 # such as machine hardware clock type for Alphas.
2674 CLOCKPARAMS=
2675 EOF
2676 
2677 cat > /etc/sysconfig/console << "EOF"
2678 KEYMAP="pt-latin1"
2679 FONT="lat1-16 -m 8859-1"
2680 UNICODE="1"
2681 EOF
2682 
2683 locale -a
2684 locale -a | grep -i pt
2685 kk_KZ.pt154
2686 pt_BR
2687 pt_BR.iso88591
2688 pt_BR.utf8
2689 pt_PT
2690 pt_PT.iso88591
2691 pt_PT.iso885915@euro
2692 pt_PT.utf8
2693 pt_PT@euro
2694 
2695 cat > /etc/profile << "EOF"
2696 export LANG=pt_PT.utf8
2697 EOF
2698 
2699 cat > /etc/inputrc << "EOF"
2700 # Modified by Chris Lynn <roryo@roryo.dynup.net>
2701 # Allow the command prompt to wrap to the next line
2702 set horizontal-scroll-mode Off
2703 # Enable 8-bit input
2704 set meta-flag On
2705 set input-meta On
2706 # Turns off 8th bit stripping
2707 set convert-meta Off
2708 # Keep the 8th bit for display
2709 set output-meta On
2710 # none, visible or audible
2711 set bell-style none
2712 # All of the following map the escape sequence of the value
2713 # contained in the 1st argument to the readline specific functions
2714 "\eOd": backward-word
2715 "\eOc": forward-word
2716 # for linux console
2717 "\e[1~": beginning-of-line
2718 "\e[4~": end-of-line
2719 "\e[5~": beginning-of-history
2720 "\e[6~": end-of-history
2721 "\e[3~": delete-char
2722 "\e[2~": quoted-insert
2723 # for xterm
2724 "\eOH": beginning-of-line
2725 "\eOF": end-of-line
2726 # for Konsole
2727 "\e[H": beginning-of-line
2728 "\e[F": end-of-line
2729 EOF
2730 
2731 cat > /etc/shells << "EOF"
2732 /bin/sh
2733 /bin/bash
2734 EOF
2735 
2736 cat > /etc/fstab << "EOF"
2737 # file system  mount-point  type     options             dump  fsck
2738 #                                                              order
2739 
2740 /dev/<xxx>     /            <fff>    defaults            1     1
2741 /dev/<yyy>     swap         swap     pri=1               0     0
2742 proc           /proc        proc     nosuid,noexec,nodev 0     0
2743 sysfs          /sys         sysfs    nosuid,noexec,nodev 0     0
2744 devpts         /dev/pts     devpts   gid=5,mode=620      0     0
2745 tmpfs          /run         tmpfs    defaults            0     0
2746 devtmpfs       /dev         devtmpfs mode=0755,nosuid    0     0
2747 tmpfs          /dev/shm     tmpfs    nosuid,nodev        0     0
2748 EOF
2749 
2750 # linux-6.1.11.tar.xz
2751 cd /sources/
2752 APP=linux
2753 EXTENSION=xz
2754 tar xvif $APP*.$EXTENSION
2755 cd $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2756 
2757 make mrproper
2758 make menuconfig
2759                 
2760 # Processor type and features --->
2761 #    [*] Build a relocatable kernel [CONFIG_RELOCATABLE]
2762 #    [*]   Randomize the address of the kernel image (KASLR) [CONFIG_RANDOMIZE_BASE]
2763 # General setup --->
2764 #    [ ] Compile the kernel with warnings as errors [CONFIG_WERROR]
2765 #    < > Enable kernel headers through /sys/kernel/kheaders.tar.xz [CONFIG_IKHEADERS]
2766 # General architecture-dependent options  --->
2767 #    [*] Stack Protector buffer overflow detection [CONFIG_STACKPROTECTOR]
2768 #    [*]   Strong Stack Protector [CONFIG_STACKPROTECTOR_STRONG]
2769 # Device Drivers  --->
2770 #   Graphics support --->
2771 #    Frame buffer Devices --->
2772 #       <*> Support for frame buffer devices --->
2773 #    Console display driver support --->
2774 #       [*] Framebuffer Console support [CONFIG_FRAMEBUFFER_CONSOLE]
2775 #   Generic Driver Options  --->
2776 #    [ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
2777 #    [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
2778 #    [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs [CONFIG_DEVTMPFS_MOUNT]
2779 # Processor type and features --->
2780 #   [*] Support x2apic [CONFIG_X86_X2APIC]
2781 # Device Drivers --->
2782 #   [*] PCI Support ---> [CONFIG_PCI]
2783 #     [*] Message Signaled Interrupts (MSI and MSI-X) [CONFIG_PCI_MSI]
2784 #   [*] IOMMU Hardware Support ---> [CONFIG_IOMMU_SUPPORT]
2785 #     [*] Support for Interrupt Remapping [CONFIG_IRQ_REMAP]
2786 
2787 /sources/linux-6.1.11# find . -name .config
2788 ./.config
2789 
2790 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  \
2791 -e CONFIG_DEVTMPFS_MOUNT -e CONFIG_DEVTMPFS=y -e CONFIG_UEVENT_HELPER -e CONFIG_FRAMEBUFFER_CONSOLE=y \
2792 -e CONFIG_STACKPROTECTOR=y -e CONFIG_STACKPROTECTOR_STRONG=y -e CONFIG_RELOCATABLE=y -e CONFIG_RANDOMIZE_BASE=y \
2793 -e CONFIG_WERROR -e CONFIG_IKHEADERS
2794 
2795 # # CONFIG_WERROR is not set
2796 # # CONFIG_IKHEADERS is not set
2797 # CONFIG_RELOCATABLE=y
2798 # CONFIG_RANDOMIZE_BASE=y
2799 # CONFIG_STACKPROTECTOR=y
2800 # CONFIG_STACKPROTECTOR_STRONG=y
2801 # CONFIG_PCI=y
2802 # CONFIG_PCI_MSI=y
2803 # # CONFIG_UEVENT_HELPER is not set
2804 # CONFIG_DEVTMPFS=y
2805 # CONFIG_DEVTMPFS_MOUNT=y
2806 # CONFIG_FRAMEBUFFER_CONSOLE=y
2807 # CONFIG_IOMMU_SUPPORT=y
2808 # CONFIG_IRQ_REMAP=y
2809 
2810 # https://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt
2811 
2812 make help 
2813 make
2814 make modules_install
2815 
2816 cp -iv arch/x86/boot/bzImage /boot/vmlinuz-6.1.11-lfs-11.3
2817 cp -iv System.map /boot/System.map-6.1.11
2818 cp -iv .config /boot/config-6.1.11
2819 install -d /usr/share/doc/linux-6.1.11
2820 cp -r Documentation/* /usr/share/doc/linux-6.1.11
2821 
2822 install -v -m755 -d /etc/modprobe.d
2823 
2824 cat > /etc/modprobe.d/usb.conf << "EOF"
2825 install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
2826 install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
2827 EOF
2828                 
2829 cd $LFS/sources/ 
2830 rm -rf $(ls $APP*$EXTENSION | sed  's/\.tar//g' | sed "s/\.$EXTENSION//g" )
2831 
2832 echo 11.3 > /etc/lfs-release
2833 
2834 cat > /etc/lsb-release << "EOF"
2835 DISTRIB_ID="Linux From Scratch"
2836 DISTRIB_RELEASE="11.3"
2837 DISTRIB_CODENAME="Vitux"
2838 DISTRIB_DESCRIPTION="Linux From Scratch"
2839 EOF
2840 
2841 cat > /etc/os-release << "EOF"
2842 NAME="Linux From Scratch"
2843 VERSION="11.3"
2844 ID=lfs
2845 PRETTY_NAME="Linux From Scratch 11.3"
2846 VERSION_CODENAME="Vitux"
2847 EOF
2848 
2849 cd / # as chroot
2850 du . -hs
2851 # 2.0G
2852 du  sources/ -hs
2853 # 603M  sources/
2854 sh version-check.sh
2855 
2856 # To make a backup, leave the chroot environment:
2857 exit
2858 mountpoint -q $LFS/dev/shm && umount $LFS/dev/shm
2859 umount $LFS/dev/pts
2860 umount $LFS/{sys,proc,run,dev}
2861 LFS=/home/vagrant/lfs 
2862 echo $LFS
2863 cd $LFS
2864 time tar -cJpf /root/lfs-build-11.3.tar.xz .
2865 # real  17m18.550s
2866 tar tvaf /root/lfs-build-11.3.tar.xz
2867 # -p, --preserve-permissions
2868 # -f, --file=ARCHIVE
2869 # -J, --xz Filter the archive through xz
2870 
2871 scp lfs*xz xyz@xyz.com:/media/LFS/
2872 
2873 # Add partition to host lfs build  
2874 
2875 ## add dymamic disk 8 GB to debian vagrant ....
2876 vagrant halt 
2877 ## settings storage sata add hard disk 
2878 ## create VDI dynamically allocated with 8 GB 
2879 vagrant up 
2880 ## sd 2:0:0:0: [sdb] 16777216 512-byte logical blocks: (8.59 GB/8.00 GiB)
2881 sudo cfdisk /dev/sdb
2882 ## label type gpt 
2883 ## new 8GB linux fs 
2884 ## write yes quit 
2885 sudo mkfs -v -t ext4 /dev/sdb1 
2886 export LFS=/mnt/lfs
2887 sudo mkdir -pv $LFS
2888 sudo mount -v -t ext4 /dev/sdb1 $LFS
2889 sudo bash 
2890 
2891 cat >>/etc/fstab << "EOF"
2892 /dev/sdb1  /mnt/lfs ext4   defaults      1     1
2893 EOF 
2894 
2895 exit 
2896 sudo bash 
2897 export LFS=/mnt/lfs
2898 cd ~
2899 cp lfs-build-11.3.tar.xz $LFS
2900 
2901 cd $LFS
2902 rm -rf ./*
2903 tar -xpf /root/lfs-build-11.3.tar.xz
2904 ls 
2905 chown root:root $LFS/*
2906 cat $LFS/etc/inittab
2907 cat $LFS/etc/fstab
2908 
2909 nano $LFS/etc/fstab
2910 # /dev/sdb1      /            ext4    defaults            1     1
2911 
2912 nano /etc/grub.d/40_custom
2913 # menuentry "GNU/Linux, Linux 6.1.11-lfs-11.3" {
2914 #         linux   /boot/vmlinuz-6.1.11-lfs-11.3 root=/dev/sdb1 ro
2915 # }
2916 update-grub
2917 
2918 vagrant reload 
2919 # select grun entry for lfs 
2920 # login with root:root 
2921 df -h # uses 2.7G
2922 rm lfs-build-11.3.tar.xz
2923 rm -rf sources/* 
2924 df -h # uses 1.4 GB
2925 

AAAAA

initramfs with static program

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

LinuxFromScratch (last edited 2023-08-07 21:46:44 by 127)