boa相关[转载]

2024-02-02 00:48
文章标签 相关 转载 boa

本文主要是介绍boa相关[转载],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://bbs.61job.cn/space/viewspacepost.aspx?postid=3670

写在前面:  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. www.boa.org下载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 下通过http://172.20.223.151这种形式访问,进行测试。

五. 移植到开发板
  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 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
   找到
   #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

 

 

 

http://www.52rd.com/Blog/Detail_RD.Blog_farsight2009_20437.html

 

 

 

 

 

 

[linux嵌入式方向] Boa服务器移植

 farsight2009 发表于 2009-7-8 13:21:00

 

作者: 曹忠明,华清远见嵌入式学院 讲师。

Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会 fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。

下面给大家介绍一下Boa服务器移植的具体操作步骤,希望能够有帮助。

环境
       主机:ubuntu8.10
       交叉工具链:gcc-3.4.5-glibc-2.3.6
       目标:s3c2410开发板

结合网上一些文档,整理了一个比较完整的文档。

1.下载Boa源码

下载地址: http://www.boa.org/

最新发行版本: 0.94.13

下载 boa-0.94.13.tar.gz

解压:# tar xzf boa-0.94.13.tar.gz

2.安装需要工具bison,flex

sudo apt-get install bison flex

否则会出现如下错误

make: yacc:命令未找到
       make: *** [y.tab.c] 错误 127

make: lex:命令未找到
       make: *** [lex.yy.c] 错误 127

3.修改文件

(1)修改 src/compat.h

找到

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

修改成

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

否则会出现错误:

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

(2)修改 src/log.c

注释掉

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

为:

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

否则会出现错误:

log.c:73 unable to dup2 the error log:bad file descriptor

(3)修改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

否则会出现错误:boa.c:211 - getpwuid: No such file or directory

注释掉下面语句:

if (setuid(0) != -1) {
                        DIE(”icky Linux kernel bug!”);
        }

#if 0
         if (setuid(0) != -1) {
                        DIE(”icky Linux kernel bug!”);
                }

#endif

否则会出现问题:boa.c:228 - icky Linux kernel bug!: No such file or directory

4、生成Makefile文件

执行:

#cd boa-0.94.13/src
         #./configure

5、修改Makefile

cd src
         vim Makefile

修改CC = gcc 为 CC = arm-softfloat-linux-gnu-gcc

修改CPP = gcc -E 为 CC = arm-softfloat-linux-gnu-gcc -E

6、编译

make
         ls -l boa
         -rwxr-xr-x 1 david david 189223 2009-05-31 13:44 boa

然后为生成的二进制文件boa瘦身

arm-softfloat-linux-gnu-strip boa
         ls -l boa
         -rwxr-xr-x 1 david david 61052 2009-05-31 13:51 boa

可以发现boa的大小前后差距很大这为我们节省了很大的空间

7、Boa的配置

这一步的工作也在电脑主机上完成。

在boa-0.94.13目录下已有一个示例boa.conf,可以在其基础上进行修改。如下:

#vi boa.conf

(1)Group的修改

修改 Group nogroup

为 Group 0

(2)user的修改

修改 User nobody

为 User 0

(3)ScriptAlias的修改

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

为 ScriptAlias /cgi-bin/ /www/cgi-bin/

(5)DoucmentRoot的修改

修改DoucmentRoot /var/www

为DoucmentRoot /www

(6)ServerName的设置

修改#ServerName www.your.org.here

为 ServerName www.your.org.here

否则会出现错误“gethostbyname::No such file or directory”

(7)AccessLog修改

修改AccessLog /var/log/boa/access_log

为#AccessLog /var/log/boa/access_log

否则会出现错误提示:“unable to dup2 the error log: Bad file descriptor”

(8)以下配置和boa.conf的配置有关,都是在ARM根文件系统中创建

以下步骤在开发板上进行:

创建目录/etc/boa并且把boa 和 boa.conf拷贝到这个目录下

mkdir /etc/boa

创建HTML文档的主目录/www

mkdir /www

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

mkdir /www/cgi-bin

以下步骤在ubuntu下进行:

将boa.conf拷贝到开发板根文件系统的/etc/boa下

#cp boa.conf /source/rootfs/etc/boa

将boa拷贝到开发板根文件系统的/etc/boa下

