你的宿主系统应该要有下面列出的软件,而且不应低于所标出的最低版本。这个要求对大多数现代Linux发行版应该都不是问题。也要注意,有许多发行版会把软件的软件头放在一个独立的包里,通常像这样“<package-name>-devel”或这样“<package-name>-dev”,如果你的发行版是这样,要确保也安装他们。
下面列出的软件的更早版本可能也能用,但还没有测试过。
Bash-3.2 (/bin/sh应该是一个到bash的软连接或硬链接)
Binutils-2.17 (高于2.24的版本不建议使用,因为还没测试过)
Bison-2.3 (/usr/bin/yacc应该是一个到 bison 的链接,或是一个执行bison的小脚本)
Bzip2-1.0.4
Coreutils-6.9
Diffutils-2.8.1
Findutils-4.2.31
Gawk-4.0.1 (/usr/bin/awk应是一个到gawk的链接)
GCC-4.1.2 包含C++编译器,g++ (高于4.8.2的版本不建议使用,因为还没测试过)
在一些发行版上,有报告说一些被gcc使用的库会处于一种易变的状态,这会干扰一到些LFS包的构建。要检查这个,要先在/usr/lib目录,也可能是/usr/lib64目录,找一下libgmp.la,libmpfr.la和libmpc.la这三个文件。它们可能全都有,或者全部没有,但不会是只有其中一个或两个。如果它们导致了问题,你可以把它们改名或者删掉,或者安装合适的缺失的软件包。
Glibc-2.5.1 (高于2.19的版本不建议使用,因为还没测试过)
Grep-2.5.1a
Gzip-1.3.12
Linux Kernel-2.6.32
对内核版本的要求的原因是,在第 6 章构建glibc的时候,我们在开发者的建议下指定了这个版本。它也被udev所要求。
如果宿主系统的内核早于2.6.32,你需要把内核替换为更新的版本。这里有两种放法作替换。第一个,查看你的发行版是否提供了2.6.32或更新版本的内核,如果是,你可以去安装它。第二个,如果你的发行版没有提供合适的内核包,或者你不想安装它提供的内核,那么你可以自己编译一个内核。编译内核和配置启动器(假设宿主系统使用GRUB)的指令在第 8 章。
M4-1.4.10
Make-3.81
Patch-2.5.4
Perl-5.8.8
Sed-4.1.5
Tar-1.18
Xz-5.0.0
要注意上面提到的软连接是用本书中的指令构建LFS系统所要求的。指向其它软件(比如dash,mawk等)的软连接可能也能用,但没被测试过或被LFS开发组所支持,而且那可能会要求指令上的修改或对一些软件的额外的补丁。
要查看你的宿主系统是否全部具有那些软件的合适版本,和编译程序的能力,请运行下面:
cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
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
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2- # glibc version
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
xz --version | head -n1
echo 'main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
then echo "g++ compilation OK";
else echo "g++ compilation failed"; fi
rm -f dummy.c dummy
for lib in lib{gmp,mpfr,mpc}.la; do
echo $lib: $(if find /usr/lib* -name $lib|
grep -q $lib;then :;else echo not;fi) found
done
unset lib
EOF
bash version-check.sh