ubuntu11.10下实现boa的编译,在ubuntu上运行

系统:ubuntu11.10
内核版本:linux-3.0.57
编译器:4.6.1
boa:boa-0.94.13




       今天,看了boa服务器的一些操作,想在ubuntu下实现一个小的服务器,这里先介绍一下boa服务器, boa服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。因为他的源码开放,谁都可以从他的官网下载(http://www.boa.org/),进行开发和学习。
      boa Web服务器非常小巧,其源码包只有大约119KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。


我现在是实现在ubuntu上的boa服务(至于如何移植到开发板,我会在以后做)

按照下述步骤来:


1.下载源码包,官网在上面已经列出
  输入命令: tar zxvf boa-0.94.13


2.进入 boa-0.94.13目录下的src/目录,

       我们知道一个源程序要变成一个可执行文件,要经过 词法分析--> 语法分析 --> 语义分析 --> 中间代码生成 --> 对中间代码优化-->生成目标文件,编译一个linux下的c系统,也是这样的,包含词法和语法分析模块,不过Linux上用的是bison和flex。yacc是一个文法分析器的生成器,bison即是yacc的GNU版本Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex和YACC你可以轻松的构造一个语法解释器。

所以我们要先安装它们,输入命令:sudo apt-get install bison flex


你会看到一个.configure 文件
输入命令: sudo ./configure (如果不能执行,先修改它的权限,输入:chmod 777 .configuer)它会生成Makefile文件


3.然后输入:sudo make


好了,这里出现错误:


util.c: 在函数‘get_commonlog_time’中:
util.c:100:1: 错误: 毗连“t”和“->”不能给出一个有效的预处理标识符
make: *** [util.o] 错误 1

现在我们修改src目录下的 compat.h

找到:
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff


修改成为:
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff


再执行 :make,会在src目录下生成一个boa文件,


4.按需求修改主目录下的boa.conf文件,我没有改动,这是默认配置:
User nobody
Group nogroup
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
DocumentRoot /var/www    --------这个是web服务器启动/var/www 你的网页目录就是www
UserDir public_html
DirectoryIndex index.html    --------服务器启动的时候要有一个主目录的索引文件,也就是默认首页,就是index.html

修改完成后,把它拷到/etc/boa目录下,如果没有这个目录,自己手动创建 : sudo  mkdir  /etc/boa


5.在src目录下 

输入:./boa    出现:

[31/Jan/2013:10:42:55 +0000] log.c:73 - unable to dup2 the error log: Bad file descriptor 这样的错误。


我们要改动log.c文件

注释掉:

if(dup2(error_log, STDERR_FILENO) == -1) 
{
      DIE("unable to dup2 the error log");
}


然后:


make clean    


make




6.然后再在src目录下 执行: ./boa 若出现:Cannot open /var/log/boa/access_log for logging: logfile open: No such file or directory,或者是其他的Cannot open /var/log/boa/error_log for logging: logfile open: No such file or directory

哪个出现,你就在boa.conf里把它给注释掉(不要忘了/etc/boa/目录下的boa.conf),即 改成:

#AccessLog /var/log/boa/access_log


然后再./boa  此时boa服务器就已经启动,打开ubuntu浏览器,输入ubuntu的ip地址,就可以看到你放在/var/www里的网页了。ok























你可能感兴趣的:(linux)