天天看點

源碼安裝軟體

1、 前言

在進行安裝軟體的時候,一般是使用yum進行安裝,但是在使用yum進行安裝的時候,可能會造成軟體的版本低,進而需要手動進行編譯安裝軟體;還有一種情況就是需要指定額外的參數進行編譯安裝,來開啟軟體的不同功能,如果是使用二進制進行安裝,那麼有些功能無法使用,進而在這介紹使用軟體安裝的三步驟。

在進行了重新安裝了一些依賴包的時候,軟體需要重新進行編譯安裝。(依賴關系的存在)

2、 編譯安裝基本步驟

基本步驟如下所示:

[root@rsyncserverinstall]# cd httpd-2.2.31

[[email protected]]# ./configure --help(選項--help檢視可以使用的參數,進而標明功能參數進行編譯)

[[email protected]]# ./configure --prefix=/usr/local/apache/(進行編譯,使用--prefix指定安裝的路徑)

[[email protected]]# make && make install(安裝)

[[email protected]]# echo $?(可以用來檢查執行結果,0表示正常,1-255表示安裝錯誤)

在進行編譯安裝的時候,最常出現的問題就是在進行configure的時候出現錯誤,主要是依賴關系的問題,這個時候就需要安裝其他的一些包進行支援,在檢視依賴包的時候,可以檢視源檔案的目錄中如下檔案:

[[email protected]]# ls -l README INSTALL(幫助檔案,主要用來檢視依賴關系)

-rw-r--r-- 11000 1000 4372 Jan 18  2012 INSTALL

-rw-r--r-- 11000 1000 5954 Jan 10  2007 README

在一般的軟體下載下傳之後,均有此兩檔案。

3、 安裝結束後的步驟

安裝後,軟體一般會存在如下的目錄:

[root@rsyncserverapache]# ls -dl {bin,lib,include,man}

drwxr-xr-x 2root root 4096 Oct 13 00:44 bin

drwxr-xr-x 2root root 4096 Oct 13 00:44 include

drwxr-xr-x 3root root 4096 Oct 13 00:44 lib

drwxr-xr-x 4root root 4096 Oct 13 00:44 man

在其中,bin表示可執行二進制檔案,需要将路徑加入的環境變量中,man主要是man手冊的檢視,include表示在進行二次開發的時候,用到的函數與方法,lib表示程式在運作的時候,需要加載的類庫檔案。

3.1 修改環境變量

在安裝結束後,在使用剛安裝的軟體的時候,指令無法找到,進而需要修改環境變量,如下:

[root@rsyncserver~]# httpd(環境變量沒有設定搜尋路徑,進而指令無法找到)

-bash: httpd:command not found         

[root@rsyncserver~]# echo "export PATH=$PATH:/usr/local/apache/bin" >>/etc/profile(環境變量中添加剛安裝的apache的bin檔案搜尋路徑)

[root@rsyncserver~]# tail -1 /etc/profile(檢視添加的内容)

exportPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache/bin

[root@rsyncserver~]# . /etc/profile(讓剛加入的環境變量生效)

[root@rsyncserver~]# httpd (檢查指令,指令可以使用)

httpd: Could notreliably determine the server's fully qualified domain name, using 127.0.0.1for ServerName

3.2 運作時加載類庫

在程式運作的時候,需要加載相關的庫檔案,也就是在安裝目錄下的lib目錄中的檔案,有的時候,如果缺少了搜尋路徑,那麼會出現錯誤,shared object “XX.so”not found,也就是在運作時缺少類庫檔案。

在主要的類庫搜尋路徑中,使用的指令為ldconfig,如下:

      /sbin/ldconfig - configure dynamic linker run-timebindings(運作時的動态綁定)

檢視類庫的搜尋路徑如下:

[root@rsyncserverapache]# ldconfig -v|grep -v "^[[:space:]]"

/usr/lib64/atlas:

/usr/lib64/mysql:

/lib:

/lib64:

/usr/lib:

