pfexec時の LD_LIBRARY_PATH とか、crleとか

OpenLDAP(slapd)とBDBを/usr/local 以下に入れた場合、slapdをpfexecで起動させようとすると /usr/local/lib 以下がライブラリのパスにないのでコケます。
(本来は、SMFにslapdを追加してマニフェストにLD_LIBRARY_PATHを定義するべきですが)


$ ls -l /usr/local/lib/libdb-4.2.so
-rwxr-xr-x 1 root root 779012 2009-01-04 22:04 /usr/local/lib/libdb-4.2.so
$ pfexec /usr/local/libexec/slapd
ld.so.1: slapd: fatal: libdb-4.2.so: open failed: No such file or directory
Killed
$

ライブラリのパスの追加は通常は LD_LIBRARY_PATH の環境変数にいれとけばいいはずなのですが。


$ echo $LD_LIBRARY_PATH

$ pfexec echo $LD_LIBRARY_PATH

$ export LD_LIBRARY_PATH=/usr/local/lib
$ echo $LD_LIBRARY_PATH
/usr/local/lib
$ pfexec echo $LD_LIBRARY_PATH
/usr/local/lib
$ pfexec /usr/local/libexec/slapd
ld.so.1: slapd: fatal: libdb-4.2.so: open failed: No such file or directory
Killed

と、ダメです。
システムのライブラリパスに追加します。


$ man crle
...
NAME
crle - configure runtime linking environment
...
$ crle

Default configuration file (/var/ld/ld.config) not found
Platform: 32-bit LSB 80386
Default Library Path (ELF): /lib:/usr/lib (system default)
Trusted Directories (ELF): /lib/secure:/usr/lib/secure (system default)

$

デフォルトは、/libと/usr/lib で、/usr/local/lib を追加します。


$ pfexec crle -u -l /usr/local/lib
$ crle

Configuration file [version 4]: /var/ld/ld.config
Platform: 32-bit LSB 80386
Default Library Path (ELF): /lib:/usr/lib:/usr/local/lib
Trusted Directories (ELF): /lib/secure:/usr/lib/secure (system default)

Command line:
crle -c /var/ld/ld.config -l /lib:/usr/lib:/usr/local/lib

$

これで、slapdが起動します。


$ pfexec /usr/local/libexec/slapd
$ ps -ef|grep slapd
root 583 1 0 02:00:22 ? 0:00 /usr/local/libexec/slapd
$

ちなみに、ld.configファイルを削除して、rootユーザの .bashrcと.profileの両方にLD_LIBRARY_PATHの行を追記してから、pfexecでslapdを実行しましたが起動しませんでした。
pfexecと、rootユーザのdotファイルは関係なしと。
(まぁそうですね。)