搭建web服务器

1.首先运行src目录下的 ./configure 命令 生产Makefile

2.修改Makefile 中的编译工具链为交叉编译工具链

3.boa-0.94.13源码目录下的boa.conf配置文件可不修改,但要注意存储的log路径,需要在开发板上建立起来

4.boa运行后,ps查看,如果没有运行起来,可查考error.log,查看具体问题,在修改相应的文件,下面的修改比较全面,基本可以实现boa

解压缩boa的源码包:

tar zvxf boa-0.94.13.tar.gz  

进入src文件夹,进行配置

cd src/  
./configure  

生成的Makefile文件是针对X86平台的,为了生成能够在ARM上运行的boa,需要修改Makefile文件

修改Makefile的31~32行内容:

PS:这里跳转到31~32行,可以在vi下直接31+G,这样按,也可以:set nu

CC = gcc
CPP = gcc –E

应用(在交叉编译时使用):

CC = arm-none-linux-gnueabi-gcc
CPP = arm-none-linux-gnueabi-gcc –E

然后输入make命令进行编译,在src目录下就会生成boa文件。

PS:这里Make可能会出现错误,这里大致总结下

错误1: 

bison -y -d boa_grammar.y
gcc -g -O2 -pipe -Wall -I.   -c -o y.tab.o y.tab.c
y.tab.c: In function ‘yyparse’:
y.tab.c:1295: warning: implicit declaration of function ‘yylex’
lex boa_lexer.l
make: lex: Command not found
make: *** [lex.yy.c] Error 127

解决办法:由于没有flex,出现了缺少lex.yy.c文件的报错。只要安装上flex即可。

apt-get install flex  

错误2:(需要修改)

request.c: In function ‘get_request’:
request.c:84: warning: pointer targets in passing argument 3 of ‘accept’ differ in signedness
gcc -g -O2 -pipe -Wall -I.   -c -o response.o response.c
gcc -g -O2 -pipe -Wall -I.   -c -o select.o select.c
gcc -g -O2 -pipe -Wall -I.   -c -o signals.o signals.c
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] Error 1

解决办法:根据提示修改源码中的src/compat.h文件。

cd src
vi compat.h
修改:#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
为:#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff

错误3:Could not open boa.conf for reading 这个是因为根目录定义好了后,启动boa就要去这个根目录下读取boa.conf mime.types,因此根目录下必须有这两个文件。

错误4:boa.c:226 - icky Linux kernel bug!: Success 这是从log/boa/error_log中读到的,打没打开boa从这个文件就可看到。注释掉下面语句: if (setuid(0) != -1) { DIE(”icky Linux kernel bug!”); } 为 #if 0 if (setuid(0) != -1) { DIE(”icky Linux kernel bug!”); } #endif打开正确后,error_log将显示boa: server version Boa/0.94.13 [20/Sep/2010:08:26:24 +0000] boa: server built Sep 20 2010 at 16:20:39. [20/Sep/2010:08:26:24 +0000] boa: starting server pid=28683, port 80 同时一定要注意权限问题,配置里的用户一定要和实际一致,在那些文件拷贝过程中,要注意拷贝到/bin,/var/www/cgi-bin下后,文件权限需要做修改,用sudo chmod 755 文件名,这时才可用。

 

然后就可以把boa传输到4412板子上,这里我采用Nfs的方式直接挂载(如果遇到无法cp到板子本地目录的情况,需要把boa文件目录chmod -R 777,这样就能复制了)

接着就是要修改boa.conf文件

这里只给出一种比较简单的修改方式

(1)Group的修改(不需要修改)
修改 Group nogroup
为 Group 0  

(2)user的修改 (不需要修改)
修改 User nobody
为 User 0

(3)ScriptAlias的修改(这里如果没有cgi-bin文件夹需要创建以下)
修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
为 ScriptAlias /cgi-bin/ /www/cgi-bin/

(4)DoucmentRoot的修改(这个是你网页文件夹放置的地方,可以按你自己放的改,注意:不能有下级目录包含html文件了,网站根目录
修改DoucmentRoot /var/www
为DoucmentRoot /www

(5)ServerName的设置
修改#ServerName www.your.org.here
为 ServerName www.your.org.here
否则会出现错误“gethostbyname::No such file or directory”

(6)AccessLog修改
修改AccessLog /var/log/boa/access_log
为#AccessLog /var/log/boa/access_log
否则会出现错误提示:“unable to dup2 the error log: Bad file descriptor”

(7)ErrorLog修改(PS:这里这种修改方法是不保存日志的,比较偷懒)
修改为ErrorLog /dev/null

ErrorLog /var/log/boa/error_log,错误日志文件,如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用/dev/null。在下面设置时,注意一定要建立/var/log/boa目录

(8)以下配置和boa.conf的配置有关,都是在ARM根文件系统中创建
以下步骤在开发板上进行:
创建目录/etc/boa并且把boa 和 boa.conf拷贝到这个目录下
mkdir /etc/boa
创建HTML文档的主目录/www
mkdir /www
创建CGI脚本所在录 /www/cgi-bin
mkdir /www/cgi-bin
以下步骤在Linux下进行:
将boa.conf拷贝到开发板根文件系统的/etc/boa下
#cp boa.conf /etc/boa
将boa拷贝到开发板根文件系统的/etc/boa下
#cp src/boa /etc/boa
将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下
#cp /etc/mime.types /etc
将你的主页index.html拷贝到www目录下

最后运行,就Ok了

 

[plain] view plain copy

  1. [root@Real6410 boa]# boa &  

PS:这里也可以-c指定默认目录,boa启动时需要一个配置文件boa.conf,该文件的缺省目录由src/defines.h文件的SERVER_ROOT定义,或者在启动boa的时候通过参数“-c”指定。其中指定的默认目录是:/etc/boa/,即是

 

 

[plain] view plain copy

  1. [root@Real6410 boa]# boa -c /etc/boa/  &  

 

1>. 错误1: gethostbyname:: No such file or directory

    解决办法: 修改boa.conf   去掉 ServerName www.your.org.here 前的注释符号(#)

 

2>. 错误1: util.c:100:1: error: pasting "t" and "->"does not give a valid preprocessing token make: *** [util.o]

     解决办法: 修改 src/compat.h

   找到

   #defineTIMEZONE_OFFSET(foo) foo##->tm_gmtoff

   修改成

   #defineTIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

 

3>. 错误2: 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>. 错误3: 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>. 错误4: log.c:73 unable to dup2 the error log:bad file descriptor

   解决方法:

   方法1> 确定日志目录对与所有用户都具有可读/写的权限

   方法2> 修改src/log.c (建议采用方法1)

  注释掉

  if(dup2(error_log, STDERR_FILENO) == -1) {

  DIE("unableto dup2 the error log");

  }

  即修改为:

  #if 0

    if (dup2(error_log, STDERR_FILENO) == -1) {

  DIE("unable to dup2 the error log");

   }

   #endif

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值