/usr/lib64:

/lib64/tls:(hwcap: 0x8000000000000000)

/usr/lib64/sse2:(hwcap: 0x0000000004000000)

/usr/lib64/tls:(hwcap: 0x8000000000000000)

[[email protected]]# pwd(搜尋類庫的主要配置目錄)

/etc/ld.so.conf.d

[[email protected]]# ls -l apache.conf (建立apache的類庫搜尋配置檔案,配置檔案必須用conf結尾,否則不生效)

-rw-r--r-- 1root root 22 Oct 13 01:35 apache.conf

[[email protected]]# cat apache.conf (直接加入apache的類庫路徑即可,在路徑中,必須是so檔案的父目錄)

/usr/local/apache/lib

[[email protected]]# ldconfig -v |grep -v "^[[:space:]]"(檢查類庫搜尋路徑)

/usr/local/apache/lib:

[[email protected]]# ldconfig -v(檢視搜尋詳細路徑)

       libexpat.so.0 -> libexpat.so.0.5.0

       libapr-1.so.0 -> libapr-1.so.0.5.2

       libaprutil-1.so.0 ->libaprutil-1.so.0.5.

3.3 二次開發支援

在程式安裝完成之後,會有一個include目錄,主要是用來做二次開發的一些方法和函數。

在寫程式的時候,預設的搜尋路徑為/usr/include目錄下,如下:

[root@rsyncserver~]# ls -l /usr/include/()

total 1536

-rw-r--r--.  1 root root  7502 Nov  3  2011 aio.h

-rw-r--r--.  1 root root  2115 Nov  3  2011 aliases.h

-rw-r--r--.  1 root root  1289 Nov  3  2011 alloca.h

-rw-r--r--.  1 root root  4351 Nov  3  2011 a.out.h

-rw-r--r--.  1 root root 26521 Nov  3  2011 argp.h

-rw-r--r--.  1 root root  7308 Nov  3  2011 argz.h

[root@rsyncserverinclude]# ls -l /usr/local/apache/include/ |wc -l(會自動将檔案進行拷貝到程式庫中)

119

[root@rsyncserverinclude]# ls -l /usr/include/apache/|wc -l(會自動将檔案進行拷貝到程式庫中)

[root@rsyncserver~]# ln -s /usr/local/apache/include/ /usr/include/apache/ (在沒有的時候才能建立,否則會造成死循環)

[root@rsyncserver apache]# ls -l(死循環指向)

total 0

lrwxrwxrwx 1 root root 26 Oct 13 03:12 include ->/usr/local/apache/include/

[root@rsyncserver apache]# cd include/

[root@rsyncserver include]# ls

include

[root@rsyncserver include]# cd include/

[root@rsyncserver include]# ls -l

[root@rsyncserver~]# ls -l /usr/include/apache (必須連結失效才能删除連結檔案)

lrwxrwxrwx 1root root 26 Oct 13 02:56 /usr/include/apache -> /usr/local/apache/include/

[root@rsyncserver~]# rm -rf /usr/include/apache

[root@rsyncserver~]# ls -l /usr/include/apache

ls: cannotaccess /usr/include/apache: No such file or directory

删除連結目錄的時候,不是删除目錄,而是删除目錄下的所有檔案,連結依舊存在不會被删除,連結依然有效。

[root@rsyncserver~]# ln -s /usr/local/apache/include/ /usr/include/apache(建立目錄連結無需添加最後的/,否則會造成死循環,如果連結存在,會報錯)

ln: creatingsymbolic link `/usr/include/apache/include':File exists

3.4 man手冊

在使用剛安裝的軟體的時候,如果具有幫助手冊,那麼可能會找不到,進而需要添加man手冊資訊,如下所示:

[root@rsyncserverman1]# man dbmmanage(不能找到man手冊)

No manual entryfor dbmmanage

[root@rsyncserverman1]# vim /etc/man.config (修改man配置檔案)

[root@rsyncserverman1]# man dbmmanage