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

开发环境
        Vmware 虚拟机 + Debian 5.0。
        具备基本的GCC编译环境,能够执行configure产生Makefile。
        登陆Debian的用户名为hyx,用户hyx属于用户组hyx
       
源码下载

        下载网址:  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正常运行。

你可能感兴趣的:(boa,linux)