diff --git a/chapter01/changelog.xml b/chapter01/changelog.xml index ecb2cb5e9..7d69c0a78 100644 --- a/chapter01/changelog.xml +++ b/chapter01/changelog.xml @@ -39,6 +39,66 @@ or as appropriate for the entry or if needed the entire day's listitem. --> + + 2022-11-10 + + + [bdubbs] - Fix make-4.4 bug. Fixes + #5160. + + + [bdubbs] - Update to wheel-0.38.4 (Python Module). Fixes + #5155. + + + [bdubbs] - Update to texinfo-7.0. Fixes + #5159. + + + [bdubbs] - Update to sysvinit-3.05. Fixes + #5153. + + + [bdubbs] - Update to shadow-4.13. Fixes + #5161. + + + [bdubbs] - Update to sed-4.9. Fixes + #5157. + + + [bdubbs] - Update to meson-0.64.0. Fixes + #5156. + + + [bdubbs] - Update to linux-6.0.7. Fixes + #5154. + + + [bdubbs] - Update to elfutils-0.188. Fixes + #5152. + + + [bdubbs] - Update to bc-6.1.1. Fixes + #5151. + + + [bdubbs] - Update to bash-5.2.9. Fixes + #5158. + + + + + + 2022-11-03 + + + [renodr] - Update to systemd-252. Fixes + #5150. + + + + 2022-11-01 diff --git a/chapter01/whatsnew.xml b/chapter01/whatsnew.xml index ce73bb1b7..3612115ff 100644 --- a/chapter01/whatsnew.xml +++ b/chapter01/whatsnew.xml @@ -160,9 +160,9 @@ Libcap-&libcap-version; - + Libffi-&libffi-version; @@ -229,30 +229,30 @@ Readline-&readline-version; - + Shadow-&shadow-version; - - + - + Tzdata-&tzdata-version; @@ -262,6 +262,9 @@ Vim-&vim-version; + + wheel-&wheel-version; + @@ -288,10 +291,11 @@ Added: - + &readline-fixes-patch; diff --git a/chapter03/patches.xml b/chapter03/patches.xml index 630b21c2e..033ccd00c 100644 --- a/chapter03/patches.xml +++ b/chapter03/patches.xml @@ -27,14 +27,14 @@ --> - + - Binutils ships an outdated libtool copy in the tarball. It lacks - sysroot support so the produced binaries will be mistakenly linked to - libraries from the host distro. Workaround this issue: + Binutils ships an outdated copy of libtool in the tarball. It lacks + sysroot support, so the produced binaries will be mistakenly linked to + libraries from the host distro. Work around this issue: sed '6009s/$add_dir//' -i ltmain.sh @@ -83,8 +83,8 @@ cd build --enable-64-bit-bfd - Enables 64-bit support (on hosts with narrower word sizes). - May not be needed on 64-bit systems, but does no harm. + Enables 64-bit support (on hosts with smaller word sizes). + This may not be needed on 64-bit systems, but it does no harm. diff --git a/chapter06/file.xml b/chapter06/file.xml index 19d5ae369..425a9bf58 100644 --- a/chapter06/file.xml +++ b/chapter06/file.xml @@ -45,8 +45,9 @@ The file command on the build host needs - to be same version as the one we are building in order to - create the signature file. Run the following commands to build it: + to be the same version as the one we are building in order to + create the signature file. Run the following commands to make a + temporary copy of the file command: mkdir build diff --git a/chapter06/gcc-pass2.xml b/chapter06/gcc-pass2.xml index 73f0b82c9..15c588bb2 100644 --- a/chapter06/gcc-pass2.xml +++ b/chapter06/gcc-pass2.xml @@ -48,8 +48,7 @@ patch -Np1 -i ../&gcc-upstream-fixes-patch; --> As in the first build of GCC, the GMP, MPFR, and MPC packages are - required. Unpack the tarballs and move them into the required directory - names: + required. Unpack the tarballs and move them into the required directories: tar -xf ../mpfr-&mpfr-version;.tar.xz mv -v mpfr-&mpfr-version; mpfr @@ -108,9 +107,9 @@ cd build Normally, using --host ensures that a cross-compiler is used for building GCC, and that compiler knows that it has to look for headers and libraries in $LFS. But the build system of GCC uses + class="directory">$LFS. But the build system for GCC uses other tools, which are not aware of this location. This switch is - needed to have them find the needed files in $LFS, and not on the host. @@ -118,16 +117,16 @@ cd build --target=$LFS_TGT - As we are cross-compiling GCC, it's impossible to build + We are cross-compiling GCC, so it's impossible to build target libraries (libgcc and libstdc++) with the - compiled GCC binaries because these binaries won't run on the - host distro. GCC building system will attempt to use the - C and C++ compilers on the host distro as a workaround by default. - It's not supported to build GCC target libraries with a different - version of GCC, so using host compilers may cause building - failure. This parameter ensures to build the libraries with GCC - pass 1 and prevent the issue. + previously compiled GCC binaries—those binaries won't run on the + host. The GCC build system will attempt to use the host's + C and C++ compilers as a workaround by default. + Building the GCC target libraries with a different + version of GCC is not supported, so using the host's compilers may cause + the build to fail. This parameter ensures the libraries are built by GCC + pass 1. @@ -135,9 +134,9 @@ cd build LDFLAGS_FOR_TARGET=... Allow libstdc++ to - use shared libgcc being - built in this pass, instead of the static version built in GCC - pass 1. This is needed for supporting C++ exception + use the shared libgcc being + built in this pass, instead of the static version that was built in GCC + pass 1. This is necessary to support C++ exception handling. diff --git a/chapter06/introduction.xml b/chapter06/introduction.xml index 1d786eb0c..a0ecb1ef1 100644 --- a/chapter06/introduction.xml +++ b/chapter06/introduction.xml @@ -16,7 +16,7 @@ the host's tools. Nevertheless, the installed libraries are used when linking. - Using the utilities will be possible in next chapter after entering + Using the utilities will be possible in the next chapter after entering the chroot environment. But all the packages built in the present chapter need to be built before we do that. Therefore we cannot be independent of the host system yet. diff --git a/chapter06/make.xml b/chapter06/make.xml index cf0dbce18..242aaebe1 100644 --- a/chapter06/make.xml +++ b/chapter06/make.xml @@ -42,6 +42,12 @@ Installation of Make + First, fix an issue identified upstream: + +sed -e '/ifdef SIGPIPE/,+2 d' \ + -e '/undef FATAL_SIG/i FATAL_SIG (SIGPIPE);' \ + -i src/main.c + Prepare Make for compilation: ./configure --prefix=/usr \ diff --git a/chapter06/ncurses.xml b/chapter06/ncurses.xml index d9457c081..9e7764ecf 100644 --- a/chapter06/ncurses.xml +++ b/chapter06/ncurses.xml @@ -119,7 +119,7 @@ popd --without-ada This ensures that Ncurses does not build support for the Ada - compiler which may be present on the host but will not be available + compiler, which may be present on the host but will not be available once we enter the chroot environment. @@ -127,9 +127,9 @@ popd --disable-stripping - This switch prevents the building system from stripping - the programs using strip program from the host. - Using host tools on cross-compiled program can cause failure. + This switch prevents the building system from + using the strip program from the host. + Using host tools on cross-compiled programs can cause failure. @@ -169,8 +169,8 @@ echo "INPUT(-lncursesw)" > $LFS/usr/lib/libncurses.so TIC_PATH=$(pwd)/build/progs/tic - We need to pass the path of the just built - tic able to run on the building machine, so that + We need to pass the path of the newly built + tic program that runs on the building machine, so the terminal database can be created without errors. diff --git a/chapter08/bash.xml b/chapter08/bash.xml index fa21ab346..4ea981d5b 100644 --- a/chapter08/bash.xml +++ b/chapter08/bash.xml @@ -40,10 +40,6 @@ Installation of Bash - First, fix some issues identified upstream: - -patch -Np1 -i ../&bash-fixes-patch; - Prepare Bash for compilation: ./configure --prefix=/usr \ diff --git a/chapter08/grub.xml b/chapter08/grub.xml index a7a412361..3cba0dc9c 100644 --- a/chapter08/grub.xml +++ b/chapter08/grub.xml @@ -61,6 +61,17 @@ + + Unset any environment variables which may affect the build: + + unset {C,CPP,CXX,LD}FLAGS + + Don't try tuning this package with custom + compilation flags: this package is a bootloader, with low-level + operations in the source code which is likely to be broken by some + aggressive optimizations. + + Prepare GRUB for compilation: ./configure --prefix=/usr \ diff --git a/chapter08/make.xml b/chapter08/make.xml index 080ed3989..04abbc695 100644 --- a/chapter08/make.xml +++ b/chapter08/make.xml @@ -40,11 +40,13 @@ Installation of Make - + First, fix some issues identified upstream: + +sed -e '/ifdef SIGPIPE/,+2 d' \ + -e '/undef FATAL_SIG/i FATAL_SIG (SIGPIPE);' \ + -i src/main.c + Prepare Make for compilation: ./configure --prefix=/usr diff --git a/chapter08/systemd.xml b/chapter08/systemd.xml index da750e440..4548056ea 100644 --- a/chapter08/systemd.xml +++ b/chapter08/systemd.xml @@ -40,9 +40,11 @@ Installation of systemd + Remove two unneeded groups, render and @@ -196,11 +198,11 @@ meson --prefix=/usr \ systemctl preset-all - Disable a service for upgrading binary distros. It's useless for - a basic Linux system built from source, and it will report an error if + Disable two services for upgrading binary distros. They are useless for + a basic Linux system built from source, and both will report an error if it's enabled but not configured: -systemctl disable systemd-sysupdate +systemctl disable systemd-sysupdate{,-reboot} diff --git a/general.ent b/general.ent index e11a6da87..4afd37725 100644 --- a/general.ent +++ b/general.ent @@ -118,6 +118,8 @@ + + root"> lfs"> diff --git a/packages.ent b/packages.ent index 5dade8f03..eee113344 100644 --- a/packages.ent +++ b/packages.ent @@ -48,20 +48,20 @@ - + - + - - + + - + @@ -148,10 +148,10 @@ - - + + - + @@ -424,12 +424,12 @@ - + - + - + - + - + - - + + - - - + + + - - - - + + + + @@ -684,10 +684,10 @@ - - + + - + @@ -728,12 +728,11 @@ - - - - - - + + + + + diff --git a/part3intro/toolchaintechnotes.xml b/part3intro/toolchaintechnotes.xml index 7401350d8..f044322e6 100644 --- a/part3intro/toolchaintechnotes.xml +++ b/part3intro/toolchaintechnotes.xml @@ -201,7 +201,7 @@ 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 + 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. @@ -238,8 +238,8 @@ on a machine using the already installed distribution. On lfs means the commands are run in a chrooted environment. - Now, there is more about cross-compiling: the C language is not - just a compiler, but also defines a standard library. In this book, the + This is not yet the end of the story. The C language is not + merely a compiler; it also defines a standard library. In this book, the GNU C library, named glibc, is used (there is an alternative, "musl"). This library must be compiled for the LFS machine; that is, using the cross-compiler cc1. But the compiler itself uses an internal library providing complex @@ -256,22 +256,22 @@ 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. Of course, the compiler built by stage 2, cc-lfs, - would be able to build those libraries, but: + 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 cc-lfs cannot run on pc (the host distro). Despite the - triplets of pc and lfs are compatible to each other, an executable - for lfs will depend on glibc-&glibc-version; while the host distro - may utilize a different libc implementation (for example, musl) or + 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 happens to run on pc, using it on pc would create + 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. @@ -279,16 +279,16 @@ So when we build gcc stage 2, we instruct the building system to - rebuild libgcc and libstdc++ with cc1, but link libstdc++ to the newly - rebuilt libgcc instead of the degraded build. Then the rebuilt - libstdc++ will be fully functional. + rebuild libgcc and libstdc++ with cc1, but we link libstdc++ to the newly + rebuilt libgcc instead of the old, degraded build. This makes the rebuilt + libstdc++ fully functional. In &ch-final; (or stage 3), all the packages needed for the LFS system are built. Even if a package has already been installed into the LFS system in a previous chapter, we still rebuild the package. The main reason for - rebuilding these packages is to make them stable: if we reinstall a LFS - package on a complete LFS system, the installed content of the package - should be the same as the content of the same package when installed in + rebuilding these packages is to make them stable: if we reinstall an LFS + 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 diff --git a/patches.ent b/patches.ent index 3877eebbd..53536069e 100644 --- a/patches.ent +++ b/patches.ent @@ -7,11 +7,11 @@ --> - + - + + + + + + + + + + + + + + + + + + + + + +