読者です 読者をやめる 読者になる 読者になる

"Pyrus 動かない" - その 3つの現象と対応

PEARパッケージを入れる場合に遭遇するかもしれない3つの現象について現在の回避作を個人的に記します。
ちなみに、pyrusのBTSはgithubですのでそちらもご確認ください。
https://github.com/pyrus/Pyrus

なお、動作がおかしいと思ったら、
はじめに、

$ pyrus ./vendor install pear/FSM

を試してみてください。
すくなくともphpソースだけのpear/FSMではインストール時にトラブルにならないと思います。
また、pyrusの設定の確認コマンドはalpha4からgetの引数なしに統一されました。

$ pyrus get

vendorフォルダ指定時は

$ pyrus ./vendor get

です。

なお、以下の各説明コマンドは便宜的にvendorフォルダ指定なしでの記載です。

1. bin_dir が再指定されていない。

scriptsファイル(binファイル)を含むパッケージをインストールする場合に遭遇します。
PHPUnitなどの場合に該当します。先日もかいたとおり

php $PYRUS ./vendor set bin_dir /home/yourname/tmp/vendor/bin

と set bin_dirしておきます。

2. package.xml (PEAR1) がおかしい

今まで(旧来)のPEARパッケージをインストール際に遭遇します。
順を追って確認します。今回はopenpear.org/Wozozo_Unkoを例に取ります。

  • パッケージファイルがダウンロードできるか
$ pyrus download openpear.org/Wozozo_Unko

ダウンロードできたら、そのtgzファイル指定でインストールできるか確認します。

$ pyrus download openpear.org/Wozozo_Unko-3.0.0.tgz 

以下のようなエラーが出た場合はインストールしようとするpackage.xmlでのパスがおかしいです。

Unable to make directory Wozozo_Unko/./src/bin/ in /home/sasezaki/tmp/pyrus/vendor/.journal-data

展開してpackage.xml中身を確認します

$ tar xzvf Wozozo_Unko-3.0.0.tgz 

とくにcontentsノードのファイルを確認します。
今回の場合、

 <contents>
  <dir baseinstalldir="." name="/">
   <file baseinstalldir="." md5sum="0794a66ee8488556584c0ef290252df0" name="src/bin/wozozo" role="data" />
   <file baseinstalldir="." md5sum="845385b585b74eb13e7cbc9028e99077" name="src/Wozozo.php" role="php" />
  </dir>
 </contents>

となっているのでむちゃんこ怪しいです。(とくにbaseinstalldir=.)

再度パッケージできるか確認します。

パッケージをtarコマンド展開したあとは、ディレクトリ直下は

  • package.xml
  • Wozozo_Unko-3.0.0

となっているはずなので、

$ mv package.xml Wozozo_Unko-3.0.0

とpackage.xmlを移動し、

$ pear package

でパッケージングし、
ただしくパッケージングできるか確認します。(今回の場合)

Analyzing src/Wozozo.php
Warning: in Wozozo.php: class "Wozozo" not prefixed with package name "Wozozo_Unko"
Warning: Channel validator warning: field "date" - Release Date "2011-02-21" is not today
Warning: Channel validator warning: field "version" - major version x in x.y.z may not be greater than 1 for any package that does not have an <extends> tag

といったエラーです。

pyrusでpackage.xmlをmakeしなおしてみます。

$ pyrus make 

package.xml とpackage_compatible.xmlが生成されると思います。これでまた pyrus packageとしてもエラー(おそらくダウンロードしたpyrus.phar alpha4だとCannot locate PEAR2/Exception.php)となると思います。
pyrusにてmakeしても

 <contents>
  <dir name="/">
   <dir name="src" baseinstalldir="/">
    <dir name="bin">
     <file role="php" name="wozozo"/>
    </dir>
    <file role="php" name="Wozozo.php"/>
   </dir>
  </dir>
 </contents>

となっており、phpファイルではないscriptsファイルが混ざっているのが原因です。 (file roleが php やdataではなく scriptが正しい)

$ mkdir scripts
$ mv src/bin/wozozo scripts/wozozo 
$ rm -rf src/bin

としてscriptsフォルダへ移動し、makeしなおすと、

 <contents>
  <dir name="/">
   <dir name="scripts" baseinstalldir="/">
    <file role="script" name="wozozo"/>
   </dir>
   <dir name="src" baseinstalldir="/">
    <file role="php" name="Wozozo.php"/>
   </dir>
  </dir>
 </contents>

と生成され、package & install にてインストールされるはずです。

【※依存するパッケージが怪しい場合】

ノードにいくつかパッケージを含む場合は、それらをコメントアウトして依存パッケージなしで入るか確認します。

パッケージをtarコマンド展開したあとは、ディレクトリ直下は

  • package.xml
  • Wozozo_Unko-3.0.0

となり

$ mv package.xml Wozozo_Unko-3.0.0

とpackage.xmlを移動し、依存パッケージをコメントアウトしたあと

$ pyrus package

でパッケージングし、

$ pyrus install Wozozo_Unko-3.0.0.tgz

で再度インストールしてみてください。


また、上記とはべつにpearinstallerのバージョン指定が古いだけの場合
がありますが、そちらはバージョンを書き直したりしただけでインストールできる場合もあります。

3. 設定ファイルを壊した

pyrusのコンフィグでの各パス値に相対パスなどにしたほか、不明な値にしたときに遭遇します。
ちなみに、pyrus起動時にパス設定するよう求められますが、ここもフルパス指定じゃないとダメげです。
unix系の場合は、$HOME/.pear windows7などの場合はドットなしの $HOME\pear (c:\Users\yourname\pear など)
がpyrusの設定フォルダですのでそちらを一時的にどかすかなどで初期化して確認を行います。


なお、本格的にpyrusをデバッグしたいかたは、開発用セットアップについて以下のページに記載があるので確認ください
https://github.com/pyrus/Pyrus/wiki/Developing-for-Pyrus