#cp src/boa /source/rootfs/etc/boa

将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下

#cp /etc/mime.types /source/rootfs/etc

将你的主页index.html拷贝到www目录下

8、测试

打开一个浏览器输入开发板ip看看效果

OK

 

 

 

 

 

http://blog.chinaunix.net/u/29845/showart_241016.html

 

 

Boa移植笔记

嵌入式Web服务器移植

    《嵌入式Linux系统开发详解——基于EP93XX系列ARM》一书和boa自带的文档等对该内容有比较详细的介绍,但在实验过程中,仍可能会出现一些问题。下面是我在WNC201系统(AT91RM9200)上的移植过程,欢迎讨论。

第一步 Boa程序的移植

1、下载Boa源码

    下载地址: http://www.boa.org/ , 或者 http://sourceforge.net

    最新发行版本: 0.94.13

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

    解压:# tar xzf boa-0.94.13.tar.gz

2、生成Makefile文件

    直接运行src/configure文件

3、修改Makefile文件

    a、

修改 CC = gcc

为 CC = /usr/local/arm/2.95.3/bin/arm-linux-gcc

    b、

修改 CPP = gcc - E

为 CPP = /usr/local/arm/2.95.3/bin/arm-linux-gcc -E

4、编译

    # make

    # /usr/local/arm/2.95.3/bin/arm-linux-strip boa

第二步 Boa的配置

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

1、Group的修改

修改 Group nogroup

为 Group 0

    由于在/etc/group文件中没有nogroup组,所以设成0。另外在/etc/passwd中有nobody用户,所以User nobody不用修改。

2、ScriptAlias的修改

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

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

3、ServerName的设置

修改 ServerName www.your.org.here

为 ServerName www.your.org.here

    注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory”,所以必须打开。其它默认设置即可。

4、User的设置

    原文是以nobody用户启动boa的,在后来的实践中发现,该用户无法实现POST,无法上传文件,无法访问共享内存,所以在我的系统中,

修改 User nobody
User root 或者 0

    但是这样,boa无法正常启动,查看ErrorLog可以看到,“boa.c:266.icky Linux kernel bug!:No such file ”。解决该问题的方法是将boa.c文件中以下几行判断去掉即可。

if ( setuid( 0) ! = - 1) {
    DIE( "icky Linux kernel bug!" ) ;
}

第三部:Boa的执行

    成功配置以后,还需要创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,将静态网页存入该目录下(可以将主机 /usr/share/doc/HTML/目录下的index.html文件和img目录复制到/var/www目录下),创建CGI脚本所在录/var /www/cgi-bin,将cgi的脚本存放在该目录下。另外还要将mime.types文件复制/etc目录下,通常可以从linux主机的/etc 目录下直接复制即可。

    实际运行时,可以将boa.conf文件、index.html文件、img目录和mime.types文件放到CF卡目录下,建立目录后,拷贝至相应目录。

    制作run.sh

mkdir /etc/boa
cp /cf/boa/boa.conf /etc/boa/
mkdir /var/log
mkdir /var/log/boa
mkdir /var/www
cp /cf/boa/index.html /var/www/
cp -r /cf/boa/img /var/www/
mkdir /var/www/cgi-bin
cp /cf/boa/mime.types /etc/
cp /cf/boa/boa /

./boa &

    直接在浏览器中输入 http://192.168.1.107 ,出现Red Hat的欢迎网页。静态HTML调试成功。

第四步 CGI脚本测试

1、编写Helloworld.c程序

# include < stdio. h>

int main( void )
{
        printf ( "Content-type: text/html/n/n" ) ;
        printf ( "<html>/n" ) ;
        printf ( "<head><title>CGI Output</title></head>/n" ) ;
        printf ( "<body>/n" ) ;
        printf ( "<h1>Hello,world.</h1>/n" ) ;
        printf ( "<body>/n" ) ;
        printf ( "</html>/n" ) ;
        exit ( 0) ;
}

    交叉编译生成helloworld.cgi

# /usr/local/arm/2.95.3/bin/ arm-linux-gcc -o helloworld.cgi helloworld.c

