设为首页收藏本站
查看: 11561|回复: 2

搭建Boa服务器

[复制链接]

25

主题

9

回帖

280

积分

中级会员

积分
280
Willian.Mo 发表于 2015-5-18 14:52:30 | 显示全部楼层 |阅读模式
本帖最后由 Willian.Mo 于 2015-5-18 14:57 编辑

Boa源码下载:
[mw_shl_code=bash,true]http://www.boa.org[/mw_shl_code]
解压进入src目录:
[mw_shl_code=bash,true]$ tar -zxvf boa-0.94.13.tar.gz
$ cd boa-0.94.13/src[/mw_shl_code]
配置交叉工具环境
[mw_shl_code=bash,true]$ export PATH=$PATH:/home/msl/Toolchain/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin[/mw_shl_code]
生成Makefile文件
[mw_shl_code=bash,true]$ ./configure[/mw_shl_code]
修改Makefile文件
a.找到CC=gcc,将其改成CC = arm-linux-gnueabihf-gcc
b.找到CPP = gcc –E,将其改成CPP = arm-linux-gnueabihf-gcc –E
保存退出

修改头文件defines.h
找到#define SERVER_ROOT “/etc/boa”修改成
# define SERVER_ROOT “/var/www”
这里定义的是web 服务器的文件根目录(用户可以自行定义,只要跟boa.conf 中设置一致就可以了)
运行make进行编译,得到的可执行程序为boa,并将调试信息剥去
[mw_shl_code=bash,true]$ make
$ arm-linux-gnueabihf-strip boa[/mw_shl_code]
完成Boa的配置,使其能够支持CGI程序的执行。在boa源码目录下有一个boa.conf
可以对其作如下修改:
[mw_shl_code=bash,true]Group 0
#ServerAdmin root@localhost
#ErrorLog /var/log/boa/error_log
#AccessLog /var/log/boa/access_log
ServerName www.your.org.here
DocumentRoot /var/www
DirectoryIndex index.html
MimeTypes /etc/mime.types
DefaultType text/html
#Alias /doc /usr/doc
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
ScriptAlias /index.html /var/www/index.html[/mw_shl_code]
copy相关文件到开发板
a.把配置文件boa-0.94.13/boa.conf 和 编译出的可执行文件boa-0.94.13/src/boa拷贝到开发板的/var/www目录
b.把Linux主机中的/etc/mime.types文件拷贝到开发板的/etc目录

测试
a.编辑index.html文件,内容如下,并将其拷贝到开发板
[mw_shl_code=bash,true]<html>
<head><title> BOATEST </title>
</head>
<body>
<h1> BOATEST</h1>
</body>
</html>[/mw_shl_code]
b.网络连接开发板与主机
c.在开发板运行boa可执行文件
[mw_shl_code=bash,true]$ ./boa[/mw_shl_code]
d.在PC机浏览器中输入开发板IP,即可访问开发板/var/www/index.html网页

移植过程中可能出现的问题
错误1: gethostbyname: No such file or directory
解决办法: 修改boa.conf 去掉 ServerName www.your.org.here 前的注释符号(#)

错误2: util.c:100:1: error: pasting "t" and "->"does not give a valid preprocessing token make: *** [util.o]
解决办法: 修改 src/compat.h的120行
#defineTIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#defineTIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

错误3: boa.c:211 - getpwuid
解决办法: 修改src/boa.c
注释掉下面这段程序:
[mw_shl_code=bash,true]if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}[/mw_shl_code]
即修改为:
[mw_shl_code=bash,true]#if 0
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
#endif[/mw_shl_code]
错误4: boa.c:228 - icky Linux kernel bug!
解决办法: 修改src/boa.c
注释掉下面语句:
[mw_shl_code=bash,true]if(setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}[/mw_shl_code]
即修改为:
[mw_shl_code=bash,true]#if 0
if(setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
#endif[/mw_shl_code]
错误4: log.c:73 unable to dup2 the error log: bad file descriptor
解决方法:
方法1> 确定日志目录对与所有用户都具有可读/写的权限
方法2> 修改src/log.c (建议采用方法1)
注释掉
[mw_shl_code=bash,true]if(dup2(error_log, STDERR_FILENO) == -1) {
DIE("unableto dup2 the error log");
}[/mw_shl_code]
即修改为:
[mw_shl_code=bash,true]#if 0
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
#endif[/mw_shl_code]



回复

使用道具 举报

38

主题

22

回帖

1195

积分

金牌会员

积分
1195
unityfancier 发表于 2015-6-1 12:32:18 | 显示全部楼层
如果我想boa和php一起提供服务,php已经移植好了,boa这边该肿么配置?
回复 支持 反对

使用道具 举报

25

主题

9

回帖

280

积分

中级会员

积分
280
 楼主| Willian.Mo 发表于 2015-6-1 19:09:11 | 显示全部楼层
unityfancier 发表于 2015-6-1 12:32
如果我想boa和php一起提供服务,php已经移植好了,boa这边该肿么配置?

这个我没有做过,不过你可以参考这篇文章
http://blog.sina.com.cn/s/blog_6d0252c30100u37v.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-4-19 11:55 , Processed in 0.049124 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表