標籤:源碼編譯
任何管理工具都有自己最適用的情境,像軟體包的管理,在CentOS系列中,有了RPM包管理器,但是它自動不能解決包的管理器,所以就出現了yum管理器,但是,他卻不能符合我們實際要求(定製功能),所以就出現了源碼管理。也許,有些時候原始碼也不能滿足我們的要求,我就可能要自己基於源碼進行二次開發。這裡,我們講解源碼管理。
一、源碼安裝步驟
源碼編譯的前提,得有像gcc,make等編譯工具。一般情況下在“Development tools”裡面都提供了這些編譯工具。
源碼安裝步驟其實沒有特定的步驟,原因是不同的源碼製作者的製作方式的不同導致了我們使用的安裝步驟和選型都有所差異。但一般情況下,製作者會遵循一些特定的規則。所以,一般情況下,源碼編譯是以下幾步。
以安裝ngnix服務為例:
# tar xf 軟體包的壓縮檔
[[email protected] ~]# tar xf nginx-1.4.7.tar.gz
# cd 解壓後的軟體目錄
[[email protected] ~]# cd nginx-1.4.7[[email protected] nginx-1.4.7]# pwd/root/nginx-1.4.7
# ./configure 還需通過許多選項指定編譯特性
[[email protected] nginx-1.4.7]# ./configure --prefix=/usr/local/nginxchecking for OS + Linux 2.6.32-358.el6.x86_64 x86_64checking for C compiler ... found + using GNU C compiler + gcc version: 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) checking for gcc -pipe switch ... foundchecking for gcc builtin atomic operations ... found##########中間省去好多checking############################checking for zlib library ... foundcreating objs/MakefileConfiguration summary + using system PCRE library + OpenSSL library is not used + using builtin md5 code + sha1 library is not found + using system zlib library # 如果配置正確,此時會顯示個檔案的路徑 nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"
此時會在目前的目錄中產生一個Makefile的檔案,裡面內容如下:
# 裡面定義了執行不同動作所執行的語句,每個軟體的形式可能會各有不同default:buildclean:rm -rf Makefile objsbuild:$(MAKE) -f objs/Makefile$(MAKE) -f objs/Makefile manpageinstall:$(MAKE) -f objs/Makefile installupgrade:/usr/local/nginx/sbin/nginx -tkill -USR2 `cat /usr/local/nginx/logs/nginx.pid`sleep 1test -f /usr/local/nginx/logs/nginx.pid.oldbinkill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
# make
# 執行編譯操作,有過Linux C編程經驗的來說,此步驟是利用gcc產生連結檔案
# make install
# 此步驟是真正的安裝操作,其實就是複製(或建立)對應的檔案到指定路徑下。
執行這2步,軟體就算安裝完成。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/3F/8B/wKiom1PKok2SEn60AADpUZw1XHU675.jpg" title="121221.jpg" alt="wKiom1PKok2SEn60AADpUZw1XHU675.jpg" />
./configure指令碼的使用:
1、擷取協助
./configure --help
2、較通用的一些選項
安裝路徑相關:
--prefix=/path/to/somewhere: 指定安裝路徑
--sysconfdir=/path/to/somewhere: 指定設定檔安裝路徑
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/3F/8B/wKioL1PKn1DDyOuSAAIMBUBB9m0481.jpg" title="ww.jpg" alt="wKioL1PKn1DDyOuSAAIMBUBB9m0481.jpg" />
指定啟用/禁用的特性
--enable-FEATURE: 例如--enable-fpm
--disable-FEATURE: 例如--disable-socket
指定所依賴的功能、程式或檔案
--with-FUNCTION[=/path/to/somewhere]
--without-FUNCTION
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/3F/8B/wKiom1PKnsPAj3XpAAO3sUSFc0s960.jpg" title="qqq.jpg" alt="wKiom1PKnsPAj3XpAAO3sUSFc0s960.jpg" />
二、安裝後的配置
1、如果只是程式的的運行,不做為其他軟體開發的依賴環境
1)我們可以再全域下使用軟體的相關功能
當然實現這樣的辦法有多種,例如:將這些命令作為連結檔案,連結至PATH變數中的某一路徑;或者將這些命令拷貝到PATH變數中的某一路徑;或者修改環境變數的值,將命令的路徑添加進去。
我這裡示範的方法是:
在 /etc/profile.d/下建一個於軟體名相同的指令碼,例如:nginx.sh。添加如下一行內容
export PATH=$PATH:/path/to/somewhere # 例如:export PATH=$PATH:/usr/local/nginx/sbin/# 完成這步驟後,重新登入就可以正常使用
2)匯出手冊頁:
編輯/etc/man.config設定檔,添加一項MANPATH,路徑為新安裝的程式的man目錄;
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/3F/8B/wKiom1PKpUDAY04LAAE7FpEU0O4012.jpg" title="11111.jpg" alt="wKiom1PKpUDAY04LAAE7FpEU0O4012.jpg" />
當然,我們也可以通過man -M 指定協助文檔路徑查看。
3)如果我們想使用像其他RPM包軟體的啟動方式,此時我們就要自己寫相關格式的指令碼放到/etc/init.d目錄下統一管理。
2、如果作為程式開發:即其它應用程式依賴此程式的開發環境,或針對此程式做二次開發
1)匯出庫檔案
第一步:指定讓系統搜尋定製的路徑
編輯/etc/ld.so.conf.d/APPNAME.conf
# 例如,在/etc/ld.so.conf.d/目錄下建一個nginx.conf(只是舉例,ngnix不一定有庫檔案)# 一行一個庫檔案路徑/usr/local/ngnix/lib
第二步:觸發系統重新搜尋所有的庫檔案並產生緩衝,因為系統在啟動時已經通過 /etc/ld.so.cache 這個檔案快取了庫檔案
# ldconfig
-v 顯示過程
2)匯出標頭檔
匯出方式:建立連結進行
# 假設: ngnix的標頭檔是/usr/local/nginx/includeln -sv /usr/local/nginx/include /usr/include/nginx
總結:本文主要介紹了源碼如何安裝軟體包。
本文出自 “逆水寒” 部落格,請務必保留此出處http://guoting.blog.51cto.com/8886857/1440409
Linux軟體包的管理--源碼管理