1. 程式人生 > >Linux中原始碼安裝構建軟體

Linux中原始碼安裝構建軟體

前言:轉載自某知乎

得到原始檔

wget + url #得到壓縮檔案
unzip or tar 解壓壓縮檔案即可
git clone + url #得到原始檔

構建系統

構建系統就是我們常說的“編譯原始碼”,其實,編譯只是從原始碼中生成一個可以使用的軟體的其中一個階段。
構建系統是一套工具,用於自動處置不同的任務,以便可以僅通過幾個命令就能構建整個軟體。

寫出和調優一個構建系統是一個非常複雜的任務。但是,作為“終端使用者”來說,GNU風格的構建系統使用兩個工具讓他們免於此難:configuremake

configure檔案是個專案專用的指令碼,它將檢查系統的配置和可用的功能,以確保該專案可以被構建,並最終吻合當前平臺的特性。

典型的configure任務的重要部分是去構建Makefile。這個檔案包含了有效構建專案所需的指令。

另一方面,make工具是一個可用於任何類Unix 系統的POSIX工具。它將讀取專案專用的Makefile 然後執行所需的操作去構建和安裝你的程式

檔案系統層次化標準(FHS)

大部分典型的Linux發行版的檔案系統層次結構都遵從檔案系統層次標準(FHS)

這個標準說明了你的系統各種目錄的用途,比如,/usr , /tmp , /var 等等。

當使用GNU自動化工具和大多數其他的構建系統時,它會把新軟體預設安裝在你的系統的/usr/local 目錄中。這是根據FHS中“/usr/local”層級是為系統管理員本地安裝軟體時使用的,它在系統更新覆蓋時是安全的。它也可以存放在一組主機中共享,但是又沒有放到/usr中的程式和資料,因此,它是一個非常好的選擇。

/usr/local層級以某種方式複製了根目錄,你可以在/usr/local/bin這裡找到可執行程式,在/usr/local/lib中找到庫,在/usr/local/share中找到架構無關的檔案。

使用 /usr/local 樹作為你定製安裝的軟體位置的唯一問題是,你的軟體的檔案將在這裡混雜在一起。尤其是你安裝了多個軟體之後,將很難去準確地跟蹤 /usr/local/bin 和 /usr/local/lib 中的哪個檔案到底屬於哪個軟體。它雖然不會導致系統的問題。畢竟,/usr/bin 也是一樣混亂的。但是,有一天你想去解除安裝一個手工安裝的軟體時它會將成為一個問題。

當然我們自定義一個空目錄最好比如build,然後將自己定製的軟體放到其子目錄下 ,然後軟體也將依次生成build/bin,build/include,build/lib,build/share。

編譯和安裝軟體

/opt 是為安裝附加的應用程式軟體包而保留的。
包安裝在 /opt 下的軟體包必須將它的靜態檔案放在單獨的 /opt/ 或者 /opt/ 目錄中,此處 是所說的那個軟體名的名字,而 處是提供者的 LANANA 註冊名字。

我們將解壓完成之後執行make命令,make 會在當前的目錄下搜尋 Makefile (or makefile) 這個文字檔案,執行對應的操作。

最終,編譯結束後,你可以執行sudo make install 命令去安裝你的軟體。
然後測試它即可。

讓shell找到我們自己安裝的軟體

首先shell定位可執行檔案是通過在環境變數PATH中指定的目錄裡面查詢的。

在初始系統中,shell 將首先在 /usr/local/bin 中查詢可執行程式;如果沒有找到,然後進入 /usr/bin 中查詢;如果沒有找到,然後進入 /bin查詢;如果沒有找到,然後進入 /usr/local/games 查詢;如果沒有找到,然後進入 /usr/games 查詢;如果沒有找到,那麼,shell 將報告一個錯誤,“command not found”。

所以我們應當將可執行程式的路徑放在PATH中。

或者是在bin目錄下新增一個符號連結:
sudo ln -sT /opt/node/bin/node /usr/local/bin/node
which -a node || echo not found /suar/local/bin/node

解除安裝軟體

因為我們定製編譯的軟體全部在 /opt/build 目錄中,解除安裝它不需要做太多的工作,僅使用 rm 命令去刪除那個目錄即可