Boa
服务器的源代码,可以从官网http://www.boa.org/
上下载,此处准备的是boa-0.94.13
这个版本boa-0.94.13.tar.gz
放在下面,使用tar -xvf boa-0.94.13.tar.gz
进行解压,生成boa-0.94.13
为解压完成后的目录make
命令会进行报错,两者是用于生成解析器和词法分析器
sudo apt-get install bison
sudo apt-get install flex
进入解压后后目录到达src
-------cd boa-0.94.13/src
执行./configure
--------这是根据configure.in
文件进行一系列的配置,生成config.status
,configure
,和Makefile
文件。
如果无法执行,考虑权限,修改该目录下的configure
的属性为可执行 chmod 755 configure
在本级src
目录下vi compat.h +120
,对第120行进行一些修改,防止出现宏定义问题:TIMEZONE_OFFSET
找到
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
在本级src
目录下将boa.c
进行修改, vi boa.c
225 #if 0 //注释掉
226 if (setuid(0) != -1) {
227 DIE("icky Linux kernel bug!");
228 }
229 #endif
在本级src
目录下将defines.h
进行修改---------此处修改的值是之后创建文件夹的绝对路径,也就是在1.3 -1创建的目录
将src/defines.h中的
#define SERVER_ROOT "/etc/boa"
修改为
#define SERVER_ROOT "/boa"
在本级src
目录下将log.c
进行修改Vi log.c +73
扩展:
函数名: dup2
功能: 复制文件描述符
用法: int dup2(int oldfd,int newfd);
修改 src/log.c
注释掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
为:
71 #if 0
72 /* redirect stderr to error_log */
73 if (dup2(error_log, STDERR_FILENO) == -1) {
74 DIE("unable to dup2 the error log");
75 }
76 #endif
以上修改完成后在src
下执行make
命令
进行上一级目录cd ..
,对boa.conf
进行修改
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/
创建一个目录放修改后的文件----假设这个文件放在根目录下
并创建三个文件夹 sudo mkdir -p /boa /boa/www /boa/cgi-bin /boa/log
进行移动
将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
将/etc/mime.types
复制到/boa目录下
sudo cp /etc/mime.types /boa
将如下index.html
和image.jpg
放在/boa/www
目录下
<html>
<body>
<h3> This is a test !h3> <br/>
<img src="./image.jpg">
<h3> beautiful picture !h3> <br/>
<a href="/cgi-bin/test.cgi">return to cgi pagea>
body>
html>
如下是test.c
, 使用gcc -o test.cgi test.c
,将test.c
编译生成test.cgi
,后缀为cgi
的类型
编译后得到的test.cgi
放在/boa/cgi-bin
目录下------------sudo cp test.cgi /boa/cgi-bin/
#include
int main()
{
printf("Content-type:text/html\n\n"); //这句一定要加上
printf("");
printf("Hello, CGI!
");
printf("return index.html");
printf("");
return 0;
}
在/boa
下启动服务器sudo ./boa
在虚拟机的浏览器上使用http://127.0.0.1/index.html
进行访问,可以进入这个html
,即可成功
可按照如下关闭服务器
fengjunhui@ubuntu:~$ ps -axj | grep "boa"
2102 24862 24860 24255 pts/18 24255 S 65534 0:00 ./boa
2102 25735 25733 24255 pts/18 24255 S 65534 0:00 ./boa
25753 25793 25792 25753 pts/4 25792 S+ 1000 0:00 grep --color=auto boa
kill -9 pid(boa)
fengjunhui@ubuntu:~$ sudo kill -9 24862
fengjunhui@ubuntu:~$ sudo kill -9 25733
与上面的类似,创建一个新的文件,解压上述文件,``tar -xvf boa-0.94.13.tar.gz进行解压,生成
boa-0.94.13`为解压完成后的目录
进入解压后后目录到达src
-------cd boa-0.94.13/src
执行./configure
--------这是根据configure.in
文件进行一系列的配置,生成config.status
,configure
,和Makefile
文件。
如果无法执行,考虑权限,修改该目录下的configure
的属性为可执行 chmod 755 configure
在本级src
目录下vi compat.h +120
,对第120行进行一些修改,防止出现宏定义问题:TIMEZONE_OFFSET
找到
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
在本级src
目录下将boa.c
进行修改, vi boa.c
225 #if 0 //注释掉
226 if (setuid(0) != -1) {
227 DIE("icky Linux kernel bug!");
228 }
229 #endif
在本级src
目录下将defines.h
进行修改---------此处修改的值是根文件系统下放/boa文件夹的路径,也就是在2.3 -1创建的目录
将src/defines.h中的
#define SERVER_ROOT "/etc/boa"
修改为
#define SERVER_ROOT "/boa"
在本级src
目录下将log.c
进行修改Vi log.c +73
扩展:
函数名: dup2
功能: 复制文件描述符
用法: int dup2(int oldfd,int newfd);
修改 src/log.c
注释掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
为:
71 #if 0
72 /* redirect stderr to error_log */
73 if (dup2(error_log, STDERR_FILENO) == -1) {
74 DIE("unable to dup2 the error log");
75 }
76 #endif
在本级src
目录下对boa.c
进行修改
注释掉下面两句话:
#if 0
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
#endif
在本级src
目录下对Makefile
进行修改
CC = gcc CPP=gcc -E
改为
CC = arm-linux-gcc,
CPP = arm-linux-gcc -E,
以上修改完成后在src
下执行make
命令
进行上一级目录cd ..
,对boa.conf
进行修改
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/
创建一个目录放修改后的文件----在跟文件系统下-------cd /opt/4412/rootfs
并创建三个文件夹 sudo mkdir -p /boa /boa/www /boa/cgi-bin /boa/log
进行移动
将boa-0.94.13/src
目录下生成的boa
、boa_indexer
二进制文件复制到/opt/4412/rootfs/boa
sudo cp boa boa_indexer /opt/4412/rootfs/boa
将boa-0.94.13
目录下的boa.conf
文件复制到/boa
下
sudo cp boa.conf /opt/4412/rootfs/boa
将/etc/mime.types
复制到/boa目录下
sudo cp /etc/mime.types /opt/4412/rootfs/boa
将如下index.html
和image.jpg
放在/boa/www
目录下
<html>
<body>
<h3> This is a test !h3> <br/>
<img src="./image.jpg">
<h3> beautiful picture !h3> <br/>
<a href="/cgi-bin/test.cgi">return to cgi pagea>
body>
html>
如下是test.c
, 使用arm-none-linux-gnueabi-gcc -o test.cgi test.c
,将test.c
编译生成test.cgi
,后缀为cgi
的类型
编译后得到的test.cgi
放在/opt/4412/rootfs/boa/cgi-bin
目录下------------sudo cp test.cgi /opt/4412/rootfs/boa/cgi-bin/
#include
int main()
{
printf("Content-type:text/html\n\n"); //这句一定要加上
printf("");
printf("Hello, CGI!
");
printf("return index.html");
printf("");
return 0;
}
在/boa
下启动服务器sudo ./boa
在虚拟机的浏览器上使用http://192.168.3.200/index.html
对板子进行访问,可以进入这个html
,即可成功
可按照如下关闭服务器
fengjunhui@ubuntu:~$ ps -axj | grep "boa"
2102 24862 24860 24255 pts/18 24255 S 65534 0:00 ./boa
2102 25735 25733 24255 pts/18 24255 S 65534 0:00 ./boa
25753 25793 25792 25753 pts/4 25792 S+ 1000 0:00 grep --color=auto boa
kill -9 pid(boa)
fengjunhui@ubuntu:~$ sudo kill -9 24862
fengjunhui@ubuntu:~$ sudo kill -9 25733