嵌入式WeB服务器的实现——BOA移植

一笑奈何 提交于 2019-12-24 09:11:42

简介

由于嵌入式设备资源一般都比较有限,并且也不需要能同时处理很多用户的请求,因此不会使用Linux下最常用的如Apache等服务器,而需要使用一些专门为嵌入式设备设计的Web服务器,这些Web服务器在存贮空间和运行时所占有的内存空间上都会非常适合于嵌入式应用场合。
典型的嵌入式Web服务器有Boa (www.boa.org)和thttpd (http://www.acme.com/software/thttpd/)等,它们和Apache等高性能的Web服务器主要的区别在于它们一般是单进程服务器,只有在完成一个用户请求后才能响应另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场合里已经足够了。
我们介绍比较常用的Boa服务器的移植。Boa是一个非常小巧的Web服务器,可执行代码只有约60KB。它是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全,在其站点公布的性能测试中,Boa的性能要好于Apache服务器。

下载BOA

下载地址:BOA官网下载地址
进入官网后点击下图所示处进行下载 目前最新版本是0.94.13
BOA下载
下载完成后使用以下命令进行解压:

tar -xzvf boa-0.94.13.tar.gz 

还需要安装bison,flex等两个工具 否则编译会出现错误,使用以下命令安装:

sudo apt-get install bison flex

配置BOA

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
在这里插入图片描述
2.修改 src/boa.c 不然运行时会报错 boa.c:211 - getpwuid: No such file or directory
注释掉下面这段程序:

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

3.修改src/boa.c 不然i运行时会报错 boa.c:228 - icky Linux kernel bug!: 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

执行下列命令生成Makefile

cd boa-0.94.13/src
./configure

修改Makefile
将交叉编译工具改成自己的交叉编译工具,比如我的是arm-linux-gcc
修改CC = gcc 为 CC = arm-linux-gcc
修改CPP = gcc -E 为 CC = arm-linux-gcc -E
如下图所示
在这里插入图片描述
执行下列命令编译

make -j8

可以看到在boa-0.94.13/src目录下生成了boa文件:
在这里插入图片描述

Boa的配置

boa的运行需要一个配置文件 在boa-0.94.13目录下就有一个boa.conf 我们在上面修改即可

vim boa.conf

Group 和 user的修改
将boa.conf 48行改成下面的配置:
在这里插入图片描述
原先是
Group nogroup
User nobody
会导致报错:No such user: nobody

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

为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/
在这里插入图片描述
这样就将cgi-bin目录指向了 /var/www/cgi-bin/ 以后我们就在这个目录写CGI程序

DoucmentRoot的修改
默认的www目录如下,如果你有需要的话可以更改 这里不更改,以后网页就放在这个目录
在这里插入图片描述
ServerName的设置
修改#ServerName www.your.org.here
为 ServerName www.your.org.here
如下图所示:
在这里插入图片描述

移植Boa到开发板上去

将生成的boa程序放置到开发板的根文件系统的/bin目录中去

cp src/boa /NFS/rootfs/bin

在开发板上创建目录/etc/boa并且把 boa.conf拷贝到这个目录下

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

将你的Linux虚拟机下的/etc/mime.types拷贝到开发板根文件系统的/etc下

cp /etc/mime.types /NFS/rootfs/etc

在开发板上创建HTML文档的主目录www和cgi-bin目录:

mkdir /var/www/cgi-bin -p

建立BOA的日记目录,以后BOA服务器发生的错误和访问记录都在这里

mkdir /var/log/boa -p

测试BOA服务器能否正常工作

echo "Hello World" > /var/www/index.html

运行boa

./boa

然后打开浏览器 访问:http://你的板子的IP地址/
如果浏览器显示如下 则代表能正常访问
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!