2、浏览

    将helloworld.cgi拷贝至/var/www/cgi-bin/下,浏览器输入

    http://192.168.1.107/cgi-bin/helloworld.cgi

    注意:拷贝至目标板上后,必须更改其属性chmod 755 *

 

 发表于: 2007-01-31,修改于: 2007-03-29 10:58 已浏览2402次,有评论10条 推荐 投诉

  网友评论
  jiaxi 时间:2007-08-08 14:42:04 IP地址:218.104.96.★
请教你一个问题,

BOA已经移植成功了,

怎么可以让BOA 自动执行呢?(目标板以启动 BOA自动运行)


  白石 时间:2007-08-17 14:46:51 IP地址:218.75.124.★
怎么可以让BOA 自动执行呢?(目标板以启动 BOA自动运行)????你这句话我不明白?

你是不是想问,如何让一个程序在系统启动后自动运行?

这得看你的文件系统,在我的系统里,在/etc/profile中启动boa即可。

  本站网友 时间:2007-09-01 02:14:38 IP地址:220.231.194.★
thanks u guy 

i see u blog with configure success the boa server

  本站网友 时间:2007-09-29 19:45:36 IP地址:221.192.241.★
我的是在PC机上调和板子(2410)上调,都会出来这样一个问题:boa.c:194 unable to bind: Address already in use.

这个和IP有关系吗,我改别的IP也是出现这样的问题,我在IP.C里把INADDR_ANY改成服务器的IP,提示是:can not assign requested address

郁闷好几天了,万望赐教,我的邮箱是:yin4130796@163.com,

Blog作者的回复 :
没遇到过。你看一下BOA里面,看看这个错误是什么意思

  qiuyu00 时间:2007-11-12 12:01:03 IP地址:58.68.132.★
我现在已经将boa程序移植到板子上了,也能运行了,但是因为要通过网页往数据库里面写数据,因此交叉编译的时候需要-lsqlite3,现在的问题是我用gcc -static xx.c -o xx.cgi -lsqlite3时能顺利地将数据写入到数据库里面,但是由于板子的flash太小了 , 所以不能用静态编译,改为采用动态编译,指令为:gcc xx.c -o xx.cgi -lsalite3 ,这样运行,编译的时候没问题,但是当从别的机子上访问的时候,但王数据库里面写数据的时候写不进去,现象就是握有调用回显程序,当提交数据后回显得时候,显示502 Bad Gateway,之前也遇到过这类问题,后来的解决办法就是重新交叉编译xx.c就可以了,我也试了,加上-static就可以了。请问这是什么问题?怎么解决?qq:149215692。万分感谢! 


Blog作者的回复 :
我现在的系统也是采用动态编译的,在做CGI程序时也经常会出现502 Bad Gateway错误,这通常是由于程序没写好,IE无法访问到下面的网页。

  本站网友 时间:2007-11-26 09:47:40 IP地址:221.12.67.★
哪个大虾帮我.我移植成功了.但是访问板子上的网页的时候怎么显示空的.也没错误提示

  本站网友 时间:2008-04-05 18:48:50 IP地址:121.28.161.★
我在编译是怎么老出现问题呢!你们能不能给建议。或给我一个啊

Blog作者的回复 :
你连出现什么问题都不写,别人怎么帮你。给个地址,给你一个吧

  caisx8411 时间:2008-09-01 19:32:21 IP地址:58.16.41.★
我的boa在开发板上启动了  但是为什么访问不了网页

哪位大侠帮帮忙

Blog作者的回复 :
可能是网络没有设置正确,也可能是你的boa设置有问题 

  zhaoxlj 时间:2008-10-19 23:18:19 IP地址:218.77.231.★
  # /usr/local/arm/2.95.3/bin/arm-linux-strip boa

是干什么的??我的怎么显示:output file cannot represent architecture unknown!

为什么???

Blog作者的回复 :
strip用于去符号,可以有效减小目标代码。可以不使用的。
你的问题我不是很清楚。你不加strip就是。

  本站网友 时间:2008-10-23 21:44:26 IP地址:122.240.232.★
你好,boa服务器上传文件时大小有没有限制啊,怎么修改啊

Blog作者的回复 :
我没去研究这个问题,我在实际使用过程中的感觉是,文件大小的限制应该跟boa没多大关心,跟cgic有,但cgic其实好像也没有限制。

这篇关于boa相关[转载]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668986

相关文章

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10