tarball方式編譯安裝及升級-make、patch
1、概念:
原碼進行編譯成二進制機構可執行程序,先要make與偵測程序一般是config一起生成編譯連接文件makefile,再由makefile編譯成可執行文件。
Tarball其實是原碼的tar打包與壓縮的包。
rpm是指linux商家幫你編譯好了,省去了長時間編譯而發布的包,但不同類型的系統就不能用。 www.2cto.com
函數庫即提供外部調用的,有點像dll。
2、gcc,是C語句的編譯器,一般是先編譯成目標文件,再連結成一個可執行文件。
3、make可以方便進行編譯,因為它把要編譯的命令及順序都寫到makefile這個文件裡了。
www.2cto.com
4、makefile文件放在程序的原碼裡的一級目錄,它的語法:
[root@www ~]# vi makefile
LIBS = -lm #這是變量
OBJS = main.o haha.o sin_value.o cos_value.o
CFLAGS = -Wall
main: ${OBJS}
gcc -o $@ ${OBJS} ${LIBS} <==那個 $@ 就是 main !$@ 代表目前的標的(target)
clean:
rm -f main ${OBJS}
#標的:有相關性原代碼文件
#第二行開頭要tab一下,這一行就是執行的命令,如腳本命令
5、具體目錄規則如下:
a、最好將 tarball 的原始資料解壓縮到 /usr/local/src 當中;
b、安裝時,最好安裝到 /usr/local 這個預設路徑下;
c、考慮未來的反安裝步驟,最好可以將每個軟體單獨的安裝在 /usr/local 底下;
d、為安裝到單獨目錄的軟體之 man page 加入 man path 搜尋:如果你安裝的軟體放置到 /usr/local/software/ ,那麼 man page 搜尋的設定中,可能就得要在 /etc/man.config 內的 40~50 行左右處,寫入如下的一行:
MANPATH /usr/local/software/man
這樣才可以使用 man 來查詢該軟體的線上文件啰!
6、偵測配置程序./configure --help ,可以查看支持參數及說明
一般有的參數是安裝到哪個目錄的參數:--prefix=/path
7、一般的步驟(以ntp為例):
cd /usr/local/src
tar -zxvf /root/ntp-4.2.4p7.tar.gz
cd ntp-4.2.4p7/
cat INSTALL
./configure --help | more
./configure --prefix=/usr/local/ntp
make clean; make
make check #此步如果不檢測也行
make install
8、原碼進行更新升級:
a、cat ~/main_0.1_to_0.2.patch #查看第一行它的相對目錄是什麼樣的
b、用patch -p數字 < patch_file進行更新,這裡的數字表示舊的目錄要去掉幾個/,如果不去則用patch -p1 < patch_file,要根據a步來判斷。如main-0.1/xxx 與 main-0.2/xxx 進行對比,而你現在就在main-0.1目錄下,那麼可以這樣patch -p1 < ../main_0.1_to_0.2.patch
c、一般會發布更新包,以.patch為後綴,且會標明從什麼版本到什麼版本,不能跨多版本升級的,要順序升級,如跨了多個更新包,則要把之前的更新包一個個更新
d、make clean; make
make check #此步如果不檢測也行
make install
如果報錯,可能就需要執行一下./configure,patch只是更新了有變化的原代碼而已。
e、如果 patch 錯誤呢?我們的 patch 是可以還原的啊!透過patch -R < ../main_0.1_to_0.2.patch 即可。(main_0.1_to_0.2.patch只是個例子)