glibcは、GNUプロジェクトによる標準Cライブラリです。 C言語で記述されたソフトウェアの開発・実行に必要とされます。
glibcの1回目のビルドでは、ライブラリ群は /tools/lib にインストールしました。 glibcは標準Cライブラリであるため、C言語で開発されたソフトウェアの実行ファイルは、実行時にglibcのライブラリを必要とします。 つまり、現時点では、これまでの作業でビルド・インストールした実行ファイルは /tools/lib にあるglibcのライブラリに依存しています。
しかし、/tools は一時的な開発ツールが置かれる場所であり、最終的には削除します。 そうなると、/tools に依存している実行ファイルは動作しなくなります。
ここまでの作業でビルド・インストールしたのは一時的な開発ツールですので、/tools以下に置かれています。 つまり、最終的には/toolsごと削除されます。 よって、/toolsの削除によって動作しなくなることを心配する必要はありません。
問題は、これから先の作業でビルド・インストールする新システム用のソフトウェア群です。 新システム用にこれからビルド・インストールしていくソフトウェア群が動作しなくなっては困ります。 新システム用のソフトウェア群が /tools がなくても動作するよう、ここでglibcを本来あるべき位置にビルド・インストールします。
最初に、ビルド・インストール前リストを生成します。
/sources/genprevlist.sh > /dev/null 2>&1
ソースファイルを展開します。
cd /sources tar xvf glibc-2.21.tar.xz cd glibc-2.21
展開したソースファイルを修正します。
sed -i -e '/ia32/s/^/1:/' ./sysdeps/i386/i686/multiarch/mempcpy_chk.S sed -i -e '/SSE2/s/^1://' ./sysdeps/i386/i686/multiarch/mempcpy_chk.S
ビルド用ディレクトリを準備します。
mkdir -vp ../glibc-build cd ../glibc-build
configureを実行します。
../glibc-2.21/configure \ --prefix=/usr \ --enable-obsolete-rpc \ --disable-profile > ../../logs/configurelog.glibc 2>&1
configureが終了したら、ログファイルに出力された内容を参照し、正常に終了したことを確認します。
cat ../../logs/configurelog.glibc
テストを行います。
make -k check 2>&1 | tee ../../logs/checklog.glibc
テストが終了したら、ログファイルに出力された内容を参照し、正常に終了したことを確認します。
grep '^FAIL' ../../logs/checklog.glibc
上記の結果、何も表示されなければ問題ありません。
なお、筆者の環境(仮想マシン)では以下のように4つのエラーが発生します。
FAIL: localedata/tst-setlocale3 FAIL: nptl/tst-cleanupx4 FAIL: posix/tst-getaddrinfo4 FAIL: posix/tst-getaddrinfo5
localedata/tst-setlocale3 は、仮想マシンで作業をしている場合に発生することがあります。 筆者の環境では、ホストOSごと再起動してテストをやり直したところこのエラーは発生しませんでした。 よって、localedata/tst-setlocale3 に関しては、無視して作業を続行しても問題ありません。
nptl/tst-cleanupx4 は、多くの環境で失敗することで有名ですので気にする必要はありません。
posix/tst-getaddrinfo4 と posix/tst-getaddrinfo5 についても、ネットワークに接続されていない現状では失敗するので気にすることはありません。
まず、/etc/ld.so.conf を作成します。 このファイルが存在しないとインストールが警告を表示するためです。
touch /etc/ld.so.conf
続いて、インストールを行います。
make install
インストールが終了したら、画面に出力された内容を参照し、正常に終了したことを確認します。
インストール後の追加作業を行います。 nscd関係の設定ファイルおよびディレクトリを追加インストールします。
cp -va ../glibc-2.21/nscd/nscd.conf /etc/ mkdir -vp /var/cache/nscd
nscdは、/etc/hosts /etc/passwd /etc/group へのアクセスのキャシュを提供するサービスです。
名前解決の順序を決定するための設定ファイルを作成します。
cat > /etc/nsswitch.conf << "EOF" passwd: files group: files shadow: files hosts: files dns networks: files protocols: files services: files ethers: files rpc: files EOF
かなり前のバージョンでは /etc/host.conf が名前解決の優先順位の指定に使われていました。 しかし、現在では /etc/nsswitch.conf が使われます。
ロケール情報をインストールします。
mkdir -vp /usr/lib/locale localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8 localedef -i de_DE -f ISO-8859-1 de_DE localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro localedef -i de_DE -f UTF-8 de_DE.UTF-8 localedef -i en_GB -f UTF-8 en_GB.UTF-8 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 en_US -f UTF-8 en_US.UTF-8 localedef -i es_MX -f ISO-8859-1 es_MX localedef -i fa_IR -f UTF-8 fa_IR localedef -i fr_FR -f ISO-8859-1 fr_FR localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i fr_FR -f UTF-8 fr_FR.UTF-8 localedef -i it_IT -f ISO-8859-1 it_IT localedef -i it_IT -f UTF-8 it_IT.UTF-8 localedef -i ja_JP -f EUC-JP ja_JP localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 localedef -i tr_TR -f UTF-8 tr_TR.UTF-8 localedef -i zh_CN -f GB18030 zh_CN.GB18030
日本語用のロケールとして、日本語EUC と 日本語UTF-8 を追加しています。
ロケール情報に続き、タイムゾーン情報を追加します。
tar xvf ../tzdata2015e.tar.gz ZONEINFO=/usr/share/zoneinfo mkdir -pv $ZONEINFO/posix mkdir -pv $ZONEINFO/right for tz in etcetera southamerica northamerica europe africa antarctica asia australasia backward pacificnew systemv; do zic -L /dev/null -d $ZONEINFO -y "sh yearistype.sh" ${tz} zic -L /dev/null -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz} zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz} done cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO zic -d $ZONEINFO -p America/New_York unset ZONEINFO
タイムゾーンを設定します。
LOCALEPATH=`tzselect << "EOF" 5 19 1 EOF` echo $LOCALEPATH cp -va --remove-destination /usr/share/zoneinfo/${LOCALEPATH} /etc/localtime unset LOCALEPATH
上記によって、Asia/Tokyo がタイムゾーンとして設定されます。
/etc/ld.so.conf を生成します。
cat > /etc/ld.so.conf << "EOF" /usr/local/lib /opt/lib EOF
/etc/ld.so.conf は共有ライブラリの検索パスを指定するための設定ファイルです。 ダイナミックリンカは、このファイルを元に共有ライブラリを検索します。
なお、/lib と /usr/lib については標準で検索されますので、このファイルに記述する必要はありません。
ソースファイルに付属している文書のインストールを行います。
cd ../glibc-2.21 mkdir -vp /usr/share/doc/glibc-2.21 cp -va BUGS /usr/share/doc/glibc-2.21 cp -va CONFORMANCE /usr/share/doc/glibc-2.21 cp -va COPYING /usr/share/doc/glibc-2.21 cp -va COPYING.LIB /usr/share/doc/glibc-2.21 cp -va ChangeLog /usr/share/doc/glibc-2.21 cp -va ChangeLog.1 /usr/share/doc/glibc-2.21 cp -va ChangeLog.2 /usr/share/doc/glibc-2.21 cp -va ChangeLog.3 /usr/share/doc/glibc-2.21 cp -va ChangeLog.4 /usr/share/doc/glibc-2.21 cp -va ChangeLog.5 /usr/share/doc/glibc-2.21 cp -va ChangeLog.6 /usr/share/doc/glibc-2.21 cp -va ChangeLog.7 /usr/share/doc/glibc-2.21 cp -va ChangeLog.8 /usr/share/doc/glibc-2.21 cp -va ChangeLog.9 /usr/share/doc/glibc-2.21 cp -va ChangeLog.10 /usr/share/doc/glibc-2.21 cp -va ChangeLog.11 /usr/share/doc/glibc-2.21 cp -va ChangeLog.12 /usr/share/doc/glibc-2.21 cp -va ChangeLog.13 /usr/share/doc/glibc-2.21 cp -va ChangeLog.14 /usr/share/doc/glibc-2.21 cp -va ChangeLog.15 /usr/share/doc/glibc-2.21 cp -va ChangeLog.16 /usr/share/doc/glibc-2.21 cp -va ChangeLog.17 /usr/share/doc/glibc-2.21 cp -va INSTALL /usr/share/doc/glibc-2.21 cp -va LICENSES /usr/share/doc/glibc-2.21 cp -va NEWS /usr/share/doc/glibc-2.21 cp -va PROJECTS /usr/share/doc/glibc-2.21 cp -va README /usr/share/doc/glibc-2.21 cp -va WUR-REPORT /usr/share/doc/glibc-2.21
ディスクを圧迫しないよう、ビルド用のディレクトリを削除します。
cd .. rm -fr glibc-2.21 rm -fr glibc-build
最後に、インストールリストを生成します。
/sources/genpostlist.sh > /dev/null 2>&1 /sources/gendifflist.sh glibc