安全网站建设网站制作,公司网站的推广,西昌有做网站的公司吗,互联网下载boa是比较老的HTTP的本地Server#xff0c;本文是针对0.94.13版本的编译过程做出记录 1.下载boa的程序包#xff0c;本文的编译是针对misp平台的交叉编译 2.在编译之前#xff0c;需要针对产品的文件系统和修改编译时可能遇到的错误#xff0c;修改相关的文件。
#xff…boa是比较老的HTTP的本地Server本文是针对0.94.13版本的编译过程做出记录 1.下载boa的程序包本文的编译是针对misp平台的交叉编译 2.在编译之前需要针对产品的文件系统和修改编译时可能遇到的错误修改相关的文件。
1src/boa.c 注释掉可引起编译错误的语句
line209开始注释如下语句
#if 0 passwdbuf getpwuid(server_uid); if (passwdbuf NULL) { DIE(getpwuid); } if (initgroups(passwdbuf-pw_name, passwdbuf-pw_gid) -1) { DIE(initgroups); } #endif line 227开始注释如下语句
#if 0 if (setuid(0) ! -1) { DIE(icky Linux kernel bug!); } #endif 2src/compat.h line120
修改前 #define TIMEZONE_OFFSET(foo) foo##-tm_gmtoff
修改后 #define TIMEZONE_OFFSET(foo) (foo)-tm_gmtoff 3src/log.c line 72开始注释如下语句 /*if (dup2(error_log, STDERR_FILENO) -1) { DIE(unable to dup2 the error log); }*/ 4src/config.c line255
该处打开的是boa的配置文件可以根据自己的文件系统修改该配置文件位置如
yyin fopen(/system/boa.conf, r);
line 289 该目录需要与上述的boa.conf配置文件的目录一致 tempdir /system; 5src/defines.h line30
该目录信息是boa的应用所处于的位置
#define SERVER_ROOT /usr/boa 3.编译注意事项
1直接按照交叉编译传递参数给configure会出现如下错误
configure: error: can not run test program while cross compiling
解决方案如下
在当前PC下只执行./configure而不传递任何的参数
注此时生成的Makefile中CC环境变量还是gcc需要制定为你使用的交叉编译链中的gcc。如
CC /home/xuxuequan/Ingenicwork/toolchain/mips-gcc472-glibc216-32bit/bin/mips-linux-gnu-gcc
CPP环境变量修改为交叉编译链中的cpp如
CPP /home/xuxuequan/Ingenicwork/toolchain/mips-gcc472-glibc216-32bit/bin/mips-linux-gnu-cpp 然后运行make进行编译得到的可执行程序为boa将调试信息剥去得到的最后程序只有约73KB大小。
/home/xuxuequan/Ingenicwork/toolchain/mips-gcc472-glibc216-32bit/bin/mips-linux-gnu-strip boa 2配置boa.conf
在boa的源码包中提供了一个boa.conf的初始样例可以基于这个文件进行修改。其中几个关键的参数如下
Port 80 ---------boa服务器所在端口信息
DocumentRoot /system/www -----HTML文档的主目录
ScriptAlias /cgi-bin/ /system/www/cgi-bin/ -----指明CGI脚本的虚拟路径对应的实际路径 4.编译hello.cgi
红色部分是共享资源对应的目录
int main(void) { char *data; char name[30] {0}; char tr_name[50] {0}; printf(Content-type: text/html\n\n); printf(html\n); printf(headtitleCGI Output/title/head\n); printf(body\n); datagetenv(QUERY_STRING); if(data ! NULL){ sscanf(data,name%s,name); sscanf(name,%[^],name);//正则表达式遇到就结束 memset(tr_name,\0,50); sprintf(tr_name,/system/www/SDPath/%s,name); read_dir(tr_name); }else{ memset(tr_name,\0,50); sprintf(tr_name,/system/www/SDPath); read_dir(tr_name); } printf(body\n); printf(/html\n); exit(0); } 5.拷贝文件
1拷贝boa、boa.conf、mime.types到/usr/boa目录中
2拷贝hello.cgi到 /usr/www/cgi-bin目录中