diff --git a/appendices/dependencies.xml b/appendices/dependencies.xml index 84dc75acd..a8675a805 100644 --- a/appendices/dependencies.xml +++ b/appendices/dependencies.xml @@ -399,49 +399,6 @@ - - Check - - - &dependencies; - - Gawk, GCC, Grep, Make, Sed, and Texinfo - - - - - &runtime; - - Bash and Gawk - - - - - &testsuites; - - None - - - - - &before; - - None - - - - - &external; - - - libsubunit - and - - patchutils - - - - Coreutils @@ -2459,6 +2416,46 @@ + + Packaging + + + &dependencies; + + Python + + + + + &runtime; + + Python + + + + + &testsuites; + + No test suite available + + + + + &before; + + Wheel + + + + + &external; + + + pytest + + + + Patch @@ -3312,7 +3309,7 @@ &dependencies; - Python and Flit-core + Python, Flit-core, and packaging diff --git a/chapter01/changelog.xml b/chapter01/changelog.xml index 7780b3dc9..1ac0d51b7 100644 --- a/chapter01/changelog.xml +++ b/chapter01/changelog.xml @@ -39,603 +39,201 @@ or as appropriate for the entry or if needed the entire day's listitem. --> - - 2025-03-02 + 2025-04-15 - [bdubbs] - Update to vim-9.1.1166 (Security Update). Fixes - #5666. + [bdubbs] - Update to libcap-2.76. Fixes + #5704. + + + [bdubbs] - Update to perl-5.40.2 (Security update). Fixes + #5703. + + + [bdubbs] - Add packaging-24.2 (Python module). Needed for wheel. + + + + [bdubbs] - Update to xz-5.8.1. Fixes + #5694. + + + [bdubbs] - Update to wheel-0.46.1 (Python Module). Fixes + #5693. + + + [bdubbs] - Update to sysklogd-2.7.2. Fixes + #5690. + + + [bdubbs] - Update to Python3-3.13.3. Fixes + #5697. + + + [bdubbs] - Update to openssl-3.5.0. Fixes + #5701. + + + [bdubbs] - Update to meson-1.7.2. Fixes + #5691. + + + [bdubbs] - Update to linux-6.14.2. Fixes + #5680. + + + [bdubbs] - Update to libffi-3.4.8. Fixes + #5700. + + + [bdubbs] - Update to iproute2-6.14.0. Fixes + #5682. + + + [bdubbs] - Update to gzip-1.14. Fixes + #5699. + + + [bdubbs] - Update to grep-3.12. Fixes + #5702. + + + [bdubbs] - Update to gperf-3.2.1. Fixes + #5695. + + + [bdubbs] - Update to gawk-5.3.2. Fixes + #5692. + + + [bdubbs] - Update to diffutils-3.12. Fixes + #5696. + + + [bdubbs] - Update to coreutils-9.7. Fixes + #5698. - 2025-02-27 + 2025-04-01 - [bdubbs] - Update to zstd-1.5.7. Fixes - #5652. - - - [bdubbs] - Update to systemd-257.3. Fixes - #5612. - - - [bdubbs] - Update to shadow-4.17.3. Fixes - #5660. - - - [bdubbs] - Update to setuptools-75.8.1. Fixes - #5662. - - - [bdubbs] - Update to linux-6.13.4. Fixes - #5647. - - - [bdubbs] - Update to kmod-34. Fixes - #5657. - - - [bdubbs] - Update to inetutils-2.6. Fixes - #5656. - - - [bdubbs] - Update to gettext-0.24. Fixes - #5661. - - - [bdubbs] - Update to flit_core-3.11.0. Fixes - #5654. - - - - - - 2025-02-24 - - - [bdubbs] - Update to man-pages-6.12. Fixes - #5658. - - - - - - 2025-02-19 - - - [xry111] - Update to vim-9.1.1122 (Security Update). - Addresses #4500. - - - [xry111] - Update to man-pages-6.11. Fixes - #5646. - - - - - - 2025-02-13 - - - [bdubbs] - Update to vim-9.1.1106. Addresses - #4500. - - - [bdubbs] - Update to diffutils-3.11. Fixes - #5639. - - - [bdubbs] - Update to libffi-3.4.7. Fixes - #5642. - - - [bdubbs] - Update to linux-6.13.2. Fixes - #5643. - - - [bdubbs] - Update to Python3-3.13.2. Fixes - #5640. - - - [bdubbs] - Update to sysvinit-3.14. Fixes - #5641. - - - - - - 2025-02-02 - - - [bdubbs] - Update to vim-9.1.1071. Addresses - #4500. - - - [bdubbs] - Update to iana-etc-20250123. Addresses - #5006. - - - [bdubbs] - Update to binutils-2.44.0. Fixes - #5634. - - - [bdubbs] - Update to coreutils-9.6. Fixes - #5628. - - - [bdubbs] - Update to e2fsprogs-1.47.2. Fixes - #5637. - - - [bdubbs] - Update to glibc-2.41. Fixes - #5638. - - - [bdubbs] - Update to iproute2-6.13.0. Fixes - #5631. - - - [bdubbs] - Update to libxcrypt-4.4.38. Fixes - #5626. - - - [bdubbs] - Update to linux-6.13.1. Fixes - #5629. - - - [bdubbs] - Update to man-pages-6.10. Fixes - #5632. - - - [bdubbs] - Update to meson-1.7.0. Fixes - #5636. - - - [bdubbs] - Update to perl-5.40.1. Fixes - #5630. - - - [bdubbs] - Update to tcl8.6.16. Fixes - #5635. - - - [bdubbs] - Update to tzdata2025a. Fixes - #5627. - - - [bdubbs] - Update to xz-5.6.4. Fixes - #5633. - - - - - - 2025-01-15 - - - [bdubbs] - Update to vim-9.1.1016. Addresses - #4500. - - - [bdubbs] - Update to iana-etc-20250108. Addresses - #5006. - - - [bdubbs] - Update to util-linux-2.40.4. Fixes - #5624. - - - [bdubbs] - Update to sysvinit-3.13. Fixes - #5621. - - - [bdubbs] - Update to sysklogd-2.7.0. Fixes - #5623. - - - [bdubbs] - Update to shadow-4.17.2. Fixes - #5625. - - - [bdubbs] - Update to setuptools-75.8.0. Fixes - #5622. - - - [bdubbs] - Update to linux-6.12.9. Fixes - #5620. - - - [bdubbs] - Update to gettext-0.23.1. Fixes - #5619. - - - - - - 2025-01-01 - - - [renodr] - Update to libxcrypt-4.4.37. Fixes - #5618. - - - [renodr] - Update to dbus-1.16.0. Fixes - #5609. - - - [bdubbs] - Update to iana-etc-20241220. Addresses - #5006. - - - [bdubbs] - Update to texinfo-7.2. Fixes - #5616. - - - [bdubbs] - Update to sysvinit-3.12. Fixes - #5615. - - - [bdubbs] - Update to shadow-4.17.1. Fixes - #5617. - - - [bdubbs] - Update to procps-ng-4.0.5. Fixes - #5611. - - - [bdubbs] - Update to meson-1.6.1. Fixes - #5610. - - - [bdubbs] - Update to linux-6.12.7. Fixes - #5613. - - - [bdubbs] - Update to kbd-2.7.1. Fixes - #5608. - - - [bdubbs] - Update to jinja2-3.1.5 (Security Update). Fixes - #5614. - - - - - - 2024-12-15 - - - [bdubbs] - Update to vim-9.1.0927. Addresses + [bdubbs] - Update to vim-9.1.1263. Addresses #4500. - [bdubbs] - Update to iana-etc-20241206. Addresses + [bdubbs] - Update to iana-etc-20250328. Addresses #5006. - [bdubbs] - Update to systemd-257. Fixes - #5559. + [bdubbs] - Update to xz-5.8.0. Fixes + #5684. - [bdubbs] - Update to Python-3.13.1 (Security Update). Fixes - #5605. + [bdubbs] - Update to util-linux-2.41. Fixes + #5648. - [bdubbs] - Update to libcap-2.73. Fixes - #5604. + [bdubbs] - Update to tzdata-2025b. Fixes + #5681. + + + [bdubbs] - Update to shadow-4.17.4. Fixes + #5678. - [bdubbs] - Update to linux-6.12.5. Fixes - #5607. + [bdubbs] - Update to setuptools-78.1.0. Fixes + #5676. - [bdubbs] - Update to kbd-2.7. Fixes - #5608. + [bdubbs] - Update to patch-2.8. Fixes + #5689. - [bdubbs] - Update to gettext-0.23. Fixes - #5603. + [bdubbs] - Update to mpfr-4.2.2. Fixes + #5677. + + + [bdubbs] - Update to kmod-34.2. Fixes + #5688. + + + [bdubbs] - Update to gdbm-1.25. Fixes + #5679. + + + [bdubbs] - Update to flit_core-3.12.0. Fixes + #5683. + + + [bdubbs] - Update to expat-2.7.1. Fixes + #5685. - 2024-12-01 + 2025-03-15 - [bdubbs] - Update to iana-etc-20241122. Addresses - #5006. - - - [bdubbs] - Update to file-5.46. Fixes - #5601. - - - [bdubbs] - Update to iproute2-6.12.0. Fixes - #5597. - - - [bdubbs] - Update to libtool-2.5.4. Fixes - #5598. - - - [bdubbs] - Update to linux-6.12.1. Fixes - #5586. - - - [bdubbs] - Update to setuptools-75.6.0 (Python Module). Fixes - #5599. - - - [bdubbs] - Update to wheel-0.45.1 (Python Module). Fixes - #5600. - - - - - - 2024-11-15 - - - [bdubbs] - Update to vim-9.1.0866. Addresses + [bdubbs] - Update to vim-9.1.1202. Addresses #4500. - [bdubbs] - Update to iana-etc-20241024. Addresses + [bdubbs] - Update to iana-etc-20250304. Addresses #5006. - - [bdubbs] - Update to wheel-0.45.0 (Python Module). Fixes - #5593. + + [bdubbs] - Update to sysklogd-2.7.1. Fixes + #5668. - [bdubbs] - Update to setuptools-75.5.0 (Python Module). Fixes - #5595. + [bdubbs] - Update to setuptools-76.0.0. Fixes + #5665. - [bdubbs] - Update to linux-6.11.8. Fixes - #5582. + [bdubbs] - Update to pkgconf-2.4.3. Fixes + #5672. - [bdubbs] - Update to libcap-2.72. Fixes - #5594. + [bdubbs] - Update to man-pages-6.13. Fixes + #5673. + + + [bdubbs] - Update to linux-6.13.7. Fixes + #5664. + + + [bdubbs] - Update to libcap-2.75. Fixes + #5667. + + + [bdubbs] - Update to kmod-34.1. Fixes + #5671. + + + [bdubbs] - Update to jinja2-3.1.6. Fixes + #5670. + + + [bdubbs] - Update to expat-2.7.0. Fixes + #5675. + + + [bdubbs] - Update to dbus-1.16.2. Fixes + #5663. - 2024-11-08 + 2025-03-05 - [bdubbs] - Added binutils-2.43.1-upstream_fix-1.patch. Fixes - #5591. - - - [bdubbs] - Update to flit_core-3.10.1. Fixes - #5589. - - - [bdubbs] - Update to expat-2.6.4. Fixes - #5590. - - - - - - 2024-10-25 - - - [bdubbs] - Update to linux-6.11.6. Fixes - #5588. - - - [bdubbs] - Update to libcap-2.71. Fixes - #5584. - - - [bdubbs] - Update to setuptools-75.3.0. Fixes - #5585. - - - [bdubbs] - Update to flit_core-3.10.0. Fixes - #5587. - - - - - - 2024-10-25 - - - [bdubbs] - Update to iana-etc-20241015. Addresses - #5006. - - - [bdubbs] - Update to vim-9.1.0813. Addresses - #4500. - - - [bdubbs] - Update to xz-5.6.3. Fixes - #5572. - - - [bdubbs] - Update to sysvinit-3.11. Fixes - #5581. - - - [bdubbs] - Update to setuptools-75.2.0. Fixes - #5577. - - - [bdubbs] - Update to Python3-3.13.0. Fixes - #5575. - - - [bdubbs] - Update to openssl-3.4.0. Fixes - #5582. - - - [bdubbs] - Update to meson-1.6.0. Fixes - #5580. - - - [bdubbs] - Update to markupsafe-3.0.2. Fixes - #5576. - - - [bdubbs] - Update to linux-6.11.5. Fixes - #5574. - - - [bdubbs] - Update to less-668. Fixes - #5578. - - - [bdubbs] - Update to elfutils-0.192. Fixes - #5579. - - - - - - 2024-10-03 - - - [bdubbs] - Revert back to tcl8.6.15. - - - - - - 2024-10-01 - - - [bdubbs] - Update to Python3-3.12.7. Fixes - #5571. - - - [bdubbs] - Update to tcl9.0.0. Fixes - #5570. - - - [bdubbs] - Update to linux-6.11.1. Fixes - #5556. - - - [bdubbs] - Update to libtool-2.5.3. Fixes - #5569. - - - [bdubbs] - Update to iproute2-6.11.0. Fixes - #5561. - - - [bdubbs] - Update to bash-5.2.37. Fixes - #5567. - - - [bdubbs] - Update to bc-7.0.3. Fixes - #5568. - - - - - - 2024-09-20 - - - [bdubbs] - Update to vim-9.1.0738. Addresses - #4500. - - - [bdubbs] - Update to texinfo-7.1.1. Fixes - #5558. - - - [bdubbs] - Update to tcl8.6.15. Fixes - #5562. - - - [bdubbs] - Update to sysklogd-2.6.2. Fixes - #5557. - - - [bdubbs] - Update to setuptools-75.1.0. Fixes - #5560. - - - [bdubbs] - Update to meson-1.5.2. Fixes - #5566. - - - [bdubbs] - Update to iana-etc-20240912. Addresses - #5006. - - - [bdubbs] - Update to gawk-5.3.1. Fixes - #5564. - - - [bdubbs] - Update to bc-7.0.2. Fixes - #5563. - - - - - - 2024-09-07 - - - [bdubbs] - Update to tzdata-2024b. Fixes - #5554. - - - [bdubbs] - Update to systemd-256.5. Fixes - #5551. - - - [bdubbs] - Update to setuptools-74.1.2. Fixes - #5546. - - - [bdubbs] - Update to python3-3.12.6. Fixes - #5555. - - - [bdubbs] - Update to openssl-3.3.2. Fixes - #5552. - - - [bdubbs] - Update to man-db-2.13.0. Fixes - #5550. - - - [bdubbs] - Update to linux-6.10.8. Fixes - #5545. - - - [bdubbs] - Update to libpipeline-1.5.8. Fixes - #5548. - - - [bdubbs] - Update to expat-2.6.3. Fixes - #5553. - - - [bdubbs] - Update to bc-7.0.1. Fixes - #5547. - - - - - - 2024-09-01 - - - [bdubbs] - LFS-12.2 released. + [bdubbs] - LFS-12.3 released. diff --git a/chapter01/whatsnew.xml b/chapter01/whatsnew.xml index 16f23520d..4ab0abff3 100644 --- a/chapter01/whatsnew.xml +++ b/chapter01/whatsnew.xml @@ -38,24 +38,21 @@ - + + + - Coreutils-&coreutils-version; @@ -68,18 +65,18 @@ Diffutils-&diffutils-version; - + Expat-&expat-version; - + @@ -87,7 +84,7 @@ Flex-&flex-version; --> - Flit-core-&flit-core-version; + Flit-Core-&flit-core-version; Gawk-&gawk-version; @@ -95,39 +92,39 @@ - - + + + - - + - + Iana-Etc-&iana-etc-version; - + @@ -137,36 +134,36 @@ Jinja2-&jinja2-version; - + Kmod-&kmod-version; - + Libcap-&libcap-version; - + Libffi-&libffi-version; - + + + Linux-&linux-version; @@ -179,24 +176,24 @@ - + Man-pages-&man-pages-version; - + Meson-&meson-version; - + @@ -206,18 +203,18 @@ OpenSSL-&openssl-version; - + Perl-&perl-version; - - Procps-ng-&procps-ng-version; + Pkgconf-&pkgconf-version; + @@ -239,27 +236,27 @@ Sysklogd-&sysklogd-version; - + + - + + Tzdata-&tzdata-version; - + Util-linux-&util-linux-version; @@ -278,9 +275,9 @@ - + - + Removed: - - + + Check-0.15.2 + diff --git a/chapter03/packages.xml b/chapter03/packages.xml index d58002ad2..6cdb5e224 100644 --- a/chapter03/packages.xml +++ b/chapter03/packages.xml @@ -110,15 +110,6 @@ - - Check (&check-version;) - &check-size;: - - Home page: - Download: - MD5 sum: &check-md5; - - - Coreutils (&coreutils-version;) - &coreutils-size;: @@ -597,6 +588,15 @@ + + Packaging (&packaging-version;) - &packaging-size;: + + Home page: + Download: + MD5 sum: &packaging-md5; + + + Patch (&patch-version;) - &patch-size;: diff --git a/chapter05/glibc.xml b/chapter05/glibc.xml index 03530cf61..e1f8ee6a1 100644 --- a/chapter05/glibc.xml +++ b/chapter05/glibc.xml @@ -84,7 +84,6 @@ cd build --host=$LFS_TGT \ --build=$(../scripts/config.guess) \ --enable-kernel=&min-kernel; \ - --with-headers=$LFS/usr/include \ --disable-nscd \ libc_cv_slibdir=/usr/lib @@ -109,16 +108,6 @@ cd build - - --with-headers=$LFS/usr/include - - This tells Glibc to compile itself against the headers - recently installed to the $LFS/usr/include directory, so that - it knows exactly what features the kernel has and can optimize - itself accordingly. - - - libc_cv_slibdir=/usr/lib @@ -182,7 +171,7 @@ cd build class="directory">/) directory. Here we specify that the package is installed in $LFS, which will become the root directory in . + "ch-tools-chroot" role='.'/> @@ -193,32 +182,98 @@ cd build sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd - - At this point, it is imperative to stop and ensure that the basic - functions (compiling and linking) of the new toolchain are working as - expected. To perform a sanity check, run the following commands: + Now that our cross toolchain is in place, it is important to ensure + that compiling and linking will work as expected. We do this by performing + some sanity checks: -echo 'int main(){}' | $LFS_TGT-gcc -xc - -readelf -l a.out | grep ld-linux +echo 'int main(){}' | $LFS_TGT-gcc -x c - -v -Wl,--verbose &> dummy.log +readelf -l a.out | grep ': /lib' - If everything is working correctly, there should be no errors, - and the output of the last command will be of the form: + There should be no errors, + and the output of the last command will be (allowing for + platform-specific differences in the dynamic linker name): [Requesting program interpreter: /lib64/ld-linux-loongarch-lp64d.so.1] - - If the output is not as shown above, or there is no output at all, - then something is wrong. Investigate and retrace the steps to find out - where the problem is and correct it. This issue must be resolved before - continuing. - Once all is well, clean up the test file: + Note that this path should not contain + /mnt/lfs (or the value of + the LFS variable if you used a different one). The path is + resolved when the compiled program is executed, and that should only happen + after we enter the chroot environment where the kernel would consider + $LFS as the root directory + (/). -rm -v a.out + Now make sure that we're set up to use the correct start files: - +grep -E -o "$LFS/lib.*/S?crt[1in].*succeeded" dummy.log + + The output of the last command should be: + +/mnt/lfs/lib/../lib/Scrt1.o succeeded +/mnt/lfs/lib/../lib/crti.o succeeded +/mnt/lfs/lib/../lib/crtn.o succeeded + + Verify that the compiler is searching for the correct header + files: + +grep -B3 "^ $LFS/usr/include" dummy.log + + This command should return the following output: + +#include <...> search starts here: + /mnt/lfs/tools/lib/gcc/x86_64-lfs-linux-gnu/&gcc-version;/include + /mnt/lfs/tools/lib/gcc/x86_64-lfs-linux-gnu/&gcc-version;/include-fixed + /mnt/lfs/usr/include + + Again, the directory named after your target triplet may be + different than the above, depending on your system architecture. + + Next, verify that the new linker is being used with the correct search paths: + +grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g' + + References to paths that have components with '-linux-gnu' should + be ignored, but otherwise the output of the last command should be: + +SEARCH_DIR("=/mnt/lfs/tools/x86_64-lfs-linux-gnu/lib64") +SEARCH_DIR("=/usr/local/lib64") +SEARCH_DIR("=/lib64") +SEARCH_DIR("=/usr/lib64") +SEARCH_DIR("=/mnt/lfs/tools/x86_64-lfs-linux-gnu/lib") +SEARCH_DIR("=/usr/local/lib") +SEARCH_DIR("=/lib") +SEARCH_DIR("=/usr/lib"); + + A 32-bit system may use a few other directories, but anyway + the important facet here is all the paths should begin with an equal sign + (=), which would be replaced with the sysroot + directory that we've configured for the linker. + + Next make sure that we're using the correct libc: + +grep "/lib.*/libc.so.6 " dummy.log + + The output of the last command should be: + +attempt to open /mnt/lfs/usr/lib/libc.so.6 succeeded + + Make sure GCC is using the correct dynamic linker: + +grep found dummy.log + + The output of the last command should be (allowing for + platform-specific differences in dynamic linker name): + +found ld-linux-x86-64.so.2 at /mnt/lfs/usr/lib/ld-linux-x86-64.so.2 + + If the output does not appear as shown above or is not received + at all, then something is seriously wrong. Investigate and retrace the + steps to find out where the problem is and correct it. Any + issues should be resolved before continuing with the process. + + Once everything is working correctly, clean up the test files: + +rm -v a.out dummy.log Building the packages in the next chapter will serve as an additional check that the toolchain has been built properly. If some diff --git a/chapter06/diffutils.xml b/chapter06/diffutils.xml index 92951604d..404fe9b66 100644 --- a/chapter06/diffutils.xml +++ b/chapter06/diffutils.xml @@ -47,8 +47,36 @@ ./configure --prefix=/usr \ --host=$LFS_TGT \ + gl_cv_func_strcasecmp_works=y \ --build=$(./build-aux/config.guess) + + The meaning of the configure options: + + + + gl_cv_func_strcasecmp_works=y + + This option specify the result of a check for the + strcasecmp. The check requires running a + compiled C program, and this is impossible during + cross-compilation because in general a cross-compiled program + cannot run on the host distro. Normally for such a check the + configure script would use a fall-back value + for cross-compilation, but the fall-back value for this check is + absent and the configure script would have no + value to use and error out. The upstream has already fixed the + issue, but to apply the fix we'd need to run + autoconf that the host distro may lack. So + we just specify the check result (y as we know + the strcasecmp function in + Glibc-&glibc-version; works fine) instead, then + configure will just use the specified value and + skip the check. + + + + Compile the package: make diff --git a/chapter06/make.xml b/chapter06/make.xml index eaf0db48f..3d3ca9b38 100644 --- a/chapter06/make.xml +++ b/chapter06/make.xml @@ -45,23 +45,9 @@ Prepare Make for compilation: ./configure --prefix=/usr \ - --without-guile \ --host=$LFS_TGT \ --build=$(build-aux/config.guess) - - The meaning of the new configure option: - - - --without-guile - - Although we are cross-compiling, configure tries to use - guile from the build host if it finds it. This makes compilation - fail, so this switch prevents using it. - - - - Compile the package: make diff --git a/chapter08/chapter08.xml b/chapter08/chapter08.xml index 85589c3be..bd8571903 100644 --- a/chapter08/chapter08.xml +++ b/chapter08/chapter08.xml @@ -64,13 +64,13 @@ + - diff --git a/chapter08/check.xml b/chapter08/check.xml deleted file mode 100644 index eb7aa2046..000000000 --- a/chapter08/check.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - %general-entities; -]> - - - - - - check - &check-version; -
&check-url;
-
- - Check-&check-version; - - - Check - - - - - - <para>Check is a unit testing framework for C.</para> - - <segmentedlist> - <segtitle>&buildtime;</segtitle> - <segtitle>&diskspace;</segtitle> - - <seglistitem> - <seg>&check-fin-sbu;</seg> - <seg>&check-fin-du;</seg> - </seglistitem> - </segmentedlist> - - </sect2> - - <sect2 role="installation"> - <title>Installation of Check - - &update-config-text; - -tar &update-config-arg; - - Prepare Check for compilation: - -./configure --prefix=/usr --disable-static - - Build the package: - -make - - Compilation is now complete. To run the Check test suite, issue the - following command: - -make check - - - Install the package: - - make docdir=/usr/share/doc/check-&check-version; install - - - - - Contents of Check - - - Installed program - Installed library - - - checkmk - libcheck.so - - - - - Short Descriptions - - - - - checkmk - - Awk script for generating C unit tests for use with the Check - unit testing framework - - checkmk - - - - - - libcheck.so - - Contains functions that allow Check to be called from a test - program - - libcheck - - - - - - - - -
diff --git a/chapter08/gcc.xml b/chapter08/gcc.xml index c681117be..1bb798932 100644 --- a/chapter08/gcc.xml +++ b/chapter08/gcc.xml @@ -228,8 +228,7 @@ su tester -c "PATH=$PATH make -k check" that compiling and linking will work as expected. We do this by performing some sanity checks:
-echo 'int main(){}' > dummy.c -cc dummy.c -v -Wl,--verbose &> dummy.log +echo 'int main(){}' | cc -x c - -v -Wl,--verbose &> dummy.log readelf -l a.out | grep ': /lib' There should be no errors, @@ -324,7 +323,7 @@ SEARCH_DIR("/usr/lib"); Once everything is working correctly, clean up the test files: -rm -v dummy.c a.out dummy.log +rm -v a.out dummy.log Finally, move a misplaced file: diff --git a/chapter08/glibc.xml b/chapter08/glibc.xml index 519664c9b..33a928466 100644 --- a/chapter08/glibc.xml +++ b/chapter08/glibc.xml @@ -393,7 +393,6 @@ localedef -i it_IT -f ISO-8859-1 it_IT localedef -i it_IT -f ISO-8859-15 it_IT@euro localedef -i it_IT -f UTF-8 it_IT.UTF-8 localedef -i ja_JP -f EUC-JP ja_JP -localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R @@ -415,15 +414,6 @@ localedef -i zh_TW -f UTF-8 zh_TW.UTF-8 make localedata/install-locales - Then use the localedef command to create and - install locales not listed in the - glibc-&glibc-version;/localedata/SUPPORTED file - when you need them. For instance, the following two locales are - needed for some tests later in this chapter: - -localedef -i C -f UTF-8 C.UTF-8 -localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true - Glibc now uses libidn2 when resolving internationalized domain names. This is a run time dependency. If this capability is needed, the instructions for installing libidn2 are in the diff --git a/chapter08/kmod.xml b/chapter08/kmod.xml index 2c1174d7f..0041199f5 100644 --- a/chapter08/kmod.xml +++ b/chapter08/kmod.xml @@ -47,7 +47,6 @@ cd build meson setup --prefix=/usr .. \ - --sbindir=/usr/sbin \ --buildtype=release \ -D manpages=false diff --git a/chapter08/libffi.xml b/chapter08/libffi.xml index 1a07e4e76..04f5fff2e 100644 --- a/chapter08/libffi.xml +++ b/chapter08/libffi.xml @@ -51,11 +51,14 @@ Like GMP, Libffi builds with optimizations specific to the processor in use. If building for another system, change the value of the --with-gcc-arch= parameter in the - following command to an architecture name fully implemented by the + following command to an architecture name fully implemented by + both the host CPU and the CPU on that system. If this is not done, all applications that link to libffi will trigger - Illegal Operation Errors. + Illegal Operation Errors. If you cannot figure out a value + safe for both the CPUs, replace the parameter with + to produce a generic library. Prepare Libffi for compilation: diff --git a/chapter08/packaging.xml b/chapter08/packaging.xml new file mode 100644 index 000000000..b3e9e439d --- /dev/null +++ b/chapter08/packaging.xml @@ -0,0 +1,76 @@ + + + %general-entities; +]> + + + + + + packaging + &packaging-version; +
&packaging-url;
+
+ + Packaging-&packaging-version; + + + packaging + + + + + + <para> + The packaging module is a Python library that provides utilities that + implement the interoperability specifications which have clearly one + correct behaviour (PEP440) or benefit greatly from having a single shared + implementation (PEP425). This includes utilities for version handling, + specifiers, markers, tags, and requirements. + </para> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + <seglistitem> + <seg>&packaging-fin-sbu;</seg> + <seg>&packaging-fin-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Installation of packaging + + Compile packaging with the following command: + +pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD + + Install packaging with the following command: + +pip3 install --no-index --find-links dist packaging + + + + + Contents of Packaging + + + Installed directories + + + packaging + + /usr/lib/python&python-minor;/site-packages/packaging and + /usr/lib/python&python-minor;/site-packages/packaging-&packaging-version;.dist-info + + + + + + +
+ diff --git a/chapter08/pkgmgt.xml b/chapter08/pkgmgt.xml index 10ec5d199..3640b519d 100644 --- a/chapter08/pkgmgt.xml +++ b/chapter08/pkgmgt.xml @@ -69,10 +69,25 @@
If a package containing a shared library is updated, and - if the name of the library changes, then any packages dynamically + if the name of the libraryThe name of a shared library is + the string coded in the DT_SONAME entry of its + ELF dynamic section. You can get it with the + readelf -d <library file> + | grep SONAME command. In most cases it's suffixed with + .so.<a version + number>, but there are some cases where + it contains multiple numbers for versioning (like + libbz2.so.1.0), contains the version number + before the .so suffix (like + libbfd-&binutils-version;), or does not contain + any version number at all (for example + libmemusage.so). + Generally there is no correlation between the package version and the + version number(s) in the library name. + changes, then any packages dynamically linked to the library must be recompiled, to link against the - newer library. (Note that there is no correlation between the package - version and the name of the library.) For example, consider a package + newer library. + For example, consider a package foo-1.2.3 that installs a shared library with the name libfoo.so.1. Suppose you upgrade the package to a newer version foo-1.2.4 that installs a shared library with the name @@ -370,11 +385,13 @@ make DESTDIR=/usr/pkg/libfoo/1.1 install differences in system hardware and the original kernel configuration. - There have been some reports of issues when copying between - similar but not identical architectures. For instance, the instruction set - for an Intel system is not identical with the AMD processor's instructions, and later - versions of some processors may provide instructions that are unavailable with - earlier versions. + If you want to deploy the LFS system onto a system + with a different CPU, when you build and + you must follow the notes about + overriding the architecture-specific optimization to produce libraries + suitable for both the host system and the system(s) where you'll deploy + the LFS system. Otherwise you'll get Illegal + Instruction errors running LFS. Finally, the new system has to be made bootable via . diff --git a/chapter10/fstab.xml b/chapter10/fstab.xml index ad835be30..8eb314b87 100644 --- a/chapter10/fstab.xml +++ b/chapter10/fstab.xml @@ -108,6 +108,8 @@ EOF Default iocharset for FAT (). There is no way to specify these settings for the ntfs filesystem at kernel compilation time. + diff --git a/general.ent b/general.ent index 8f99aaf52..a2729d345 100644 --- a/general.ent +++ b/general.ent @@ -7,9 +7,9 @@ - - - + + + @@ -44,7 +44,7 @@ ]]> - + ]]> - + - + - + - + - + - - + + @@ -637,26 +637,26 @@ - - + + - + - - + + - + - - + + - + @@ -719,10 +719,10 @@ - - + + - + @@ -733,21 +733,21 @@ - - - + + + - + - + - + - + - - + + - + @@ -782,10 +782,10 @@ - - + + - + diff --git a/part3intro/toolchaintechnotes.xml b/part3intro/toolchaintechnotes.xml index 1dad94103..2239b2c7a 100644 --- a/part3intro/toolchaintechnotes.xml +++ b/part3intro/toolchaintechnotes.xml @@ -3,6 +3,9 @@ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ %general-entities; + + <the host triplet>"> ]> @@ -44,6 +47,14 @@ book for a cross-toolchain for some purpose other than building LFS, unless you really understand what you are doing. + + + It's known installing GCC pass 2 will break the cross-toolchain. + We don't consider it a bug because GCC pass 2 is the last package + to be cross-compiled in the book, and we won't fix + it until we really need to cross-compile some package after GCC + pass 2 in the future. + Cross-compilation involves some concepts that deserve a section of @@ -197,14 +208,105 @@ page. - In order to fake a cross-compilation in LFS, the name of the host triplet - is slightly adjusted by changing the "vendor" field in the - LFS_TGT variable so it says "lfs". We also use the - --with-sysroot option when building the cross-linker and - cross-compiler, to tell them where to find the needed host files. This - ensures that none of the other programs built in can link to libraries on the build - machine. Only two stages are mandatory, plus one more for tests. + + There are two key points for a cross-compilation: + + + + + + When producing and processing the machine code supposed to be + executed on the host, the cross-toolchain must be + used. Note that the native toolchain from the build + may be still invoked to generate machine code supposed to be + executed on the build. For example, the build system + may compile a generator with the native toolchain, then generate + a C source file with the generator, and finally compile the C + source file with the cross-toolchain so the generated code will + be able to run on the host. + + + With an autoconf-based build system, this requirement is ensured + by using the --host switch to specify + the host triplet. With this switch the build + system will use the toolchain components prefixed + with &host-triplet; + for generating and processing the machine code for + the host; e.g. the compiler will be + &host-triplet;-gcc and the + readelf tool will be + &host-triplet;-readelf. + + + + + The build system should not attempt to run any generated machine + code supposed to be executed on the host. For + example, when building a utility natively, its man page can be + generated by running the utility with the + --help switch and processing the output, + but generally it's not possible to do so for a cross-compilation + as the utility may fail + to run on the build: it's obviously impossible to + run ARM64 machine code on a x86 CPU (without an emulator). + + + With an autoconf-based build system, this requirement is + satisfied in the cross-compilation mode where + the optional features requiring to run machine code for + the host during the build time are disabled. When the + host triplet is explicitly specified, the + cross-compilation mode is enabled if and only if either + the configure script fails to run a dummy + program compiled into the host machine code, or + the build triplet is explicitly specified via the + --build switch and it's different from + the host triplet. + + + + + In order to cross-compile a package for the LFS temporary system, + the name of the system triplet is slightly adjusted by changing the + "vendor" field in the LFS_TGT variable so it + says "lfs" and LFS_TGT is then specified as + the host triplet via --host, so + the cross-toolchain will be used for generating and processing the + machine code running as a part of the LFS temporary system. And, we + also need to enable the cross-compilation mode: despite + the host machine code, i.e. the machine code for the LFS + temporary system, is able to execute on the current CPU, it may refer + to a library not available on the the build (the host + distro), or some code or data non-exist or defined differently in the + library even if it happens to be available. When cross-compiling a + package for the LFS temporary system, we cannot rely on the + configure script to detect this issue with the + dummy program: the dummy only uses a few components in + libc that the host distro + libc likely provides (unless, + maybe the host distro uses a different + libc implementation like Musl), + so it won't fail like how the really useful programs would likely. + Thus we must explicitly specify the build triplet to + enable the cross-compilation mode. The value we use is + just the default, i.e. the original system triplet from + config.guess output, but the cross-compilation + mode depends on an explicit specification as we've + discussed. + + We use the --with-sysroot option when + building the cross-linker and cross-compiler, to tell them where to find + the needed files for the host. This nearly ensures that + none of the other programs built in + can link to libraries on + the build. The word nearly is used because + libtool, a compatibility wrapper of + the compiler and the linker for autoconf-based build systems, + can try to be too clever and mistakenly pass options allowing the linker + to find libraries of the build. + To prevent this fallout, we need to delete the libtool archive + (.la) files and fix up an + outdated libtool copy shipped with the Binutils code. @@ -228,7 +330,7 @@ 3lfslfslfs - Rebuild and test cc-lfs using cc-lfs on lfs. + Rebuild (and maybe test) cc-lfs using cc-lfs on lfs. @@ -256,30 +358,11 @@ The upshot of the preceding paragraph is that cc1 is unable to build a fully functional libstdc++ with the degraded libgcc, but cc1 is the only compiler available for building the C/C++ libraries - during stage 2. There are two reasons we don't immediately use the - compiler built in stage 2, cc-lfs, to build those libraries. - - - - - Generally speaking, cc-lfs cannot run on pc (the host system). Even though the - triplets for pc and lfs are compatible with each other, an executable - for lfs must depend on glibc-&glibc-version;; the host distro - may utilize either a different implementation of libc (for example, musl), or - a previous release of glibc (for example, glibc-2.13). - - - - - Even if cc-lfs can run on pc, using it on pc would create - a risk of linking to the pc libraries, since cc-lfs is a native - compiler. - - - - - So when we build gcc stage 2, we instruct the building system to - rebuild libgcc and libstdc++ with cc1, but we link libstdc++ to the newly + during stage 2. As we've discussed, we cannot run cc-lfs on pc (the + host distro) because it may require some library, code, or data not + available on the build (the host distro). + So when we build gcc stage 2, we override the library + search path to link libstdc++ against the newly rebuilt libgcc instead of the old, degraded build. This makes the rebuilt libstdc++ fully functional. @@ -290,12 +373,11 @@ package on a completed LFS system, the reinstalled content of the package should be the same as the content of the same package when first installed in &ch-final;. The temporary packages installed in &ch-tmp-cross; or - &ch-tmp-chroot; cannot satisfy this requirement, because some of them - are built without optional dependencies, and autoconf cannot - perform some feature checks in &ch-tmp-cross; because of cross-compilation, - causing the temporary packages to lack optional features, - or use suboptimal code routines. Additionally, a minor reason for - rebuilding the packages is to run the test suites. + &ch-tmp-chroot; cannot satisfy this requirement, because some optional + features of them are disabled because of either the missing + dependencies or the cross-compilation mode. + Additionally, a minor reason for rebuilding the packages is to run the + test suites. @@ -357,39 +439,25 @@ checking what linker to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/ld - Next comes glibc. The most important - considerations for building glibc are the compiler, binary tools, and - kernel headers. The compiler and binary tools are generally not an issue - since glibc will always use those relating to the --host - parameter passed to its configure script; e.g., in our case, the compiler - will be $LFS_TGT-gcc and the readelf - tool will be $LFS_TGT-readelf. The kernel headers can - be a bit more complicated. Therefore, we take no risks and use - the available configure switch to enforce the correct selection. After - the run of configure, check the contents of the - config.make file in the build directory for all important details. - These items highlight an important aspect of the glibc - package—it is very self-sufficient in terms of its build machinery, - and generally does not rely on toolchain defaults. + Next comes glibc. This is the first package that we cross-compile. + We use the --host=$LFS_TGT option to make + the build system to use those tools prefixed with + $LFS_TGT-, and the + --build=$(../scripts/config.guess) option to + enable the cross-compilation mode as we've discussed. + The DESTDIR variable is used to force installation into + the LFS file system. As mentioned above, the standard C++ library is compiled next, followed in by other programs that must be cross-compiled to break circular dependencies at build time. - The install step of all those packages uses the - DESTDIR variable to force installation - in the LFS filesystem. + The steps for those packages are similar to the steps for glibc. At the end of the native LFS compiler is installed. First binutils-pass2 is built, in the same DESTDIR directory as the other programs, then the second pass of gcc is constructed, omitting some - non-critical libraries. Due to some weird logic in gcc's - configure script, CC_FOR_TARGET ends up as - cc when the host is the same as the target, but - different from the build system. This is why - CC_FOR_TARGET=$LFS_TGT-gcc is declared explicitly - as one of the configuration options. + non-critical libraries. Upon entering the chroot environment in , diff --git a/patches.ent b/patches.ent index c90d38120..c7b2ab19b 100644 --- a/patches.ent +++ b/patches.ent @@ -17,8 +17,8 @@ - - + + diff --git a/stylesheets/lfs-xsl/chunk-master.xsl b/stylesheets/lfs-xsl/chunk-master.xsl index 029332162..b353e75ca 100644 --- a/stylesheets/lfs-xsl/chunk-master.xsl +++ b/stylesheets/lfs-xsl/chunk-master.xsl @@ -27,8 +27,12 @@ Prevent creation of dummy sect1 files used to emulate sub-chapters. The original template is in {docbook-xsl}/xhtml/chunk-code.xsl It also matches other sect* tags. The code for those tags are - unchanged. --> - + unchanged. Note that the priority attribute is not strictly + required, because the original template is less restrictive in + matching, so has less precedence. But in case the docbook dev + add a match="sect1" template in their chunk-code.xsl, then it will + be necessary!--> + diff --git a/stylesheets/lfs-xsl/pdf/lfs-mixed.xsl b/stylesheets/lfs-xsl/pdf/lfs-mixed.xsl index 834b7057c..8f5576d9f 100644 --- a/stylesheets/lfs-xsl/pdf/lfs-mixed.xsl +++ b/stylesheets/lfs-xsl/pdf/lfs-mixed.xsl @@ -80,6 +80,16 @@ + + + + + + + + + + diff --git a/stylesheets/lfs-xsl/xhtml/lfs-sections.xsl b/stylesheets/lfs-xsl/xhtml/lfs-sections.xsl index b13e5e11b..0ecfaa4f6 100644 --- a/stylesheets/lfs-xsl/xhtml/lfs-sections.xsl +++ b/stylesheets/lfs-xsl/xhtml/lfs-sections.xsl @@ -166,7 +166,7 @@ - +