你的宿主系统应该有下列软件,并满足其最低版本要求。对于现在大部分 Linux 发行版都不是问题。需要指出的是,多数的发行版将软件的头文件放在不同的软件包中,这些软件包的名字通常是“<package-name>-devel”或“<package-name>-dev”的形式。如果你的发行版提供这些软件包,请确保安装了它们。
Bash-2.05a (/bin/sh 应当是指向 bash 的符号链接或硬链接)
Binutils-2.12 (最好不要使用高于 2.18 的版本,因为尚未测试过。)
Bison-1.875 (/usr/bin/yacc 应当是指向 bison 或一个执行 bison 的小脚本的链接)
Bzip2-1.0.2
Coreutils-5.0 (或 Sh-Utils-2.0、Textutils-2.0 和 Fileutils-4.1)
Diffutils-2.8
Findutils-4.1.20
Gawk-3.0 (/usr/bin/awk 应当是指向 gawk 的链接)
Gcc-3.0.1 (最好不要使用高于 4.3.2 的版本,因尚未测试过)
Glibc-2.2.5 (最好不要使用高于 2.8-20080929 的版本,因尚未测试过)
Grep-2.5
Gzip-1.2.4
Linux Kernel-2.6.x (用 GCC-3.0 或更高版本编译)
之所以对内核版本提出要求是因为:如果宿主系统的内核不是由 GCC3.0 或以上版本编译的 2.6.x 内核,Binutils 的线程局部存储支持 (thread-local storage support) 将不会被编译,而且本地 POSIX 线程库 (NPTL) 测试套件会出现段错误。
如果宿主系统内核版本早于 2.6.x,或者不是使用 GCC-3.0(或以后)编译而成,你不得不更新内核版本以满足需要。有两种方法来解决该问题,查看你的发行版是否提供 2.6 的内核包,如果是,你可以安装它。如果没有提供或者是你不想安装它,你可以自己编译一个 2.6 的内核。关于编译内核以及配置引导程序(假定宿主安装了 grub)可以参考 第八章。
此版本构建一个 32 位的 Linux 系统,也需要一个安装在 Intel/AMD x86 架构的 32 位内核。添加对 x86_64 架构的支持是 LFS 未来版本的主要目标。对 64 位系统及其他系统结构的支持请参阅位于 http://cross-lfs.org/view/svn/ 的 Cross-Compiled Linux From Scratch (CLFS) 项目。
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
请注意上文中提到的符号链接对于使用本书中的指令来构建 LFS 系统是必须的。指向其它软件的符号链接(比如 dash、mawk 等)能够工作,但它们未经测试,也没有 LFS 开发团队的支持,要想让它们正确执行,可能需要对命令略加修改或对源代码打上额外的补丁。
要查看你的宿主系统是否能满足所有的软件包版本要求,并且能够编译程序,运行下面指令:
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