PEAR パッケージをローカルでミラーする
以前から PEAR のパッケージをローカルでミラーしたいなと思ってたんだけど、rsync とか ftp とかでローカルに再帰的に一発でミラーっていうのができないみたい。
ELFさんに聞いてみると 「pear list-all でごにょごにょやればいいんじゃない」ってことだったので簡単なスクリプトを作ってみた。使い捨てスクリプトのつもりで適当に作ろうかと思ってたんだけど、どうせなら公開しようと思ってちょっとまじめに作ってみました。
作ったのは pear_mirror.sh というシェルスクリプトです。名前は pear_mirror.sh ですが、PEAR だけでなく PECL のライブラリもダウンロードしてくれます。pear_mirror.sh を実行すると pear/pecl list-all の出力を元に $HOME/(pear|pecl) に PEAR/PECL のパッケージをダウンロードしてくれます。1回ダウンロードしたら2回目以降はダウンロードしません。新しいパッケージがあった場合だけダウンロードしてくれます。
pear_mirror.sh --help のように --help をつけて実行すると簡単なヘルプが表示されます。
% pear_mirror.sh --help Usage: pear_mirror.sh [--delete] [--dest-dir=DIRECTORY] [--help] [--php-dir=PHP DIRECTORY] [--verbose]
--delete を指定すると存在しないパッケージ、違うバージョンのパッケージが削除されます。デフォルトでは削除されません。
--dest-dir はダウンロード先のディレクトリを指定します。デフォルトは $HOME です。ダウンロード先のディレクトリに pear/pecl というディレクトリを作って、それぞれ PEAR/PECL のパッケージがダウンロードされます。
--php-dir はインストールした php のディレクトリを指定します。普通は必要ないですが、複数のバージョンの PHP をインストールしてる場合とかに有効です。
--verbose を指定すると出力が詳細になります。と言っても今は --delete をつけた時に削除するファイル名を表示してくれるだけですが...
このスクリプトを cron に1日1回登録しておけば、オフラインの時でも常に最新の PEAR パッケージをインストールできるようになります。
ダウンロード後のサイズは100MBもいかない。これぐらいなら --delete をつけないでミラーして過去のバージョンを保存してもしばらくの間は問題なさそう。
pear_mirror.sh