Linux下使用的輕量級WEB伺服器主要有:lighttpd、thttpd、shttpd和boa等等,而Boa是使用最為廣泛的輕量級WEB伺服器之一(當然,阿帕奇是世界使用排名第一的Web伺服器軟體)。Boa是一種非常小巧的Web伺服器,其可執行程式碼只有大約60KB左右。作為一種單任務Web伺服器,Boa只能依次完成使用者的請求,而不會fork出新的程式來處理併發連線請求。但Boa支援CGI,能夠為CGI程式fork出一個程式來執行,Boa的設計目標是速度和安全。
工具鏈為:arm-hismall-linux-gcc,海思平臺。
一、Boa移植
1.下載boa-0.94.13.tar.gz
http://download.csdn.net/detail/huangminqiang201209/5769107
2.編譯
[root@localhostweb]#tar xzvf boa-0.94.13.tar.gz
[root@localhostweb]#cd boa-0.94.13
[root@localhostboa-0.94.13]#cd src/
[root@localhostsrc]#./configure //生成Makefile
[root@localhostsrc]#vi Makefile
30:CC = gcc
31:CPP = gcc -E
該為:
CC= arm-hismall-linux-gcc
CPP= arm-hismall-linux-gcc -E
[root@localhostsrc]# vi compat.h
120:#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff //##的作用是把2個引數合併到一起
修改成
#defineTIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
[root@localhostsrc]# vi log.c
72:if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the errorlog");
}
為(即遮蔽):
/*if (dup2(error_log, STDERR_FILENO) == -1){
DIE("unable to dup2 the errorlog");
}*/
[root@localhostsrc]#vi boa.c
73:if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the errorlog");
}
為(即遮蔽):
/*if (dup2(error_log, STDERR_FILENO) == -1){
DIE("unable to dup2 the errorlog");
}*/
211: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
[root@localhostsrc]# make
[root@localhostsrc]#arm-hismall-linux-strip boa //去除除錯資訊,減小體積。(可選)
二、配置Boa
1)boa.conf
Boa需要在/etc目錄下建立一個boa目錄,裡面放入Boa的主要配置檔案boa.conf。在boa-0.94.13目錄下已有一個示例boa.conf,可以在其基礎上進行修改。
[root@localhost src]# cd ..
[root@localhost boa-0.94.13]# vi boa.conf
(1)Group的修改
修改Group nogroup為Group 0 //開發板上有的組,設為0
(2)user的修改
修改User nobody為User 0
(3)Alias的修改
修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 為 Alias /cgi-bin/ /www/cgi-bin/
(4)DoucmentRoot的修改
修改DoucmentRoot /var/www 為DoucmentRoot /www
(5)ServerName的設定
修改#ServerName www.your.org.here為 ServerName www.your.org.here,否則會出現錯誤“gethostbyname::No such file or directory”
(6)AccessLog修改
修改AccessLog/var/log/boa/access_log為#AccessLog /var/log/boa/access_log,否則會出現錯誤提示:“unable to dup2 the errorlog: Bad file deor”
2)開發板etc配置
/etc $mount-t nfs -o nolock 192.168.1.211:/work/nfs /nfs
/etc $cp/nfs/mime.types .
/etc $mkdir boa
/etc $cd/boa
/etc/boa $ cp /nfs/web/boa-0.94.13/boa.conf.
/etc/boa $cp/nfs/web/boa-0.94.13/src/boa .
/etc/boa $mkdir /www
/etc/boa $ mkdir -p/www/cgi-bin
3)執行boa
/etc/boa $./boa
[16/Jul/2013:19:22:51+0000] boa: server version Boa/0.94.13
[16/Jul/2013:19:22:51+0000] boa: server built Jul 17 2013 at 10:38:13.
[16/Jul/2013:19:22:51+0000] boa: starting server pid=718, port 80
三、Boa測試
1)靜態網頁測試
將靜態網頁存入根檔案系統的/www目錄下(/1.jpg即為/www/1.jpg)
/www $ cat index.html
<html>
<body>
<h1>My First Heading </h1>
<p>This is a paragraph</p>
<h2>My First Heading </h2>
<a href="http://www.baidu.com">This is a link</a>
<img src="/1.jpg" width="104" height="142" />
</body>
</html>
直接在瀏覽器中輸入開發板的IP地址(比如我的是http://192.168.1.66) ,出現如下畫面。靜態HTML除錯成功。
2)CGI功能測試
1)生成GCI可執行程式
[root@localhost for_test]# cat helloworldCGI.c
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<head><title>CGI Output</title></head>\n");
printf("<body>\n");
printf("<h1>Hello,world.</h1>\n");
printf("<body>\n");
printf("</html>\n");
exit(0);
}
[root@localhost for_test]# chmod 777 helloworldCGI.c
[root@localhost for_test]# arm-hismall-linux-gcc helloworldCGI.c
2)開發板端
/etc/boa$cp /nfs/for_test/a.out /www/cgi-bin/
3)瀏覽器
在瀏覽器輸入: http://192.168.1.66/cgi-bin/a.out ,網頁出現 Hello,world. 除錯成功!
四、參考文獻
boa web伺服器移植 :http://blog.chinaunix.net/uid-25544300-id-3227511.html
三種嵌入式web伺服器(Boa / lighttpd / shttpd)的 linux移植筆記 :http://blog.chinaunix.net/uid-26921272-id-3322975.html