有沒有辦法在Linux上安裝一個程式的多個版本?

有沒有辦法在Linux上安裝一個程式的多個版本?

我正在嘗試php-5.3在 Arch Linux 上安裝,但bison它太新了,所以我從原始程式碼建立了舊版本bison。看起來它/usr/local預設安裝到其中。 (這是某種約定嗎?)所以我現在想知道是否可以安裝多個版本的bisonie,與預設系統版本和我剛剛安裝的版本並排安裝。這類東西可能很少需要。我只是好奇而已。這是一件很難做到的事嗎?我該怎麼辦?

答案1

一些特定的軟體可以配置--program-suffix=-my-version-suffix。您可能需要自訂一些其他目錄,但如果您將 保留--prefix為預設值 ( /usr/local),則不會與/usr.

在裡面一般的然而,唯一嘗試允許共同安裝任意版本的發行版是尼克, 儘管根圖嘗試比大多數發行版更多的軟體包(儘管對於 Bison 來說它一次只允許一個版本 - 至少它提供了一種選擇)。

但請注意,如果您的原始程式碼在較新版本的 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
 ....

透過 _pre_pending 將其優先/opt/bin到 PATH:

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

或者,附加/opt/bin/PATH(僅當在其他地方找不到同名二進位檔案時才選擇PATH

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

答案3

只是為了給出更新的答案:

是的,這在當今絕對是可能的。
依賴地獄已經成為過去,除非發行版也是如此。 :)

Arch 並沒有削減它。您需要一個基於來源的發行版。由於依賴關係將被硬編碼(對於硬編碼的某些定義),並且兩個安裝都將指向相同的庫等

Gentoo 長期以來一直有一個名為「slotting」的功能,這使得整件事情變得微不足道。一個套件的某個版本的依賴關係可以指定為另一個套件的某個「槽」。插槽是不與任何其他插槽衝突的一系列版本。 (對於我見過的大多數包,任何版本都可以是它自己的插槽。特別是對於庫。但有時一個包無法處理它,因為它本身依賴於只有一個的東西。或者因為它需要一些從套件管理器工作[例如在安裝時修改已安裝的設定檔])

但我確信任何其他完整原始碼發行版都會有類似的東西。

否則,解決方法始終是,設定與維護者建立發行版包相同的建置系統,以新名稱克隆所需的套件,並在其中更改建置過程以指向不同版本的依賴項,然後將其建置到新的非來源套件中,就像您的發行版的套件維護者所做的那樣。 (坦白說,我發現 Gentoo 更容易安裝。:)

相關內容