btoメモ

なんか適当に書く

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的なようです。