PEAR/Installer.php と大文字/小文字

あけましておめでとうございます。

最近ここの存在をすっかり忘れていました。今日は体調不良で家でだらだらしていたために気づいたのでした。

せっかくなのでなんか書きます。

Ethna-2.3.0のPEARパッケージは何がおかしかったのか?

Ethna-2.3.0のPEARパッケージでwindows/macでインストールできないというバグがありました。

でてくるメッセージは

Could not delete /usr/bin/ethna, cannot rename /usr/bin/.tmpethna
ERROR: commit failed

というかんじで、これでは何がおかしいのかさっぱりわかりません。

とりあえず

pear -vvv install ethna/ethna | tee ~/hoge

とかやって眺めてると、パッケージ作成時に script の role をもつファイルは bin_dir/baseinstalldir/ 以下に配置されるようです。(いままで気づいてなかったorz)

つまり、

  • ~/work/cvs/ethna/bin/ethna_run_test.sh (パッケージ作る前の位置)

なんてとこにインストールされてしまうわけです。一方で

もインストールしたいので、ファイル名の大文字/小文字を区別しないOS(というかファイルシステム)だと、すでに /usr/bin/Ethna というディレクトリがあるので /usr/bin/ethna が作れなかった、というわけです。

ちなみに .tmpethna とかは、PEAR/Installer.php がパッケージからいろいろインストールするときに transaction を用意していて、そのときに作る一時ファイルです。

ethna-2.3.1

けっきょく 2.3.1 では ethna コマンド相当のものを script にして、あとはぜんぶ php にすることで、全部を php_dir に突っ込むようにしました。

role は基本的に拡張子で指定するかんじなので、baseinstalldirには注意しておかないと意外にはまることがわかりました。

windows環境がないんだよね

今回のバグは、このあいだ MacBook をゲットしたおかげですぐに再現できた (というか MacBook はクライアントとしてしか使ってないんです) んですが、 windows については検証する環境がないんです。ethna.batなんて一回も実行したことないです。だって apache とか入れるのめんどうそうじゃないですか!!

...とも言ってられないので、vmwareにいれておいたwin2kにでもいれてみることにします。フォーラムを見ると、まだバグがあるみたいだし。