ttt

getttyent

(FreeBSD7) ports/java/diablo-jdk15: Fatal error 'C

2008-10-01 22:57:26 | デジタル・インターネット

最近、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用のバイナリっぽいです。

いや、あのぉ、

http://www.freebsdfoundation.org/downloads/java.shtml

によれば、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章 『仮面ライダー』騒乱記
「冒険王」編集長の殴り込み