Ubuntu下編譯安裝apache

只是想安裝apache并熟悉httpd的配置,使用apt安裝即可。
想要學習httpd的源碼,并調(diào)試,就需要編譯安裝了

每次編apache,都會遇到新的坑。編的多了回頭再看以前的記錄,只能感嘆,我真傻,真的

源碼編譯的坑

和apt倉庫安裝不同,你需要自帶許多工具,前言也說了,我們目的是學習源碼,我們要求比較多,還要調(diào)戲調(diào)試。

安裝httpd服務(wù)器之前,確保機器包含以下工具:

httpd
| -- APR
|    | -- autoconf
|    ` -- libtool
| -- APR-Util
| -- PCRE
| -- GCC
` -- Perl5[可選]

問題就出現(xiàn)在httpd的版本和其他工具的版本選擇上。

舉個剛遇到的例子,apr-1.6.5的安裝需要先執(zhí)行buildconf.sh腳本,該腳本會調(diào)用另一個校本檢測是否已經(jīng)安裝autoconf和libtool。它考慮了libtool的各種可能的名稱:$libtool=glibtool1 glibtool libtool libtool15 libtool14,但是沒有想到在我使用的ubuntu18.04上,使用sudo apt install libtool安裝的libtool叫做libtoolize。

綜上,可能遇到的坑:

  • 對工具版本的要求
  • 工具改名
  • 工具要求的工具不符合要求

遇到坑不要慌,查看檢測環(huán)境和安裝過程

探坑

參考編譯與安裝一章的Requirements小節(jié)。

  1. httpd-2.4.26+apr-1.5.2+apr-util-1.5.4,編譯可能會簡單點。
  2. httpd-2.4.29+apr-1.6.3+apr-util-1.6.1,需要額外安裝一些包。
  3. httpd-+apr-1.6.

1. 第二種版本

httpd-2.4.29+apr-1.6.3+apr-util-1.6.1,

1.1 APR和APR-Util

安裝APR和APR-Util,從http://apr.apache.org/上下載最新版本APR和APR-Util,解壓到
/root/work/httpd/srclib/apr/root/work/httpd/srclib/apr-util(我把httpd源代碼放在/root/work,這里需要根據(jù)你自己的放置進行修改),并且使用./configure --with-included-apr參數(shù)。

解壓后的apr文件夾若包含版本號,可用過mv重命名為apr。apr-util同理。

1.1.1 編譯apr

安裝在/usr/local/apr目錄下:

./configure --prefix=/usr/local/apr
make
make install

在執(zhí)行./configure的時候,報出的信息包括:

rm: cannot remove 'libtoolT': No such file or directory

解決辦法:
參考此文,采用第二種方法:打開 configure,把 $RM “$cfgfile” 那行刪除掉,重新再運行 ./configure --prefix=/usr/local/apr

(劃掉的辦法雖可行,但該博客沒有搞清楚問題的根本原因!)
分析:
config.status在生成新的文件之前,移除了libtoolT,因此$RM “$cfgfile”想要刪除掉一個不存在的文件,報出錯誤。
可以添加-f選項忽略這個錯誤。
詳細的討論參考configure reports "cannot remove `libtoolT': No such file or directory"
另外也可以看一下Error: cannot remove "libtoolT",很有意思的大神和小白的對話:)

解決:
思路就是忽略這個報錯信息,你可以執(zhí)行完./configure之后直接makemake install;可以找到$RM "$cfgfile"刪除該項,也可以將該項改為$RM -f "$cfgfile"

1.1.2 編譯apr-util

apr-util的編譯需要指定apr的安裝目錄--/usr/local/apr,默認安裝在/usr/local/apr-util下:

./configure --with-apr=/usr/local/apr
make
make install

1.1.2.1 expat.h文件的缺失

當然你在make時也許會遇到這樣的報錯:

