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