Linux にプログラムの複数のバージョンをインストールする方法はありますか?

Linux にプログラムの複数のバージョンをインストールする方法はありますか?

Arch Linux にインストールしようとしていますphp-5.3が、bisonまだ新しいので、bisonソースから古いバージョンの をビルドしました。そして、/usr/localデフォルトで にインストールされるようです。(これは何らかの慣例でしょうか?) そのため、bisonシステムのデフォルトのバージョンと今インストールしたバージョンを並べて、複数のバージョンの をインストールできるかどうか疑問に思っています。このようなことはめったに必要にならないでしょう。ただ興味があるだけです。これは難しいことでしょうか? どのようにすればよいでしょうか?

答え1

一部の特定のソフトウェアは で設定できます--program-suffix=-my-version-suffix。他のディレクトリの一部をカスタマイズする必要があるかもしれませんが、 を--prefixデフォルト ( /usr/local) のままにしておけば、 のディストリビューションでパッケージ化されたものと衝突することはありません/usr

の中に一般的なただし、任意のバージョンの共存を許可しようとしている唯一のディストリビューションはニックス、 けれどジェンツーほとんどのディストリビューションが気にするよりも多くのパッケージを試みます (ただし、Bison の場合は一度に 1 つのバージョンのみが許可されます - 少なくとも選択肢は提供されます)。

ただし、ソース コードが bison の新しいバージョンで壊れる場合、通常はソース コードに単純な問題があることを意味します。通常、それを修正できるもの%option(または) があります。--argument

答え2

この問題を一貫して治療する方法の一つは、modulesパッケージ。環境変数 (バイナリへのパスなど) を変更することで機能します。

環境モジュールパッケージは、モジュールファイルを介してユーザーの環境を動的に変更することを可能にします。モジュールは、クリーンな方法で動的かつアトミックにロードおよびアンロードできます。

例えば

$ module load gcc/3.1.1 
$ which gcc 
/usr/local/gcc/3.1.1/linux/bin/gcc 

$ module switch gcc gcc/3.2.0 
$ which gcc 
/usr/local/gcc/3.2.0/linux/bin/gcc 

あなたの場合、環境変数bisonで最初に来るバージョンPATHが選択されます。現在の端末でこの変数を手動で検査または変更するには、次のコマンドを実行します。

$ echo $PATH
 ....

/opt/binPATH の前に追加して優先順位を付けます。

$ export PATH="/opt/bin:$PATH"

または、/opt/bin/に追加しますPATH( 内の他の場所に同じ名前のバイナリが見つからない場合にのみ選択されますPATH

$ export PATH="$PATH:/opt/bin"

答え3

より最新の回答をお伝えします:

はい、これは今では間違いなく可能です。
依存関係地獄は過去のものとなりましたが、ディストリビューションも過去のものとなりました。:)

ただし、Arch では不十分です。ソースベースのディストリビューションが必要です。そうしないと、依存関係がハードコードされ (ハードコードの定義によっては)、両方のインストールが同じライブラリを指すなどします。ただし、
ソースからビルドする場合は、毎回異なるパスでビルドできます。

Gentoo には、このために「スロット」と呼ばれる機能が長い間存在しており、これによってすべてが簡単になります。パッケージのバージョンの依存関係を、別のパッケージの特定の「スロット」として指定できます。スロットとは、他のスロットと競合しないバージョンの範囲です。(私が見たほとんどのパッケージでは、どのバージョンも独自のスロットにすることができます。特にライブラリの場合です。ただし、パッケージ自体が 1 つしかないものに依存しているため、パッケージがそれを処理できない場合があります。または、パッケージ マネージャーによる作業が少し必要になる場合があります (インストール時にインストールされた構成ファイルを変更するなど))。

しかし、他の完全なソースディストリビューションにも同様のものが含まれていると確信しています。

それ以外の場合、回避策として、ディストリビューションのパッケージをメンテナーがビルドするのと同じビルド システムをセットアップし、必要なパッケージを新しい名前でクローンし、その中でビルド プロセスを変更して依存関係の異なるバージョンを指すようにし、ディストリビューションのパッケージ メンテナーが行うように、それを新しい非ソース パッケージにビルドします。(率直に言って、Gentoo の方がインストールが簡単だと感じました。:)

関連情報