微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ubuntu boa-0.94.13 Web服务器的编译与运行


源码下载

下载网址: http://www.boa.org/
最新版本: 0.94.13 (从0.95版本以后,BOA不再开源发布)
文件名称: boa-0.94.13.tar.gz

源码编译
解压源码,首先进入/home/hyx目录下,在/home/hyx路径下建立BOA 目录
hyx@debian-hyx:~$ mkdir BOA

将下载的源码压缩包放入BOA目录,然后进入BOA目录对源码进行解压缩
hyx@debian-hyx:~/BOA$ tar zxf boa-0.94.13.tar.gz

进入boa-0.94.13的src目录,通过configure生成Makefile文件
hyx@debian-hyx:~/BOA/boa-0.94.13/src$ ./configure

开始编译boa的源码
hyx@debian-hyx:~/BOA/boa-0.94.13/src$ make
如果编译成功,会在src目录下生成boa文件,可以通过file命令查看一下
hyx@debian-hyx:~/BOA/boa-0.94.13/src$ file boa
boa: ELF 32-bit LSB executable,Intel 80386,version 1 (SYSV) ......


编译问题
hyx@debian-hyx:~/BOA/boa-0.94.13/src$ make
yacc -d boa_grammar.y
make: yacc:命令未找到
make: *** [y.tab.c] 错误 127
产生原因:Debian里没有安装yacc程序
解决办法:网上有说apt-get install bison或者下载源码编译安装,我的方法是下载byacc最新版本byacc-1.9.tar.gz,编译生成yacc,将yacc拷贝到 /usr/local/bin/下。

hyx@debian-hyx:~/BOA/boa-0.94.13/src$ make
lex boa_lexer.l
make: lex:命令未找到
make: *** [lex.yy.c] 错误 127
产生原因:Debian里没有安装lex程序
解决办法:网上有说apt-get install flex或者下载源码编译安装,我的方法是下载flex最新版本flex-2.5.37.tar.gz,编译生成flex,然后改名为lex,将lex拷贝到 /usr/local/bin/下。

hyx@debian-hyx:~/BOA/boa-0.94.13/src$ make
gcc -g -O2 -pipe -Wall -I. -c -o util.o util.c
util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token
make: *** [util.o] 错误 1
产生原因:Debian里没有暗转lex程序
解决办法:编辑src下的compat.h文件,将126行的
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
改为
#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff

然后make就可成功编译出boa程序了,不过编译有警告。
hyx@debian-hyx:~/BOA/boa-0.94.13/src$ make

程序运行
将编译好的boa程序拷贝到BOA目录,将boa-0.94.13目录下的boa.conf也拷贝到BOA目录下。
hyx@debian-hyx:~/BOA/boa-0.94.13/src$ cd ../../
hyx@debian-hyx:~/BOA$ cp boa-0.94.13/src/boa ./
hyx@debian-hyx:~/BOA$ cp boa-0.94.13/boa.conf ./

执行 BOA程序,注意我这里执行的方法跟网上的介绍的不同哦。
hyx@debian-hyx:~/BOA$ ./boa -c `pwd`
-c表示指定boa.conf的路径,否则认的路径是/etc/boa/
`pwd`得到的是当前路径

端口绑定失败,会在终端提示下面这条信息
[28/Nov/2013:06:57:44 +0000] boa.c:194 - unable to bind: Permission denied
解决方法是编辑boa.conf,Port改为8080

如果终端提示如下信息,说明boa的日志记录文件打开失败。
log.c:73 unable to dup2 the error log:bad file descriptor
解决方法,按照boa.conf里定义,在/var/log/下面创建boa目录,注意hyx用户一定可以写/var/log/boa目录,否则还是提示上面这条信息。
我的另一解决方法是:修改boa.conf配置文件修改log日志的存储路径,比如就存在boa同级目录,在本例中为 /home/hyx/BOA,修改如下:
ErrorLog /home/hyx/BOA/error_log
AccessLog /home/hyx/BOA/access_log
另外将boa.conf的
User nobody
Group nogroup
改为
User hyx
Group hyx

这样改的目的是为了解决一个运行问题,当终端或者error_log文件里有如下信息时,程序不能运行。
[28/Nov/2013:08:17:37 +0000] boa.c:226 - icky Linux kernel bug!: Success
出现上述信息的原因是,以root账户运行了boa程序,同时boa.conf里User为0,Group也为0导致的。当把User设置为hyx,Group设置为hyx后,即使通过root账户运行boa,也不会报告上述错误

最后,解决以上问题后,boa应该就可以正常运行。最好ps一下看看是否有boa进程信息。另外还可以查看error_log文件,如果看到如下信息说明运行成功。
[28/Nov/2013:08:19:38 +0000] boa: server version Boa/0.94.13
[28/Nov/2013:08:19:38 +0000] boa: server built Nov 28 2013 at 14:39:24.
[28/Nov/2013:08:19:38 +0000] boa: starting server pid=11967,port 8080

后记

网上有些文章通过删除相关源码的方式解决了boa运行遇到的问题,其实这是不必的,这些问题都可以通过修改boa.conf文件,或者修改相关文件文件夹的读写属性来得到解决,并做到boa正常运行。

点击打开链接

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