安防监控项目---boa服务器的移植

news2024/11/15 16:47:54

文章目录

  • 前言
  • 一、boa服务器简介
  • 二、移植步骤
  • 三、测试结果
  • 四、A9平台移植BOA
  • 总结


前言

书接上期,在配置完成环境后,那么接下来呢还得移植两个非常关键的东西,一个呢时boa服务器,另一个呢时cgi接口,boa服务器能够使得我们更好的与web进行交互,cgi接口能够更好的实现c语言和html语言的交互;两者在网页和A9平台交互之间起着至关重要的作用;接下来呢,看我手把手教学,哈哈哈哈,大家好好学哦!


一、boa服务器简介

首先要清楚boa是一个web服务器,它其实就是用来实现网页和终端通信的一段软件代码;
其可执行代码只有大约60KB左右,Boa是一个单任务的HTTP服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。Boa支持CGI。
Boa的设计目标是速度和安全。(CGI只是一个进程,用来提供接口),自动目录生成和自动文件强制进行拼接。
Boa的主要设计目标是速度和安全性。安全性在“不能被恶意用户破坏”的意义上,不是“细粒度访问控制和加密通信”。
源码下载地址如下:http://www.boa.org/,大家可以根据自己需求进行下载;
在本项目中使用的版本是boa-0.94.13

二、移植步骤

  • 步骤一
    解压源码,生成Makefile文件,编译工程,进行安装
tar -xvf boa-0.94.13.tar.gz 	//解压工程文件
cd boa-0.94.13/src/				//进入源目录文件夹
./configure						//生成Makefile文件,如果执行不了调整权限为0777
make 							//进行编译

注意:在执行make编译文件的时候会出现一些问题,下面是一些解决办法:

问题1: 	
目录: boa-0.94.13/src$ make
	yacc  -d boa_grammar.y
	make: yacc: Command not found
	make: *** [y.tab.c] Error 127
解决方法:
	/boa-0.94.13/src$ sudo apt-get install bison
问题2: 
	yacc  -d boa_grammar.y
	gcc  -g -O2 -pipe -Wall -I.   -c -o y.tab.o y.tab.c
	......
	lex  boa_lexer.l
	make: lex: Command not found
	make: *** [lex.yy.c] Error 127
解决方法:
	/boa-0.94.13/src$ sudo  apt-get install flex
WARNING: The following packages cannot be authenticated!
  libfl-dev flex
Install these packages without verification? [y/N] 
E: Some packages could not be authenticated
注意加参数-f 自动搜索依赖,下面选择y  : sudo  apt-get install flex -f
Do you want to continue? [Y/n] y
WARNING: The following packages cannot be authenticated!
  libfl-dev flex
Install these packages without verification? [y/N] y

问题3: 	
util.c: In function ‘get_commonlog_time’:
util.c:100:39: error: pasting "t" and "->" does not give a valid preprocessing token
		 time_offset = TIMEZONE_OFFSET(t);									   ^
compat.h:120:30: note: in definition of macro ‘TIMEZONE_OFFSET’
 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff						  ^
make: *** [util.o] Error 1	
问题描述:在compat.h文件中的宏定义问题:  ‘TIMEZONE_OFFSET’
解决方法:
	修改 boa-0.94.13/src$ vi compat.h  +120
	找到
	#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
	修改成
	#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

	将boa.c中的 vi   boa.c
	225     #if 0     //注释掉
	226         if (setuid(0) != -1) {
	227             DIE("icky Linux kernel bug!");
	228         }
	229     #endif             

