10.3 源碼編譯安裝軟件包
在Linux下安裝源碼包是最常用的。在日常的管理工作中,阿銘的大部分軟件都是通過源碼安裝的。安裝源碼包,需要我們把源代碼編譯成可執(zhí)行的二進制文件。
如果你能讀懂這些源代碼,就可以修改這些源代碼的自定義功能,然后再按你的需求編譯。使用源碼包除了可以自定義修改源代碼外,還可以定制相關(guān)的功能,因為源碼包在編譯時可以附加額外的選項。
源碼包的編譯用到了Linux系統(tǒng)里的編譯器。常見的源碼包一般都是用C語言開發(fā)的,因為C語言是Linux上最標(biāo)準(zhǔn)的程序語言。
Linux上的C語言編譯器稱為gcc,利用它可以把C語言編譯成可執(zhí)行的二進制文件。所以,如果你的機器上沒有安裝gcc,就無法編譯源碼,你可以使用命令yuminstall -y gcc來完成安裝。
安裝源碼包通常需要以下3個步驟。
(1) ./configure
這一步可以定制功能,加上相應(yīng)的選項即可,具體有什么選項可以通過命令./configure --help來查看。這一步會自動檢測你的Linux系統(tǒng)與相關(guān)的套件是否有編譯該源碼包時所需要的庫,因為一旦缺少某個庫,就不能完成編譯。只有檢測通過后,才會生成Makefile文件。
(2)make
使用這個命令,會根據(jù)Makefile文件中預(yù)設(shè)的參數(shù)進行編譯,這一步其實就是gcc在工作了。
(3) make install
這一步是安裝步驟,用于創(chuàng)建相關(guān)軟件的存放目錄和配置文件。
對于以上這3個步驟,并不是所有的源碼包軟件都一樣,也就是說,源碼包的安裝并沒有標(biāo)準(zhǔn)的安裝步驟。這就需要你拿到源碼包解壓后,進入目錄,找到相關(guān)的幫助文檔(通常,會以INSTALL或者README為文件名)。下面阿銘會編譯安裝一個源碼包來幫助你更深刻地理解安裝源碼包的過程。
10.3.1下載源碼包
下載源碼包一定要去官方站點,因為你從其他網(wǎng)站下載的源碼包很有可能是被修改過的。我們先把Nginx的源碼包下載到/usr/local/src/目錄下,如下所示:
#cd/usr/local/src/ # wget http://nginx.org/download/nginx-1.22.0.tar.gz
阿銘提供的下載地址為Nginx下載地址,如果該地址已失效,請到其官網(wǎng)獲取最新的Nginx下載地址。在下載之前,阿銘先進入/usr/local/src目錄,這是因為阿銘習(xí)慣把源碼包都放到這個目錄下。這樣做的好處是方便自己和其他管理員維護。所以,阿銘建議你將下載的源碼包都統(tǒng)一放到這個目錄下。
10.3.2解壓源碼包
解壓.tar.gz格式的壓縮包,這在前面已經(jīng)介紹過,示例命令如下:
#tar-zxvfnginx-1.22.0.tar.gz
10.3.3配置相關(guān)的選項并生成Makefile
首先,進入解壓后的源碼目錄,在配置之前可以查看可用的配置參數(shù),如下所示:
#cdnginx-1.22.0 #./configure--help|less --help print this message --prefix=PATH set installation prefix --sbin-path=PATH set nginx binary pathname --modules-path=PATH set modules path --conf-path=PATH set nginx.conf pathname --error-log-path=PATH set error log pathname --pid-path=PATH set nginx.pid pathname --lock-path=PATH set nginx.lock pathname --user=USER set non-privileged user for worker processes --group=GROUP set non-privileged group for workerprocesses
限于篇幅,后面的內(nèi)容阿銘省略了。常用的配置選項有--prefix=PREFIX,它的意思是定義軟件包的安裝路徑。如果你想了解其他配置選項,也可以使用命令./configure --help查看詳情。這里阿銘把Nginx安裝在/usr/local/nginx目錄下,該選項的配置為--prefix=/usr/local/nginx。配置過程如下所示:
#./configure--prefix=/usr/local/nginx checking for OS + Linux 4.18.0-348.el8.0.2.x86_64 x86_64 checking for C compiler ... found + using GNU C compiler + gcc version: 8.5.0 20210514 (Red Hat 8.5.0-10) (GCC) checking for gcc -pipe switch ... found checking for -Wl,-E switch ... found checking for gcc builtin atomic operations ... found checking for C99 variadic macros ... found checking for gcc variadic macros ... found checking for gcc builtin 64 bit byteswap ... found checking for unistd.h ... found checking for inttypes.h ... found checking for limits.h ... found checking for sys/filio.h ... not found checking for sys/param.h ... found checking for sys/mount.h ... found checking for sys/statvfs.h ... found checking for crypt.h ... found checking for Linux specific features checking for epoll ... found checking for EPOLLRDHUP ... found checking for EPOLLEXCLUSIVE ... found checking for eventfd() ... found checking for O_PATH ... found checking for sendfile() ... found checkingforsendfile64()...found 中間省略 ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library staticallyfromthesourcewithnginxbyusing--with-pcre=option.
不幸的是配置剛開始就報錯了,因為Nginx需要zlib庫,該系統(tǒng)并未安裝。安裝命令如下:
#yuminstall-ypcre-devel
安裝后再繼續(xù)上面的步驟,如下所示:
#./configure--prefix=/usr/local/nginx//有諸多信息輸入,阿銘不再提供
此時又有新的錯誤:
./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using --without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib=option.
根據(jù)它提示,很容易解決此問題,安裝zlib即可:
# yum install -y zlib-devel
然后繼續(xù)./configure那一步,最終通過,驗證這一步是否成功的命令是:
#echo$? 0
這里返回值是0,說明執(zhí)行成功,否則就沒有成功。此時就成功生成Makefile了。查看結(jié)果如下:
# ls -l Makefile -rw-r--r-- 1 root root 69 11月 9 21:43 Makefile
10.3.4進行編譯
生成Makefile后,需要進行編譯,如下所示:
#make -bash: make: 未找到命令
說明:這是因為我們的系統(tǒng)還未安裝make命令,安裝即可
#yuminstall–ymake #make make-fobjs/Makefile make[1]:進入目錄“/usr/local/src/nginx-1.22.0” cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs -o objs/src/core/nginx.o src/core/nginx.c cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs
編譯時會出現(xiàn)類似這樣雜亂的信息。限于篇幅,阿銘只列出一小部分內(nèi)容。編譯的時間會比較長,這是因為CPU高速計算時的使用率很高。編譯后再使用命令echo$?驗證是否編譯成功,如下所示:
#echo$? 0
如果驗證結(jié)果是0,就可以執(zhí)行最后一步了。
10.3.5安裝
安裝源碼包的命令為make install,如下所示:
#makeinstall make-fobjs/Makefileinstall make[1]:進入目錄“/usr/local/src/nginx-1.23.0” test-d'/usr/local/nginx'||mkdir-p'/usr/local/nginx' test -d'/usr/local/nginx/sbin' || mkdir -p '/usr/local/nginx/sbin' test!-f'/usr/local/nginx/sbin/nginx' || mv '/usr/local/nginx/sbin/nginx' '/usr/local/nginx/sbin/nginx.old' cpobjs/nginx'/usr/local/nginx/sbin/nginx' test -d'/usr/local/nginx/conf' || mkdir -p '/usr/local/nginx/conf' cpconf/koi-win'/usr/local/nginx/conf' cpconf/koi-utf'/usr/local/nginx/conf' cpconf/win-utf'/usr/local/nginx/conf'
當(dāng)然,你也可以使用命令echo $?驗證是否已正確安裝。執(zhí)行完這一步,則會在/usr/local/nginx目錄下增加很多目錄。使用ls命令查看該目錄,如下所示:
#ls/usr/local/nginx/ conf html logs sbin
到此,Nginx源碼的安裝就完成了。其實在日常的源碼安裝過程中,遇到錯誤不能完成安裝的情況很多,這些錯誤通常都是因為缺少某一個庫文件。
這需要你仔細(xì)琢磨報錯信息或者查看當(dāng)前目錄下的config.log以得到相關(guān)的信息。
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
593瀏覽量
27397 -
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136824 -
gcc編譯器
+關(guān)注
關(guān)注
0文章
78瀏覽量
3385
原文標(biāo)題:第10章 在Linux下如何安裝和卸載軟件——源碼編譯
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論