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

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

php-5.3Arch Linuxにインストールしようとしていますが、あまりにもbison新しいので、ソースから古いバージョンをビルドしましたbison/usr/localデフォルトではインストールされているようです。 (これは一種のルールですか?)これで、bison基本的なシステムバージョンとインストールしたばかりのバージョンと一緒に複数のバージョンのIEを並べてインストールできるかどうか疑問に思います。このようなことはおそらくほとんど必要ありません。ただ気になりました。これは大変なことですか?私は何をすべきですか?

答え1

一部の特定のソフトウェアを設定できます--program-suffix=-my-version-suffix。別のディレクトリをカスタマイズする必要があるかもしれませんが、それを--prefixデフォルト値()のままにして/usr/localも機能しません/usr

内部に一般的なただし、任意のバージョンの共同インストールを可能にする唯一のディストリビューションは、ニックス、しかしルート図ほとんどのディストリビューションよりも多くのパッケージを試してみてください(Bisonは一度に1つのバージョンしか受け入れませんが、少なくともオプションは提供しています)。

ただし、最新バージョンのBisonでソースコードに問題がある場合、これは通常ソースコードに単純な問題があることを意味します。一般的に問題を解決できるもの%option(または)があります。--argument

答え2

この問題を継続的に解決する 1 つの方法は、次を使用することです。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/bin_pre_pendingによるPATHよりも優先されます。

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

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

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

答え3

更新された回答を申し上げます。

はい、今日は間違いなく可能です。
配布がない限り、依存関係の地獄は過去の仕事です。 :)

アーチはそれを切らない。ソースベースの展開が必要です。依存関係はハードコーディングされ(ハードコーディングのいくつかの定義について)、両方のインストールは同じライブラリなどを指します。
ただし、ソースからビルドしている場合は、毎回別のパスを使用してビルドできます。

Gentooには、すべてを簡単にする「スロットリング」という機能が長くありました。パッケージのバージョンに対する依存関係は、他のパッケージの「スロット」として指定できます。スロットは、他のスロットと競合しない一連のバージョンです。 (私が見たほとんどのパッケージでは、すべてのバージョンが独自のスロットになる可能性があります。特にライブラリの場合はさらにそうです。ただし、パッケージ自体が1つしかないエントリに依存するため、パッケージがそれを処理できないか、パッケージマネージャの操作で何かが必要なため処理できません。

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

そうでない場合、回避策は常にメンテナがリリースパッケージをビルドするときと同じビルドシステムを設定し、必要なパッケージを新しい名前で複製し、ビルドプロセスを別のバージョンの依存関係を指すように変更してからビルドすることです。です。ディストリビューションのパッケージマネージャと同様に、ソースではなくパッケージの新機能です。 (正直なところ、私はGentooがインストールする方が簡単だと思います.:)

関連情報