アーカイブ

‘Unix’ タグのついている投稿

環境変数の一覧表示

2009 年 5 月 12 日 コメントはありません

環境変数の一覧を出力するにはprintenvコマンドを引数無しで使う。

カテゴリー: コンピュータ タグ: , ,

LD_PRELOAD

2008 年 9 月 23 日 コメントはありません

MovableTypeのデータベースをBerkeley DBからSQLiteに変更しようとして、変換スクリプトを実行すると、
ELFのローダが、

/libexec/ld-elf.so.1: /usr/local/lib/libsqlite3.so.8:
Undefined symbol "pthread_create"

というエラーを吐いて先に進めない。

実行プログラムの形式にELFを採用しているOSではLD_PRELOADという環境変数を設定しておくと、
指定したライブラリを他のライブラリより先にロードしておくことができるらしい。
これを使って任意の関数を上書きしたりできるそう。

>setenv LD_PRELOAD /usr/lib/libpthread.so.2
>./mt-db2sql.cgi

とすると問題なく実行できた。

MovableTypeで使うデータベースをSQLiteに設定してブラウザからアクセスしてみると、
Internal Server Errorが。
エラーログをみると例のエラー、当然か。
CGI実行時にApacheから環境変数を設定できればいいんだろうなと思って調べてみると、
mod_envというのがあるらしい。Apacheを入れたときにデフォルトでロードするようになっていた。
httpd.confに

SetEnv LD_PRELOAD /usr/lib/libpthread.so.2

のようにSetEnvディレクトリを書く。
ブラウザからアクセスすると問題なく動いた。

LD_PRELOADを使って任意の関数呼び出しにフックしてみる
CGIの裏側見せます

カテゴリー: コンピュータ タグ: , ,