Chinaunix首页 | 论坛 | 博客
  • 博客访问: 268333
  • 博文数量: 74
  • 博客积分: 1336
  • 博客等级: 中尉
  • 技术积分: 1057
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-02 09:33
文章分类

全部博文(74)

文章存档

2016年(6)

2015年(4)

2014年(20)

2013年(8)

2012年(16)

2010年(9)

2009年(11)

我的朋友

分类: LINUX

2009-12-18 12:06:24

写在前面:  boa相关目录:

1. boa.conf 的存放目录:

   默认boa.conf是在/etc/boa.conf目录的,boa运行时会自动去找/etc/bon.conf文件。

   这个设定是在define.h文件中定义的,可在编译之前进行修改。

 

2. log目录: 分为 Errorlog  AccessLog 两个目录,可在boa.conf中修改。

    :

    ErrorLog /var/log/boa/error_log

    AccessLog /var/log/boa/access_log

 

3. html文件存放目录, 可在boa.conf文件中修改。

    : DocumentRoot /var/www

 

4. cgi脚本存放目录, 可在boa.conf文件中修改。

    : ScriptAlias /cgi-bin/ /var/www/cgi-bin

 

5. mime.types存放目录 , 可在boa.conf文件中修改。

    : MimeTypes /etc/mime.types

 

 

=======================================================

 

                               移植boa服务

 

=======================================================

 

.  编译boa程序

1. 下载boa-0.94.13.tar.gz

2. 解压: tar –zxvf boa-0.94.13.tar.gz

3. 进入boa-0.94.13/src目录, 执行./configure

4. make

编译时用2.95.3以上的版本会出错:

util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1

 

解决方法:

方法1>. 修改compat.h中的

#define TIMEZONE_OFFSET(foo) foo## ->tm_gmtoff

为:

#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff

 

方法2>. 改用2.95.3版本的编译器。

 

. 修改配置文件boa.conf

1. 建立/etc/boa目录, 并复制boa.conf/etc/boa目录下,并按照以下步骤进行修改。

2. 修改访问权限: 修改User nobody User 0 ; 修改Group nogroup Group 0

3. 设定日志目录:boa日志有两部分,Errorlog  AccessLog

一般情况下为/var/log/boa/error_log /var/log/boa/access_log两个文件。所以根据自己的情况情况设置日志目录:

ErrorLog /var/log/boa/error_log

AccessLog /var/log/boa/access_log

(注意:这里/var/log/boa目录必须为可写否则会出项错误:log.c:73 – Unable to dup2 the error log: Bad file r.)

 4. 设置html文件目录: DocumentRoot /var/www

 5. 设置默认首页: DirectoryIndex index.html

 6. 设置cgi脚本目录: 

     ScriptAlias /cgi-bin/ /usr/lib/cgi-bin  

     修改为

     ScriptAlias /cgi-bin/ /var/www/cgi-bin

 

.  根据第二步设置建立相关文件夹并放入文件:

 1. 根据(第二.3)的设置建立/var/boa 文件夹

 2. 根据(第二.4)的设置建立/var/www 文件夹 , 并在此目录下存放html文件(包括index.html文件)

 3. 根据(第二.6)的设置建立/var/www/cgi-bin 文件夹 ,  并存放一些用来测试的cgi脚本。

. OK,运行boa程序。

   windows 下通过这种形式访问,进行测试。

. 移植到开发板

  1>. (第一.3)操作完成之后,修改Makefile文件:

   :

    CC = gcc

    CPP = gcc -E   

   该为:

    CC = arm-linux-gcc

    CPP = arm-linux-gcc -E

   make即可。

  2>. 拷贝PC/etc/mime.types文件到开发板/etc目录下

    (或者将boa.conf文件中  MimeTypes /etc/mime.types     修改为:   MimeTypes /dev/null  )

. 常见错误:

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

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

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

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

   找到

   #define TIMEZONE_OFFSET(foo) foo## ->tm_gmtoff

   修改成

   #define TIMEZONE_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("unable to dup2 the error log");

  }

  即修改为:

  #if 0

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

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

   }

    #endif

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/starson7424/archive/2009/07/09/4334440.aspx

 

移植Boa Web服务器到ARM-Linux系统

本次移植的主要参考资料:

 

1 《嵌入式Web服务器移植 是网上一份Boa移植文档,比较全面。本文档就是基本参照它来写的。基本上上可以说是这篇文章的修改版,增加了我的移植经验。由于这篇文章被转载得到处都是,我实在无法找到出处。在这里衷心的感谢文章作者!!

 

2 《构建嵌入式Linux系统》的第十章 设置网络服务 中的Boa移植部分。


一、Boa程序的移植

1、下载Boa源码
   
下载地址:
   
目前最新发行版本: 0.94.13   (几年没更新版本了)
   
下载 boa-0.94.13.tar.gz

注意:若从boa上下载的是boa-0.94.13.tar.tar,解压方式一样
   
解压:

[tekkamanninja@Tekkaman-Ninja source]$tar xzf boa-0.94.13.tar.gz

2、生成Makefile文件
   
进入boa-0.94.13直接运行src/configure文件

[tekkamanninja@Tekkaman-Ninja src]$./configure

3、修改Makefile文件(注意:必须用cross-2.95.3, 如使用3.4.14.1.1等等会出错)

CC = /home/tekkamanninja/working/source/2.95.3/bin/arm-linux-gcc
CPP = /home/tekkamanninja/working/source/2.95.3/bin/arm-linux-gcc -E


