天天看點

boa-0.94.13 Web伺服器的編譯與運作

開發環境

        Vmware 虛拟機 + Debian 5.0。

        具備基本的GCC編譯環境,能夠執行configure産生Makefile。

        登陸Debian的使用者名為hyx,使用者hyx屬于使用者組hyx

源碼下載下傳

        下載下傳網址:  http://www.boa.org/

        最新版本:  0.94.13  (從0.95版本以後,BOA不再開源釋出)

        檔案名稱:  boa-0.94.13.tar.gz

源碼編譯

        解壓源碼,首先進入/home/hyx目錄下,在/home/hyx路徑下建立BOA 目錄

        [email protected]:~$ mkdir BOA

        将下載下傳的源碼壓縮包放入BOA目錄,然後進入BOA目錄對源碼進行解壓縮

        [email protected]:~/BOA$ tar zxf boa-0.94.13.tar.gz

        進入boa-0.94.13的src目錄,通過configure生成Makefile檔案

[email protected]:~/BOA/boa-0.94.13/src$ ./configure

        開始編譯boa的源碼

        [email protected]:~/BOA/boa-0.94.13/src$ make

        如果編譯成功,會在src目錄下生成boa檔案,可以通過file指令檢視一下

        [email protected]:~/BOA/boa-0.94.13/src$ file boa

        boa: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV)  ......

編譯問題

        [email protected]:~/BOA/boa-0.94.13/src$ make

        yacc  -d boa_grammar.y

        make: yacc:指令未找到

        make: *** [y.tab.c] 錯誤 127

        産生原因:Debian裡沒有安裝yacc程式

        解決辦法:網上有說apt-get install bison或者下載下傳源碼編譯安裝,我的方法是下載下傳byacc最新版本byacc-1.9.tar.gz,編譯生成yacc,将yacc拷貝到 /usr/local/bin/下。

        [email protected]:~/BOA/boa-0.94.13/src$ make

       lex  boa_lexer.l

        make: lex:指令未找到

        make: *** [lex.yy.c] 錯誤 127

        産生原因:Debian裡沒有安裝lex程式

        解決辦法:網上有說apt-get install flex或者下載下傳源碼編譯安裝,我的方法是下載下傳flex最新版本flex-2.5.37.tar.gz,編譯生成flex,然後改名為lex,将lex拷貝到 /usr/local/bin/下。

        [email protected]:~/BOA/boa-0.94.13/src$ make

        gcc  -g -O2 -pipe -Wall -I.   -c -o util.o util.c

        util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token

        make: *** [util.o] 錯誤 1

        産生原因:Debian裡沒有暗轉lex程式

        解決辦法:編輯src下的compat.h檔案,将126行的

        #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

        改為

        #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff

        然後make就可成功編譯出boa程式了,不過編譯有警告。

        [email protected]:~/BOA/boa-0.94.13/src$ make

程式運作

        将編譯好的boa程式拷貝到BOA目錄,将boa-0.94.13目錄下的boa.conf也拷貝到BOA目錄下。

        [email protected]:~/BOA/boa-0.94.13/src$ cd ../../

        [email protected]:~/BOA$ cp boa-0.94.13/src/boa ./

        [email protected]:~/BOA$ cp boa-0.94.13/boa.conf ./

        執行 BOA程式,注意我這裡執行的方法跟網上的介紹的不同哦。

        [email protected]:~/BOA$ ./boa -c `pwd`

        -c表示指定boa.conf的路徑,否則預設的路徑是/etc/boa/

        `pwd`得到的是目前路徑

        端口綁定失敗,會在終端提示下面這條資訊

       [28/Nov/2013:06:57:44 +0000] boa.c:194 - unable to bind: Permission denied  

        解決方法是編輯boa.conf,Port改為8080

        如果終端提示如下資訊,說明boa的日志記錄檔案打開失敗。

        log.c:73 unable to dup2 the error log:bad file descriptor

        解決方法,按照boa.conf裡定義,在/var/log/下面建立boa目錄,注意hyx使用者一定可以寫/var/log/boa目錄,否則還是提示上面這條資訊。

        我的另一解決方法是:修改boa.conf配置檔案,修改log日志的存儲路徑,比如就存在boa同級目錄,在本例中為 /home/hyx/BOA,修改如下:

        ErrorLog    /home/hyx/BOA/error_log

       AccessLog   /home/hyx/BOA/access_log

        另外将boa.conf的

        User nobody

        Group nogroup

        改為

        User hyx

        Group hyx

       這樣改的目的是為了解決另一個運作問題,當終端或者error_log檔案裡有如下資訊時,程式不能運作。

       [28/Nov/2013:08:17:37 +0000] boa.c:226 - icky Linux kernel bug!: Success

        出現上述資訊的原因是,以root賬戶運作了boa程式,同時boa.conf裡User為0,Group也為0導緻的。當把User設定為hyx,Group設定為hyx後,即使通過root賬戶運作boa,也不會報告上述錯誤。

        最後,解決以上問題後,boa應該就可以正常運作。最好ps一下看看是否有boa程序資訊。另外還可以檢視error_log檔案,如果看到如下資訊說明運作成功。

        [28/Nov/2013:08:19:38 +0000] boa: server version Boa/0.94.13

        [28/Nov/2013:08:19:38 +0000] boa: server built Nov 28 2013 at 14:39:24.

        [28/Nov/2013:08:19:38 +0000] boa: starting server pid=11967, port 8080

後記

        網上有些文章通過删除相關源碼的方式解決了boa運作遇到的問題,其實這是不必的,這些問題都可以通過修改boa.conf檔案,或者修改相關檔案,檔案夾的讀寫屬性來得到解決,并做到boa正常運作。

繼續閱讀