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服务器。
在/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*将make源码生成的boa可执行程序push到Android系统的/system/bin/目录,修改权限为777。
- 简单找一个index.html放在/etc/boa/html/下,或者写一段简单的CGI程序,放在/etc/boa/cgi-bin/下。
- 执行boa程序,可以用top命令确认是否开启,如果没有启动,可以查看error_log,查找报错原因。
5 验证boa服务
Android手机启动boa服务后,打开手机热点,假如你的手机热点的ip为192.168.43.1,port为80,则使用另一台终端,连接其热点,浏览器输入 http://192.168.43.1/ ,就可以看到你的index.html显示在浏览器上。
本文介绍了如何在Android设备上搭建 boa Web服务器,包括嵌入式设备Web服务器概述, boa 源码下载,交叉编译过程,解决编译错误,详细配置 boa 并在Android系统上进行配置,以及验证 boa 服务的正确运行。
1189

被折叠的 条评论
为什么被折叠?



