轉貼自 http://blog.linym.net/archives/180
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,將底下判斷式註解掉:
/*if (setuid(0) != -1) {
DIE("icky Linux kernel bug!");
}*/
重新編譯
Q:無法啟動 Boa,error log 顯示 "boa.c:211 - getpwuid....略"
A:修改 src/boa.c,將底下兩個判斷式註解掉:
/*if (passwdbuf == NULL) {
DIE("getpwuid");
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE("initgroups");
}*/
重新編譯
留言列表