web 服务器Boa 移植手册
web 服务器Boa 移植手册
web 服务器Boa 移植手册
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
说明:<br />
交叉编译器版本:<br />
arm-linux-gcc 4.1.2<br />
操作系统平台:<br />
Linux Red Hat 9.0<br />
开发板平台:<br />
arm TX2440A<br />
Boa版本:<br />
boa-0.94.13<br />
手册中字体颜色的约定:<br />
修改的代码用红色字体<br />
添加的大段代码用蓝色字体<br />
执行的命令用红色字体,前面加 #<br />
在终端上打印出的信息用紫色字体<br />
出现的错误信息用绿色字体<br />
说明的文字用红色粗体<br />
需要修改的文件加灰色底纹<br />
<strong>web</strong> 服务器 Boa <strong>移植手册</strong><br />
1
Boa服务器的移植可分成两部分,一个是在x86平台上移植,即在虚拟机的linux下,另一个是<br />
在arm平台上移植,即在开发板上的linux下,本手册的前四步,都是在虚拟机上做移植,第五步<br />
是移植到发开板上。<br />
一、编译 boa 程序<br />
1、www.boa.org下载boa-0.94.13.tar.gz。<br />
2、解压<br />
3、#./configure<br />
4、#make<br />
编译会出错:<br />
util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1<br />
解决方法,修改compat.h中的<br />
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff<br />
为:<br />
#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff<br />
二、修改配置文件 boa.conf<br />
1、建立/etc/boa 目录, 并复制 boa.conf 到/etc/boa 目录下,并按照以下步骤进行修改。<br />
2、修改访问权限:修改 User nobody 为 User 0,修改 Group nogroup 为 Group 0。<br />
3、设定日志目录:boa 日志有两部分,Errorlog 和 AccessLog,一般情况下为/var/log/boa/error_log<br />
和/var/log/boa/access_log 两个文件。所以根据自己的情况情况设置日志目录:<br />
ErrorLog /var/log/boa/error_log<br />
AccessLog /var/log/boa/access_log<br />
注意:这里/var/log/boa 目录必须为可写,否则会出现错误:log.c:73 – Unable to dup2 the error log: Bad<br />
file r.<br />
在启动脚本里将 var 挂载成 ramfs: mount –n –t ramfs ramfs /var<br />
4. 设置 html 文件目录: DocumentRoot /var/www<br />
5. 设置默认首页: DirectoryIndex index.html<br />
6. 设置 cgi 脚本目录: 将<br />
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin<br />
修改为<br />
ScriptAlias /cgi-bin/ /var/www/cgi-bin<br />
这些目录可以自己修改,但是要和网页存放的目录一致。<br />
2
三、根据第二步设置建立相关文件夹并放入文件<br />
1、根据(第二.3 步)的设置建立/var/boa 文件夹。<br />
2、根据(第二.4 步)的设置建立/var/www 文件夹, 并在此目录下存放 html 文件,包括 index.html<br />
文件。<br />
3. 根据(第二.6 步)的设置建立/var/www/cgi-bin 文件夹, 并存放一些用来测试的 cgi 脚本。<br />
四、运行 boa 程序<br />
在 windows 下通过 http://192.168.1.230(虚拟机的 IP 地址)这种形式访问,进行测试。<br />
五、移植到开发板<br />
1、(第一.3 步)操作完成之后,修改 Makefile 文件,将<br />
CC = gcc<br />
CPP = gcc -E<br />
改为:<br />
CC = arm-linux-gcc<br />
CPP = arm-linux-gcc -E<br />
#make<br />
#arm-linux-strip boa //去掉调试信息,减少 boa 体积<br />
2、拷贝 PC 上/etc/mime.types 文件到开发板/etc 目录下,如果不用 mimi.types,可将 boa.conf<br />
文件中<br />
MimeTypes /etc/mime.types<br />
修改为:<br />
MimeTypes /dev/null<br />
boa 配置相关目录<br />
1、boa.conf 的存放目录:<br />
默认 boa.conf 是在/etc/boa.conf 目录的,boa 运行时会自动去找/etc/bon.conf 目录。这个设定<br />
是在 define.h 文件中定义的,可在编译之前进行修改。<br />
2、log 目录: 分为 Errorlog 和 AccessLog 两个目录,可在 boa.conf 中修改。如:<br />
ErrorLog /var/log/boa/error_log<br />
AccessLog /var/log/boa/access_log<br />
3、html 文件存放目录, 可在 boa.conf 文件中修改。如:<br />
DocumentRoot /var/www<br />
4、cgi 脚本存放目录, 可在 boa.conf 文件中修改。如:<br />
ScriptAlias /cgi-bin/ /var/www/cgi-bin<br />
5、mime.types 存放目录, 可在 boa.conf 文件中修改。如:<br />
3
MimeTypes /etc/mime.types<br />
将网页文件放在/var/www 目录下,cgi 脚本放在/var/www/cgi-bin 目录下。在开发板上运行 boa,<br />
在主机 IE 上输入开发板 IP,可看到网页。<br />
六、常见错误<br />
这些错误内容可查看/var/log/boa/error_log 文件<br />
1、gethostbyname:: No such file or directory<br />
解决办法: 修改 boa.conf 去掉 ServerName www.your.org.here 前的注释符号(#)。<br />
2、util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: ***<br />
[util.o]<br />
解决办法: 修改 src/compat.h 找到<br />
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff<br />
修改成<br />
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff<br />
3、boa.c:211 - getpwuid: No such file or directory<br />
解决办法: 修改 src/boa.c 注释掉下面这段程序:<br />
if (passwdbuf == NULL) {<br />
DIE(”getpwuid”);<br />
}<br />
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {<br />
DIE(”initgroups”);<br />
}<br />
即修改为:<br />
#if 0<br />
if (passwdbuf == NULL) {<br />
DIE(”getpwuid”);<br />
}<br />
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {<br />
DIE(”initgroups”);<br />
}<br />
#endif<br />
4、boa.c:228 - icky Linux kernel bug!: No such file or directory<br />
解决办法: 修改 src/boa.c 注释掉下面语句:<br />
if (setuid(0) != -1) {<br />
DIE(”icky Linux kernel bug!”);<br />
4
}<br />
即修改为:<br />
#if 0<br />
if (setuid(0) != -1) {<br />
DIE(”icky Linux kernel bug!”);<br />
}<br />
#endif<br />
5、log.c:73 unable to dup2 the error log:bad file descriptor<br />
解决方法:<br />
方法 1> 确定日志目录对与所有用户都具有可读/写的权限<br />
方法 2> 修改 src/log.c (建议采用方法 1)注释掉<br />
if (dup2(error_log, STDERR_FILENO) == -1) {<br />
DIE("unable to dup2 the error log");<br />
}<br />
即修改为:<br />
#if 0<br />
if (dup2(error_log, STDERR_FILENO) == -1) {<br />
DIE("unable to dup2 the error log");<br />
}<br />
#endif<br />
5