boa移植
来源:互联网 发布:网络高科技股 编辑:程序博客网 时间:2024/05/17 01:46
boa移植
这次前后用了8天的时间才对boa服务器的移植有了一定的了解和认识。在移植的过程中几乎可以说每运行一个命令就会有一个错误在等着。下面是在本次学习中的具体步骤,问题和解决方案:
一、在网上了解什么是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服务器来实现的。
二、boa移植的具体步骤:
1、从[www.boa.org]下载下载Boa源码,我所使用的版本为0.94.13,将其解压并进入源码目录的src,生成 Makefile文件
li31@ubuntu:~$ tar -xzvf boa-0.94.13.tar.gzli31@ubuntu:~/boa-0.94.13$ cd src/li31@ubuntu:~/boa-0.94.13/src$ li31@ubuntu:~/boa-0.94.13/src$ ./configure
在这里要注意 tar 的使用。要根据不同的压缩文件使用不同的命令,否则只会报错。
2、修改Makefile文件(此时是在虚拟机上进行测试,因此不需要修改,后面在往板子上移植时会进行具体的修改),然后make进行编译得到boa可执行文件。
li31@ubuntu:~/boa-0.94.13/src$ make
由于我的虚拟机是新的,所以出了很多平时网上见不到的错误:
错误一:
util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing tokenmake: [util.o] Error1
解决方法:
方法1>. 修改compat.h中的
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
为:
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
方法2>. 改用2.95.3版本的编译器。
错误二:
yacc -d boa_grammar.ymake: yacc: Command not foundmake: *** [y.tab.c] Error 127
编译一个linux下的c系统,包含词法和语法分析模块,Linux上用bison和flex。
yacc是一个文法分析器的生成器,bison即是yacc的GNU版本.Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex和yacc你可以轻松的构造一个语法解释器。
解决方法:
sudo apt-get install flex bison
如果这个方法不能解决,那就先运行一下:
sudo apt-get update
然后再使用上面的命令解决问题。
错误三:
boa.c:211 - getpwuid: No such file or directory
解决办法:修改src/boa.c
注释掉下面这段程序:
if (passwdbuf == NULL) {DIE(”getpwuid”);}if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {DIE(”initgroups”);}
即修改为:
#if 0if (passwdbuf == NULL) {DIE(”getpwuid”);}if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {DIE(”initgroups”);}#endif
错误四:
boa.c:228 - icky Linux kernel bug!: No such file or directory
解决办法: 修改src/boa.c
注释掉下面语句:
if(setuid(0) != -1) {DIE(”icky Linux kernel bug!”);}
即修改为:
#if 0
if(setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
#endif
错误五:
log.c:73 unable to dup2 the error log:bad file descriptor
解决方法:
方法1> 确定日志目录对与所有用户都具有可读/写的权限
方法2> 修改src/log.c (建议采用方法1)
注释掉
if(dup2(error_log, STDERR_FILENO) == -1) {DIE("unableto dup2 the error log");}
即修改为:
#if 0if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");}#endif
3、在得到boa可执行文件后,在根目录的/etc目录下创建一个boa文件夹,再将boa.conf文件拷贝到boa文件下,同时创建var文件夹:
li31@ubuntu:/$ cd etcli31@ubuntu:/etc$ sudo mkdir boali31@ubuntu:~/boa-0.94.13$ sudo cp boa.conf /etc/boali31@ubuntu:/etc/boa$ sudo mkdir var
将boa.conf文件拷贝过来后要进行一些配置的修改,否则无法启动boa,我的配置如下:
Port 80User 0Group 0ErrorLog /var/log/boa/error_logAccessLog /var/log/boa/access_logDocumentRoot /var/wwwUserDir public_htmlDirectoryIndex index.htmlDirectoryMaker /usr/lib/boa/boa_indexerKeepAliveMax 1000KeepAliveTimeout 10MimeTypes /etc/mime.typesDefaultType text/plainCGIPath /bin:/usr/bin:/usr/local/binAlias /doc /usr/docScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
根据自己的实际路径进行不同的调整。
4、之后按照上面的操作方式,在var 文件夹下创建www文件夹和log文件夹,将boa可执行文件拷贝到var文件夹下。
5、在log文件夹下创建boa文件夹,再在boa文件夹下创建以上俩个文件。
li31@ubuntu:/etc/boa/var/log/boa$ lsaccess_log error_log
6、在www文件夹下存放自己编写的html测试网页,同时创建cgi_bin文件夹。
a、在网上下载cgic205.tar.gz解压,然后进行以下操作:
li31@ubuntu:~/cgic205$ ./configureli31@ubuntu:~/cgic205$ make
b、将生成的可执行文件capture拷贝到cgi_bin文件夹下
c、编写pass.c测试文件,通过编译生成pass_cgi
li31@ubuntu:/etc/boa/var/www/cgi_bin$ gcc -o pass.cgi pass.c
由于是在虚拟机上测试,所以使用的是 gcc 进行编译。如果是往板子上烧写,需要使用交叉编译环境进行编写。
7、启动boa
li31@ubuntu:/etc/boa/var$ sudo ./boa
如果出现错误,不能启动,在boa.conf在注释掉以下命令,再启动
ErrorLog /var/log/boa/error_logAccessLog /var/log/boa/access_log
观察看错误提示是哪个就注释掉哪个。
8、当这些都完成后在浏览器上输入虚拟机的IP,如(192.168.8.117/pass.html)就会出现自己做的测试页面,可以将cgi文件与html文件配合起来一同测试。
三、移植boa到开发板进行测试
在开发板上测试时需要修改boa.conf文件的俩行代码,具体有时间在写。。。。。。
- boa移植
- BOA移植
- boa移植
- 移植BOA
- BOA移植
- BOA 移植
- BOA移植
- boa移植
- BOA移植
- boa移植
- BOA移植
- boa移植
- 移植BOA
- 嵌入式boa的移植
- boa嵌入式移植
- Boa服务器移植
- Boa服务器移植
- Boa服务器移植
- git中的对象
- 在ECS上启动tomcat后,第一次访问时间特别长
- 【HDUOJ]1010-Tempter of bone DFS+剪枝
- Redis4.0.1安装以及主从复制详解
- OpenCV——Opencv彩色图像在matplot中显示问题的解决
- boa移植
- Linux五种IO模型性能分析
- git的引用和tag
- 嵌入式Linux开发教程:Linux常见命令(上篇)
- Content is not allowed in prolog异常产生原因及处理方式
- git(十四)-git cherry-pick
- git的分支与合并
- HDOJ 3665 Seaside(dijkstra最短路,水题~)
- 使用springMVC注解@ResponseBody与jackson工具类在ajax请求中实现对象与json之间的相互转化