NPTL/TLS対応glibc
Vine 4.2のglibcはNPTL(Native POSIX Thread Library)とTLS(Thread Local Storage)に対応してません。以前はあまり困ることもなかったのですが、最近困る状況がちょこちょこあったので再構築してみました。
glibcは非常に重要なライブラリで、環境構築に失敗するとシステムが起動しなくなります。実システムで行うときは自分の行っていることをよく理解した上で作業してください。
SRPMパッケージの取得
とりあえずシステムは最新の状態にしておいた方がいいと思いますので、aptで最新の状態にしてから取得します。
# apt-get update # apt-get upgrage
ソースの取得は一般ユーザーで行います。
% apt-get source glibc
これで$HOME/rpm以下にファイルが配置されたはずです。
SPECファイルの修正と準備
SPECファイルの修正
再構築する前にSPECファイルを修正します。$HOME/rpm/SPECS/glibc-vl.specを修正します。
修正はSPECファイルの先頭の方です。
- nptlarchesとwithtlsarchesを有効にします
4 %define nptlarches i686 athlon x86_64 ia64 s390 s390x ppc ppc64 5 ##%define nptlarches noarch 6 %define withtlsarches i686 athlon x86_64 ia64 s390 s390x alpha alphaev6 sparc sparcv9 ppc ppc64 7 ##%define withtlsarches noarch
- Releaseを変えておきます
25 Release: %{glibcrelease}vl3.3tls
修正する点は以上です。
.rpmmacrosファイルの修正
$HOME/.rpmmacrosファイルを修正します。
1 %_topdir ${HOME}/rpm 2 3 %_with_compat32 1 <-- この行を追加 4 # %packager Your Name <your mail address> 5 6 %_sysconfdir /etc 7 8 # gpg signing 9 # %_signature gpg 10 # %_gpg_name Your Name <your mail address>
この修正を忘れるとglibc-commons、glibc-develなどのパッケージが作成されないようです。
ビルド
ファイルの設定が終わればリビルドします。
% cd $HOME/rpm/SPECS % rpm -bb --target=i686 glibc-vl.spec
1時間ほど(Core2 duo 2.16GHz)で$HOME/rpm/RPMS/i686にパッケージが作成されます。以下のファイルができました。私が作業をしたときに作成されたファイルをアップしておきます。無保証ですので各自の責任において使用して下さい。
- compat32-glibc-2.3.4-2vl3.3tls.i686.rpm
- compat32-glibc-debug-2.3.4-2vl3.3tls.i686.rpm
- compat32-glibc-devel-2.3.4-2vl3.3tls.i686.rpm
- glibc-2.3.4-2vl3.3tls.i686.rpm
- glibc-common-2.3.4-2vl3.3tls.i686.rpm
- glibc-common-extra-2.3.4-2vl3.3tls.i686.rpm
- glibc-debug-2.3.4-2vl3.3tls.i686.rpm
- glibc-devel-2.3.4-2vl3.3tls.i686.rpm
- glibc-profile-2.3.4-2vl3.3tls.i686.rpm
- glibc-utils-2.3.4-2vl3.3tls.i686.rpm
- nptl-devel-2.3.4-2vl3.3tls.i686.rpm <-- これができていればちゃんとTLSオプションも認識されています
- nscd-2.3.4-2vl3.3tls.i686.rpm
インストールとアンインストール
インストール
必要なファイルをインストールします。現在インストールされているものと同じパッケージをアップグレードします。
% rpm -qa | grep glibc
などで確認して下さい。私の環境ではglibc、glibc-common、glibc-develでした。場合によってはnscdも入っているかもしれません。依存関係がややこしい場合があるので一気にアップグレードします。
# rpm -Uvh glibc-2.3.4-2vl3.3tls.i686.rpm glibc-common-2.3.4-2vl3.3tls.i686.rpm glibc-devel-2.3.4-2vl3.3tls.i686.rpm
アンインストール
これらのパッケージが不要になったら元のglibcに戻します。FTPサイトなどからglibcバイナリパッケージを取得してダウングレードします。
# rpm -Uvh --oldpackage glibc-2.3.4-2vl3.3.i686.rpm glibc-common-2.3.4-2vl3.3.i686.rpm
こんな感じです。