BOA服务器移植——RK3568

151 阅读2分钟

下载阶段

官网地址 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