4、交叉编译

[tekkamanninja@Tekkaman-Ninja src]$ make

5、去除调试信息,减小体积。(可选)

[tekkamanninja@Tekkaman-Ninja src]$ /home/tekkamanninja/working/source/2.95.3/bin/arm-linux-strip boa

6、将编译好的程序放入根文件系统的/bin目录下。

[tekkamanninja@Tekkaman-Ninja src]$ cp boa /home/tekkamanninja/working/nfs/rootfs/bin/

  


二、配置Boa

Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.confBoa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。

[tekkamanninja@Tekkaman-Ninja src]$ cd ../..
[tekkamanninja@Tekkaman-Ninja source]$ cd ../nfs/rootfs/etc/
[tekkamanninja@Tekkaman-Ninja etc]$ mkdir boa
[tekkamanninja@Tekkaman-Ninja etc]$ chmod 777 boa/
[tekkamanninja@Tekkaman-Ninja etc]$ cd boa
[tekkamanninja@Tekkaman-Ninja boa]$ kwrite boa.conf

1Group的修改

修改 Group nogroup
Group user开发板上有的组
修改 User nobody
User boa user组中的一个成员

根据你的开发板的情况设定。一定要存在的组和用户。

 

以下是我在开发板上的操作:

[root@~]#adduser -g user boa
Changing password for boa
Enter the new password (minimum of 5, maximum of 8 characters)
Please use a combination of upper and lower case letters and numbers.
Enter new password:
Bad password: too short.

Warning: weak password (continuing).
Re-enter new password:
passwd[820]: password for `boa' changed by user `root'
Password changed.
[root@~]#

2ScriptAlias的修改

修改 ScriptAlias /cgi-bin/  /usr/lib/cgi-bin/
ScriptAlias /cgi-bin/  /var/www/cgi-bin/

这是在设置CGI的目录,你也可以设置成别的目录。比如用户文件夹下的某个目录。

3ServerName的设置

修改 #ServerName
ServerName

注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory”,所以必须打开。其它默认设置即可。你也可以设置为你自己想要的名字。比如我设置为:ServerName tekkaman2440

此外,还需要:

mime.types文件复制/etc目录下,通常可以从linux主机的 /etc目录下直接复制即可。

(以下配置和boa.conf的配置有关)

创建日志文件所在目录/var/log/boa

创建HTML文档的主目录/var/www

创建CGI脚本所在录 /var/www/cgi-bin

[tekkamanninja@Tekkaman-Ninja log]$ mkdir -m 777 boa
[tekkamanninja@Tekkaman-Ninja log]$ cd ..
[tekkamanninja@Tekkaman-Ninja var]$ mkdir -m 777 www
[tekkamanninja@Tekkaman-Ninja var]$ mkdir -m 777 www/cgi-bin
[tekkamanninja@Tekkaman-Ninja var]$ cd ..
[tekkamanninja@Tekkaman-Ninja rootfs]$ cp /etc/mime.types etc/

三、运行Boa

开发板操作:

[root@~]#boa

如果发现boa没有运行,则可以在开发板的/var/log/boa/error_log文件中找原因。

比如端口已被其他程序占用:

[root@~]#cat /var/log/boa/error_log
[20/Feb/2008:21:21:57 +0000] boa.c:194 - unable to bind: Address already in use

或是用户设置错误等等,都可以查到。


四、功能测试

静态网页测试

将静态网页存入根文件系统的/var/www目录下(可以将主机 /usr/share/doc/HTML/目录下的index.htmlhomepage.cssimgstylesheet-images目录复制到/var/www目录下)

我参考《嵌入式Web服务器移植 的做法如下:

在根文件系统的/var目录下

[tekkamanninja@Tekkaman-Ninja var]$ cp /usr/share/doc/HTML/index.html www/
[tekkamanninja@Tekkaman-Ninja var]$ cp -r /usr/share/doc/HTML/img www/
[tekkamanninja@Tekkaman-Ninja var]$ cp /usr/share/doc/HTML/homepage.css www/
[tekkamanninja@Tekkaman-Ninja var]$ cp -r /usr/share/doc/HTML/stylesheet-images www/

直接在浏览器中输入开发板的IP地址(比如我的是 ,出现fedora的欢迎网页。静态HTML调试成功。

CGI功能测试

1、编写HelloworldCGI.c程序

[tekkamanninja@Tekkaman-Ninja source]$ vi helloworldCGI.c

(主程序的程序开头一定要用Tab,而不是空格,不然编译可能不通过)

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
        printf("Content-type: text/html\n\n");
        printf("\n");
        printf("CGI Output\n");
        printf("\n");
        printf("

Hello,world.

\n");
        printf("\n");
        printf("\n");
        exit(0);
}

2.交叉编译生成CGI程序

[tekkamanninja@Tekkaman-Ninja source]$ /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-gcc -o helloworldCGI helloworldCGI.c

helloworldCGI 拷贝至根文件系统的/var/www/cgi-bin/

[tekkamanninja@Tekkaman-Ninja source]$ cp helloworldCGI ../nfs/rootfs/var/www/cgi-bin/

3.测试

浏览器输入
  

网页出现 Hello,world. 调试成功!

 

 

用户名与用户组是对应的, 你如此胡乱组合岂能不出错!
就用它吧:
User 0
Group 0

其它的也可以试试:
User root
Group root  ------->
与上面的等价,一个是用户和组的名称,一个是uid&gid

User nobody
Group nobody

阅读(902) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~