鞍山网站哪家好,电子商务主要学什么就业方向工资,网页制作与网站建设江西,软件跟网站开发文章目录 前言一、boa服务器简介二、移植步骤三、测试结果四、A9平台移植BOA总结 前言
书接上期#xff0c;在配置完成环境后#xff0c;那么接下来呢还得移植两个非常关键的东西#xff0c;一个呢时boa服务器#xff0c;另一个呢时cgi接口#xff0c;boa服务器能够使得我… 文章目录 前言一、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$ makeyacc -d boa_grammar.ymake: yacc: Command not foundmake: *** [y.tab.c] Error 127
解决方法/boa-0.94.13/src$ sudo apt-get install bison
问题2 yacc -d boa_grammar.ygcc -g -O2 -pipe -Wall -I. -c -o y.tab.o y.tab.c......lex boa_lexer.lmake: lex: Command not foundmake: *** [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 tokentime_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.c225 #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 CPPgcc -E
改为
CC arm-linux-gcc
CPP arm-linux-gcc -E
然后make就OK2重新拷贝修改后的文件 将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文件目录 移植到开发板后 [rootfengjunhui boa]:~$ ./boaNo such user: nobody解决方法sudo vi boa.conf(1)Group的修改修改 Group nogroup 为 Group 0(2)user的修改修改 User nobody 为 User 0[rootfengjunhui 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 0if (passwdbuf NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf-pw_name, passwdbuf-pw_gid) -1) {DIE(”initgroups”);}
#endif就能够解决
测试结果 总结
到这里呢boa服务器的移植就完全移植完成啦我遇到的问题我觉得还是比较少的当然大家遇到问题也不要烦我第一次移植的时候头也很大觉得这是个啥呀但后面做项目时间久了知识点都沉淀下来了对他的各个模块的功能清晰了以后移植起来就相对简单了就像我能写这篇博客肯定是经过很长时间对这个东西有了解的所以静下心来把每一步做好下期带大家来移植CGI把boa和CGI结合起来使用哈哈哈 最后各位小伙伴们如果有收获可以点赞收藏哦你们的认可是我创作的动力一起加油