MENU

J2EE環境構築編

J2EE体験編

glibcのバージョンアップ

glibcについては2.3.3がリリースされるとともに、nptlというスレッドモデルが導入されました。
そこで、これらを踏まえて一部記述を追加します。

glibc-2.3.3 with nptl

入手するソースはglibc-2.3.3.tar.bz2だけです。
linuxthreadも一緒に持ってくると、configure時にどちらか一方にしろ、と注意されます。
あとは、configureしてmakeするだけです。
手順は下記のものと同じです。

ただ、poファイルのインストールがsegmentation faultで中断する、という症状に悩まされました。
これはmakeもmake checkも無事に終了しているのに、make installを実行する段階でなぜかsegmentation faultになる、というものです。
しかも、インストールが中断する場所が結構微妙で、システムはその後も動いているのですが、そのままでは別のプログラムをコンパイルできません。
また、再起動するとログインすらできなくなります。

いろいろ試行錯誤した結果、glibc-2.2.5からいきなり2.3.3に上げると駄目で、一度2.3.2をインストールしてから2.3.3に上げなければならない、という結論に達しました。
なぜこんな症状がでるのかは不明だし、おかしな感じがしますが、そんなこともあるのでしょう。

さて、皆様の環境でこのような症状を発するかどうかの判断は、以下のような手順で可能です。

cd glibc-2.3.3/po
msgfmt -o be.mo be.po
msgfmt -o ca.mo ca.po

以下、そのディレクトリでmsgfmtを一通り実行します。
もしも問題のある環境であれば、ca.mo辺りでsegmentation faultになることもあります。
segmentation faultにならずに最後までいけたら、大丈夫です。

問題があった場合は、何かを替える必要があります。
替える候補としては、glibc、gcc、gettextがあります。
私の場合は、glibcの2.3.2を入れることで解消されましたが、環境によってはgccの入れ換えも必要かも知れません。
頑張って、総当たり式にチェックしてみて下さい。

nptlのメリットとして、スレッドの生成、破棄が高速になる、ということがあるらしいです。
特に、apacheやデータベースサーバで良い影響を及ぼすであろう、とされています。
私はベンチマーク用の指標を採取する前にglibcを入れ換えてしまったので、どの程度良い影響を生じるのか、良く分かりません。
どなたかベンチマークして下さい

追加情報
ここまで

glibcの最新版は2.3.2です。これをインストールします。

ソースコードの入手

ftp://ftp.ring.gr.jp/
ftp://ftp.iij.ad.jp/
辺りから入手しましょう。
今回はさらに、linuxthreadというファイルも入手します。
glibcとlinuxthreadのバージョンは同じものを入手するようにします。

展開

tar jxfv glibc-2.3.2.tar.bz2

さらにlinuxthreadを展開します。

cd glibc-2.3.2
tar jxfv ../glibc-linuxthread-2.3.2.tar.bz2
cd ..

./configure

今回も作業用のディレクトリを作成した方がいいらしいので、それに従います。

mkdir objglibc
cd objglibc
../glibc-2.3.2/configure --prefix=/usr --enable-add-ons

エラーが無ければコンパイルしましょう。

make

make

を実行してエラーがなければコンパイルは完成です。

make install

su

を実行して特権を取得します。
さて、ここからが勝負です。というのも、glibcのインストールが中断されると、タイミングによってはlsすら実行できないことになる(らしい)ので、以下のような点に注意しましょう。
小さなお子さまの手の届く範囲にマウスやキーボードがあると、Ctrl+cとかCtrl+Alt+Delとかの危険なコマンドを入力する、実行中のターミナル(ktermなど)を破棄する(右肩の閉じるボタンを押す)などの悪戯をされることがあります。
電気の使用量の多いときは、ブレーカーが飛ぶ可能性があります。
Xはクラッシュすることがあります(滅多にありませんが)。

覚悟を決めたら実行しましょう。

make install

make locale-data/install-locales

make installが無事にすめば、とりあえずひと安心です。
さらにロケールのデータをインストールします。

make locale-data/install-locales

を実行します。

できあがり

これでできあがりです。

しかし、苦難はここから始まると言えるのかもしれません。なぜなら、glibcの2.2と2.3の間には微妙な非互換性(といっていいのか?)があり、lib*.aを利用してコンパイルすることがほとんど不可能になります。
configureは無事に終わっても、makeに入ったあとでerrorになる、という点で非常にストレスになります。エラーを起こしたライブラリをコンパイルしなおせばいいだけの話ですし、lib*so*は互換性を有するようなので、実行に支障はありません。実害は無いといえば無いのですが。
glibcのバージョンアップには、makeする、エラーになる、ライブラリのソースを探す、ライブラリをインストールし直す、再度makeという手順を延々繰り返すことも厭わない、という覚悟が必要です。