推定構築時間: 11.8 SBU 推定必要ディスクスペース: 800 MB |
Glibc は open, malloc, printf, 等といったシステムコールや基本的な関数を提供するライブラリです。この C ライブラリは動的リンクされた全てのプログラムに使われます。
インストールされるプログラム: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump 及び zic
インストールされるライブラリ: ld.so, libBrokenLocale.[a,so], libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db.so 及び libutil.[a,so]
Glibc は以下のパッケージに依存します: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.
Glibcのインストールを始める前に、通常すべてのソースを解凍しているディレクトリではなく、glibc-2.3.2 という名前のディレクトリにディレクトリを変更して( cd して)そこで Glibc-linuxthread を解凍しなければいけません。
Note: この章では Glibc にテストスイートを実行するつもりです。 しかし、ここで Glibc テストスイートを実行することは、第 6 章で実行することほど重要ではないと指摘だけしておきます。
このパッケージはデフォルト最適化フラグ( -march と -mcpu オプションを含む)を変更するとおかしなふるまいをすると知られています。 ですから、たとえば CFLAGS や CXXFLAGS のような、デフォルトの最適化を書きかえるような何かの環境変数を定義したなら、Glibc を構築する時に、その設定を解除するか、修正するようお勧めします。
基本的には、本書で示されるやり方以外の方法で Glibc をコンパイルすると、お使いのシステムの安定性を危険に晒すことになります。
害のないメッセージですが、Glibc のインストールの段階で /tools/etc/ld.so.conf がないのに不平を言うでしょう。 この煩わしいささいな警告を修正します。
mkdir /tools/etc touch /tools/etc/ld.so.conf |
また、Glibc は GCC 3.3.1 でコンパイルするとやっかいな問題を持ちます。これを修正するために次のパッチをあてましょう。
patch -Np1 -i ../glibc-2.3.2-sscanf-1.patch |
Glibc の文章は、コンパイルをソースディレクトリとは別の構築専用ディレクトリで行なうことを勧めています。
mkdir ../glibc-build cd ../glibc-build |
次に、Glibc のインストールの準備をします。
../glibc-2.3.2/configure --prefix=/tools \ --disable-profile --enable-add-ons \ --with-headers=/tools/include \ --with-binutils=/tools/bin \ --without-gd |
コンフィグオプションの意味
--disable-profile: これはプロファイル情報付きでライブラリを構築するのを無効にします。もしプロファイルをする予定なのであればこのオプションを除きましょう。
--enable-add-ons:これは Glibc とともにインストールされたすべての追加物をも有効にします。この場合は、Linuxthreads になります。
--with-binutils=/tools/bin と --with-headers=/tools/include: 率直に言ってこれらのスイッチは必要ではありません。 しかしこれらは、Glibc の構築の間にカーネルヘッダと Binutils プログラムが使われるということについて間違いがないようにします。
--without-gd:このスイッチは memusagestat プログラムを構築しないようにします。 memusagestat は、不可解なことにホストのライブラリ( libgd, libpng, libz など)へのリンクを強く要求します。
この段階で以下の警告を見るかもしれません。
configure: WARNING: *** These auxiliary programs are missing or incompatible versions: msgfmt *** some features will be disabled. *** Check the INSTALL file for required versions. (参考訳: 警告: *** これらの予備プログラムは存在しないか、互換性のないバージョンです: msgfmt *** いくつかの機能が無効になります。 *** 必要なバージョンを調べるのに INSTALL ファイルを見てください。)
msgfmt プログラムが存在しない、または互換性がないことは通常無害ですが、しかしテストスイートを実行しているときにときどき問題を引き起こすと思われています。
パッケージをコンパイルします。
make |
テストスイーツを実行します。
make check |
Glibc のテストスイートは、お使いのホストシステムのある機能、とりわけカーネルに強く依存します。 加えて、この章でのあるテストは、ホストシステム上に存在するツール、あるいは環境的な問題に影響を与えます。 もちろん、これらは第 6 章の chroot 環境の中で Glibc のテストスイートを実行するときには問題とはなりません。 一般的に、Glibc テストスイートはいつもテストに通過するものと予想されます。しかし、先に述べたように、ある環境ではいくつかの失敗が避けがたいものです。私達が把握している、最もよくある問題を列挙しておきます。
CPU が比較的新しい Intel 純正か AMD 純正でない場合に、math テストがときどき失敗します。一部の最適化設定がここでの原因と知られています。
ホストシステムの問題により gettext テストがときどき失敗します。明確な理由は未だ定かではありません。
LFS パーティションが noatime オプションでマウントされているか、ファイルシステムのそのほかの妙な挙動のため、atime テストがときどき失敗することがあります。
ホストシステムが devfs ファイルシステムを実行していても、カーネルが tmpfs をサポートしていないために /dev/shm にマウントされた tmpfs ファイルシステムを持っていない場合には、shm テストが失敗するかもしれません。
古くて遅いハードウェア上で実行していると、いくつかのテストはテストタイムアウト時間を超過するために失敗するかもしれません。
要するに、この章で Glibc のテストスイーツの失敗を目にしてもそんなに心配しなくて大丈夫です。 第 6 章での Glibc が最終的に使うものとなるので、本当にテストを通過するのを見たいのはそちらの方になります。 しかし憶えておいて下さい、第 6 章でもいくつかの失敗、たとえば math テストなどでの失敗は同様に発生するのです。 失敗を経験したら、それをメモして、再び make check を実行して続けましょう。 テストスイートはどこで終ったかを調べて、それを続けます。この止ったり、動いたりの連続は make -k check を実行することで避けることができます。 しかしそうするのなら、あとで追跡して失敗の総数を調べられるように出力のログを取ることを確認して下さい。
それではパッケージをインストールします。
make install |
さまざまな国や文化では、理解しあう方法にいろいろな約束事があります。 これらの習慣の範囲は、日付と時間の表記のようなとても単純なものから、話しことばのような非常に複雑なものにまで渡ります。 GNU の "国際化" されたプログラムはロケールという手段を使っています。それでは Glibc ロケールをインストールします。
make localedata/install-locales |
このコマンドを実行する代わりに、必要なものまたは望むロケールのみをインストールすることも可能です。 これは localedef コマンドを使うことで行います。これについての情報は glibc-2.3.2 のソースファイルの中にある INSTALL というファイルのにあります。 しかし、この先のパッケージのテストを通過するために重要となる沢山のロケールがあります。特に、GCCからの libstdc++ テストがそうです。 以下の説明は、上の install-locales ターゲットを用いない場合、テストをうまく実行するために必要な最小限のロケールをインストールするための手引です。
mkdir -p /tools/lib/locale localedef -i de_DE -f ISO-8859-1 de_DE localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro localedef -i en_HK -f ISO-8859-1 en_HK localedef -i en_PH -f ISO-8859-1 en_PH localedef -i en_US -f ISO-8859-1 en_US localedef -i es_MX -f ISO-8859-1 es_MX localedef -i fr_FR -f ISO-8859-1 fr_FR localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i it_IT -f ISO-8859-1 it_IT localedef -i ja_JP -f EUC-JP ja_JP |