1 编译
首先官网www.boa.org下载最新版本源码.
以Ubuntu为例,确认系统已经安装了bison和flex:
sudo apt install bison flex
解压缩进入src文件夹,看一下defines.h,找到下面这几行:
#ifndef SERVER_ROOT
#define SERVER_ROOT "/application/boa"
#endif
这里我已经吧SERVER_ROOT根据我的需要做了修改,这个宏定义定义的就是部署后的boa工作目录.
接着在compat.h里找到下面这行:
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
我已经做了修改,原来是foo##->tm_gmtoff,编译器不支持.
然后运行./configure,生成Makefile.
因为是移植,所以Makefile要做适当修改:
CC和CPP分别改成需要用到的交叉编译器,其他参数根据自己需要调整,例如我这里:
CC = arm-poky-linux-gnueabi-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.14-sumo/sysroots/cortexa9hf-neon-poky-linux-gnueabi
CPP = arm-poky-linux-gnueabi-gcc -E -march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.14-sumo/sysroots/cortexa9hf-neon-poky-linux-gnueabi
最后,可以make一下了,编译出来两个东西boa和boa_indexer,就是boa webserver的本体.
2 配置
boa解压的目录里有个boa.conf,这就是boa的配置文件,里面有几个项目是需要调整的:
Port 80 #web服务端口
...
ErrorLog /application/boa/error_log #错误日志路径,保证可写
...
AccessLog /application/boa/access_log #访问日志路径,保证可写
...
DocumentRoot /application/boa/www #这里是放html文件的地方
...
DirectoryMaker /application/boa/boa_indexer #boa遍历web目录所需要的工具
...
MimeTypes /application/boa/mime.types #mime配置文件的路径
...
CGIPath /bin:/usr/bin:/sbin:/usr/sbin #cgi程序运行时的环境变量
...
ScriptAlias /cgi-bin/ /application/boa/www/cgi-bin/ #web路径到实际cgi路径的映射
配置文件里每一条都都有注释,根据自己需求去定义,如果在嵌入式目标板上有root权限,建议不用对User和Group两个选项修改.
3 部署
对应第二节中的配置文件,我这里需要在目标板上建立/application/boa文件夹,拷贝如下文件:
boa boa_indexer boa.conf
如果目标板的/etc目录下没有mime.types,就根据配置文件指定路径,从自己的电脑上拷贝一个过去(e.g. Ubuntu的/etc/mime.types).
然后,boa下建立www文件夹,www下建立cgi-bin文件夹.
www文件夹下面放如index.html等等站点的静态文件,cgi-bin下面就是各种cgi程序来提供动态功能了.
所有的静态资源要给读写权限,无脑chmod 666,cgi程序需要执行权限,无脑chmod 777.
运行./boa,如果没有root权限没法用小端口比如80,无脑root运行.
此时通过浏览器访问目标板ip就能看到主页了.
4 结论
boa确实很轻,对于一些简单的需求十几分钟搞定,资源受限系统特别合适.
boa实在太"轻"了,要实现一些功能比如用户权限管理之类还需要自己做很多工作,cgi也落后了,就不如折腾其他框架了.