Boa服务器编译

对于物联网的数据发布,特点是流量小、服务器系统资源有限,还有就是非我所长,够用就行。

Boa的特点:部署方便,简单易用,资源占用小,功能够用。

编译:

#!/bin/sh

#下载源码
wget http://www.boa.org/boa-0.94.13.tar.gz

#安装两个辅助编译工具,分别对应yacc和lex两个命令
apt-get install bison flex

#修改头文件
src/compat.h
//#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

编译警告汇总:

// (1)
y.tab.c:1196:16: warning: implicit declaration of function ‘yylex’ [-Wimplicit-function-declaration]
       yychar = yylex ();

// (2)
boa_lexer.l:82:2: warning: implicit declaration of function ‘yyerror’; did you mean ‘perror’? [-Wimplicit-function-declaration]
  yyerror("unterminated string constant");
  ^~~~~~~

// (3)
lex.yy.c:1330:16: warning: ‘input’ defined but not used [-Wunused-function]
     static int input  (void)
                ^~~~~
lex.yy.c:1287:17: warning: ‘yyunput’ defined but not used [-Wunused-function]
     static void yyunput (int c, char * yy_bp )
                 ^~~~~~~

// (4)
request.c:84:17: warning: pointer targets in passing argument 3 of ‘accept’ differ in signedness [-Wpointer-sign]
                 &remote_addrlen);
                 ^~~~~~~~~~~~~~~

//(5)
/usr/include/arm-linux-gnueabihf/sys/socket.h:232:12: note: expected ‘socklen_t * restrict’ {aka ‘unsigned int * restrict’} but argument is of type ‘int *’
 extern int accept (int __fd, __SOCKADDR_ARG __addr,
            ^~~~~~

常用配置项:

#HTTP静态资源根目录
DocumentRoot /var/www

#HTTP默认服务端口
Port 80

#日志文件(设置为/dev/null则关闭)
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log

#CGI程序路径(重定向)
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

#配置文件默认路径, 宏定义在 src/defines.h,可在编译前修改
#同时,可在执行启动命令时通过启动参数 -c 覆盖默认路径
#define SERVER_ROOT "/etc/boa"

编译:

./configure

#如果是交叉编译,则修改生成的Makfile重新指定交叉编译器
CC=arm-linux-gnueabihf-gcc
CPP=arm-linux-gnueabihf-gcc

make

启动:

#创建配置文件目录/etc/boa并将boa.conf拷贝到此处
#将编译生成的二进制文件boa拷贝到/usr/bin目录
boa

配置为systemd服务:

创建服务配置文件/lib/systemd/system/boa.service

[Unit]                                                                                                                                        
Description=Boa-HTTP Server
After=network.target

[Service]
Type=forking
ExecStart=boa

[Install]
WantedBy=multi-user.target
#更新配置文件
systemctl daemon-reload
#启动服务
systemctl start boa
#添加开机启动
systemctl enable boa

补充说明:

虽然部署方式灵活,但我还是推荐以官方默认方式来配置它,比如配置文件、静态资源 、日志文件、CGI程序等默认路径;

也许是代码太过老旧,编译时出现了很多警告,有时间还是可以作进一步了解的;

配置文件中还有一些配置项,有某些应用场景还是可以进一步尝试的,比如KeepAlive配置项,具体细节可参考官方文档:http://www.boa.org/documentation/

上一篇:lower_bound和upper_bound


下一篇:项目:飞凌单片机boa服务器遇到问题总结