编译boa过程记录

boa是比较老的HTTP的本地Server,本文是针对0.94.13版本的编译过程做出记录


1.下载boa的程序包,本文的编译是针对misp平台的交叉编译


2.在编译之前,需要针对产品的文件系统和修改编译时可能遇到的错误,修改相关的文件。

(1)src/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


(2)src/compat.h   line120

修改前  #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

修改后  #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff


(3)src/log.c   line 72开始注释如下语句

        /*if (dup2(error_log, STDERR_FILENO) == -1) {
            DIE("unable to dup2 the error log");
        }*/


(4)src/config.c   line255

该处打开的是boa的配置文件,可以根据自己的文件系统修改该配置文件位置,如:

yyin = fopen("/system/boa.conf", "r");

line 289 该目录需要与上述的boa.conf配置文件的目录一致

        tempdir = "/system";


(5)src/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("<head><title>CGI Output</title></head>\n");
        printf("<body>\n");
data=getenv("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目录中


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值