今さら RHEL(クローン) 5.x + PHP 5.1.6 環境作ったら PEAR でハマった

RHEL 5 系の PEAR の問題

$ yum list php-pear
php-pear.noarch                     1:1.4.9-8.el5

で、あまりに古い。

pear 自身がアップデートを重ねており、1.4.9 では入れられない package がいくつかある。そうなると

yum install php-pear はオワコン

なんだけど、

go-pear の最新版は PHP 5.1.6 がオワコンすぎて入れられない

ということで八方ふさがり。

go-pear

以前は

http://pear.php.net/go-pear

を使ってインストールできた。このインストーラは PHP 4.3.0 以降で使えるものだったはずだが、現在は

  • PHP 4.3.x だと「古すぎるよ!」
  • PHP 5.1.6 以降だと「新しすぎるよ!」

と言って死ぬ。

go-pear.phar

現在は

http://pear.php.net/go-pear.phar

を使ってインストールすることになっている。.phar となっているが中身は圧縮も何もされていないただの PHP ファイル。なのだが、

php go-pear.phar

してもうんともすんとも言わない。

もしかしたら Web ベースで動かしたら使えたかもしれないけど、意味がよく分からないので諦めた。

http://stackoverflow.com/questions/5428778/installing-pear

によれば PHP 5.3 以降でないと使えないっぽいので、そういうことなのかな。

upgrade –force

Twitterで教えてもらった。

http://d.hatena.ne.jp/solitary_shell/20090716/1247726269

2012-01-12 時点では

  • Archive_Tar
  • Console_Getopts

を upgrade –force したら

pear upgrade pear

が通った。

もうこれでいい。

例え

$ yum list php-pear
php-pear.noarch                     1:1.4.9-8.el5                      installed

でもどうでもいい。だってこれただの実験環境だもん。

まー 5.3 でテストして 5.3 に移行しろってことですね、分かります。

Gitのbranch付きbundleの扱いがよく分からない

まとめ

まるごと rsync して解決してしまったので分からないままです><

たぶん clone –mirror でうまくいくみたい。

これまでは一直線 master のみの bundle しか扱ったことがない

bundle を使って何をしているかというと目的は大きく二つあって、

  1. 開発者以外の作業スペースのガード
  2. 開発環境のバックアップ

開発だけではサイト、サービスは完成しない。デザインする人もいれば内容を作り込む人もいる。それらの人の作業は残念ながら古き悪しきファイル共有ベースで行っているので、いつどんな事故が起きるとも限らない。そこで開発環境のコードと bundle を使って同期させている。せいぜい日に 1, 2度、手動だが何もしていないことに比べれば安心感は絶大。1

もう一つのバックアップについては git の command をたくさん覚えるより repository 丸ごとパッケージにできてそこから復元できる bundle で十分かなということで一石二鳥だと思って bundle を作っている。

また職場での git の使い方は git + svn ( git-svn じゃなくて別々に使う ) が中心で、ほとんど branch は使わずにやってきた。svn 側で branch を切って作業を始めるので git 側はバックアップ以上の意味があまりないのだ。

branch 付き bundle は意外に面倒くさい

git を使い始めて2年以上経っているのに今さら branch 付きの bundle を試してみた。今回はいつものガード目的ではなくゼロから作業できる Rails 関係のコードを branch も使いながら git に突っ込んでいる。これをいくつかの環境で正しく動くかどうかを確認しようってわけ。

まず今まで通り

$ git bundle create {FILE} HEAD

してみた。でもこれだと current branch しか bundle に入らないうえに branch の情報が残らないみたい。こんな感じ。

$ git clone {FILE}
$ cd {FILE}
$ git branch
* (no branch)

branch の情報がさっぱり残ってない。

$ git bundle create {FILE} HEAD --branches

とすればよいのかと思ったが、この場合も

$ git branch
* master

としか表示されない。topic branch で作業していたのに、master branch しかないことになっている。

$ git bundle create {FILE} --all --branches

として bundle を作ると少し変わる。この場合は

$ git clone {FILE}
$ cd {FILE}
$ git branch
warning: Duplicated ref: refs/remotes/origin/branch1
warning: Duplicated ref: refs/remotes/origin/master
* master

と表示される。うむむ? branch があることは分かっているみたいなんだけど、実際には branch として fetch できていない。のかな?

–mirror 付きで clone すればいいのかな?

[2011-02-12 追記]

bundle の話は Pro Git にも書かれておらず、なかなか情報が見つからない。役に立ちそうなのはこれかな?

git - Backup of github repo - Stack Overflow

なるほど –mirror や –bare 付きで clone するのか。

