原文:http://www.linuxidc.com/Linux/2011-08/39780p3.htm
Ubuntu上编译使用boa服务器的教程文章,已经有很多了,博客上也有很多人写了,我就不赘述了,在这里贴出几处初次使用boa的朋友可能遇到的问题
执行 boa
检查 error_log 里面的内容,有如下错误:
boa.c:194 - unable to bind: Address already in use
因为是在pc机上,默认的boa.conf 里面Port的端口设置为 80,因此运行 boa时会有如上错误,可以在 error_log文件里面查看到
解决办法:修改 boa.conf 里面 的 port 值为 8080(可指定其它未被使用的)保存即可。
再次尝试,浏览器地址栏里输入:192.168.1.111:8080后,www目录下的 index.html 访问正常
接下来测试cgi程序:
浏览器地址栏里输入:192.168.1.111:8080/cgi-bin/test.cgi 有可能遇到 bad gateway 的错误,或者 在error_log里面提示:
request from 192.168.1.119 "GET /favicon.ico HTTP/1.1" ("/var/www/favicon.ico"): document open: No such file or directory
[01/Aug/2011:10:04:37 +0000] request from 192.168.1.119 "(null)" ("(null)"): header read: Connection reset by peer
这时,需要检查一下 boa.conf 里面的 User 和 Group 后面的设置,比如默认的 User后面 跟的是 nobody,我们需要把Group后面的参数 修改为 0,保存
kill -9 pid(boa)
重新启动boa,再次通过浏览器访问cgi,访问成功!
注:做嵌入式开发板上的boa移植时,这里确实如很多博友写的,修改 User 及 Group 后面的参数为 0,可是初次在Ubuntu里面使用boa的朋友可能就忽略了这个。
Ubuntu 配置 boa 服务器 一例:
一 下载Boa源码
下载地址: http://www.boa.org/
最新发行版本: 0.94.13
下载 boa-0.94.13.tar.gz
解压:# tar xzf boa-0.94.13.tar.gz
二 安装需要工具bison,flex
sudo apt-get install bison flex
三 生成Makefile文件
执行:
cd boa-0.94.13/src
./configure
四 然后make,但是为了保证make不出现错误的话必须现修改一些文件(即配置)
Boa的配置
1 Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。
修改boa.conf文件:servername去掉注释,nogrounp改为0,/var/www改为/www(可选,设置的什么系统中对应即可)
2 修改compat.h中的
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
为:
#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
3 修改log.c
注释掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
即修改为:
#if 0
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
#endif
修改完成后,make,然后切换为root用户,./boa运行
五 在浏览器中输入本机的ip的地址及访问页面即可,如果有index.html页面,输入ip地址就显示出来了
六 常见错误:
1 错误1: gethostbyname:: No such file or directory
解决办法: 修改boa.conf 去掉 ServerName www.your.org.here 前的注释符号(#)
2 错误1: util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o]
解决办法: 修改 src/compat.h
找到
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
3 错误2: 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 0
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
#endif
4 错误3: boa.c:228 - icky Linux kernel 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
5 错误4: 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("unable to dup2 the error log");
}
即修改为:
#if 0
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
#endif
Ubuntu 配置 boa 服务器 一例:
操作系统及前期准备
Ubuntu版本:11.04(我的Ubuntu已经从10.10升级到11.04)
boa安装软件:boa-0.94.14rc21.tar.gz (最新版本,网上用的比较多的是boa-0.94.13)
第一步:解压boa软件
tar zxvf boa-0.94.14rc21.tar.gz
第二步:进入解压后的目录
配置:./configure
编译:make
第三步:进入src目录
执行命令:./boa,此时出现错误:
Could not chdir to "/etc/boa": aborting
解决方法:在/etc 里建立boa目录,并把配置文件boa.conf拷进去。
执行命令:./boa,出现错误:
[30/Jun/2011:12:15:40 +0000] No such group: nobody
[30/Jun/2011:12:15:40 +0000] log.c:53 (open_logs) - unable to open error log: No such file or directory
解决方法:
1) 把boa.conf中的group和user都改为0。
2) 在/var/log目录下建立boa文件夹:
执行:mkdir /var/log/boa
这时,再次执行./boa。则可执行。用ps -e查看所有进程:
可见,boa已运行。
这时我们再查看一下它的日志文件:vi /***/error_log (error_log的具体存放目录见boa.conf)。若显示为如下,则表示成功运行。
- [04/Jul/2011:05:47:01 +0000] boa: server version Boa/0.94.14rc21
- [04/Jul/2011:05:47:01 +0000] boa: server built Jul 4 2011 at 12:29:41.
- [04/Jul/2011:05:47:01 +0000] boa: starting server pid=5438, port 80
以上表示,boa绑定在80端口,它的id号为5438。
然后,放一个网页文件到已设置的网页目录里,接着在浏览器中输入系统的IP地址,则可显示出被放入的网页。
如果没有成功的显示出来,则需检查它的错误日志文件,即error_log,看看是否有错误产生,及boa.conf配置文件等。