Web服务组件boa的安装与配置

在嵌入式Linux系统中,实现Web服务的组件有很多,它们大多是轻量级的,对系统资源的占用不大,对嵌入式CPU的开销也不大。比较常见的组件有boa、thttpd、mini_httpd、mongoose、lighttpd、appweb以及apache等。下面就以流行广泛的boa为例来进行安装和配置。

一、下载

Boa的官方网站为www.boa.org,其源代码可直接从官网下载,本例下载的版本为boa-0.94.13.tar.tar。

下载完成后对源码进行解压,执行“tar –xvf boa-0.94.13.tar.tar –C /”,把源码解压到根目录下。解压完成后执行“cd /boa-0.94.13/src”,进入到源码目录。

二、配置

在源码目录下,执行“./configure”对其进行配置。配置结束后会生成Makefile文件,用Vi打开该文件,找到第31、32两行,原来的代码为“CC = gcc”和“CPP = gcc -E”,要把这两行改为使用交叉编译工具编译,改为“CC = arm-linux-gcc”和“CPP = arm-linux-gcc -E”。然后再找到第23行,原来的代码为“LDFLAGS= -g”,要把它改为静态库方式,改为“LDFLAGS = -g -static”。全部改完后存盘退出。

接下来找到compat.h文件并打开它,找到第120行,原来的代码为“#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff”,把它改为“#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff”,即把两个#号去掉。完成后存盘退出。

找到主文件boa.c并打开它,把其中的第210~212行和225~227行注释掉(或删除掉),如下:

210    //     if (passwdbuf == NULL) {

211    //         DIE("getpwuid");

212    //     }

 …………

225    //     if (setuid(0) != -1) {

226    //         DIE("icky Linux kernel bug!");

227    //     }

其余部分不变,改完后存盘退出。

最后找到log.c文件,打开它并找到第72~74行,其代码如下:

72         if (dup2(error_log, STDERR_FILENO) == -1) {

73             DIE("unable to dup2 the error log");

74         }

这里要把它们注释掉,可改成下面的形式。

72         #if 0

73         if (dup2(error_log, STDERR_FILENO) == -1) {

74             DIE("unable to dup2 the error log");

75         }

76         #endif

其余部分不变,更改完成后存盘退出。

三、编译

完成配置后,在/boa-0.94.13/src目录下执行make命令进行编译,本例所使用的交叉编译工具链为4.4.3版本。

编译完成后就会在当前目录生成可执行文件boa。

四、安装和部署

把刚才编译好的文件boa拷贝到嵌入式开发板上的/usr/bin目录下。

接下来在嵌入式开发板上执行“mkdir –p /etc/boa”,新建boa配置目录。然后把刚才解压的boa源码下的配置文件boa.conf(在boa-0.94.13目录下)拷贝到嵌入式开发板的/etc/boa目录下。

接下来要更改配置文件boa.conf,按以下步骤进行(在开发板上完成)。

1、用vi打开boa.conf,找到第48、49两行,原来的代码为“User nobody”和“Group nogroup”,把它们改为“User root”和“Group root”,以指定root为其用户和组。

2、找到第94行,原来的代码为“#ServerName www.your.org.here”,现在把它前面的#号去掉,改为“ServerName www.your.org.here”。

3、找到第111行,原来的代码为“DocumentRoot /var/www”,这里是指定网页存放的根目录,可按实际需求进行更改,本例把它放到home目录下,改为“DocumentRoot /home/www”。

4、找到第74行,原来的代码为“AccessLog /var/log/boa/access_log”,这里把它改为“AccessLog /home/www/log/boa/access_log”。

5、找到第193行,原来的代码为“ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/”,这里把它改为“ScriptAlias /cgi-bin/ /home/www/cgi-bin/”。

全部完成后存盘退出。

接下来要在嵌入式开发板上建立刚才配置的目录 ,如下:

1、执行“mkdir –p /home/www”,建立网页文件的根目录。

2、执行“mkdir –p /home/www/log/boa”,建立日志目录。

3、执行“mkdir –p /home/www/cgi-bin”,建立CGI目录。

4、执行“touch /home/www/log/boa/access_log”,新建一个日志文件。

接下来在嵌入式开发板的/etc目录下查看一下有没有文件mimi.types,如果没有可以从虚拟机的/etc/目录下拷贝一个过来。

五、测试

以上工作全部完成后就可以进行测试了,在嵌入式开发板上执行boa并回车,如果正常的话可看到控制台上打印出以下信息。

[29/May/2019:10:24:00 +0000] boa: server version Boa/0.94.13

[29/May/2019:10:24:00 +0000] boa: server built May 29 2019 at 10:19:44.

[29/May/2019:10:24:00 +0000] boa: starting server pid=1111, port 80

此时表明boa的web服务已经正常启动了。需要注意的是,boa启动后就以服务的形式在后台运行了,要重新启动需要把原来的boa进程结束掉才行。(可通过ps命令查看boa的进程号,然后通过“kill -9 进程号”来结束进程。)

正常启动后就可以进行测试了。先在/home/www/目录下新建一个测试页面,执行“vi index.html”,然后在其中写入一句“This is a test Page!”,然后存盘退出。为了完成测试,可拷贝一个图标文件到/home/www目录下,并把文件名称改为favicon.ico。完成后进行测试,在PC机上打开浏览器,在地址栏中输入嵌入式开发板的IP地址(本例为192.168.1.90),然后回车,就可以看以刚才的测试页面了。如下。 

接下来进行CGI程序测试。在虚拟机下新建一个CGI测试文件,执行“vi hello_cgi.c”,然后在其中输入以下程序。

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

        printf("Content-type:text/html\n\n");

        printf("Hello world!");

        exit(0);

}

然后执行“arm-linux-gcc hello_cgi.c –o hello_cgi”对其进行交叉编译,完成后把生成的可执行文件hello_cgi拷贝到嵌入式开发板上的/home/www/cgi-bin目录下。然后再样在PC机上的浏览器中进行测试,在地址栏中输入http://192.168.1.90/cgi-bin/hello_cgi并回车。如果正常的话会显示出如下的页面。

至此,boa在嵌入式Linux下的安装配置全部完毕。

posted @ 2020-02-06 18:27  fxzq  阅读(2255)  评论(0编辑  收藏  举报