miamondo

LFS_2.sh

Feb 13th, 2021 (edited)
138
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2.  
  3. # Copyright © 2021 Miamondo <https://miamondo.org/contact/>
  4. # This program is free software: you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation, either version 3 of the License, or
  7. # any later version.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. # GNU General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU General Public License
  15. # along with this program.  If not, see <http://www.gnu.org/licenses/>
  16. #
  17. # ______________________________________________________________________________
  18.  
  19. # Nom du script : LFS_2.sh
  20. # Auteur: Benoît Boudaud (https://miamondo.org/contact/
  21.  
  22. # Deuxième partie du programme d'installation de Linux From Scratch
  23.  
  24. # Placez ce script dans votre répertoire utilisateur.
  25.  
  26. # Attention! Ne pas lancer ce script en root!
  27. # Ouvrez un terminal avec le nouvel utilisateur défini dans la première partie.
  28.  
  29. set +h    # Désactivation de la fonction de hachage du shell
  30. umask 022 # Droits des nouveaux fichiers (644) et répertoires (755)
  31. LFS=/mnt/lfs # Répertoire de travail et future racine du système
  32. LC_ALL=POSIX # Configuration garantissant un bon fonctionnement dans le chroot
  33. LFS_TGT=`uname -m`-lfs-linux-gnu # Description personnalisée de la machine
  34. PATH=/usr/bin # Fusion de /bin et /usr/bin avec une condition :
  35. if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
  36. PATH=$LFS/tools/bin:$PATH # Assure que le compilateur croisé sera utilisé
  37. export LFS LC_ALL LFS_TGT PATH # Exportation des variables pour les sous-shells
  38.  
  39. # Nombre de cores (permet d'optimiser la compilation)
  40. cores=`cat /proc/cpuinfo | grep processor | wc -l`
  41.  
  42. # --- binutils-2.35 ------------------------------------------------------------
  43.  
  44. cd $LFS/sources
  45. tar -xf binutils-2.35.tar.xz
  46. cd binutils-2.35
  47. mkdir -v build
  48. cd build
  49.  
  50. ../configure --prefix=/$LFS/tools   \
  51.     --with-sysroot=$LFS             \
  52.     --target=$LFS_TGT               \
  53.     --disable-nls                   \
  54.     --disable-werror
  55.  
  56. make -j$cores
  57. make -j$cores install
  58.  
  59. cd ../..
  60.  
  61. echo "Y-a-t-il des erreurs?"
  62. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  63. read
  64.  
  65. sudo rm -r binutils-2.35
  66.  
  67. # --- gcc-10.2.0 ---------------------------------------------------------------
  68.  
  69. tar -xf gcc-10.2.0.tar.*
  70. cd gcc-10.2.0
  71.  
  72. tar -xf ../mpfr-4.1.0.tar.xz
  73. mv -v mpfr-4.1.0 mpfr
  74. tar -xf ../gmp-6.2.0.tar.xz
  75. mv -v gmp-6.2.0 gmp
  76. tar -xf ../mpc-1.1.0.tar.gz
  77. #mv -v mpc-1.1.0 mpc
  78.  
  79. case $(uname -m) in
  80.     x86_64)
  81.         sed -e '/m64=/s/lib64/lib/' \
  82.             -i.orig gcc/config/i386/t-linux64
  83.     ;;
  84. esac
  85.  
  86. mkdir -v build
  87. cd build
  88.  
  89. ../configure --target=$LFS_TGT  \
  90.     --prefix=$LFS/tools         \
  91.     --with-glibc-version=2.11   \
  92.     --with-sysroot=$LFS         \
  93.     --with-newlib               \
  94.     --without-headers           \
  95.     --enable-initfini-array     \
  96.     --disable-nls               \
  97.     --disable-shared            \
  98.     --disable-multilib          \
  99.     --disable-decimal-float     \
  100.     --disable-threads           \
  101.     --disable-libatomic         \
  102.     --disable-libgomp           \
  103.     --disable-libquadmath       \
  104.     --disable-libssp            \
  105.     --disable-libvtv            \
  106.     --disable-libstdcxx         \
  107.     --enable-languages=c,c++
  108.  
  109. make -j$cores
  110. make -j$cores install
  111.  
  112. cd ..
  113. cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
  114.   `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h
  115.  
  116. cd ..
  117.  
  118. echo "Y-a-t-il des erreurs?"
  119. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  120. read
  121.  
  122. sudo rm -r gcc-10.2.0
  123.  
  124. # --- linux-5.8.3 --------------------------------------------------------------
  125.  
  126. tar -xf linux-5.8.3.tar.*
  127. cd linux-5.8.3
  128.  
  129. make -j$cores mrproper
  130.  
  131. make -j$cores headers
  132. find usr/include -name '.*' -delete
  133. rm usr/include/Makefile
  134. cp -rv usr/include $LFS/usr
  135.  
  136. cd ..
  137.  
  138. echo "Y-a-t-il des erreurs?"
  139. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  140. read
  141.  
  142. sudo rm -r linux-5.8.3
  143.  
  144. # --- glibc-2.32 ---------------------------------------------------------------
  145.  
  146. tar -xf glibc-2.32.tar.*
  147. cd glibc-2.32
  148.  
  149. case $(uname -m) in
  150.     i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
  151.     ;;
  152.     x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
  153.             ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
  154.     ;;
  155. esac
  156.  
  157. patch -Np1 -i ../glibc-2.32-fhs-1.patch
  158.  
  159. mkdir -v build
  160. cd build
  161.  
  162. ../configure --prefix=/usr              \
  163.     --host=$LFS_TGT                     \
  164.     --build=$(../scripts/config.guess)  \
  165.     --enable-kernel=3.2                 \
  166.     --with-headers=$LFS/usr/include     \
  167.     libc_cv_slibdir=/lib
  168.  
  169. make -j$cores
  170. make -j$cores DESTDIR=$LFS install
  171.  
  172. # It's time to check if everything is OK
  173. echo 'int main(){}' > dummy.c
  174. $LFS_TGT-gcc dummy.c
  175. readelf -l a.out | grep '/ld-linux'
  176.  
  177. sudo rm -v dummy.c a.out
  178.  
  179. $LFS/tools/libexec/gcc/$LFS_TGT/10.2.0/install-tools/mkheaders
  180.  
  181. cd ../..
  182.  
  183. echo "Y-a-t-il des erreurs?"
  184. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  185. read
  186.  
  187. sudo rm -r glibc-2.32
  188.  
  189. # --- libstdc++ (part of gcc-10.2.0) -------------------------------------------
  190.  
  191. tar -xf gcc-10.2.0.tar.*
  192. cd gcc-10.2.0
  193.  
  194. mkdir -v build
  195. cd build
  196.  
  197. ../libstdc++-v3/configure       \
  198.     --host=$LFS_TGT             \
  199.     --build=$(../config.guess)  \
  200.     --prefix=/usr               \
  201.     --disable-multilib          \
  202.     --disable-nls               \
  203.     --disable-libstdcxx-pch     \
  204.     --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/10.2.0
  205.  
  206. make -j$cores
  207. make -j$cores DESTDIR=$LFS install
  208.  
  209. cd ../..
  210.  
  211. echo "Y-a-t-il des erreurs?"
  212. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  213. read
  214.  
  215. sudo rm -r gcc-10.2.0
  216.  
  217. # === Chapitre 6 : Outils temporaires pour la compilation croisée ==============
  218.  
  219. # --- m4-1.4.18 ----------------------------------------------------------------
  220.  
  221. tar -xf m4-1.4.18.tar.*
  222. cd m4-1.4.18
  223.  
  224. sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
  225. echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h
  226.  
  227. ./configure --prefix=/usr               \
  228.     --host=$LFS_TGT                     \
  229.     --build=$(build-aux/config.guess)   \
  230.  
  231. make -j$cores
  232. make -j$cores DESTDIR=$LFS install
  233.  
  234. cd ..
  235.  
  236. echo "Y-a-t-il des erreurs?"
  237. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  238. read
  239.  
  240. sudo rm -r m4-1.4.18
  241.  
  242. # --- ncurses-6.2 --------------------------------------------------------------
  243.  
  244. tar -xf ncurses-6.2.tar.*
  245. cd ncurses-6.2
  246.  
  247. sed -i s/mawk// configure
  248.  
  249. mkdir build
  250. pushd build
  251.   ../configure
  252.   make -j$cores -C include
  253.   make -j$cores -C progs tic
  254. popd
  255.  
  256. ./configure --prefix=/usr        \
  257.     --host=$LFS_TGT              \
  258.     --build=$(./config.guess)    \
  259.     --mandir=/usr/share/man      \
  260.     --with-manpage-format=normal \
  261.     --with-shared                \
  262.     --without-debug              \
  263.     --without-ada                \
  264.     --without-normal             \
  265.     --enable-widec
  266.  
  267. make -j$cores
  268. make -j$cores DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install
  269.  
  270. echo "INPUT(-lncursesw)" > $LFS/usr/lib/libncurses.so
  271.  
  272. mv -v $LFS/usr/lib/libncursesw.so.6* $LFS/lib
  273. ln -sfv ../../lib/$(readlink $LFS/usr/lib/libncursesw.so) \
  274.     $LFS/usr/lib/libncursesw.so
  275.  
  276. cd ..
  277.  
  278. echo "Y-a-t-il des erreurs?"
  279. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  280. read
  281.  
  282. sudo rm -r ncurses-6.2
  283.  
  284. # --- bash-5.0 -----------------------------------------------------------------
  285.  
  286. tar -xf bash-5.0.tar.*
  287. cd bash-5.0
  288.  
  289. ./configure --prefix=/usr           \
  290.     --build=$(support/config.guess) \
  291.     --host=$LFS_TGT                 \
  292.     --without-bash-malloc
  293.  
  294. make -j$cores
  295. make -j$cores DESTDIR=$LFS install
  296.  
  297. mv $LFS/usr/bin/bash $LFS/bin/bash
  298.  
  299. ln -sv bash $LFS/bin/sh
  300.  
  301. cd ..
  302.  
  303. echo "Y-a-t-il des erreurs?"
  304. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  305. read
  306.  
  307. sudo rm -r bash-5.0
  308.  
  309. # --- coreutils-8.32 -----------------------------------------------------------
  310.  
  311. tar -xf coreutils-8.32.tar.*
  312. cd coreutils-8.32
  313.  
  314. ./configure --prefix=/usr                   \
  315.     --host=$LFS_TGT                           \
  316.     --build=$(build-aux/config.guess)         \
  317.     --enable-install-program=hostname         \
  318.     --enable-no-install-program=kill,uptime
  319.  
  320. make -j$cores
  321. make -j$cores DESTDIR=$LFS install
  322.  
  323. mv -v $LFS/usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} $LFS/bin
  324. mv -v $LFS/usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} $LFS/bin
  325. mv -v $LFS/usr/bin/{rmdir,stty,sync,true,uname} $LFS/bin
  326. mv -v $LFS/usr/bin/{head,nice,sleep,touch} $LFS/bin
  327. mv -v $LFS/usr/bin/chroot $LFS/usr/sbin
  328. mkdir -pv $LFS/usr/share/man/man8
  329. mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8
  330. sed -i 's/"1"/"8"/' $LFS/usr/share/man/man8/chroot.8
  331.  
  332. cd ..
  333.  
  334. echo "Y-a-t-il des erreurs?"
  335. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  336. read
  337.  
  338. sudo rm -r coreutils-8.32
  339.  
  340. # --- diffutils-3.7 ------------------------------------------------------------
  341.  
  342. tar -xf diffutils-3.7.tar.*
  343. cd diffutils-3.7
  344.  
  345. ./configure --prefix=/usr \
  346.     --host=$LFS_TGT
  347. make -j$cores
  348. make -j$cores DESTDIR=$LFS install
  349.  
  350. cd ..
  351.  
  352. echo "Y-a-t-il des erreurs?"
  353. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  354. read
  355.  
  356. sudo rm -r diffutils-3.7
  357.  
  358. # --- file-5.39 ----------------------------------------------------------------
  359.  
  360. tar -xf file-5.39.tar.*
  361. cd file-5.39
  362.  
  363. ./configure --prefix=/usr   \
  364.     --host=$LFS_TGT
  365. make -j$cores
  366. make -j$cores DESTDIR=$LFS install
  367.  
  368. cd ..
  369.  
  370. echo "Y-a-t-il des erreurs?"
  371. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  372. read
  373.  
  374. sudo rm -r file-5.39
  375.  
  376. # --- findutils-4.7.0 ----------------------------------------------------------
  377.  
  378. tar -xf findutils-4.7.0.tar.*
  379. cd findutils-4.7.0
  380.  
  381. ./configure --prefix=/usr               \
  382.     --host=$LFS_TGT                     \
  383.     --build=$(build-aux/config.guess)
  384.  
  385. make -j$cores
  386. make -j$cores DESTDIR=$LFS install
  387.  
  388. mv -v $LFS/usr/bin/find $LFS/bin
  389. sed -i 's|find:=${BINDIR}|find:=/bin|' $LFS/usr/bin/updatedb
  390.  
  391. cd ..
  392.  
  393. echo "Y-a-t-il des erreurs?"
  394. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  395. read
  396.  
  397. sudo rm -r findutils-4.7.0
  398.  
  399. # --- gawk-5.1.0 ---------------------------------------------------------------
  400.  
  401. tar -xf gawk-5.1.0.tar.*
  402. cd gawk-5.1.0
  403.  
  404. sed -i 's/extras//' Makefile.in
  405.  
  406. ./configure --prefix=/usr       \
  407.     --host=$LFS_TGT             \
  408.     --build=$(./config.guess)
  409.  
  410. make -j$cores
  411. make -j$cores DESTDIR=$LFS install
  412.  
  413. cd ..
  414.  
  415. echo "Y-a-t-il des erreurs?"
  416. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  417. read
  418.  
  419. sudo rm -r gawk-5.1.0
  420.  
  421. # --- grep-3.4 -----------------------------------------------------------------
  422.  
  423. tar -xf grep-3.4.tar.*
  424. cd grep-3.4
  425.  
  426. ./configure --prefix=/usr   \
  427.     --host=$LFS_TGT         \
  428.     --bindir=/bin
  429.  
  430. make -j$cores
  431. make -j$cores DESTDIR=$LFS install
  432.  
  433. cd ..
  434.  
  435. echo "Y-a-t-il des erreurs?"
  436. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  437. read
  438.  
  439. sudo rm -r grep-3.4
  440.  
  441. # --- gzip-1.10 ----------------------------------------------------------------
  442.  
  443. tar -xf gzip-1.10.tar.*
  444. cd gzip-1.10
  445.  
  446. ./configure --prefix=/usr \
  447.     --host=$LFS_TGT
  448.  
  449. make -j$cores
  450. make -j$cores DESTDIR=$LFS install
  451.  
  452. mv -v $LFS/usr/bin/gzip $LFS/bin
  453.  
  454. cd ..
  455.  
  456. echo "Y-a-t-il des erreurs?"
  457. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  458. read
  459.  
  460. sudo rm -r gzip-1.10
  461.  
  462. # --- make-4.3 -----------------------------------------------------------------
  463.  
  464. tar -xf make-4.3.tar.*
  465. cd make-4.3
  466.  
  467. ./configure --prefix=/usr               \
  468.     --without-guile                     \
  469.     --host=$LFS_TGT                     \
  470.     --build=$(build-aux/config.guess)
  471.  
  472. make -j$cores
  473. make -j$cores DESTDIR=$LFS install
  474.  
  475. cd ..
  476.  
  477. echo "Y-a-t-il des erreurs?"
  478. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  479. read
  480.  
  481. sudo rm -r make-4.3
  482.  
  483. # --- patch-2.7.6 --------------------------------------------------------------
  484.  
  485. tar -xf patch-2.7.6.tar.*
  486. cd patch-2.7.6
  487.  
  488. ./configure --prefix=/usr               \
  489.     --host=$LFS_TGT                     \
  490.     --build=$(build-aux/config.guess)
  491. make -j$cores
  492. make -j$cores DESTDIR=$LFS install
  493.  
  494. cd ..
  495.  
  496. echo "Y-a-t-il des erreurs?"
  497. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  498. read
  499.  
  500. sudo rm -r patch-2.7.6
  501.  
  502. # --- sed-4.8 ------------------------------------------------------------------
  503.  
  504. tar -xf sed-4.8.tar.*
  505. cd sed-4.8
  506.  
  507. ./configure --prefix=/usr   \
  508.     --host=$LFS_TGT         \
  509.     --bindir=/bin
  510. make -j$cores
  511. make -j$cores DESTDIR=$LFS install
  512.  
  513. cd ..
  514.  
  515. echo "Y-a-t-il des erreurs?"
  516. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  517. read
  518.  
  519. sudo rm -r sed-4.8
  520.  
  521. # --- tar-1.32 -----------------------------------------------------------------
  522.  
  523. tar -xf tar-1.32.tar.*
  524. cd tar-1.32
  525.  
  526. ./configure --prefix=/usr             \
  527.     --host=$LFS_TGT                   \
  528.     --build=$(build-aux/config.guess) \
  529.     --bindir=/bin
  530. make -j$cores
  531. make -j$cores DESTDIR=$LFS install
  532.  
  533. cd ..
  534.  
  535. echo "Y-a-t-il des erreurs?"
  536. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  537. read
  538.  
  539. sudo rm -r tar-1.32
  540.  
  541. # --- xz-5.2.5 -----------------------------------------------------------------
  542.  
  543. tar -xf xz-5.2.5.tar.*
  544. cd xz-5.2.5
  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.2.5
  551. make -j$cores
  552. make -j$cores DESTDIR=$LFS install
  553.  
  554. mv -v $LFS/usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat}  $LFS/bin
  555. mv -v $LFS/usr/lib/liblzma.so.*                       $LFS/lib
  556. ln -svf ../../lib/$(readlink $LFS/usr/lib/liblzma.so) $LFS/usr/lib/liblzma.so
  557.  
  558. cd ..
  559.  
  560. echo "Y-a-t-il des erreurs?"
  561. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  562. read
  563.  
  564. sudo rm -r xz-5.2.5
  565.  
  566. # --- binutils-2.35 (pass 2) ---------------------------------------------------
  567.  
  568. tar -xf binutils-2.35.tar.*
  569. cd binutils-2.35
  570.  
  571. mkdir -v build
  572. cd       build
  573.  
  574. ../configure                   \
  575.     --prefix=/usr              \
  576.     --build=$(../config.guess) \
  577.     --host=$LFS_TGT            \
  578.     --disable-nls              \
  579.     --enable-shared            \
  580.     --disable-werror           \
  581.     --enable-64-bit-bfd
  582. make -j$cores
  583. make -j$cores DESTDIR=$LFS install
  584.  
  585. cd ../..
  586.  
  587. echo "Y-a-t-il des erreurs?"
  588. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  589. read
  590.  
  591. sudo rm -r binutils-2.35
  592.  
  593. # --- gcc-10.2.0 (Pass 2) ------------------------------------------------------
  594.  
  595. tar -xf gcc-10.2.0.tar.*
  596. cd gcc-10.2.0
  597.  
  598. tar -xf ../mpfr-4.1.0.tar.xz
  599. mv -v mpfr-4.1.0 mpfr
  600. tar -xf ../gmp-6.2.0.tar.xz
  601. mv -v gmp-6.2.0 gmp
  602. tar -xf ../mpc-1.1.0.tar.gz
  603. mv -v mpc-1.1.0 mpc
  604.  
  605. case $(uname -m) in
  606.     x86_64)
  607.         sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
  608.     ;;
  609. esac
  610.  
  611. mkdir -v build
  612. cd build
  613.  
  614. mkdir -pv $LFS_TGT/libgcc
  615. ln -s ../../../libgcc/gthr-posix.h $LFS_TGT/libgcc/gthr-default.h
  616.  
  617. ../configure --build=$(../config.guess) \
  618.     --host=$LFS_TGT                     \
  619.     --prefix=/usr                       \
  620.     CC_FOR_TARGET=$LFS_TGT-gcc          \
  621.     --with-build-sysroot=$LFS           \
  622.     --enable-initfini-array             \
  623.     --disable-nls                       \
  624.     --disable-multilib                  \
  625.     --disable-decimal-float             \
  626.     --disable-libatomic                 \
  627.     --disable-libgomp                   \
  628.     --disable-libquadmath               \
  629.     --disable-libssp                    \
  630.     --disable-libvtv                    \
  631.     --disable-libstdcxx                 \
  632.     --enable-languages=c,c++
  633.  
  634. make -j$cores
  635. make -j$cores DESTDIR=$LFS install
  636. ln -sv gcc $LFS/usr/bin/cc
  637.  
  638. cd ../..
  639.  
  640. echo "Y-a-t-il des erreurs?"
  641. echo "S'il n'y a pas d'erreurs, pressez la touche \"Entrée.\""
  642. read
  643.  
  644. sudo rm -r gcc-10.2.0
  645.  
RAW Paste Data