先日から公開を始めたPEAR(PECL)チャンネルでは、チャンネルサーバーの管理にPirumを使っています。
元々はChiara_PEAR_Serverを使おうとしていたのですが、インストール後のスクリプトがうまく動かずにコードを追っかけていたところ、@iteman 先生に「PHPUnitが移行したやつを使ってみてはどうか」と勧められたのがPirumを知ったきっかけでした。
“Pirum”はラテン語で“梨の実”という意味らしく、“PEAR”そのまんまですね。公式サイトの画像がなぜナスなのかは定かではありません。
以下に公式サイトの紹介文を和訳してみました。
Pirum is a simple and nice looking PEAR channel server manager that lets you setup PEAR channel servers in a matter of minutes. Pirum is best suited when you want to create small PEAR channels for a few packages written by a few developers.
Pirumはわずか数分でPEARチャンネルサーバーをセットアップできる、シンプルで見た目の良いPEARチャンネルサーバー・マネージャーです。Pirumは少数のパッケージ・少数の開発者のためのPEARチャンネルを作るのに最適です。
Pirum consists of just one file, a command line tool, written in PHP. There is no external dependencies, no not need for a database, no need to setup credentials, and nothing need to be installed or configured.
Pirumの構成物はPHPで書かれたコマンドラインツールたったひとつです。外部依存、データベース、セットアップ証明書 (訳注: ここは訳が怪しいです。権限とした方が良い?)認証情報のセットアップ (意訳: ユーザー管理)*1、インストール・設定が必要なものは何もありません。
インストール
インストールはpearコマンドで行います。
$ pear channel-discover pear.pirum-project.org $ pear install pirum/Pirum-beta
pirumコマンドはPEARのbin_dir*2にインストールされるので、bin_dirにパスを通すか、$(pear config-get bin_dir)/pirum を直接指定して使います。*3
引数無しでpirumを実行すると、使い方が表示されます。
$ pirum Pirum 0.9.9 by Fabien Potencier Available commands: pirum build target_dir pirum add target_dir Pirum-1.0.0.tgz
サブコマンドはチャンネルサーバーを(再)構築する build と、パッケージを追加する add の2つだけと、非常にシンプルです。
チャンネルサーバーの構築
まずはチャンネルサーバー用のディレクトリとチャンネル定義のXMLを用意します。
$ mkdir pear $ touch pear/pirum.xml (pirum.xml を編集する) $ cat pear/pirum.xml <?xml version="1.0" encoding="UTF-8" ?> <server> <name>pear.localhost</name> <!--チャンネル名。pear channel-discover 等で使われる --> <summary>Local PEAR channel</summary> <!-- チャンネル概要 --> <alias>local</alias> <!-- name の別名 --> <url>http://pear.localhost/</url> <!-- チャンネルサーバーのルートURI --> </server>
次にbuildでチャンネルサーバーを構築します。
$ pirum build pear Pirum 0.9.9 by Fabien Potencier Available commands: pirum build target_dir pirum add target_dir Pirum-1.0.0.tgz Running the build command: INFO Building channel INFO Building maintainers INFO Building categories INFO Building packages INFO Building releases INFO Building index INFO Building feed INFO Updating PEAR server files INFO Command build run successfully
これでチャンネルサーバーの用意ができました。この例ではローカルにチャンネルを立てるようにしたので、httpdにバーチャルホストの設定をして再起動後、 http://pear.localhost/index.html の案内どおりにチャンネルを登録します。
$ pear channel-discover pear.localhost Adding Channel "pear.localhost" succeeded Discovery of channel "pear.localhost" succeeded
先にチャンネルを登録しておかないと、このチャンネル向けのパッケージが作成できないので注意してください。
$ pear package package.xml Error: Unknown channel "pear.localhost" Parsing of package.xml from file "package.xml" failed Cannot package, errors in package file
パッケージの追加
詳細なパッケージの作り方は長くなるので、ここではPirumをローカルチャンネルに登録してみましょう。
まずはPirumのpackage.xmlを改変してパッケージを作ります。
$ pear download pirum/PIrum-beta downloading Pirum-0.9.9.tgz ... Starting to download Pirum-0.9.9.tgz (11,622 bytes) .....done: 11,622 bytes File /../Pirum-0.9.9.tgz downloaded $ tar xfz Pirum-0.9.9.tgz $ sed 's/pear.pirum-project.org/pear.localhost/g' package.xml > Pirum-0.9.9/package.xml $ pear package Pirum-0.9.9/package.xml Warning: Channel validator warning: field "date" - Release Date "2010-05-12" is not today Package Pirum-0.9.9.tgz done
次にaddでパッケージを登録します。
$ pirum add pear Pirum-0.9.9.tgz Pirum 0.9.9 by Fabien Potencier Available commands: pirum build target_dir pirum add target_dir Pirum-1.0.0.tgz Running the add command: INFO Parsing package 0.9.9 for Pirum INFO Building channel INFO Building maintainers INFO Building categories INFO Building packages INFO Building package Pirum INFO Building releases INFO Building releases for Pirum INFO Building release 0.9.9 for Pirum INFO Building index INFO Building feed INFO Updating PEAR server files INFO Command add run successfully
確認。
$ pear pear remote-list -c local Channel local Available packages: ================================= Package Version Pirum 0.9.9
感想など
マジ簡単。それに尽きます。
チャンネルの管理をするマシンとチャンネルを公開するサーバーが異なる場合でも、FTPやrsync等でディレクトリを丸ごと同期するだけです。データベースを使わないPirumのメリットと言えます。
その反面、リストや削除などのコマンドが実装されていない、パッケージの数に比例して再構築にかかる時間が増える設計になっている等、公式PEARチャンネルのような大規模なものには向いていません。あくまで小規模なチャンネル向きです。もっとも、ほとんどの場合はPirumで必要十分だとは思いますが。
TIPS
pirum.xml
公式サイトの説明にも<url>要素の中身は <url> http://pear.pirum-project.org/ </url> とスラッシュで終わっていますが、これだと書き出されるHTMLで http://pear.pirum-project.org//feed.xml のようにスラッシュが重複してしまいます。
これを避けるために僕のチャンネルやPHPUnitのチャンネルではURLの最後にスラッシュを付けないようにしています。
Pirumの現在のバージョンではこれで問題ないようですが、今後どうなるかは分かりません。
パッケージの削除
パッケージを削除するサブコマンドは実装されていませんが、パッケージファイルを手で削除したあとbuildすれば、パッケージを削除することができます。
$ rm -v pear/get/Pirum-0.9.9.t* pear/get/Pirum-0.9.9.tar pear/get/Pirum-0.9.9.tgz $ pirum build pear Pirum 0.9.9 by Fabien Potencier Available commands: pirum build target_dir pirum add target_dir Pirum-1.0.0.tgz Running the build command: INFO Building channel INFO Building maintainers INFO Building categories INFO Building packages INFO Building releases INFO Building index INFO Building feed INFO Updating PEAR server files INFO Command build run successfully $ pear clear-cache reading directory /../pear/cache 123 cache entries cleared $ pear pear remote-list -c local No packages in channel