arm板 BOA服务器搭建

Boa 是一个非常小巧的 Web 服务器,其可执行代码只有 60K 左右。它是一个单任务的 Web 服务器,只能依次完成用户的请求,而不会 fork 出新的进程处理并发连接请求。但
boa 支持 cgi ,能够为 cgi 程序 fork 出一个进程来执行。 Boa 的设计目标是速度和安全,在其站点公布的性能测试中, boa 的性能要好于 apache 服务器。
随着网络技术的迅猛发展,在嵌入式设备的管理和交互中,基于
Web 方式的应用成为目前的主流,用户可以直接通过远程登录的方式对设备进行管理和维护,大大方便了使用性。下面就为大家讲解一下 boa 服务器在嵌入式 Linux 系统中的移植过程。
一.下载 BOA 源码
BOA 的下载地址:
http://www.boa.org/ 进入下载页
一、 BOA 服务器移植

工具链:crotex_a8     参照: http://blog.csdn.net/qq_26058749/article/details/52791702

平台: 处理器:s5pv210   内核: linux-3.2
1. 解压源码
tar xvf boa-0.94.13.tar.tar
cd boa-0.94.13
2. 进入 src/
./configure 生成 Makefile
修改 Makefile

修改 CC = gcc 为 CC = arm-cortex_a8-linux-gnueabi-gcc //用 cortex-a8 环境(交叉编译器视情况而定)

修改 CPP = gcc -E 为 CPP = arm-cortex_a8-linux-gnueabi-gcc –E
3.make 编译
编译一个
linux 下的 c 系统,包含词法和语法分析模块, Linux 上用 bison flex
yacc 是一个文法分析器的生成器 ,bison 即是 yacc GNU 版本 .Lex YACC 是用于构造词法分析机和语法解释器的工具,利用 Lex YACC 你可以轻松的构造一个语法解释器。
1. 下载 Lex YACC
Apt-get install bison flex
2.
修改 src/compat.h
找到 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
3.
修改 src/log.c
注释掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
为:
/*if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}*
4.
修改 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
注释掉
if (setuid(0) != -1) {
DIE( icky Linux kernel bug! );
}

#if 0
if (setuid(0) != -1) {
DIE(
icky Linux kernel bug! );
}
#endif
执行 make
然后给 boa 瘦身
Arm-none-linux-gnueabi-strip boa
二、 Boa 服务器配置
1. 创建目录
mkdir /source/rootfs/etc/boa
2. 将 boa 源码目录下的 boa.conf 拷贝到/source/rootfs/etc/boa 目录下
cp boa.conf /source/rootfs/etc/boa
3. 修改配置文件 boa.conf
vim /source/rootfs/etc/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/ /www/cgi-bin/
(5)DocumentRoot 的修改
修改 DocumentRoot /var/www
为 DocumentRoot /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
(8)以下配置和 boa.conf 的配置有关,都是在 ARM 根文件系统中创建
以下步骤在开发板上进行:
创建 HTML 文档的主目录/www
mkdir /www
创建 CGI 脚本所在录 /www/cgi-bin
mkdir /www/cgi-bin
当不能使用 cgi
#AddType application/x-httpd-cgi cgi 改为 AddType application/x-httpd-cgi cgi
boa
器测试
将 boa 拷贝到开发板根文件系统的/etc/boa 下
#cp src/boa /source/rootfs/etc/boa
将 ubuntu 下/etc/mime.types 拷贝到开发板根文件系统的/etc 下
#cp /etc/mime.types /source/rootfs/etc
将你的主页 index.html 拷贝到 www 目录下
运行 boa, 然后在主机游览器输入开发板网址
[root@farsight boa]# ./boa
[30/10/2011:19:10:36 +0000] [root@farsight boa]# boa: server version Boa/0.94.13
[30/10/2011:19:10:36 +0000] boa: server built 10 30 2011 at 19:10:36
[30/10/2011:19:10:36 +0000] boa: starting server pid=968, port 80

在主机上启动浏览器,输入 URL http://192.168.0.2 ,访问板上的 BOA 服务,效果如

下: BOA TEST



此时板上串口输出如下信息:
[28/Mar/2010:12:27:16 +0000] request from 192.168.0.1 "GET /favicon.ico HTTP/1.1"
("/var/www/favicon.ico"): document open: No such file or directory
是因为没有该图标文件,不过不影响。
测试完静态页面后,接下来测试 CGI 脚本文件:
在主机上创建一文件 helloworld.c,文件内容如下:
#include<stdio.h>
int main()
{
printf("Content-type:text/html\n\n");
printf("<html>\n");
printf("<head><title>BOA TEST</title></head>\n");
printf("<body>\n");
printf("<h1>BOA CGI TEST</h1>\n");
printf("</body>\n");
printf("</html>\n");
exit(0);
}
然后用交叉编译工具链编译,将得到的 helloworld文件复制到板上的/var/www/cgi-bin
录下:
编译:
arm-crotex_a8-gcc –o helloworld helloworld.c
在浏览器输入 http://192.168.0.2/cgi-bin/helloworld,可以看到如下效果:
BOA  CGI   TEST


至此, BOA 服务器移植成功!
1):boa 配置文件参数说明
boa 的配置文件是/etc/boa/boa.conf
Portboa服务器监听的端口,默认的端口是 80。如果端口小于1024,则必须是 root
用 户启动服务器。
Listen:绑定的 ip 地址。不使用这个参数时,将绑定所有的地址。
User:连接到服务器的客户端的身份,可以是用户名或UID
Group:连接到服务器的客户端的组,可以是组名或GID
ServerAdmin:服务器出故障时要通知的邮箱地址。
ErrorLog:指定错误日志文件。如果路径没有以“ /”开始,则相对于 ServerRoot路径。
没 有配置时默认的文件是
/dev/stderr。若不想记录日志,指定文件为
/dev/null
AccessLog:设置存取日志文件,与ErrorLog 类似。
UseLocaltime:设置使用本地时间,使用UTC 时注释这个参数。这个参数没有值。
VerboseCGILogs:在错误日志文件中记录CGI 启动和停止时间,若不记录,注释这个参
数。这个参数没有值。
ServerName:指定服务器的名称,当客户端使用gethostname + gethostbyname 时返
回给客户端。
VirtualHost:虚拟主机开关。使用此参数,则会在DocumentRoot 设定的目录添加一个
ip 地址作为新的 DocumentRoot 来处理客户端的请求。如DocumentRoot 设置为
/var/www,则 http://localhost/ 则转换成/var/www/127.0.0.1/, 若注释此参数,则为
/var/www/
DocumentRoot HTML 文件的根目录(也就是网站的目录)。
UserDir:指定用户目录。
DirectoryIndex:指定预生成目录信息的文件,注释此变量将使用DirectoryMaker 变量。
这个变量也就是设置默认主页的文件名。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值