嵌入式服务器Boa的搭建方法
虚拟机:RHEL5.0.2
物理机:win7旗舰版
Arm平台:博创UP-TECH-P270
一.在虚拟机上搭建boa
1. 在www.boa.org上下载boa-0.94.13.tar.gz,这个版本已经很久未更新过,所以选这个就行了。
2. 解压。
3. ./configure
4. make
5. 编译过程中若出现错误:
util.c: 100: 1: pasting “t” and “->”does not give a valid preprocessing token make: [util.o] Error1
解决办法:
修改compat.h中的
#defineTIMEZONE_OFFSET(foo) foo##->tm_gmtoff
为:
#defineTIMEZONE_OFFSET(foo) foo->tm_gmtoff
6. 修改配置文件:(boa.conf)
(1)建立/etc/boa 目录, 并复制boa.conf到/etc/boa 目录下,并按照以下步骤进行修改。
(2)修改访问权限:修改User nobody 为 User 0,修改Groupnogroup 为Group 0。
注意:这里是否设置为0需要看你的Linux,具体如下:查看/etc/passwd是否有nobody和nogroup,有就不用改成0
(3)设定日志目录:boa 日志有两部分,Errorlog 和AccessLog,一般情况下为/var/log/boa/error_log
和/var/log/boa/access_log两个文件。所以根据自己的情况情况设置日志目录:
ErrorLog/var/log/boa/error_log
AccessLog /var/log/boa/access_log
注意:这里/var/log/boa 目录必须为可写,否则会出现错误:log.c:73– Unable to dup2 the error log: Bad file r.
在启动脚本里将var 挂载成ramfs: mount –n –t ramfs ramfs /var
(4)设置html 文件目录: DocumentRoot/var/www
(5)设置默认首页: DirectoryIndex index.html
(6)设置cgi 脚本目录: 将
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin
修改为
ScriptAlias/cgi-bin/ /var/www/cgi-bin
这些目录可以自己修改,但是要和网页存放的目录一致。
7. 将相关文件放入文件夹:
(1) 根据(第二.3 步)的设置建立/var/boa 文件夹。
(2)根据(第二.4 步)的设置建立/var/www 文件夹, 并在此目录下存放html 文件,包括index.html文件。
(3) 根据(第二.6 步)的设置建立/var/www/cgi-bin 文件夹, 并存放一些用来测试的cgi 脚本。
8.运行boa:
设置你虚拟机的ip和你的物理机在同一个网段。然后在你的物理机的浏览器上输入虚拟机的ip即可。
二.在arm上搭建boa
1. 在www.boa.org上下载boa-0.94.13.tar.gz,这个版本已经很久未更新过,所以选这个就行了。
2. 解压。
3. ./configure
4. 上面三步跟在虚拟机上一样,如果已经下载好了就不用再下载了。
不一样的就是:
修改Makefile 文件,将
CC = gcc
CPP = gcc -E
改为:
CC = arm-linux-gcc
CPP = arm-linux-gcc–E
注意:你用什么交叉编译器就写什么。这里我用的是arm-linux-gcc3.4.6,比较老的一个版本。
5. #make
6. #arm-linux-stripboa //去掉调试信息,减少boa 体积
7. 拷贝PC 上/etc/mime.types 文件到开发板/etc 目录下,如果不用mimi.types,可将boa.conf文件中
MimeTypes /etc/mime.types
修改为:
MimeTypes /dev/null
8. boa的配置(和上面一样,可能在user和group那块有点区别,自己根据自己的linux设置)
注意:
(1) 如果出现你不认识的错误(log.c:73 unable to dup2 the errorlog:bad file descriptor):
1给日志目录增加其他用户可读可写权限
2修改src/log.c (建议采用方法1)注释掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable todup2 the error log");
}
即修改为:
#if 0
if (dup2(error_log,STDERR_FILENO) == -1) {
DIE("unable to dup2 the errorlog");
}
#endif
3#ErrorLog /var/log/boa/error_log
#AccessLog/var/log/boa/access_log
9. 将相关文件放入文件夹:
(1) 根据(第二.3 步)的设置建立/var/boa 文件夹。
(2)根据(第二.4 步)的设置建立/var/www 文件夹, 并在此目录下存放html 文件,包括index.html文件。
(3) 根据(第二.6 步)的设置建立/var/www/cgi-bin 文件夹, 并存放一些用来测试的cgi 脚本。
10. 运行boa
设置开发板ip跟物理机ip在同一个网段,然后在物理机浏览器上输入开发板ip即可。
常见错误:
(1) boa.c:228 - icky Linux kernel bug!: No suchfile or directory
解决办法:修改src/boa.c 注释掉下面语句:
if (setuid(0) != -1){
DIE(”icky Linuxkernel bug!”);
}
即修改为:
#if 0
if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
#endif
(2) boa.c:211 - getpwuid: No such file ordirectory
解决办法:修改src/boa.c 注释掉下面这段程序:
if (passwdbuf ==NULL) {
DIE(”getpwuid”);
}
if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
即修改为:
#if 0
if (passwdbuf ==NULL) {
DIE(”getpwuid”);
}
if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
#endif
(3) gethostbyname:: No such file or directory
解决办法:修改boa.conf 去掉ServerName www.your.org.here 前的注释符号(#)。