``嵌入式web服务器Boa的移植
什么是Boa服务器
BOA 服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。
操作环境
ubuntu12.04+fs4412开发板
具体操作
在ubuntu中进行:
1.下载:http://www.boa.org/
2.解压:tar xzf boa-0.94.13.tar.gz
3.进入解压的目录:cd boa-0.94.13/src
4.运行:**./configure **
5.第四步运行生成一个Makefile文件,如果此时直接make,将会有错误,需要修改Makefile.
6.修改Makefile:CC=gcc 改为 CC = arm-linux-gcc
CPP=gcc -E改为 CPP = arm-linux-gcc -E
7.此时make依然大概率出错:需要修改compat.h
将
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改为:
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff,
修改 src/log.c,注释掉:
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE(“unable to dup2 the error log”);
}
修改 *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
8.安装编译需要的工具
sudo apt-get install bison flex
9.此时进行make,如果以前make过,再次make时需要先执行make clean。
否则会出现错误:
y.tab.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [boa] Error 1
10.此时查看生成的boa文件大小
ls -l boa
-rwxrwxr-x 1 farsight farsight 211921 11月 3 09:12 boa
11.进行瘦身操作:arm-linux-strip boa
前后效果对比:
ls -l boa
-rwxrwxr-x 1 farsight farsight 60440 11月 3 09:16 boa
12.进行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/ /var/www/cgi-bin/
(5)DoucmentRoot的修改
DoucmentRoot /var/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”
13.以下配置和boa.conf的配置有关,都是在ARM根文件系统中创建
在开发板上进行操作:
创建目录/etc/boa并且把boa 和 boa.conf拷贝到这个目录下
mkdir /etc/boa
创建HTML文档的主目录/www
mkdir /var/www/cgi-bin
CGI脚本所在录 /var/www/cgi-bin
以下步骤在ubuntu12.04下进行:
将boa.conf拷贝到开发板根文件系统的/etc/boa下
#cp boa.conf /source/rootfs/etc/boa
将boa拷贝到开发板根文件系统的/bin下
#cp src/boa /source/rootfs/bin
将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下
#cp /etc/mime.types /source/rootfs/etc
将你的主页index.html拷贝到 /var/www 目录下
进行测试
如果我们要访问一个自己制作的网页(hello.html),可以在浏览器中输入http://192.168.0.252/hello.html,这里的IP地址就是开发板的IP地址。
可能出现的错误
1.在开发板上执行可执行文件,出现了错误: line 1: syntax error: unexpected “(”
是使用了gcc 命令编译造成的。
解决办法:使用交叉编译链重新进行编译即可