Boa是一種非常小巧的Web服務(wù)器,其可執(zhí)行代碼只有大約60KB左右。作為一種單任務(wù)Web服務(wù)器,Boa只能依次 完成用戶的請(qǐng)求,而不會(huì)fork出新的進(jìn)程來(lái)處理并發(fā)連接請(qǐng)求。但Boa支持CGI,能夠?yàn)镃GI程序fork出一個(gè)進(jìn)程來(lái)執(zhí)行。Boa的設(shè)計(jì)目標(biāo)是速度 和安全。
下面給大家介紹一下Boa服務(wù)器移植的具體操作步驟,希望能夠有幫助。
環(huán)境
???????主機(jī):ubuntu8.10
???????交叉工具鏈:gcc-3.4.5-glibc-2.3.6
???????目標(biāo):s3c2410開(kāi)發(fā)板
結(jié)合網(wǎng)上一些文檔,整理了一個(gè)比較完整的文檔。
1.下載Boa源碼
下載地址: http://www.boa.org/
最新發(fā)行版本: 0.94.13
下載 boa-0.94.13.tar.gz
解壓:# tar x*** boa-0.94.13.tar.gz
2.安裝需要工具bison,flex
sudo apt-get install bison flex
否則會(huì)出現(xiàn)如下錯(cuò)誤
make: yacc:命令未找到
???????make: *** [y.tab.c] 錯(cuò)誤 127
make: lex:命令未找到
???????make: *** [lex.yy.c] 錯(cuò)誤 127
3.修改文件
(1)修改 src/compat.h
找到
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
否則會(huì)出現(xiàn)錯(cuò)誤:
util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 錯(cuò)誤 1
(2)修改 src/log.c
注釋掉
if (dup2(error_log, STDERR_FILENO) == -1) {
?????????????????????????DIE("unable to dup2 the error log");
???????????????????}
為:
/*if (dup2(error_log, STDERR_FILENO) == -1) {
?????????????????????????DIE("unable to dup2 the error log");
???????????????????}*/
否則會(huì)出現(xiàn)錯(cuò)誤:
log.c:73 unable to dup2 the error log:bad file deor
(3)修改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
否則會(huì)出現(xiàn)錯(cuò)誤:boa.c:211 - getpwuid: No such file or directory
注釋掉下面語(yǔ)句:
if (setuid(0) != -1) {
????????????????????????DIE(”icky Linux kernel bug!”);
????????}
為
#if 0
?????????if (setuid(0) != -1) {
????????????????????????DIE(”icky Linux kernel bug!”);
????????????????}
#endif
否則會(huì)出現(xiàn)問(wèn)題:boa.c:228 - icky Linux kernel bug!: No such file or directory
4、生成Makefile文件
執(zhí)行:
#cd boa-0.94.13/src
?????????#./configure
5、修改Makefile
cd src
?????????vim Makefile
修改CC = gcc 為 CC = arm-softfloat-linux-gnu-gcc
修改CPP = gcc -E 為 CC = arm-softfloat-linux-gnu-gcc -E
6、編譯
make
?????????ls -l boa
?????????-rwxr-xr-x 1 david david 189223 2009-05-31 13:44 boa
然后為生成的二進(jìn)制文件boa瘦身
arm-softfloat-linux-gnu-strip boa
?????????ls -l boa
?????????-rwxr-xr-x 1 david david 61052 2009-05-31 13:51 boa
可以發(fā)現(xiàn)boa的大小前后差距很大這為我們節(jié)省了很大的空間
7、Boa的配置
這一步的工作也在電腦主機(jī)上完成。
在boa-0.94.13目錄下已有一個(gè)示例boa.conf,可以在其基礎(chǔ)上進(jìn)行修改。如下:
#vi boa.conf
(1)Group的修改
修改 Group nogroup
為 Group 0
(2)user的修改
修改 User nobody
為 User 0
(3)Alias的修改
修改Alias /cgi-bin/ /usr/lib/cgi-bin/
為 Alias /cgi-bin/ /www/cgi-bin/
(5)DoucmentRoot的修改
修改DoucmentRoot /var/www
為DoucmentRoot /www
(6)ServerName的設(shè)置
修改#ServerName www.your.org.here
為 ServerName www.your.org.here
否則會(huì)出現(xiàn)錯(cuò)誤“gethostbyname::No such file or directory”
(7)AccessLog修改
修改AccessLog /var/log/boa/access_log
為#AccessLog /var/log/boa/access_log
否則會(huì)出現(xiàn)錯(cuò)誤提示:“unable to dup2 the error log: Bad file deor”
(8)以下配置和boa.conf的配置有關(guān),都是在ARM根文件系統(tǒng)中創(chuàng)建
以下步驟在開(kāi)發(fā)板上進(jìn)行:
創(chuàng)建目錄/etc/boa并且把boa 和 boa.conf拷貝到這個(gè)目錄下
mkdir /etc/boa
創(chuàng)建HTML文檔的主目錄/www
mkdir /www
創(chuàng)建CGI腳本所在錄 /www/cgi-bin
mkdir /www/cgi-bin
以下步驟在ubuntu下進(jìn)行:
將boa.conf拷貝到開(kāi)發(fā)板根文件系統(tǒng)的/etc/boa下
#cp boa.conf /source/rootfs/etc/boa
將boa拷貝到開(kāi)發(fā)板根文件系統(tǒng)的/etc/boa下
#cp src/boa /source/rootfs/etc/boa
將ubuntu下/etc/mime.types拷貝到開(kāi)發(fā)板根文件系統(tǒng)的/etc下
#cp /etc/mime.types /source/rootfs/etc
將你的主頁(yè)index.html拷貝到www目錄下
8、測(cè)試
打開(kāi)一個(gè)瀏覽器輸入開(kāi)發(fā)板ip看看效果
OK
評(píng)論
查看更多