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.logBuilding 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
-
-
-
-
-
- Check is a unit testing framework for C.
-
-
- &buildtime;
- &diskspace;
-
-
- &check-fin-sbu;
- &check-fin-du;
-
-
-
-
-
-
- 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.logFinally, 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
+
+
+
+
+
+
+ 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.
+
+
+
+ &buildtime;
+ &diskspace;
+
+ &packaging-fin-sbu;
+ &packaging-fin-du;
+
+
+
+
+
+
+ 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 @@
-
+