tarballから複数バージョンをインストールしたときのバージョン切り替え

よくきたblogからTBいただきました。
ありがとうございます。

includeとlibはワイルドカード指定はよくないのでは?

で,本題なんですがincludeやlibあたりをワイルドカードで一気に追加すると
ほとんどの場合特定のバージョンが使用されるってことは無いですか?
個人的にはPATHも含め,ビルド時に明示的にやるべきだと思います.

まず始めに前提条件として、tarballからインストールしたソフトウェアを簡単に管理するは汎用的な方法で特にPHPに特化した内容ではないです。

複数バージョンをインストールする場合は /opt/pkgs/hoge-x.x.x にインストールします。
この場合は /opt/pkgs/hoge-x.x.x のディレクトリにはパスには含まれません。
実際にパスが通るのはシンボリックリンクをはってる /opt/hoge 以下になります。

複数のバージョンをインストールしていても、使われるのは1つだけなので複数ディレクトリにパスを通しても意味はありません。
使用するバージョンを変更する場合は /opt/hoge のシンボリックリンクを変更します。

自分自身が精通しているパッケージなら応用はいくらでも利きますが、そうでない場合、例えばテストで複数バージョンのライブラリをテストしないといけないとかだと、結構大変です。
この方法だとシンボリックリンク先を変更するだけですむので楽ですし、どんなパッケージにも適用可能です。

ファイルの実体には固有の名前をつけておいて、汎用的な名前のファイルをシンボリックリンクにしておいて、シンボリックリンクの参照先を変更することでデフォルトの挙動をかえるのはUNIXでは昔から行われています。

例えばよくあるのがライブラリのバージョンの切り替えで、よくあるライブラリのファイル名は libhoge.so-x.x.x ですが、通常 libhoge.so.x.x.x に対するシンボリックリンク libhoge.so があります。
プログラムをコンパイルしてライブラリをリンクするときはライブラリのバージョンを含めずに libhoge.so を使用します。
こうしておくとリンカがライブラリをリンクするときはバージョンのことは考えずにすみ、ライブラリのバージョンを変更する場合は libhoge.so の参照先を変更するだけですみます。

この辺の知識はThe Linux ELF HOWTOを読んで勉強しました。
10年以上程前に書かれた文書ですがまったく色あせてない。この辺の技術は急激に変化しない基盤技術なので当然ですが。

デフォルトでアクセスするファイルはシンボリックリンクにしておいて、必要なときに参照先を変更するのがUNIX的なようです。

トラックバック(1)

このブログ記事を参照しているブログ一覧: tarballから複数バージョンをインストールしたときのバージョン切り替え

このブログ記事に対するトラックバックURL: http://blog.bz2.jp/bz2mt/mt-tb.cgi/118

いやPHPに限った話じゃなくて汎用的な話です(苦笑 続きを読む

コメント(2)

ELFのドキュメントでELFさんの質問に答えるとはうまい!

そこまでねらってなかったw

ウェブページ

Powered by Movable Type 4.21-ja

このブログ記事について

このページは、masatoが2006年2月24日 23:48に書いたブログ記事です。

ひとつ前のブログ記事は「フォト蔵APIを公開しました」です。

次のブログ記事は「千葉PMの報告会に参加してきた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。