pear channelサーバをつくる

pear install mypear.example.com とかやりたくなったのでやることにした。

参考サイト:

サーバのインストール

そもそもpearのサイトにないのかよ,と思ったけれど,ないらしい。このへんの情報の流通はいまいちですね。で,chiaraquartetというサイトからインストールできるそうなので,インストールする。ただし,チャンネルのデータをmysqlに突っ込むらしいのでちょっと面倒そう。

それからすごい問題が!!php5必須ですって!!

% sudo pear channel-discover pear.chiaraquartet.net
% sudo pear remote-list -c chiara
Channel chiara Available packages:
==================================
Package            Version
Chiara_Bugs        0.3.1
Chiara_PEAR_Server 0.18.5
% sudo pear install -a chiara/Chiara_PEAR_Server-alpha

install -aのおかげで,一緒にいろいろインストールされました。

前準備

<VirtualHost *>
   DocumentRoot /home/apache/htdocs/pear
   ServerName pear.example.com
</VirtualHost>
mysql> grant all on pear.* to pear@localhost identified by 'pear';

ちなみに,最初からデータベースがあるのにテーブルがないと

Table 'pear.packages' doesn't exist

とか言ってエラーになる様子。

run-scripts

pear installの最後にrun-scriptsしろ,っていってたのを実行する。いろいろ質問されるけれど,

Channel Administrator Handle (package.xml user tag): 自分の名前
Channel Name (server uri like pear.php.net): pear.example.com
Suggested Channel Alias [pear] : example
Channel summary : オレのチャンネル
Channel Administrator Real Name : jibun
Channel Administrator Email : jibun@example.com
Channel Administrator Password : oreore
Path to document root of web server for pear.example.com : /home/apache/htdocs/pear
name of frontend.php HTML admin frontend file : index.php
temporary path to save uploaded releases in : /tmp

を自分で入力して,あとはぜんぶデフォルト([yes]って書いてあるのはyesがデフォルト)。

確認

ブラウザからhttp://pear.example.comにアクセスし,先ほどの名前とパスワードを入れる。そうすると "Welcome" とか言われてインストールは完了。

で,あとはpackage.xmlというpear流のパッケージ情報ファイルを含んだtgzをブラウザの画面から投げればchannelに登録されるらしい。

つづいてパッケージ作る

package.xmlってどうやって書けばいいのよ,と思いますよね。

書き方自体は http://pear.php.net/manual/en/developers.packagedef.php に書いてあります。PEARには,このxmlのメンテナンスをやってくれるパッケージがあって, http://pear.php.net/package/PEAR_PackageFileManager をつかうといいらしい。

% sudo pear install -a PEAR_PackageFileManager

としていろいろインストールしてくれます。

とは言うものの,とりあえず動けばいいので,次のような適当なxmlを書き(コピペし)ました。

<?xml version="1.0"?>
<package version="2.0" xmlns="http://pear.php.net/dtd/package-2.0">
 <name>phpinfo</name>
 <channel>pear.example.com</channel>
 <summary>php info</summary>
 <description>
    do phpinfo().
 </description>
 <lead>
  <name>ORE ore</name>
  <user>oreore</user>
  <email>oreore@example.com</email>
  <active>yes</active>
 </lead>
 <date>2006-06-11</date>
 <version>
  <release>0.0.1</release>
  <api>0.0.1</api>
 </version>
 <stability>
  <release>alpha</release>
  <api>alpha</api>
 </stability>
 <license>hoge license</license>
 <notes>
  note dayo
 </notes>
 <contents>
  <dir name="/">
   <file name="phpinfo.php" role="php" />
  </dir>
 </contents>
 <dependencies>
  <required>
   <php>
    <min>1.0.0</min>
   </php>
   <pearinstaller>
    <min>1.0.0</min>
   </pearinstaller>
  </required>
 </dependencies>
 <phprelease>
 </phprelease>
</package>

この package.xml と同じ場所に phpinfo.php を置いて,pear packageしながら何が必要なのかちまちま確認しつつ,の作業でした。かなり苦労した...。

アップロード

ようやくエラーがなくなって,うまいこと.tgzができたら,さっきの画面からこの.tgzをアップロードします!

といいたいところですが,その前に。

もともと chiara からインストールしてきた PEAR_Server はなんだったのかと言うと,pear channelを簡単にメンテナンスするためのものでした。なので,どのパッケージをこのチャンネルで提供するのかをあらかじめ指定しておかなければいけません。

上のpackage.xmlでごちゃごちゃ書いていたのと同じものを,[Create a Package]のメニューで必須(*印がついてるやつ)フォームに入力してパッケージを登録し,自分をmaintainerに登録します。

そしてようやくアップロードです。あっさり成功したようです。けど,あまり画面が変わんないなー。ほんとうまくいってるのだろうか??

ためしに

% pear channel-discover pear.example.com
% pear remote-list pear.example.com

とやってみるんだけど,うまくいかないよー。<追記> つづきを http://d.hatena.ne.jp/ichii386/20060611 に書きました。