Boa服務器移植

Boa是一種很是小巧的Web服務器,其可執行代碼只有大約60KB左右。做爲一種單任務Web服務器,Boa只能依次完成用戶的請求,而不會fork出新的進程來處理併發鏈接請求。但Boa支持CGI,可以爲CGI程序fork出一個進程來執行。Boa的設計目標是速度和安全。html

下面給你們介紹一下Boa服務器移植的具體操做步驟,但願可以有幫助。linux

環境
       主機:ubuntu8.10
       交叉工具鏈:gcc-3.4.5-glibc-2.3.6
       目標:s3c2410開發板ubuntu

結合網上一些文檔,整理了一個比較完整的文檔。vim

1.下載Boa源碼瀏覽器

下載地址: http://www.boa.org/安全

最新發行版本: 0.94.13服務器

下載 boa-0.94.13.tar.gz併發

解壓:# tar xzf boa-0.94.13.tar.gz工具

2.安裝須要工具bison,flex測試

sudo apt-get install bison flex

不然會出現以下錯誤

make: yacc:命令未找到
       make: *** [y.tab.c] 錯誤 127

make: lex:命令未找到
       make: *** [lex.yy.c] 錯誤 127

3.修改文件

(1)修改 src/compat.h

找到

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

修改爲

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

不然會出現錯誤:

util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 錯誤 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");
                   }*/

不然會出現錯誤:

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

(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

不然會出現錯誤:boa.c:211 - getpwuid: No such file or directory

註釋掉下面語句:

if (setuid(0) != -1) {
                        DIE(」icky Linux kernel bug!」);
        }

#if 0
         if (setuid(0) != -1) {
                        DIE(」icky Linux kernel bug!」);
                }

#endif

不然會出現問題:boa.c:228 - icky Linux kernel bug!: No such file or directory

四、生成Makefile文件

執行:

#cd boa-0.94.13/src
         #./configure

五、修改Makefile

cd src
         vim Makefile

修改CC = gcc 爲 CC = arm-softfloat-linux-gnu-gcc

修改CPP = gcc -E 爲 CC = arm-softfloat-linux-gnu-gcc -E

六、編譯

make
         ls -l boa
         -rwxr-xr-x 1 david david 189223 2009-05-31 13:44 boa

而後爲生成的二進制文件boa瘦身

arm-softfloat-linux-gnu-strip boa
         ls -l boa
         -rwxr-xr-x 1 david david 61052 2009-05-31 13:51 boa

能夠發現boa的大小先後差距很大這爲咱們節省了很大的空間

七、Boa的配置

這一步的工做也在電腦主機上完成。

在boa-0.94.13目錄下已有一個示例boa.conf,能夠在其基礎上進行修改。以下:

#vi boa.conf

(1)Group的修改

修改 Group nogroup

爲 Group 0

(2)user的修改

修改 User nobody

爲 User 0

(3)ScriptAlias的修改

修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

爲 ScriptAlias /cgi-bin/ /www/cgi-bin/

(5)DoucmentRoot的修改

修改DoucmentRoot /var/www

爲DoucmentRoot /www

(6)ServerName的設置

修改#ServerName www.your.org.here

爲 ServerName www.your.org.here

不然會出現錯誤「gethostbyname::No such file or directory」

(7)AccessLog修改

修改AccessLog /var/log/boa/access_log

爲#AccessLog /var/log/boa/access_log

不然會出現錯誤提示:「unable to dup2 the error log: Bad file descriptor」

(8)如下配置和boa.conf的配置有關,都是在ARM根文件系統中建立

如下步驟在開發板上進行:

建立目錄/etc/boa而且把boa 和 boa.conf拷貝到這個目錄下

mkdir /etc/boa

建立HTML文檔的主目錄/www

mkdir /www

建立CGI腳本所在錄 /www/cgi-bin

mkdir /www/cgi-bin

如下步驟在ubuntu下進行:

將boa.conf拷貝到開發板根文件系統的/etc/boa下

#cp boa.conf /source/rootfs/etc/boa

將boa拷貝到開發板根文件系統的/etc/boa下

#cp src/boa /source/rootfs/etc/boa

將ubuntu下/etc/mime.types拷貝到開發板根文件系統的/etc下

#cp /etc/mime.types /source/rootfs/etc

將你的主頁index.html拷貝到www目錄下

八、測試

打開一個瀏覽器輸入開發板ip看看效果

OK

相關文章
相關標籤/搜索