連載
» 2002年11月06日 00時00分 公開

LFSで作って学ぶLinuxの仕組み(2):セルフコンパイル環境の整備 (2/2)

[一志達也,@IT]
前のページへ 1|2       

コンパイルの開始

 それでは今回行うべき作業に入ろう。作業は/mnt/lfs/usr/srcに展開したパッケージ(lfs-packages-3.3)を使って行う。/mnt/lfs/usr/src/lfs-packages-3.3には、見てのとおり拡張子がtar.bz2というファイルが多数存在する。これらの圧縮されたファイルを展開して、取り出したソースコードをコンパイルする。ここでコンパイルするプログラムは必要最小限のもので、なおかつスタティック・リンクで行う。

 今回コンパイルするプログラムは、表1のとおりだ。

プログラム ファイルサイズ 内容
bash-2.05a 20Mbytes bash
binutils-2.12 96Mbytes addr2line、ar、as、gasp、ldなど
bzip2-1.0.2 3Mbytes bzip2(bunzip2、bzcat)、bzip2recover
diffutils-2.8 4Mbytes cmp、diff、diff3、sdiff
fileutils-4.1 25Mbytes chmod、chown、cp、dd、df、du、install、ln、ls、mkdir、rmなど
gawk-3.1.0 12Mbytes gawk
gcc-2.95.3 168Mbytes GCC(c++、cc、g++、gccなど)
grep-2.5 4Mbytes grep(egrep、fgrep、grep)
gzip-1.2.4 2Mbytes gzip(gunzip、zcat)、gzexeなど
Linux Kernel-2.4.18 132Mbytes カーネル
make-3.79.1 6Mbytes make
patch-2.5.4 2Mbytes patch
sed-3.0.2 2Mbytes sed
sh-utils-2.0 23Mbytes chroot、date、dirname、echo、env、hostname、nice、pwd、sleep、su、uptime、whoなど
tar-1.13 7Mbytes rmt、tar
texinfo-4.1 11Mbytes info、install-info、makeinfo、texi2dvi、texindex
textutils-2.0 24Mbytes cat、cut、expand、head、join、od、sort、tail、wcなど
表1 今回インストールするパッケージ。ファイルサイズはおおよその数値

 ファイルの展開方法だが、次のようなコマンドで行うと一度で済むので便利だ。

bzcat ファイル名 | tar xv

 大抵の(おそらくすべての)ファイルは、そのファイル名と一致するディレクトリを作成して、そこに圧縮されていたファイルを展開する。

 展開されたファイルのコンパイル方法はそれぞれ違うため、ここでは特別な処理あるいは注意が必要なものについてのみ解説する。これら以外のコマンドについては、以下に用意したコンパイル用スクリプトを参照してほしい。このスクリプトを実行すると、今回コンパイルすべきコマンドを一気にコンパイルできる。

コンパイル用スクリプト:lfs-compile.sh
注:EUCで保存すること。

 スクリプトを見れば、何がインストールされるのか、どうインストールするのかが分かるだろう。また、最後にLFS用のpasswdとgroupファイルを作成していることも分かる。これを作っておかないと、LFSを独立させて起動するときに「ユーザーがない」という事態になるからだ。

bash-2.05a

 /usr/lib/libncurses.aと/usr/lib/libcurses.aを必要とする。既存のLinux上にこれらのファイルが存在するかどうかを確認し、存在しなければncurses-devパッケージをインストールする。また、libcurses.aがない場合は以下のようにしてlibcurses.aのシンボリックリンクを作成することで代用してもよい。

# cd /usr/lib &&
# ln -s libncurses.a libcurses.a

diffutils-2.8

 glibcのバージョンによって対処が必要になる。

$ rpm -qa | grep glibc

とすれば、glibcのバージョンが分かる。その結果が2.2以降であればスクリプトどおりで構わないが、2.1以前だった場合はスクリプトの

./configure --prefix=$LFS/usr --disable-nls 
&&
make LDFLAGS=-static &&
make install &&

の個所を

./configure --prefix=$LFS/usr --disable-nls
unset CPPFLAGS &&
make LDFLAGS=-static &&
make install &&

に書き換える。

fileutils-4.1

 glibc-2.2.3以上やAMD CPU、たまにはIntel CPUでも、生成したプログラムがセグメンテーション・フォルトで動作しない可能性がある。コンパイル後に、

$ $LFS/bin/ls

を実行し、ファイルリストが表示されるかどうかを確認する。もし「Segmentation Fault」が発生するようなら、次のコマンドを実行してパッチを当て、再度コンパイルを行う。

$ cp lib/Makefile.in lib/Makefile.in.backup
$ sed -e 's/\(.*\)\(fopen-safer\.c \)\\/\1\2atexit.c \\/' \
-e 's/\(.*\)\(idcache\$U\.\$.*\)\\/\1\2atexit$U.$(OBJEXT) \\/' \
lib/Makefile.in.backup > lib/Makefile.in

 パッチはMakefileを書き換える。パッチを適用する前に、ファイルを展開したディレクトリ(fileutils-4.1)を削除して、再展開しておくこと。なお、インストールしたプログラム($LFS/bin/ls)などを消す必要はない(上書きされるため)。

gawk-3.1.0

 既存Linuxのglibcが2.1以下の場合は、スクリプトの

cp awklib/Makefile.in awklib/Makefile.in.backup
sed -e '/^datadir/s/awk/gawk/' \
-e '/^libexecdir/s%/awk%%' awklib/Makefile.in.backup \
> awklib/Makefile.in &&
./configure --prefix=$LFS/usr --disable-nls --libexecdir=$LFS/usr/bin 
&&
make LDFLAGS=-static &&
make install &&

の部分を以下のように書き換える。

cp awklib/Makefile.in awklib/Makefile.in.backup
sed -e '/^datadir/s/awk/gawk/' \
-e '/^libexecdir/s%/awk%%' awklib/Makefile.in.backup \
> awklib/Makefile.in
export CPPFLAGS=-Dre_max_failures=re_max_failure2
./configure --prefix=$LFS/usr --disable-nls --libexecdir=$LFS/usr/bin
unset CPPFLAGS
make LDFLAGS=-static
make install

 以上で、chrootした状態でもLFSに必要なプログラムを自力でコンパイルできる環境が整った。次回は、chrootでパーティションを独立させ、OSとしての体裁を整える。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。