最近、portupgradeでeclipseのアップデートでエラーがでるなぁ~と思ってたら、そもそもjavaが動かない。
それどころか、portsのdiablo-jdk15のインストールさえ、できない。
/usr/ports/java/diablo-jdk15で、make installしたとき、こんなエラーが出る。
Fatal error 'Cannot allocate red zone for initial thread' at line 384 in file /usr/src/lib/libthr/thread/thr_init.c (errno = 12)
…なんてことに、先日、気がついてしまいました。
「見覚えのあるエラーメッセージだなぁ」
「最近、なんかの設定を変更したっけ?」
「そうだ、ldapを使うようにしたんだっけ」
ってことで、以前あった、
と、まったく同じ問題でした。
えーと、make -d A installで調べてみたら、エラーを出しているのは、portsのworkディレクトリ内に展開されているjavaでした。
# ldd /ports.work/usr/ports/java/diablo-jdk15/work/diablo-jdk1.5.0_07/bin/java
/ports.work/usr/ports/java/diablo-jdk15/work/diablo-jdk1.5.0_07/bin/java:
libz.so.3 => /usr/local/lib/compat/libz.so.3 (0x48086000)
libpthread.so.2 => /usr/local/lib/compat/libpthread.so.2 (0x48097000)
libc.so.6 => /usr/local/lib/compat/libc.so.6 (0x480bc000)
古いですね。FreeBSD6用のバイナリっぽいです。
いや、あのぉ、
によれば、diablo-jdk16を使えってことらしい。FreeBSD7用のバイナリもおいてある。そうだったのか。
☆
このエラー
Fatal error 'Cannot allocate red zone for initial thread' at line 384 in file /usr/src/lib/libthr/thread/thr_init.c (errno = 12)
は、libpthreadとlibthrが混在してしまったときに出るもの。
/etc/nsswitch.confで、ldapを使うように設定した場合、/usr/local/lib/nss_ldap.so.1 が読み込まれるようになるんですが
# ldd /usr/local/lib/nss_ldap.so.1
/usr/local/lib/nss_ldap.so.1:
libldap-2.3.so.2 => /usr/local/lib/libldap-2.3.so.2 (0x4819e000)
liblber-2.3.so.2 => /usr/local/lib/liblber-2.3.so.2 (0x481d4000)
libc.so.7 => /lib/libc.so.7 (0x48080000)
libsasl2.so.2 => /usr/local/lib/libsasl2.so.2 (0x481e1000)
libssl.so.5 => /usr/local/lib/libssl.so.5 (0x481f8000)
libcrypto.so.5 => /usr/local/lib/libcrypto.so.5 (0x48238000)
libthr.so.3 => /lib/libthr.so.3 (0x48381000)
となってるので、nss_ldap.so.1によって、libthr.soが読み込まれてしまうんです。
というわけで、以前、苦肉の策として考え付いた方法が、
FreeBSD6から、nss_ldap.so.1および依存するファイル一式をコピーしてきて使う
というもの。
以前行った対策と同様に、diablo-jdk15をインストールするために、/etc/libmap.conf には、こんな風に書いてみました。
[/usr/local/lib/compat/freebsd6/nss_ldap.so.1]
libldap-2.3.so.2 freebsd6/libldap-2.3.so.2
liblber-2.3.so.2 freebsd6/liblber-2.3.so.2
libsasl2.so.2 freebsd6/libsasl2.so.2
libssl.so.5 freebsd6/libssl.so.5
libcrypto.so.5 freebsd6/libcrypto.so.5
[/usr/local/lib/compat/freebsd6/libldap-2.3.so.2]
liblber-2.3.so.2 freebsd6/liblber-2.3.so.2
libsasl2.so.2 freebsd6/libsasl2.so.2
libssl.so.5 freebsd6/libssl.so.5
libcrypto.so.5 freebsd6/libcrypto.so.5
[java]
nss_ldap.so.1 freebsd6/nss_ldap.so.1
とはいえ、私、javaを使う予定はないんですけど。
☆
まったく関係ない話題。
塩をまく仮面ライダーが、とってもシュールです。
http://sugaya.otaden.jp/e9237.html
すがやみつるblog
■『仮面ライダー青春譜』第65回
第7章 『仮面ライダー』騒乱記
「冒険王」編集長の殴り込み