下载阶段
官网地址 Boa Webserver
下载
wget http://www.boa.org/boa-0.94.13.tar.gz
解压
tar xf boa-0.94.13.tar.gz
切换到src目录
cd boa-0.94.13/src
编译阶段
配置
./configure
修改boa-0.94.13/src/Makefile
修改前
31 CC = gcc
32 CPP = gcc -E
修改后,aarch64-linux-gnu-gcc 的所在路径要加到环境变量PATH中
31 CC = aarch64-linux-gnu-gcc
32 CPP = aarch64-linux-gnu-gcc -E
编译
make clean
make
编译报错1
报错信息
aarch64-rockchip1031-linux-gnu-gcc -g -O2 -pipe -Wall -I. -c -o util.o util.c
In file included from boa.h:50,
from util.c:26:
util.c: In function ‘get_commonlog_time’:
util.c:100:39: error: pasting "t" and "->" does not give a valid preprocessing token
100 | time_offset = TIMEZONE_OFFSET(t);
| ^
compat.h:120:30: note: in definition of macro ‘TIMEZONE_OFFSET’
120 | #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
| ^~~
make: *** [<builtin>: util.o] Error 1
修改 compat.h 的第 120 行
vim compat.h +120
修改前
120 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改后
120 #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
编译报错2
报错信息
aarch64-rockchip1031-linux-gnu-gcc -o boa y.tab.o lex.yy.o alias.o boa.o buffer.o cgi.o cgi_header.o config.o escape.o get.o hash.o ip.o log.o mmap_cache.o pipe.o queue.o read.o request.o response.o select.o signals.o util.o sublog.o timestamp.o -g
/home/lingke/projects/rk3588s/debian11_sdk/QuarkPi-CA2_SDK_v1.0/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/../lib/gcc/aarch64-none-linux-gnu/10.3.1/../../../../aarch64-none-linux-gnu/bin/ld: log.o:/home/lingke/projects/boa-0.94.13/src/log.c:31: multiple definition of `cgi_log_name'; config.o:/home/lingke/projects/boa-0.94.13/src/config.c:63: first defined here
/home/lingke/projects/rk3588s/debian11_sdk/QuarkPi-CA2_SDK_v1.0/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/../lib/gcc/aarch64-none-linux-gnu/10.3.1/../../../../aarch64-none-linux-gnu/bin/ld: log.o:/home/lingke/projects/boa-0.94.13/src/log.c:30: multiple definition of `access_log_name'; config.o:/home/lingke/projects/boa-0.94.13/src/config.c:62: first defined here
/home/lingke/projects/rk3588s/debian11_sdk/QuarkPi-CA2_SDK_v1.0/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/../lib/gcc/aarch64-none-linux-gnu/10.3.1/../../../../aarch64-none-linux-gnu/bin/ld: log.o:/home/lingke/projects/boa-0.94.13/src/log.c:29: multiple definition of `error_log_name'; config.o:/home/lingke/projects/boa-0.94.13/src/config.c:61: first defined here
collect2: error: ld returned 1 exit status
make: *** [Makefile:43: boa] Error 1
修改 Makefile 的第 25 行
vim Makefile +25
修改前
25 CFLAGS = -g -O2 -pipe -Wall -I.
修改后
25 CFLAGS = -g -O2 -pipe -Wall -I. -fcommon
运行阶段
拷贝boa程序到开发板的/usr/bin/
sudo mv boa /usr/bin/
创建配置目录
sudo mkdir /etc/boa
sudo cp boa.conf /etc/boa
创建日志目录
sudo mkdir /var/log/boa/
创建www目录
sudo mkdir /var/www/
创建cgi-bin目录
sudo mkdir /usr/lib/cgi-bin
新建/var/www/index.html
<html>
<body>
<h3>this is a test!</h3><br/>
<img src="image.jpg"/>
<h3>tree picture</h3><br/>
<a href="/cgi-bin/hello.cgi">to cgi page</a>
</body>
</html>
新建/var/www/image.jpg,随便从网上下载一张图片,命名为image.jpg,放到/var/www/目录下
新建/usr/lib/cgi-bin/hello.c
// hello.c
#include <stdio.h>
int main() {
printf("Content-type: text/html\n\n");
printf("<html><body>\n");
printf("<h1>Hello, World!</h1>\n");
printf("</body></html>\n");
return 0;
}
aarch64-linux-gnu-gcc -o hello.cgi hello.c
Boa 服务器需要有足够的权限来访问 /var/www 目录及其子目录中的文件。如果权限设置不正确,可能会导致 403 Forbidden 错误
sudo chmod -R 755 /var/www
启动boa服务器
sudo boa