/bin/bash /usr/local/apr/build-1/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H  -DLINUX -D_REENTRANT -D_GNU_SOURCE   -I/httpd_source_tree_root/srclib/apr-util/include -I/httpd_source_tree_root/srclib/apr-util/include/private  -I/usr/local/apr/include/apr-1    -o xml/apr_xml.lo -c xml/apr_xml.c && touch xml/apr_xml.lo
xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory
 #include <expat.h>
          ^~~~~~~~~
compilation terminated.

解決:
原因在于apr-util-1.6.1版本并沒有捆綁expat
參考https://segmentfault.com/q/1010000009848251使用apt安裝 expat的開發(fā)庫:apt-get install libexpat1-dev。

我在Ubuntu 18.04上安裝了libexpat1-dev開發(fā)庫之后再從新編譯成功了。但是沒記錯的話,有一次這樣并沒有用,而是通過編譯expat源碼解決的。
源碼編譯expat:
下載expat,解壓后進入:

cd libexpat-R_x_x_x/expat
./buildconf.sh
./configure --prefix=/usr/local/expat
make
make install

出現(xiàn)bin/sh: 1: autoreconf: not found的原因是沒有autoreconf包apt-get install autoreconf安裝之后就可以了。

若使用源碼編譯的expat,建議在下面編譯apache的時候添加--with-expat=/usr/local/expat參數(shù)。

1.2 PCRE

http://www.pcre.org下載源代碼,安裝在/usr/local/pcre目錄下:

./configure --prefix=/usr/local/pcre
make
make install

如果沒有安裝g++編譯環(huán)境,執(zhí)行apt-get install build-essential安裝。

1.3 APACHE

./configure --prefix=/usr/local/apache2  --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-expat=/usr/local/expat(該選項僅限源碼編譯安裝expat)
make
make install

編譯過程略有區(qū)別,若從git或svn上獲取的源代碼,需要執(zhí)行./buildconf腳本生成configure文件。我在這個過程以此安裝了python(Ubuntu 18.04默認安裝python3)和libtool(apt install libtool-bin)。

附:使用MD5值檢驗下載軟件的完整性和安全性

參考HowToMD5SUM

2 第三種版本

ubuntu18.04 + httpd + apr-1.6.5

2.1 編譯apr

下載地址:http://apr.apache.org/download.cgi
選擇下載的是apr-1.6.5.tar.gz

./buildconf  #檢測需要的依賴

根據(jù)據(jù)提示安裝相應(yīng)依賴。例如我被提醒缺少autoconf、libtool,這些都可以通過apt安裝:

sudo apt install autoconf
sudo apt install libtool

這里有一點我不確定自己處理的好不好,即使安裝了libtool,apr/build/buildcheck.sh腳本仍然檢測說libtool not found。我將libtool=\build/PrintPath glibtool1 glibtool libtool libtool15 libtool14`改為libtool=`build/PrintPath glibtool1 glibtool libtool libtool15 libtool14 libtoolize``之后編譯通過。這么改的原因我認為libtool在ubuntu18.04下叫l(wèi)ibtoolize

如果遇到下面的錯誤:

rm: cannot remove 'libtoolT': No such file or directory

參考1.1.1

2.2 編譯apr-util

選擇下載的是apr-util-1.6.1.tar.gz

附.1 介紹

TODO

附.2 檢測

使用下列命令獲取文件的md5值:

root@ubuntu18:~/work# ls
apr-1.6.3  apr-1.6.3.tar.gz  httpd
root@ubuntu18:~/work# md5sum apr-1.6.3.tar.gz 
57c6cc26a31fe420c546ad2234f22db4  apr-1.6.3.tar.gz

將獲取到的57c6cc26a31fe420c546ad2234f22db4與下載站點提供的值進行對比。
如圖,點擊MD5即可,

apr-md5.PNG

apr-md5-2.PNG

至于怎么對比這兩個值,這里推薦一個小方法,通過瀏覽器的頁面關(guān)鍵字搜索(control + F)將md5dum獲得的值復(fù)制粘貼到搜索框里,若兩個值相等,將匹配頁面上的值(如下圖所示)。
apr-md5-find.PNG

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容