Glibc-2.3.2 のインストール

推定構築時間:           12.3 SBU
推定必要ディスクスペース  784 MB

Glibc の内容

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 インストール依存性

Glibc は以下のパッケージに依存します: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.

Glibc のインストール

Glibc 構築システムは非常に独立的で、たとえコンパイラスペックファイルとリンカがまだ /tools を指していたとしても、完壁にインストールされます。 Glibc をインストールする前にスペックファイルとリンカを調整すると、Glibc autoconf テストが偽の結果を与え、それゆえクリーンな構築を行うという目的を駄目にしてしまうので、インストールの前にこの二つを調整することができません。

Glibc の構築を始める前に、再度 Glibc-linuxthreads を glibc-2.3.2 というディレクトリの中に解凍することを思い出してください。 そして、デフォルトの最適化フラグを上書きするあらゆる環境変数を外しましょう。

害のないメッセージですが、Glibc のインストール段階で /etc/ld.so.conf がないのに不平を言うでしょう。この煩わしいささいな警告を修正しておきます。

touch /etc/ld.so.conf

それから以前使ったものと同じパッチをあてます。

patch -Np1 -i ../glibc-2.3.2-sscanf-1.patch

Glibc 文書は、ソースディレクトリとは別の構築専用ディレクトリでコンパイルするよう勧めています。

mkdir ../glibc-build
cd ../glibc-build

それではコンパイルのために Glibc を準備します。

../glibc-2.3.2/configure --prefix=/usr \
    --disable-profile --enable-add-ons \
    --libexecdir=/usr/bin --with-headers=/usr/include

新しいコンフィグオプションの意味

パッケージをコンパイルします。

make

結果をテストします。

make check

the Section called Glibc-2.3.2 のインストール in Chapter 5という節からのテストスイーツの注意書きはここでもまだとても役立ちます。万一何か疑問を持ったらそこを参照して確かめて下さい。

それではパッケージをインストールします。

make install

違った言語に対応するシステムにするロケールは、上述のコマンドではインストールされません。次のコマンドを実行します。

make localedata/install-locales

前のコマンドを実行する代わりに、必要とするか欲しいロケールだけをインストールすることができます。 これは localedef コマンドで行います。これについての情報は glibc-2.3.2 ツリーの中の INSTALL ファイルの中にあります。 しかし、いくつかのロケールはこの先のパッケージのテストを正しく通すために必要です。以下の説明では、上の install-locales コマンドの代わりに、テストを行うのにに必要な最小のロケールセットをインストールします。

mkdir -p /usr/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

最後に、linuxthreads man ページを構築します。

make -C ../glibc-2.3.2/linuxthreads/man

それからこれらのパッケージをインストールします。

make -C ../glibc-2.3.2/linuxthreads/man install

Glibc を設定する

/etc/nsswitch.conf というファイルを作成しなければいけません。 なぜなら、このファイルが無いか壊れていると Glibc はデフォルトの設定を提供しますが、Glibc のデフォルトの設定はネットワークが正常に動きません。また、タイムゾーンの設定もしなければいけません。

以下のコマンドを実行して新しい /etc/nsswitch.conf を作ります。

cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

publickey: files

hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: db files

# End /etc/nsswitch.conf
EOF

どのタイムゾーンが何かを調べるために、以下のスクリプトを実行します。

tzselect

地域についてのいくつかの質問に答えると、このスクリプトは EST5EDTCanada/Eastern のようなタイムゾーンの名前を出力します。 それから以下のコマンドを実行して /etc/localtime ファイルを作ります。

cp --remove-destination /usr/share/zoneinfo/Canada/Eastern /etc/localtime 

オプションの意味

もちろん、Canada/Eastern の代わりに、tzselect スクリプトが与えたタイムゾーンの名前を記入しましょう。

動的ローダーを設定する

デフォルトの設定で動的ローダー( /lib/ld-linux.so.2 )はプログラムを実行したときに必要とされる動的ライブラリを求めて /lib/usr/lib を探します。 しかし、/lib/usr/lib 以外の場所にライブラリがあるとすれば、動的ローダーが見つけられるように /etc/ld.so.conf ファイルにそれらを加える必要があります。 追加のライブラリを含むことで、一般的に知られる二つのディレクトリは /usr/local/lib/opt/lib で、これらのディレクトリを動的ローダーの検索パスに加えます。

以下のコマンドを実行して新しいファイル /etc/ld.so.conf を作ります。

cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf

/usr/local/lib
/opt/lib

# End /etc/ld.so.conf
EOF