Your host system should have the following software with the minimum versions indicated. This should not be an issue for most modern Linux distributions. Also note that many distributions will place software headers into separate packages, often in the form of “<package-name>-devel” or “<package-name>-dev”. Be sure to install those if your distribution provides them.
Bash-2.05a (/bin/sh should be a symbolic or hard link to bash)
Binutils-2.12 (Versions greater than 2.19.1 are not recommended as they have not been tested)
Bison-1.875 (/usr/bin/yacc should be a link to bison or small script that executes bison)
Bzip2-1.0.2
Coreutils-5.0 (or Sh-Utils-2.0, Textutils-2.0, and Fileutils-4.1)
Diffutils-2.8
Findutils-4.1.20
Gawk-3.0 (/usr/bin/awk should be a link to gawk)
Gcc-3.0.1 (Versions greater than 4.4.1 are not recommended as they have not been tested)
Glibc-2.2.5 (Versions greater than 2.10.1 are not recommended as they have not been tested)
Grep-2.5
Gzip-1.2.4
Linux Kernel-2.6.18 (having been compiled with GCC-3.0 or greater)
The reason for the kernel version requirement is that we specify that version when building glibc in Chapter 6 at the recommendation of the developers. This can be overridden if desired but at least a 2.6.0 kernel is required because thread-local storage support in Binutils will not be built and the Native POSIX Threading Library (NPTL) test suite will segfault if the host's kernel isn't at least a 2.6.0 version compiled with a 3.0 or later release of GCC.
If the host kernel is either earlier than 2.6.18, or it was not compiled using a GCC-3.0 (or later) compiler, you will need to replace the kernel with one adhering to the specifications. There are two ways you can go about this. First, see if your Linux vendor provides a 2.6.18 or later kernel package. If so, you may wish to install it. If your vendor doesn't offer an acceptable kernel package, or you would prefer not to install it, you can compile a kernel yourself. Instructions for compiling the kernel and configuring the boot loader (assuming the host uses GRUB) are located in Chapter 8.
This version of the book builds a 32-bit Linux system and requires an existing 32-bit version of of the kernel on the Intel/AMD x86 architecture. Adding capabilty for x86_64 systems is a major objective of a future version of LFS. Support for 64-bit systems and additional architectures can be found in the Cross-Compiled Linux From Scratch (CLFS) project at http://cross-lfs.org/view/svn/.
M4-1.4
Make-3.79.1
Patch-2.5.4
Perl-5.6.0
Sed-3.0.2
Tar-1.14
Texinfo-4.8
Note that the symlinks mentioned above are required to build an LFS system using the instructions contained within this book. Symlinks that point to other software (such as dash, mawk, etc.) may work, but are not tested or supported by the LFS development team, and may require either deviation from the instructions or additional patches to some packages.
To see whether your host system has all the appropriate versions, and the ability to compile programs, run the following:
cat > version-check.sh << "EOF"
#!/bin/bash
export LC_ALL=C
# Simple script to list version numbers of critical development tools
bash --version | head -n1 | cut -d" " -f2-4
echo "/bin/sh -> `readlink -f /bin/sh`"
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -e /usr/bin/yacc ];
then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
else echo "yacc not found"; fi
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -e /usr/bin/awk ];
then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
else echo "awk not found"; fi
gcc --version | head -n1
/lib/libc.so.6 | head -n1 | cut -d" " -f1-7
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1
echo 'main(){}' > dummy.c && gcc -o dummy dummy.c
if [ -x dummy ]; then echo "Compilation OK";
else echo "Compilation failed"; fi
rm -f dummy.c dummy
EOF
bash version-check.sh