後述の通り失敗に終わるのですが、折角なのでチャネルサーバの作り方について書いてあるURLをメモ。 - http://blog.hawklab.jp/item-88.html - http://lab.urume.net/2006,0529,447.html * SourceForge.netのWeb環境にPEARを入れようとして挫折した由 とりあえずチャネルサーバを立ててみるか、と、SF.netのWebサーバ環境に、go-pear.phpを入れようとする。 [msakamoto-sf@pr-shellE htdocs]$ wget http://go-pear.org/ --01:20:57-- http://go-pear.org/ => `index.html' Resolving go-pear.org... 216.92.131.66 Connecting to go-pear.org|216.92.131.66|:80... failed: Connection refused. ・・・ん?Connection refused? 試しにローカルに一旦落としたgo-pear.phpをUPって、コマンドラインから $ php go-pear.php しても、同様のエラーでアウト。 コマンドラインからじゃNGかと思い((SELinuxの制限かと思った))、Apacheからやってみるも、今度は chmod 777 した筈のPEARインストールディレクトリが悉く、パーミッションエラーで弾かれてる。 どうなっているのか、とApacheのプロセスを見ようとすると、 root ... /usr/sbin/vmware-guestd --background /var/run/vmware-gues VMwareのゲスト用デーモン!?へぇ・・・VMware上で動いていたのか・・・。全然気づかなかった。 で、結局Apacheプロセスが見えなかった。うーん・・・ドキュメントを見てみるか((最初に見るべきだった。))。 https://sourceforge.net/docs/E07 E07- 09 Outbound Connectivity ・・・ご免なさいご免なさいご免なさい。ちゃんと明記してありましたね。Webサーバ環境からは、他のSourceForgeサーバも含めて一切内→外へのアクセスはシャットダウンしてあるのでした。 ちょっと待て。 これじゃ、PEARインストールできないじゃん? 確かにまぁ、ローカルで疑似環境作ってUPれば良いと言えば良いのだけれど、そこまでするのは正直、面倒くさい。ひどく。 '' と言うことで、Xhwlayのチャネルサーバを立てるのは諦めます。 '' やっぱり、自前の鯖を使わないと無理そう。とはいえ、殆ど変更が入らないコントローラ系のライブラリで、そこまでするか?というのはある。 まあ海外の安い、rootをもらえるホスティングサービスと契約するのはアリだし、いつかはそれをやろうとは思っているけど、9-11月にかけて身辺が非常にごとごとする可能性が高く、アッチこっちに手を回す余裕がないのも確か。 というわけで、Xhwlayのチャネルサーバは断念します。 '' 2008年12月時点ではOpenPEARがありますので、試してみたいですね・・・。 '' * パッケージは作ってみよう。但し、package2.xmlのみ対応で。 チャネルサーバが無いと、パッケージの魅力は半減するように思えるので正直諦めようとか思っていたのだけれど、せっかくなので作ってみようか。と、思う。 WEB+DBの33号も参考にしてみる。PEAR_PackageFileManager をインストールすると、doc_dir に当たるディレクトリに幾つかのExampleスクリプトがインストールされるので、それを参考に弄ってみる。 で。 相当の紆余曲折の末、SummaryやDescriptionはサンプルそのままだが、とりあえずパッケージを作ることができた。また、その作業により generatePackage.xml.php を新たにリポジトリに追加した。(SVNの作業ディレクトリを丸ごとごっそり移動したばっかりだったので、上手くcommitできるか不安だったが特に問題なかった。よかったにゃ~。) 中身の細かい値は今後修正していくが、とりあえずコレがスケルトンになる。 $ rm package.xml package2.xml # なぜか削除しておかないと上手く動かない? $ php generatePackage.xml.php ... ... (XMLが生成され、標準出力に出力される。validateも行われ、何かエラーがあれば表示される) ... (エラーが無く、XMLも特に問題ないようであれば実際にpackage.xml/package2.xmlを作成・保存) $ php generatePackage.xml.php make ^^^^ これが追加される。 $ $ ls ... Xhwlay-X.X.X.tgz ... $ pear info Xhwlay-X.X.X.tgz ... (パッケージの情報を確認) $ pear list-file Xhwlay-X.X.X.tgz ... (ファイルのインストール先を確認) こんな感じで。 ・・・色々紆余曲折がありました。最初は、WEB+DB 33号の記事やExampleのスクリプトのつぎはぎから始まったので、XMLのvalidateで何回も怒られた。っつーか、validateする前にも表示してくれるとどこがどう悪いのか分かりやすいんだが。 で、ようやくvalidateが無くなったと思ったら、「XMLで指定されたファイルが、現実には無いよ?」という感じのERRORが。 Error: File "C:/in_vitro/SVNWORK/xhwlay-php\hwlay/Bookmark.php" in package.xml does not exist Error: File "C:/in_vitro/SVNWORK/xhwlay-php\ample/templates/pages_default.html" in package.xml does not exist ・・・ん? xhwlay-php\hwlay => xhwlay-php\Xhwlay ^ xhwlay-php\ample => xhwlay-php\sample/ ^ の間違いじゃない? で、いろいろsetOptionの値を確認したり、ソースコードを追っかけてる内に、 '' ひょっとしたらBUGかもしれない箇所を発見 '' 。すごい分かりづらいのだけれど、 PEAR/PackageFileManager/File.php#getFileList() ... $path = substr(dirname($file), strlen(str_replace( DIRECTORY_SEPARATOR, '/', realpath($package_directory))) + 1); ^^^ ここが怪しい。 やっている内容は、例えば 'packagedirectory' が C:/your/package/directory であった時、次のファイルが来たら、 C:/your/package/directory/foo/bar.php 'packagedirectory'分をさっぴいて返す。つまり C:/your/package/directory/foo/bar.php - C:/your/package/directory = foo/bar.php にする、という処理。 で、どうやら、'packagedirectory' の末尾が"/"で終わっている場合、+1が効いてしまい、"/"の直後1文字まで削られる。つまり、 C:/your/package/directory/foo/bar.php - C:/your/package/directory/f = oo/bar.php となってしまうらしい。 良く動いてるよな・・・。 '' というかこれ、本当にBugなのか?実は単なる自分の設定ミスでちゃんと設定するモノしていれば問題なかったりして。 '' とにかく、本当かウソか分からないので、一応patch作ってPEARのBugとしてreportしておいた。 http://pear.php.net/bugs/bug.php?id=12023 さて、どうなるか・・・。 ** どうでも良いけど。 これで、PEARのBugレポート、二回目だな。外れクジ引いてるような気が。 あと、PEARの入力フォームが全般的に使いづらい。今回も、例によりAccount忘れたので新規作成したのだけれど、UserNameやFullNameで、やれ大文字小文字、ALNUMしか駄目だとか、 '' POSTした後に怒られるし。 '' しかも、 '' 入力画面にはそんな注意書きないし。 '' なので、エラーになる度、CAPTCHA入力し直し。おまけに '' 必須入力の強調表示が無い為、すごい分かりづらい '' し。 UserNameやパスワード、FullNameなどでは、入力可能な文字数が表示されていないし。 うーん、ユーザーインターフェイスというのを考えたことがあるのか?これもBugというよりはRequestとしてレポートを作れと?うへぇ。