開發環境
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正常運作。