在嵌入式Linux架设Boa Webserver问题解决

2019-07-13 00:28发布

Boa 是一套小型的網頁伺服器,很適合應用在 Embedded System 上,並且內建就可以直接支援以 C 寫的 CGI 網頁,這篇是移植 Boa 到 ARM9 S3C2410 平台的過程,Linux 版本為 2.6.17.4,使用 arm-linux toolchain 3.4.1 編譯。 1. 產生 Makefile
下載 Source code 並解壓縮進到 src 目錄。
# ./configure –host=arm-linux 2. 修改 Makefile 使用跨平台編譯
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
# make (如果編譯或執行時有錯誤請看Q&A)
# arm-linux-strip boa 3. 配置 Boa
可以在源碼目錄找到這個設定檔,放到 /etc/boa 裡面,有修改的部份如下:
User 0
Group 0
#DirectoryMaker /usr/lib/boa/boa_indexer
CGIPath /bin:/usr/bin:/var/www/cgi-bin
ScriptAlias /cgi-bin/ /var/www/cgi-bin/ 然後需要放一個 mime.types 檔案在 /etc,我是直接複製 ubuntu 裡的檔案。 4. 加入 boa 執行檔
將編譯好的 boa 執行檔加入檔案系統 /bin,要啟動 server 只要輸入 boa 即可,可到 /var/log/boa 查看 log。 問題 Q&A:

Q:使用 toolchain 3.4.1 編譯出現錯誤
arm-linux-gcc -g -O2 -pipe -Wall -I. -c -o util.o util.c
util.c:100:1: pasting “t” and “->” does not give a valid preprocessing token
make: *** [util.o] Error 1
A:修改 src/compat.h
找到
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff Q:執行 boa 出現 “gethostbyname::No such file or directory”
A:需將 boa.conf 裡的 ServerName 開頭註解拿掉 Q:無法啟動 Boa,error log 顯示 “boa.c:266.icky Linux kernel bug!:No such file”
A:修改 src/boa.c,將底下判斷式註解掉:     230         //if (setuid(0) != -1) {
    231         //    DIE("icky Linux kernel bug!");
    232         //}
重新編譯 Q:無法啟動 Boa,error log 顯示 “boa.c:211 - getpwuid….略”
A:修改 src/boa.c,將底下兩個判斷式註解掉:
    215      //   if (passwdbuf == NULL) {
    216      //       DIE("getpwuid");
    217       //  }
    218      //   if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
    219      //       DIE("initgroups");
    220      //   }
重新編譯 配置 自动 启动 信息 init.d/rcS #!/bin/sh
echo "copy data for boa......"
/bin/cp -rf /usr/runsheng/data/boa /etc
/bin/cp -rf /usr/runsheng/data/mime.types /etc
echo "set IP 218.199.71.180"
ifconfig eth0 218.199.71.180
echo "start boa server......"
boa &
echo "boa server start seccess" 其中/usr/runsheng/data $ ls
bin boa mime.types /usr/runsheng/data $ cd boa/
/usr/runsheng/data/boa $ ls
boa.conf