Chinaunix首页 | 论坛 | 博客
  • 博客访问: 134077
  • 博文数量: 16
  • 博客积分: 225
  • 博客等级: 民兵
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-28 22:07
个人简介

人是懒惰的,只要有借口就会不想往前。如果既有明确的目标,同时道路又直直指向目标,一览无余,只等你开始往前走,那么便没有借口,一往无前。

文章分类
文章存档

2014年(2)

2013年(9)

2012年(5)

分类: LINUX

2012-06-21 13:08:49

    Boa服务器移植到x86平台
 
    Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。
    Boa服务器的下载地址为: 。下面是我参考网上一些文档,移植Boa服务器到x86平台(linux虚拟机)上的具体过程。
 
    一、移植环境
 
    操作系统:Red Hat Enterprise Linux 5
    交叉工具链:arm-linux-gcc-4.3.2
    Boa服务器版本:boa-0.94.13
  
    二、下载Boa源码包,将其进行解压,并进行配置和编译。
 
    1、下载boa-0.94.13.tar.gz,解压:# tar zxvf boa-0.94.13.tar.gz
    2、进入到boa-0.94.13下的src目录:# cd boa-0.94.13/src
    3、执行:# ./configure
    4、执行:#make
    编译会出现错误:
    util.c: 100: 1: pasting "t" and "->" does not give a valid preprocessing token
    make: *** [util.o] Error1
    5、修改src/compat.h,找到代码120行:
             #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
    修改为: #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
    6、先清除刚刚编译错误生成的一些目标文件:# make clean
    再重新进行编译:# make
    此时会在src目录下生成boa可执行文件。
   
    三、修改配置文件boa.conf
 
    1、建立/etc/boa目录,并复制boa-0.94.13目录下的boa.conf到/etc/boa目录下:
    # mkdir /etc/boa
    # cp boa.conf /etc/boa
    2、修改boa.conf文件:# vi /etc/boa/boa.conf
   (1)修改访问权限
    代码48行:User nobody,修改为:User 0
    代码49行:Group nogroup,修改为:Group 0
   (2)设定日志目录:
    可以根据自己的情况设置日志目录,我这里使用默认的路径:
    ErrorLog   /var/log/boa/error_log
    AccessLog  /var/log/boa/access_log
   (3)设置html文件目录: DocumentRoot  /var/www/html
   (4)设置默认首页: DirectoryIndex  index.html
   (5)设置cgi脚本目录: 
    将ScriptAlias  /cgi-bin/ /usr/lib/cgi-bin,修改为:
      ScriptAlias  /cgi-bin/ /var/www/cgi-bin
 
    四、根据上一步的配置创建相应的文件目录以存放文件:
   (1)根据日志目录的设置建立/var/log/boa目录。
   (2)根据html目录的设置建立/var/www/html目录,存放html文件,包括index.html文件。
   (3)根据cgi目录的设置建立/var/www/cgi-bin文件夹,存放一些用来测试的cgi脚本。 
   
    五、运行boa程序
 
    我在/var/www/html目录下存放了Boa的主页,将其命名为index.html后,在Windows下打开浏览器,输入 (虚拟机的IP地址)进行测试:

   
    五、常见错误
 
    这些错误内容可查看/var/log/boa/error_log文件。
 
    1、gethostbyname:: No such file or directory
    解决办法: 修改boa.conf,去掉下面语句前的注释符号“#”:
    #ServerName
    即修改为:
    ServerName  
    2、util.c:100:1:pasting "t" and "->" does not give a valid preprocessing token
    make: *** [util.o] Error1
    解决办法: 修改 src/compat.h ,找到:
    #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
    修改为: 
    #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff 
    3、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、boa.c:228 - icky Linux kernel bug!: 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、boa.c:226 - icky Linux kernel bug!: Success
    解决办法:修改boa.conf,将修改过的访问权限:
    User 0
    修改为默认的:
    User nobody
 
    6、log.c:73 unable to dup2 the error log:bad file descriptor
    解决方法(建议采用方法1):
    方法 1>  确定日志目录对与所有用户都具有可读/写的权限;
    方法 2>  修改 src/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
 
    参考文献: web服务器Boa移植手册.pdf
阅读(2542) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Boa服务器移植(下)

给主人留下些什么吧!~~