红联Linux门户
Linux帮助

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

发布时间:2016-12-29 16:22:56来源:linux网站作者:dongchangc
源码下载
下载网址: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正常运行。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/27356.html