Android搭建web Server—boa(一)

本文介绍了如何在Android设备上搭建 boa Web服务器,包括嵌入式设备Web服务器概述, boa 源码下载,交叉编译过程,解决编译错误,详细配置 boa 并在Android系统上进行配置,以及验证 boa 服务的正确运行。

Android搭建web Server—boa(一)


2017/1/20 16:36:26


1 嵌入式设备web服务器介绍


目前,在嵌入式设备中所使用的web服务器主要有:Boa、thttpd、lighttpd、appweb、apache等。下图是从网上下载的对这些web服务器的详解和对比。

Boa是一种嵌入式设备所用的web服务器,它运行于Linux和Unix下。它相较于其他web服务器,最大的区别就是他是一个单任务http服务器,它不像传统的web服务器那样为每个访问连接开启一个进程。Boa只能依次完成用户的请求,而不会fork()出新的进程来处理并发连接请求。但是Boa支持CGI(公共网关接口),能够为CGI程序fork()出一个进程来执行。出于Boa的设计目标就是速度和安全,以及它的单任务工作模式,令Boa在同等硬件条件下拥有更快的响应速度。

2 源码下载


  • 下载网址:http://www.boa.org/
  • 版本:boa-0.94.13(0.95版本之后,Boa不再开源发布)

3 交叉编译


3.1 编译前准备

  • 编译环境:Ubuntu-Server 16.04 LTS 32bit
  • 目标平台:Android
  • 编译主机安装arm-linux-androideabi-gcc编译器,并确保编译器加到环境变量中。
  • 由于下载的boa源码使用的是yacc和lex作为语法和词法分析器,而目前已经弃用,Ubuntu用的语法和词法分析器是bison和flex,所以还需要安装bison和flex。

3.2 编译及处理报错

  • 解包boa并进入boa-094.13/src目录,执行./configure,生成Makefile文件。
  • 开始编译:make。
  • make: yacc:Command not found
  • make: lex:Command not found
    这是在编译前没有做3.1的步骤。如果还是出现,那么修改Makefile文件如下。同时修改了gcc和g++编译器。
 ......
 27 # Change these if necessary
 28
 29 YACC = yacc
 30 LEX = lex
 31 CC = arm-linux-androideabi-gcc
 32 CPP = arm-linux-androideabi-gcc -E
 ......
  • ii:
    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如下。
......
119 #ifdef HAVE_TM_GMTOFF
120 #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
121 #else
122 #define TIMEZONE_OFFSET(foo) timezone
123 #endif
......
  • error_log: error:icky Linux kernel bug!。
    这个error要在后面运行boa时在error_log中才能看到。修改src/boa.c如下。
......
225 if (setuid(0) != -1) {
226 //DIE("icky Linux kernel bug!");
227 }
......

4 boa配置


4.1 boa.conf文件

在boa-094.13目录下,有boa.conf示例配置文件,我们在其基础上更改,以便更符合我们的配置。下面对配置项做一个介绍。

  • Port 80
    web端口,默认80,如果被占用,会报错,可以更改为其他可用端口,不过在访问时需指定端口。
  • User nobody ——> User 0
  • Group nogroup ——> Group 0
    访问连接时所用的用户名和组名,网上都是设为0,即root账户。应该也可以设置为已存在的用户和其对应的组名,不过,可能会牵涉到相关文件权限的问题。
  • ErrorLog /var/log/boa/error_log ——> ErrorLog /etc/boa/error_log
  • AccessLog /var/log/boa/access_log ——> AccessLog /etc/boa/access_log
    这是两个日志文件,我们可以自己设置对应的位置,注意更改此boa目录及其子目录下的所有文件的权限为777。
  • DocumentRoot /var/www ——> DocumentRoot /etc/boa/html
    存放html文件的地方。
  • DirectoryIndex index.html
    第一张页面的名称:index.html。
  • MimeTypes /etc/mime.types ——> MimeTypes /etc/boa/mime.types
    mime.types文件位置,可以从编译机器上拷贝至/etc/boa/。
  • ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ ——> ScriptAlias /cgi-bin/ /etc/boa/cgi-bin/
    CGI程序目录。

4.2 Android系统上配置

根据boa.conf文件,配置boa服务器。

  1. 在/etc/下新建boa/目录。更改目录及子目录权限为777。

    ll /etc/boa/
    drwxrwxrwx 4 root root 4096 Jan 21 13:48 ./
    drwxrwxrwx 3 root root 4096 Jan 19 15:17 ../
    -rwxrwxrwx 1 root root 0 Jan 19 15:22 access_log*
    -rwxrwxrwx 1 root root 7350 Jan 19 15:31 boa.conf*
    drwxrwxrwx 2 root root 4096 Jan 19 16:52 cgi-bin/
    -rwxrwxrwx 1 root root 0 Jan 19 15:22 error_log*
    drwxrwxrwx 2 root root 4096 Jan 19 15:55 html/
    -rwxrwxrwx 1 root root 24241 Jan 19 15:11 mime.types*

  2. 将make源码生成的boa可执行程序push到Android系统的/system/bin/目录,修改权限为777。

  3. 简单找一个index.html放在/etc/boa/html/下,或者写一段简单的CGI程序,放在/etc/boa/cgi-bin/下。
  4. 执行boa程序,可以用top命令确认是否开启,如果没有启动,可以查看error_log,查找报错原因。

5 验证boa服务


Android手机启动boa服务后,打开手机热点,假如你的手机热点的ip为192.168.43.1,port为80,则使用另一台终端,连接其热点,浏览器输入 http://192.168.43.1/ ,就可以看到你的index.html显示在浏览器上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值