Oracle用にビルドしたSysbenchがsegmentation faultでコケる。

先日ビルドしたsysbench を使って、oltpでベンチマークテストしようとしたところ、prepareサブコマンドでのテーブルの作成はできたのに、runサブコマンドを実行するとsegmentation faultで落ちてしまう。

coreを吐かせてバックトレースを表示させてみると、sysbench/driver/oracle/drv_oracle.cの

rc = OCIStmtExecute(ora_con->svchp, ora_stmt->ptr, ora_con->errhp, iters, 0,
                        NULL, NULL, OCI_DEFAULT);

のOCIStmtExecute()が実行される。 サーバに対して文を実行する ので、この次にlibclntsh.soが呼ばれ、ここから数ステップ後にttcdrv()が実行されるところでSignal 11でコケてしまう。うーむ。

LUMIX GF-1及びレンズのファームウェアをLinuxでアップデートする方法。

LUMIXのマイクロ一眼カメラ、マイクロフォーサーズのファームウェアはWindowsかMax OS X用のものしか提供されていない。が、案ずることはない。Max OS X用は単なるzipファイル。Windowsも自己解凍EXEなので、cabextractコマンド 1 を使えば、必要なbinファイルは抽出できるだろう。

unzipで伸長したのち、SDメモリをマウントしてbinファイルをコピーしておき、 1.4以降の手順どおり に行えば問題無し。 2 なお、USBコネクタのカバー蓋を閉じてないと、手順にあるファームウェアのアップデート画面は表示されない。

ちなみにズームレンズのH-FS045200は今年になってから購入したので、既に最新のファームウェアにアップデートされていたので、GF-1本体と、パンケーキレンズのH-H020だけで済んだ。

Panasonic デジタル一眼カメラ GF1 レンズキット(20mm/F1.7パンケーキレンズ付属) シェルホワイト DMC-GF1C-W

Panasonic デジタルカメラオプション デジタル一眼カメラ用交換レンズ H-FS045200

1

Debianではcabextractパッケージ。

2

binファイルをSDメモリには複数ファイルを同時に行ってはならんようだ。

chromiumでPACファイルを利用する。

MacBookで、b-mobileWiFiルータ & b-mobileSIM U300経由でインターネット接続する際に利用した方が若干でも帯域を節約できるのが、 日本通信が提供しているWebアクセラレータ 。一方、ローカルでGAE SDKのサーバを動かしたり、RJ-45経由でクローズドなN/Wに接続している場合、Proxyを設定してしまうと、例外設定しないとアクセスできない。

だからと言って一々ブラウザの設定を開くのは面倒。しかもchromiumの場合は、コマンドラインオプションで指定しないと行けないので、尚更。ということで、PACファイルを使っている。

Debianではchromium-browserコマンドを使うので、b-mobileWiFiルータを利用するときは、次のようなラッパースクリプトで起動する。

#!/bin/bash

PAC=${HOME}/proxy.pac
chromium-browser --proxy-pac-url="file://${PAC}"

PACファイルは、localhost(127.0.0.1)や、イントラネット内で利用しているFQDNに一致した場合は直接アクセスさせ、それ以外(つまりデフォルト)では日本通信のプロキシサーバ経由でアクセスさせる。

function FindProxyForURL (url, host)
{
    var proxy = "PROXY mao.bmobile.ne.jp:32080";

    if (shExpMatch(host, "127.0.0.1")||
        shExpMatch(host, "hoge.my-intra.net")||
        shExpMatch(host, "fuga.my-intra.net")
        )
        return "DIRECT";
    else
        return proxy;
}

この設定とは別なのだが、以前、別件でPACファイルの設定を検証した際にブラウザ間で微妙に挙動が異なっていたので、このスクリプトの場合も、iceweaselやOpera、Safari、あるいはIEを使う場合は確認が必要かもしれない。 1

1

chromium以外のブラウザはあまり使っていないので未検証。

Apple Store銀座店のエレベータは分かりにくい。

昨日、所用で初めてApple Store 銀座店、しかもその3Fのセミナールームに行ったのだが、エレベータに戸惑った。

  • 店舗奥のエレベータが単なるガラス張りだったのでエレベータだと分からない。

    • 他に待っている人がいなければ分からなかった。

  • 乗ってから、行き先フロアのボタンが無い!

    • 他の人が誰も押してなかった。押してみようとしたが単なるランプだし。

    • セミナー終了後に、3Fのエレベータの前に、自動で勝手に動いているとかいうディスプレイを見つけて納得。

うーむ、製品がシンプルなのは良いけど、エレベータまでにオリジナリティ出さなくても良いんじゃない? Appleさん、と思ったよ。

Oracle用にsysbenchをビルドしてハマる。

