ホストシステムには以下に示すソフトウェアが必要であり、それぞれに示されているバージョン以降である必要があります。 最近の Linux ディストリビューションを利用するなら、あまり問題にはならないはずです。 ディストリビューションによっては、ソフトウェアのヘッダファイル群を別パッケージとして提供しているものが多々あります。 例えば 「<パッケージ名>-devel」 であったり 「<パッケージ名>-dev」 といった具合です。 お使いのディストリビューションがそのような提供の仕方をしている場合は、それらもインストールしてください。
Bash-2.05a (/bin/sh が bash に対するシンボリックリンクまたはハードリンクである必要があります。)
Binutils-2.12 (2.20 以上のバージョンは、テストしていないためお勧めしません。)
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.4.3 以上のバージョンは、テストしていないためお勧めしません。)
Glibc-2.2.5 (2.11.1 以上のバージョンは、テストしていないためお勧めしません。)
Grep-2.5
Gzip-1.2.4
Linux Kernel-2.6.18 (GCC-3.0 以上でコンパイルされたもの)
カーネルのバージョンを指定しているのは、第6章にて glibc をビルドする際にバージョンを指定するからであり、開発者の勧めに従うためです。 指定されたバージョンにきっちり従う必要はありませんが、少なくともバージョン 2.6.0 以上である必要があります。 カーネルのバージョンが 2.6.0 以上でなく、さらにカーネルをビルドした際の GCC のバージョンが 3.0 以上ではない場合、Binutils のスレッドローカル格納領域 (thread-local storage) へのサポートが適切に構築されず、ネイティブ POSIX スレッド・ライブラリ (NPTL) のテストスイートがセグメンテーションフォールトを起こしてしまいます。
ホストシステムのカーネルバージョンが 2.6.0 以前であったり、カーネルをビルドした際の GCC のバージョンが 3.0 以前であった場合は、ここに示した条件に合致するカーネルに置き換えることが必要です。 これを実施するには2つの方法があります。 お使いの Linux システムのベンダーがカーネル 2.6.18 を提供しているかを調べることです。 もしそれがあるなら、これを利用することができます。 もしそれがない場合、あるいはあったとしてもそれをインストールしたくない場合、カーネルをご自身でコンパイルする必要があります。 カーネルのコンパイルと (ホストシステムが GRUB を利用しているとして) ブートローダーの設定方法については 第8章 が参考になります。
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
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
echo "Texinfo: `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