这次前后用了8天的时间才对boa服务器的移植有了一定的了解和认识。在移植的过程中几乎可以说每运行一个命令就会有一个错误在等着。下面是在本次学习中的具体步骤,问题和解决方案:
BOA 服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器。源代码开放、性能高,稳定性好。由于它是一个单任务的Web服务器,只能一次完成用户的请求,而不会fork出新的程来处理并发的链接请求。但是Boa支持Cgi,能够为Cgi程序fork出一个进程来执行相应的客户请求。
在μClinux中常用的Web服务器有:Boa,thttpd,httpd,其中httpd只支持静态页面,显然不适合高级应用,thttpd和Boa所提供的功能基本一样,但是thttpd在运行过程中所需要的资源要远大于Boa,因此使用Boa作为该嵌入式系统的Web服务器。系统的软件开发模型选用B/S模型。
Boa是一个高性能的单任务型Web服务器,可以运行在几乎所有的类Unix的平台上,Boa支持认证,支持CGI,功能比较全,占用资源也少,非常适合于用在资源有限的嵌入式系统中,目前Boa已经以源码的形式包含在μClinux的发行包中。
简单地说就是,boa是一种小型,简单,迅速和安全的服务器。非常适合嵌入式系统的开发和使用。目前的大多智能系统,如:智能家居和智能医疗都是使用boa服务器来实现的。
在这里要注意 tar 的使用。要根据不同的压缩文件使用不同的命令,否则只会报错。
由于我的虚拟机是新的,所以出了很多平时网上见不到的错误:
解决方法: 方法1>. 修改compat.h中的
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff为:
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff方法2>. 改用2.95.3版本的编译器。
编译一个linux下的c系统,包含词法和语法分析模块,Linux上用bison和flex。 yacc是一个文法分析器的生成器,bison即是yacc的GNU版本.Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex和yacc你可以轻松的构造一个语法解释器。 解决方法:
sudo apt-get install flex bison如果这个方法不能解决,那就先运行一下:
sudo apt-get update然后再使用上面的命令解决问题。
解决办法:修改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解决办法: 修改src/boa.c
注释掉下面语句:
if(setuid(0) != -1) { DIE(”icky Linux kernel bug!”); }即修改为: #if 0 if(setuid(0) != -1) { DIE(”icky Linux kernel bug!”); } #endif
解决方法: 方法1> 确定日志目录对与所有用户都具有可读/写的权限 方法2> 修改src/log.c (建议采用方法1) 注释掉
if(dup2(error_log, STDERR_FILENO) == -1) { DIE("unableto dup2 the error log"); }即修改为:
#if 0 if (dup2(error_log, STDERR_FILENO) == -1) { DIE("unable to dup2 the error log"); } #endif将boa.conf文件拷贝过来后要进行一些配置的修改,否则无法启动boa,我的配置如下:
Port 80 User 0 Group 0 ErrorLog /var/log/boa/error_log AccessLog /var/log/boa/access_log DocumentRoot /var/www UserDir public_html DirectoryIndex index.html DirectoryMaker /usr/lib/boa/boa_indexer KeepAliveMax 1000 KeepAliveTimeout 10 MimeTypes /etc/mime.types DefaultType text/plain CGIPath /bin:/usr/bin:/usr/local/bin Alias /doc /usr/doc ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/根据自己的实际路径进行不同的调整。
由于是在虚拟机上测试,所以使用的是 gcc 进行编译。如果是往板子上烧写,需要使用交叉编译环境进行编写。
如果出现错误,不能启动,在boa.conf在注释掉以下命令,再启动
ErrorLog /var/log/boa/error_log AccessLog /var/log/boa/access_log观察看错误提示是哪个就注释掉哪个。
在开发板上测试时需要修改boa.conf文件的俩行代码,具体有时间在写。。。。。。