web 服務器 Boa 移植

一、編譯 boa 程序
1、www.boa.org下載boa-tar.gz。
2、解壓
3、#./configure
4、#make
編譯會出錯:
util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1
解決方法,修改compat.h中的
#define  TIMEZONE_OFFSET(foo)  foo##->tm_gmtoff    爲:

#define  TIMEZONE_OFFSET(foo)  foo->tm_gmtoff

二、修改配置文件 boa.conf
1、建立/etc/boa 目錄,  並複製 boa.conf 到/etc/boa 目錄下,並按照以下步驟進行修改。
2、修改訪問權限:修改 User nobody  爲 User  0,修改 Group  nogroup 爲 Group  0。  (可以爲nobody)
3、 設定日誌目錄: boa日誌有兩部分, Errorlog和AccessLog, 一般情況下爲/var/log/boa/error_log
       和/var/log/boa/access_log 兩個文件。所以根據自己的情況情況設置日誌目錄:
        ErrorLog  /var/log/boa/error_log
         AccessLog  /var/log/boa/access_log
       注意:這裏/var/log/boa 目錄必須爲可寫, 否則會出現錯誤:log.c:73 – Unable to dup2 the error log: Bad file r.
       在啓動腳本里將 var 掛載成 ramfs:  mount  –n  –t  ramfs  ramfs  /var
4.  設置 html 文件目錄: DocumentRoot      /var/www
5.  設置默認首頁: DirectoryIndex  index.html
6.  設置 cgi 腳本目錄:  將   ScriptAlias  /cgi-bin/  /usr/lib/cgi-bin
       修改爲                           ScriptAlias  /cgi-bin/  /var/www/cgi-bin
      這些目錄可以自己修改,但是要和網頁存放的目錄一致。

三、根據第二步設置建立相關文件夾並放入文件
1、根據(第二.3 步)的設置建立/var/boa 文件夾。
2、 根據(第二.4 步)的設置建立/var/www 文件夾,  並在此目錄下存放 html 文件, 包括 index.html
文件。
3.  根據(第二.6 步)的設置建立/var/www/cgi-bin 文件夾,  並存放一些用來測試的 cgi 腳本。

四、運行 boa 程序
在 windows 下通過 http://192.168.1.230(虛擬機的 IP 地址)這種形式訪問,進行測試。

五、移植到開發板
1、(第一.3 步)操作完成之後,修改 Makefile 文件,將
CC = gcc
CPP = gcc -E
改爲:
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
#make
#arm-linux-strip boa //去掉調試信息,減少 boa 體積
2、拷貝 PC 上/etc/mime.types 文件到開發板/etc 目錄下,如果不用 mimi.types,可將 boa.conf
文件中
MimeTypes  /etc/mime.types
修改爲:
MimeTypes  /dev/null
‹

boa 配置相關目錄
1、boa.conf 的存放目錄:
默認 boa.conf 是在/etc/boa.conf 目錄的,boa 運行時會自動去找/etc/bon.conf 目錄。這個設定
是在 define.h 文件中定義的,可在編譯之前進行修改。
2、log 目錄:  分爲 Errorlog  和 AccessLog  兩個目錄,可在 boa.conf 中修改。如:
ErrorLog  /var/log/boa/error_log
AccessLog  /var/log/boa/access_log
3、html 文件存放目錄,  可在 boa.conf 文件中修改。如:  
DocumentRoot  /var/www
4、cgi 腳本存放目錄,  可在 boa.conf 文件中修改。如:
ScriptAlias  /cgi-bin/  /var/www/cgi-bin
5、mime.types 存放目錄,  可在 boa.conf 文件中修改。如: MimeTypes  /etc/mime.types
將網頁文件放在/var/www 目錄下,cgi 腳本放在/var/www/cgi-bin 目錄下。在開發板上運行 boa,
在主機 IE 上輸入開發板 IP,可看到網頁。


六、常見錯誤
這些錯誤內容可查看/var/log/boa/error_log 文件
1、gethostbyname:: No such file or directory
解決辦法:  修改 boa.conf  去掉 ServerName www.your.org.here  前的註釋符號(#)。
2、util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: ***
[util.o]
解決辦法:  修改 src/compat.h 找到
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
3、boa.c:211 - getpwuid: No such file or directory
解決辦法:  修改 src/boa.c 註釋掉下面這段程序:
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
即修改爲:
#if 0
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
#endif
4、boa.c:228 - icky Linux kernel bug!: No such file or directory
解決辦法:  修改 src/boa.c 註釋掉下面語句:
if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
即修改爲:
#if 0
if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
#endif
5、log.c:73 unable to dup2 the error log:bad file descriptor
解決方法:
方法 1>  確定日誌目錄對與所有用戶都具有可讀/寫的權限
方法 2>  修改 src/log.c (建議採用方法 1)註釋掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
即修改爲:
#if 0
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
#endif


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章