RHEL5.5で、Oracle 11g r2用にsysbench 0.4.12をビルドしようとしてハマったのでメモ。ハマった原因は2つ。一つは、sysbench自体のバグ。もう一つはOracle Call Interfaceを使うためのライブラリ指定。

sysbenchのバグ。

こっちは、すでに RHEL5.3Fedora8 でも昨年の4月、7月にバグ報告されているのだがまだ修正されていない。原因は./configureを実行してMakefileを作成する際にソースツリーにAUTHORSファイルとNEWSファイルが無いため、引数チェックに記述されている文字”X”がlibtoolスクリプト用のオプションと連結された変なlibtoolスクリプトが作成されるため。なので、makeを実行すると、

../libtool: line 838: X--tag=CC: command not found
../libtool: line 871: libtool: ignoring unknown tag : command not found
../libtool: line 838: X--mode=link: command not found
../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
../libtool: line 2231: X-g: command not found
../libtool: line 2231: X-O2: command not found
../libtool: line 2231: X-rdynamic: command not found
../libtool: line 1951: X-L/usr/lib/mysql: No such file or directory
../libtool: line 2400: Xsysbench: command not found
X: user not authorized to run the X server, aborting.
../libtool: line 2412: Xsysbench: command not found
../libtool: line 2420: mkdir /.libs: No such file or directory
mkdir: cannot create directory `/.libs': Permission denied
make[2]: *** [sysbench] エラー 1
make[2]: ディレクトリ `/home/user/tmp/sysbench-0.4.12/sysbench' から出ます
make[1]: *** [all-recursive] エラー 1
make[1]: ディレクトリ `/home/user/tmp/sysbench-0.4.12/sysbench' から出ます
make: *** [all-recursive] エラー 1
../libtool: line 838: X--tag=CC: command not found

のような形でエラーになってしまう。これはDebianでも同じ。これは、AUTHORS, NEWSファイルを作成し、下記の手順を実行してやれば回避できる。

$ touch AUTHORS NEWS
$ autoreconf -ifv

または

$ libtoolize --force --copy
$ aclocal
$ autoconf
$ touch AUTHORS NEWS
$ automake

なのでDebianのソースパッケージではちゃんとAUTHORS, NEWSファイルが作成されている。Upstreamにフィードバックしてないとは考えにくいのと、昨年のバグが放置されているところを見ると、sysbench自体の開発が止まっているんだろうかねぇ…。

Oracle Call Interfaceを使うためのライブラリ指定。

sysbenchはもともとMySQL用だが、PostgreSQLやOracle用にもOLTPのベンチマークに使える。Oracleで使うためには、Oracle Call Interfaceを使う必要があるのだが、sysbench自体にはMySQL以外のビルド方法についてはちゃんとドキュメント揃っていない。ググってみると、

$ ./configure --without-mysql --with-oracle
$ make
# make install

で行ける、となっているのが多いのだが、実際のところはこのままではビルドできず、もうちょっとgccやlink用のオプション指定が必要だったりする。んで、どうすれば良いかというと、以下のように環境変数指定する。 1

export CFLAGS="-I${ORACLE_HOME}/rdbms/public"
export CXXFLAGS="$CFLAGS"
export LDFLAGS=-L${ORACLE_HOME}/lib
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib

LDFLAGSで無くても良いんだけど、-Lでライブラリのパスを指定になかなか気づかなくて四苦八苦した。orz なので、こんなスクリプトを書いて、展開したソースツリー内で実行すればビルドできる。

#!/bin/bash

export ORACLE_HOME=<your oracle client path>
export CFLAGS="-I${ORACLE_HOME}/rdbms/public"
export CXXFLAGS="$CFLAGS"
export LDFLAGS=-L${ORACLE_HOME}/lib
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib

libtoolize --force --copy
aclocal
autoconf
touch AUTHORS NEWS
automake

./configure --without-mysql --with-oracle
make
make check

ビルドしたらmake installでインストールする。

環境変数LD_LIBRARY_PATHは必要か?

環境変数LD_LIBRARY_PATHは指定しないでもビルドはできるが、makeの最後にlinkを実行するので、設定していないと、Oracleのライブラリとリンクできなくてそこでコケる。また、sysbenchを実行するユーザにはLD_LIBRACY_PATHを設定してやっていないと、make install後にsysbench自体はパスが通っていても、実行時にリンクできないのでまたまたコケる。ほんでまた、Oracleのインストールパスは、oracleユーザのホームディレクトリにインストールしていたりすると、~oracle/app/oracle/product/11.2.0/client_1自体へのアクセス権がないことが多いので、やっぱり実行時にリンクできずにコケるので、注意するがヨロシ。

Footnotes

1

$ORACLE_HOMEはOracle使いには当たり前なんだろうけど、Oracleのインストールパス。ここでは、Oracle Clientなので、/opt以下にインストールしていたら、”/opt/app/oracle/product/11.2.0/client_1”になる。