10.3 源碼編譯安裝軟件包
在Linux下安裝源碼包是最常用的。在日常的管理工作中,阿銘的大部分軟件都是通過源碼安裝的。安裝源碼包,需要我們把源代碼編譯成可執(zhí)行的二進(jìn)制文件。
如果你能讀懂這些源代碼,就可以修改這些源代碼的自定義功能,然后再按你的需求編譯。使用源碼包除了可以自定義修改源代碼外,還可以定制相關(guān)的功能,因?yàn)樵创a包在編譯時(shí)可以附加額外的選項(xiàng)。
源碼包的編譯用到了Linux系統(tǒng)里的編譯器。常見的源碼包一般都是用C語(yǔ)言開發(fā)的,因?yàn)镃語(yǔ)言是Linux上最標(biāo)準(zhǔn)的程序語(yǔ)言。
Linux上的C語(yǔ)言編譯器稱為gcc,利用它可以把C語(yǔ)言編譯成可執(zhí)行的二進(jìn)制文件。所以,如果你的機(jī)器上沒有安裝gcc,就無法編譯源碼,你可以使用命令yuminstall -y gcc來完成安裝。
安裝源碼包通常需要以下3個(gè)步驟。
(1) ./configure
這一步可以定制功能,加上相應(yīng)的選項(xiàng)即可,具體有什么選項(xiàng)可以通過命令./configure --help來查看。這一步會(huì)自動(dòng)檢測(cè)你的Linux系統(tǒng)與相關(guān)的套件是否有編譯該源碼包時(shí)所需要的庫(kù),因?yàn)橐坏┤鄙倌硞€(gè)庫(kù),就不能完成編譯。只有檢測(cè)通過后,才會(huì)生成Makefile文件。
(2)make
使用這個(gè)命令,會(huì)根據(jù)Makefile文件中預(yù)設(shè)的參數(shù)進(jìn)行編譯,這一步其實(shí)就是gcc在工作了。
(3) make install
這一步是安裝步驟,用于創(chuàng)建相關(guān)軟件的存放目錄和配置文件。
對(duì)于以上這3個(gè)步驟,并不是所有的源碼包軟件都一樣,也就是說,源碼包的安裝并沒有標(biāo)準(zhǔn)的安裝步驟。這就需要你拿到源碼包解壓后,進(jìn)入目錄,找到相關(guān)的幫助文檔(通常,會(huì)以INSTALL或者README為文件名)。下面阿銘會(huì)編譯安裝一個(gè)源碼包來幫助你更深刻地理解安裝源碼包的過程。
10.3.1下載源碼包
下載源碼包一定要去官方站點(diǎn),因?yàn)槟銖钠渌W(wǎng)站下載的源碼包很有可能是被修改過的。我們先把Nginx的源碼包下載到/usr/local/src/目錄下,如下所示:
#cd/usr/local/src/ # wget http://nginx.org/download/nginx-1.22.0.tar.gz
阿銘提供的下載地址為Nginx下載地址,如果該地址已失效,請(qǐng)到其官網(wǎng)獲取最新的Nginx下載地址。在下載之前,阿銘先進(jìn)入/usr/local/src目錄,這是因?yàn)榘懥?xí)慣把源碼包都放到這個(gè)目錄下。這樣做的好處是方便自己和其他管理員維護(hù)。所以,阿銘建議你將下載的源碼包都統(tǒng)一放到這個(gè)目錄下。
10.3.2解壓源碼包
解壓.tar.gz格式的壓縮包,這在前面已經(jīng)介紹過,示例命令如下:
#tar-zxvfnginx-1.22.0.tar.gz
10.3.3配置相關(guān)的選項(xiàng)并生成Makefile
首先,進(jìn)入解壓后的源碼目錄,在配置之前可以查看可用的配置參數(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)容阿銘省略了。常用的配置選項(xiàng)有--prefix=PREFIX,它的意思是定義軟件包的安裝路徑。如果你想了解其他配置選項(xiàng),也可以使用命令./configure --help查看詳情。這里阿銘把Nginx安裝在/usr/local/nginx目錄下,該選項(xiàng)的配置為--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.
不幸的是配置剛開始就報(bào)錯(cuò)了,因?yàn)镹ginx需要zlib庫(kù),該系統(tǒng)并未安裝。安裝命令如下:
#yuminstall-ypcre-devel
安裝后再繼續(xù)上面的步驟,如下所示:
#./configure--prefix=/usr/local/nginx//有諸多信息輸入,阿銘不再提供
此時(shí)又有新的錯(cuò)誤:
./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那一步,最終通過,驗(yàn)證這一步是否成功的命令是:
#echo$? 0
這里返回值是0,說明執(zhí)行成功,否則就沒有成功。此時(shí)就成功生成Makefile了。查看結(jié)果如下:
# ls -l Makefile -rw-r--r-- 1 root root 69 11月 9 21:43 Makefile
10.3.4進(jìn)行編譯
生成Makefile后,需要進(jìn)行編譯,如下所示:
#make -bash: make: 未找到命令
說明:這是因?yàn)槲覀兊南到y(tǒng)還未安裝make命令,安裝即可
#yuminstall–ymake #make make-fobjs/Makefile make[1]:進(jìn)入目錄“/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
編譯時(shí)會(huì)出現(xiàn)類似這樣雜亂的信息。限于篇幅,阿銘只列出一小部分內(nèi)容。編譯的時(shí)間會(huì)比較長(zhǎng),這是因?yàn)?a href="http://hljzzgx.com/v/tag/132/" target="_blank">CPU高速計(jì)算時(shí)的使用率很高。編譯后再使用命令echo$?驗(yàn)證是否編譯成功,如下所示:
#echo$? 0
如果驗(yàn)證結(jié)果是0,就可以執(zhí)行最后一步了。
10.3.5安裝
安裝源碼包的命令為make install,如下所示:
#makeinstall make-fobjs/Makefileinstall make[1]:進(jìn)入目錄“/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 $?驗(yàn)證是否已正確安裝。執(zhí)行完這一步,則會(huì)在/usr/local/nginx目錄下增加很多目錄。使用ls命令查看該目錄,如下所示:
#ls/usr/local/nginx/ conf html logs sbin
到此,Nginx源碼的安裝就完成了。其實(shí)在日常的源碼安裝過程中,遇到錯(cuò)誤不能完成安裝的情況很多,這些錯(cuò)誤通常都是因?yàn)槿鄙倌骋粋€(gè)庫(kù)文件。
這需要你仔細(xì)琢磨報(bào)錯(cuò)信息或者查看當(dāng)前目錄下的config.log以得到相關(guān)的信息。
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
593瀏覽量
27392 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136683 -
gcc編譯器
+關(guān)注
關(guān)注
0文章
78瀏覽量
3378
原文標(biāo)題:第10章 在Linux下如何安裝和卸載軟件——源碼編譯
文章出處:【微信號(hào):aming_linux,微信公眾號(hào):阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論