这三行注释掉,否则boa启动时会出现“boa.c:226 - icky linux kernel bug!: No such file or directory错误”		
清除之前编译的内容 make clean (防止某些依赖的信息出现问题)
重新make 
再次boa-0.94.13/src$ make
make: Nothing to be done for `all'.
make主要检查的是时间戳, 只要target比依赖的文件时间靠后它就认为不需要编译
  • 步骤二
    建立安装目录,如果是在Ubuntu下测试,那我们可以安装在你想要安装的目录下,要是直接安装ARM版本的,那就是得在A9平台上使用,所以必须安装在根文件服务器下,这样是不是就直接可以在PC终端直接在A9平台直接运行该服务器啦,哈哈;

     sudo mkdir -p 	/boa 	/boa/www 	/boa/cgi-bin 	/boa/log 
      (-p,--parents,此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录)
     将src/defines.h中的
     #define SERVER_ROOT "/etc/boa" 
     修改为
     #define SERVER_ROOT "/boa"
     (这样boa程序启动时会在/boa目录下寻找boa.conf配置文件,并且将/boa文件夹作为服务器的根目录)。
     将需要的文件复制到安装目录中
     将boa-0.94.13/src目录下生成的boa、boa_indexer二进制文件复制到/boa下
     sudo  cp  boa boa_indexer  /boa
     将boa-0.94.13目录下的boa.conf文件复制到/boa下
     sudo  cp  boa.conf  /boa
     可选项: arm-linux-strip boa(去掉boa中的调试信息,只是减小文件的大小可以执行也可以不执行)
     将/etc/mime.types复制到/boa目录下
     sudo cp  /etc/mime.types  /boa
    
  • 步骤三
    返回boa的顶层目录 — 修改配置文件
    boa-0.94.13$ ls
    boa.conf contrib docs extras README
    ChangeLog CREDITS examples Gnu_License src

     vi boa.conf //几乎全部指定到boa的目录下,这样方便我们进行管理
     重新指定一些文件的生成路径,因为重新指定这些路径后会帮助我们深刻的理解关于boa服务器的工作机制
     Port  80  
     User  0  
     Group 0  
     bind调用的IP地址,一般注释掉,表明绑定到INADDR_ANY,通配于服务器的所有IP地址
     #Listen 192.68.0.5 
     error_log和access_log会自动生成,只要指定生成路径就可以了。  
     ErrorLog /boa/log/error_log  
     AccessLog /boa/log/access_log    
     存放HTML文件的根路径  
     DocumentRoot /boa/www  
     UserDir public_html  
     默认页面,若之输入http://127.0.0.1/则会自动返回给浏览器默认页面index.html  
     DirectoryIndex index.html    
     保持默认  
     DirectoryMaker /boa/boa_indexer   //被修改
     KeepAliveMax 1000  
     KeepAliveTimeout 10  
     MimeTypes /boa/mime.types   //被修改
     DefaultType text/plain    
     指定传给cgi程序的PATH环境变量  
     CGIPath /bin:/usr/bin:/usr/local/bin   
     保持默认  
     Alias /doc /usr/doc   
     如果输入http://127.0.0.1/cgi-bin/test.cgi, 则boa服务器会到/boa/cgi-bin中寻找test.cgi程序。  
     ScriptAlias /cgi-bin/ /boa/cgi-bin/  
    

三、测试结果

大家先不要着急看结果,这里先给大家说一个注意事项,如果大家是把boa安装在根目录下,那不存在什么情况,如果是将服务器安装在任意目录下,那么要提醒大家的是在boa.conf文件中的boa目录必须使用绝对路径,不能使用相对路径;就比如下图一些路径(当然该文件中所有的类似路径都必须用绝对路径):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试条件:在www文件夹下放置index.html文件,这个是客户端访问boa服务器的默认返回页面,或者大家直接在cgi-bin目录下直接放值.cgi测试文件(当然我们还没有移植cgi,所以写个简单的html就行了),那么测试结果如下:
html文件内容:
在这里插入图片描述
测试结果:
在这里插入图片描述
这样就表示在Ubuntu下测试成功了;当然我们是不是要在A9平台与web通信,所以一定最终是要把boa服务器移植到A9平台上;

四、A9平台移植BOA

先来分析一下最大的不同点,下图是Ubuntu下的boa文件的属性,所以要想移植到ARM平台下,必须编译生成ARM版本的boa;其余的移植步骤基本相同;
在这里插入图片描述
必须编译生成ARM的版本:
在这里插入图片描述
接下来具体看看:
能力)
(1)移植boa到嵌入式linux上的方法和上面几乎一样,具体做法是

./configure
生成Makefile后将Makefile中的
CC = gcc   CPP=gcc -E 
改为
CC = arm-linux-gcc,
CPP = arm-linux-gcc -E,
然后make就OK

(2)重新拷贝修改后的文件:
将boa-0.94.13/src目录下生成的boa、boa_indexer二进制文件复制到/boa下
将boa-0.04.13目录下的boa.conf文件复制到/boa下
将/etc/mime.types复制到/boa目录下
将test.cgi放在/boa/cgi-bin目录下,
将index.html image.jpg 放在/boa/www目录下

(3)拷贝文件到rootfs文件系统目录下:
cd boa 进入boa文件目录
移植到开发板后:

	[root@fengjunhui boa]:~$ ./boa
	No such user: nobody
	解决方法:
		sudo vi boa.conf
		(1)Group的修改
			修改 Group nogroup  为 Group 0
		(2)user的修改
			修改 User nobody 为 User 0
	
	[root@fengjunhui boa]:~$ ./boa

我遇到的问题:

[01/Jan/1970:00:23:10 +0000] boa.c:211 - getpwuid: Success
[01/Jan/1970:00:00:39 +0000] boa.c:211 - getpwuid: No such file or directory
解决:修改src/boa.c
注释掉下面两句话:
#if 0
    if (passwdbuf == NULL) {
            DIE(”getpwuid”);
            }
            if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
            DIE(”initgroups”);
            }
#endif

就能够解决!!

测试结果
在这里插入图片描述


总结

到这里呢boa服务器的移植就完全移植完成啦,我遇到的问题我觉得还是比较少的,当然大家遇到问题也不要烦,我第一次移植的时候头也很大,觉得这是个啥呀,但后面做项目时间久了,知识点都沉淀下来了,对他的各个模块的功能清晰了以后,移植起来就相对简单了,就像我能写这篇博客,肯定是经过很长时间对这个东西有了解的,所以静下心来把每一步做好;下期带大家来移植CGI,把boa和CGI结合起来使用,哈哈哈!!!
最后,各位小伙伴们如果有收获,可以点赞收藏哦,你们的认可是我创作的动力,一起加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1143224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医学影像乳腺肿瘤分割的同学看过来:PDPNet:用于通用乳腺肿瘤分割的渐进式双先验网络

PDPNet:一种渐进式双先验网络,可以来从动态增强的图像中分割乳腺肿瘤,性能表现SOTA!并提高了模型的泛化能力,单位:贵州大学, 哈医大肿瘤医院, 贵州省人民医院 为了提高乳腺肿瘤分割模型的泛化能力&#xf…

中文编程工具免费版下载,中文开发语言工具免费版下载

中文编程工具免费版下载,中文开发语言工具免费版下载 中文编程工具开发的实际部分案例如下图 编程系统化课程总目录及明细,点击进入了解详情。 https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502

轻量封装WebGPU渲染系统示例<4>-CubeMap/天空盒(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/ImgCubeMap.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 5. 用户…

【linux】文件系统+软硬连接+动静态库

文件系统软硬连接动静态库 1.理解文件系统1.1磁盘的物理结构1.2磁盘的存储结构1.3磁盘的逻辑结构1.4文件系统 2.软硬链接2.1什么是软硬链接2.2软硬链接的作用 3.动静态库3.1什么是库3.1静态库和静态链接3.2动态库和动态链接3.2.1通过环境变量找到动态库路径3.2.2把动态库拷贝到…

包含(has it)、继承(is it)

包含关系(has it) 继承关系(is it) class Person:def __init__(self, no, name, salary):self.no noself.name nameself.salary salarydef __str__(self):msg self.no "---" self.name --- self.salaryreturn m…

C++设计模式_15_Proxy 代理模式

Proxy 代理模式也是属于“接口隔离”模式,通过增加一层间接层来解决问题的模式。 文章目录 1. 动机( Motivation)2. 模式定义3. 结构( Structure )4. 代码演示Proxy 代理模式4.1 常规方法4.2 Proxy 代理模式 5. 要点总结6. 其他参考 1. 动机( Motivation) 在面向对…

4.2 数据库安全性控制

思维导图: 前言: 整体理解 计算机系统中的安全措施是层级设置的。用户首先需通过身份鉴定进入系统,然后受到多种控制和保护。 安全模型(图4.2) 用户进入计算机系统时需进行身份鉴定。合法用户进入后,数据库管理系统实施存取控制。…

17 HAP 覆盖特性与链路损耗特性分析

HAP 覆盖特性与链路损耗特性分析 HAP平台高度:17~22km之间。HAP通信业务的覆盖区域取决于覆盖区边缘至平台的仰角,仰角越小,覆盖区域越大。覆盖区内不同地点的用户至平台的距离差别也越大。HAP和终端几何关系: B:地面…

比较浮点数时,我被绊倒了

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不是…

大彩串口屏读写文件问题

分区 本文使用的是大彩串口屏M系列的: 串口屏内部有三个分区,分别为A、B、C三个区: A区:系统区,存储组态工程文件 B区:数据区,存储配置信息,记录数据、历史曲线等 C区:备…

火柴排队.

题意:给两列火柴,可以交换任意相邻的火柴,使得(ai-bi)^2的和最小,求最小交换次数。 分析:使得(ai-bi)^2的和最小,即a^2-2abb^2的和最小,那么使得2ab最大,就可…

Transformers实战(二)快速入门文本相似度、检索式对话机器人

Transformers实战(二)快速入门文本相似度、检索式对话机器人 1、文本相似度 1.1 文本相似度简介 文本匹配是一个较为宽泛的概念,基本上只要涉及到两段文本之间关系的,都可以被看作是一种文本匹配的任务, 只是在具体…

MySQL 5.7限制general_log日志大小

背景 需求: 在MySQL 5.7.41中开启general_log 并限制其大小,避免快速增长占用硬盘空间。 解决: 通过定时任务,执行简单的脚本,判断general_log 日志的大小,实现对通用查询日志的“每日备份”或“每日清…

CSS 滚动驱动动画与 @keyframes 新语法

CSS 滚动驱动动画与 keyframes 在 CSS 滚动驱动动画相关的属性出来之后, keyframes 也迎来变化. 以前, keyframes 的值可以是 from, to, 或者百分数. 现在它多了一种属性的值 <timeline-range-name> <percentage> 建议先了解 animation-range 不然你会对 timeli…

配置两个网关之间通过IPSec VPN互联并通过总部IPSec网关进行NAT后上网

规格 适用于V200R002C00及更高版本、所有形态的AR路由器。 组网需求 如图1所示&#xff0c;某企业分为总部和两个分支机构。分支机构1和分支机构2分别通过RouterB和RouterC与Internet相连。RouterA为NAT网关&#xff0c;总部RouterA和分支RouterB为固定公网地址&#xff0c;Rou…

Python正则表达式一点通

正则作为处理字符串的一个实用工具&#xff0c;在Python中经常会用到&#xff0c;比如爬虫爬取数据时常用正则来检索字符串等等。正则表达式已经内嵌在Python中&#xff0c;通过导入re模块就可以使用&#xff0c;作为刚学Python的新手大多数都听说”正则“这个术语。 今天来给…

Vue+el-image-viewer显示tiff图片,并能够切换图片中的帧

一、简述 在前端界面显示tiff图片&#xff0c;并能够点击翻页按钮切换tiff图片中的帧&#xff0c;接收到后端传来的buffer&#xff0c;在前端处理后进行展示 二、使用工具 引入Tiff.js文件&#xff0c;引入前先进行下载安装 import Tiff from tiff.js引入显示图片组件 comp…

Openssl数据安全传输平台014:OCCI的安装配置和使用:Centos8-Oracle19c代码跑通 + Window-Oracle11g代码没跑通(不影响本项目)

文章目录 0 代码仓库1 启动Centos oracle数据库2 Winsows安装配置OCCI库2.1 下载文件2.2 VS 配置2.2.1 VC包含目录2.2.2 VC库目录2.2.3 连接器-附加依赖项2.2.4 代码测试-Oracle11g2.2.4.1 准备2.2.4.2 代码测试 3 Centos安装配置occi库3.1 下载instantclient库文件压缩包3.2 w…

LeetCode:1465. 切割后面积最大的蛋糕(C++)

目录 1465. 切割后面积最大的蛋糕 题目描述&#xff1a; 实现代码与解析&#xff1a; 贪心 原理思路&#xff1a; 1465. 切割后面积最大的蛋糕 题目描述&#xff1a; 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCuts 和 verticalCuts&#xff…

HPV感染的风险:闫会宁主任分析酒店环境中的常见因素

人类乳头瘤病毒(HPV)是一种普遍存在的病毒&#xff0c;其存在和传播方式多种多样。近年来&#xff0c;人们对于HPV的认识不断深入&#xff0c;知道其在酒店环境中的传播风险。本文将探讨哪些情况下在酒店可能感染HPV。 一、HPV的传播方式 HPV主要通过直接接触传播&#xff0c…