從原始碼建構的二進製文件可以安裝在第二台機器上嗎?
我不確定這是否是問這個問題的最佳地點 - 如果有更好的地方,請指出我正確的方向。
假設我有兩台機器——A 是開發機器,B 是生產機器。A 擁有像編譯器這樣的軟體,可用於從原始碼建構軟體,而 B 沒有。
在 A 上,我可以按照通常的常式輕鬆地從原始碼建構軟體:
./configure make
然後,我可以通過執行在 A 上安裝建構的軟體
sudo make install
。但是,我真正想做的是安裝我剛剛在 B 上建構的軟體。最好的方法是什麼?我考慮過幾個選項:
- 使用包管理器在 B 上安裝軟體:這對我來說不是一個選項,因為包管理器中可用的軟體非常過時。
- 在 B 上安裝編譯器和其他建構工具:由於各種限制,我寧願不在生產機器上安裝建構工具。
- 手動將二進製文件從 A 複製到 B:這很容易出錯,我想確保在生產機器上以一致的方式安裝二進製文件。
- 僅
make
在 B 上安裝,傳輸源目錄,然後sudo make install
在 B 上執行:這是迄今為止我找到的最佳解決方案,但由於某種原因(可能是時鐘偏移),make
將嘗試重新建構應該已經存在的軟體建構,由於 B 上沒有安裝建構工具而失敗。由於我的機器也恰好具有糟糕的 I/O 速度,因此傳輸源目錄需要很長時間。如果有一種方法可以製作某種包含已建構二進製文件的包,該包可以傳輸和執行以安裝二進製文件和配置文件,那將是非常好的。有沒有這樣的工具?
使用你到目前為止所擁有的,如果makefile是用GNU autotools生成的,我會設置目標位置或安裝路徑
./configure --prefix=/somewhere/else/than/the/usual/usr/local
然後執行
make && make install
最後將文件從前綴文件夾複製到
usr/
另一台機器的文件夾中。這是假設兩台機器具有相同的架構,如果不是,則使用相應的交叉工具鏈。
最乾淨的方法可能是使用作業系統使用的打包工具為應用程序創建一個包,然後像安裝其他任何東西一樣安裝它。如何做到這一點因包管理器和系統而異),並且有一定的學習曲線。
/opt/packagename
如果源包支持在某個子樹(例如或/usr/local/packagename
)中安裝軟體,手動安裝可能會更容易一些。在一台機器上編譯並安裝,然後將該子樹複製到另一台機器上的相同位置。該目錄應包含所有相關文件,並且僅包含它們。如果您需要更改
/etc
,則必須手動進行。此外,要實際訪問二進製文件,您必須將它們符號連結到路徑中的某個目錄,或者將包bin
目錄添加到路徑中。大多數使用autoconf
/的包automake
都可以將--prefix
參數傳遞給./configure
腳本以設置安裝路徑。無論如何,您需要找出您編譯的應用程序需要哪些庫等,並確保兩台機器上都有兼容的版本。