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.
https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.3-NOCHUNKS.html
https://www.linuxfromscratch.org/hints/downloads/files/boot-cd_easy.txt
https://www.linuxfromscratch.org/lfs/downloads/stable/wget-list
List of the required downloads for LFS 11.3
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 source $VIMRUNTIME/defaults.vim
2350 let skip_defaults_vim=1
2351
2352 set nocompatible
2353 set backspace=2
2354 set mouse=
2355 syntax on
2356 if (&term == "xterm") || (&term == "putty")
2357 set background=dark
2358 endif
2359
2360 EOF
2361
2362 cd /sources/
2363 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/
504
505 # Add partition to host lfs build
506
507 ## add dymamic disk 8 GB to debian vagrant ....
508 vagrant halt
509 ## settings storage sata add hard disk
510 ## create VDI dynamically allocated with 8 GB
511 vagrant up
512 ## sd 2:0:0:0: [sdb] 16777216 512-byte logical blocks: (8.59 GB/8.00 GiB)
513 sudo cfdisk /dev/sdb
514 ## label type gpt
515 ## new 8GB linux fs
516 ## write yes quit
517 sudo mkfs -v -t ext4 /dev/sdb1
518 export LFS=/mnt/lfs
519 sudo mkdir -pv $LFS
520 sudo mount -v -t ext4 /dev/sdb1 $LFS
521 sudo bash
522
523 cat >>/etc/fstab << "EOF"
524 /dev/sdb1 /mnt/lfs ext4 defaults 1 1
525 EOF
526
527 exit
528 sudo bash
529 export LFS=/mnt/lfs
530 cd ~
531 cp lfs-build-11.3.tar.xz $LFS
532
533 cd $LFS
534 rm -rf ./*
535 tar -xpf /root/lfs-build-11.3.tar.xz
536 ls
537 chown root:root $LFS/*
538 cat $LFS/etc/inittab
539 cat $LFS/etc/fstab
540
541 nano $LFS/etc/fstab
542 # /dev/sdb1 / ext4 defaults 1 1
543
544 nano /etc/grub.d/40_custom
545 # menuentry "GNU/Linux, Linux 6.1.11-lfs-11.3" {
546 # linux /boot/vmlinuz-6.1.11-lfs-11.3 root=/dev/sdb1 ro
547 # }
548 update-grub
549
550 vagrant reload
551 # select grun entry for lfs
552 # login with root:root
553 df -h # uses 2.7G
554 rm lfs-build-11.3.tar.xz
555 rm -rf sources/*
556 df -h # uses 1.4 GB
557
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