$ git branch
warning: Duplicated ref: refs/heads/branch1
warning: Duplicated ref: refs/heads/master
  branch1
* master

duplicated ref な warining は出るが、ちゃんと branch の情報を保持したまま clone できたようだ。とりあえずこんな感じかなぁ?

もっと分かる人いたら教えてください。

cf.

  1. 開発用の repository は svn なので git や hg を併用することで「違い」をそのまま吸収できるメリットもある。 

実行中の Ruby の install ディレクトリを知る

xig_installer のために実行中の Ruby のパスを知りたいと思ったが、当初は方法がよく分からず、とりあえず放置していた。これをちゃんと調べ直した。

ENVじゃなかった

2010-01-07

17:05:43 >wtnabe< ruby -e 'p ENV["_"]' って自分自身を実行している
Ruby インタプリタを得る方法という理解は合ってますか?
17:14:06 <eban> @wtnabe 合ってないです。bashとかが設定してるので、shだ
とだめ
17:35:11 >wtnabe< @eban あざっす。ちなみに純粋に Ruby スクリプトだけで
知る方法ってあるんですかね?

ごそごそ調べると require 'rbconfig' が必要らしい。

2010-01-08

11:15:51 >wtnabe< 実行中の Ruby のパスは ruby -e 'require "rbconfig";
p Config::CONFIG["bindir"]' ですか?

Config -> RbConfig 移行問題

2010-01-12

18:56:55 >wtnabe< Ruby 1.8 は Config で 1.9 は RbConfig なのか。えーと
どう書けばいいのかな。
19:00:59 <znz> @wtnabe ConfigでもRbConfigでも見えるからどっちでもいい。
もうサポートされてない古いのも対応したければConfigしかなさそうだけど。
19:10:01 >wtnabe< @znz Config はいずれ廃止予定とかではないんですかね?
個人的には 1.8.5 以降だけ相手にすればいいのでギリギリどっちでもオッケー
なんすけど。
19:12:59 <znz> @wtnabe 廃止予定だと思うので、新しいのだけで良ければ
RbConfigがいいのではないかと。
19:12:59 <nsiena> @wtnabe require 'rbconfig' 後に定義状況を
const_defined? で調べて RbConfig = Config とかではだめです?
19:14:29 >wtnabe< @nsiena あーそんなんでいいですね。ありがとうございま
す。

まとめ

最終的に出来上がった部分がコレ。

require 'rbconfig'
RbConfig = Config unless defined? RbConfig
RbConfig::CONFIG['bindir']

cf. Commit 651136d20e9925d9a86d224272acae13dad84c31 to wtnabe's xig_installer - GitHub

RbConfig は Ruby 1.8.5 以降で定義されているので、まぁ現役で使われている Ruby のほとんどはわざわざこの書き方にしなくても RbConfig を読めば大丈夫だと思う。

参考

ちなみにちょっと前にこんな議論があった。インストールディレクトリではなくて実行パスだけど、 basename 噛ませばいいだけだし、似たようなもんかと。

MarkMail って使いやすいなぁ。すごいなぁ。

ネットワーク上のマウントポイントの確認方法

なんか忘れるのでメモ。

プロトコルコマンド
NFSshowmount HOST
SMB/CIFSsmbclient -L HOST

ただ、smbclient の方はなんかちゃんと全部出てきたりこなかったりするような…。サーバ側の問題なのかクライアント側の問題なのか…。まぁ Windows とは相性が悪いと(おい)。

afp とか WebDAV にも同じ機能はあるんだろうけど、とりあえず要らないから調べてない。

ほぉおおぉお < テキストファイル@POSIX

ときどきの雑記帖 リターンズ 2007年1月 - テキストファイル」の定義

そんなものまで一応定義があるとは。これでファイル末尾には改行コードをつけましょうと言える根拠が一つ見つかった。

Mac mini と iSync

Mac mini 出たー。スペックは微妙だけど、このサイズはすごい。おまけに BTO で SuperDrive にもできる。ほしいけど今の部屋には要らない。それより付属ソフトを眺めていて AppleWorksiLife '05 もついてるってのが結構贅沢かも。

あと iSync って使ってないけどこれは結構いいのかもしんない。携帯電話は 携帯Sync2 を入手した方がよいらしい。まぁスケジュール管理もアドレス帳管理もやってなければ iPod も .Mac のアカウントも持ってないんだからきっぱり不要なんだけど。データの使いまわしそのものに興味があるという本末転倒な状態。

iWork は今のところまったく惹かれるところがない。なんか中途半端なシロモノというか「お前の Work は見た目だけかい」と、何度でもツッコミを入れたくなる。

About

例によって個人のなんちゃらです