Linux 下Boa + cgic Web服务器 +mjgp----fwqlzz love is for ever

一 编译生成二进制文件boa
1 Boa介绍:
是一种非常小巧的Web服务器,其 可执行代码 只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理 并发连接 请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。

2 下载源码:
http://www.boa.org/news.html
我下载的版本是0.94.14rc21版本:boa-0.94rc21.tar.bz2,解压到~/opt:
$tar xjvf boa-0.94rc21.tar.bz2 -C ~/opt

3 配置Makefile:
参考网上别人给的方法, 需要进入解压后目录下的src目录下进行配置:
$./configure
但是,在这个版本里该目录下没有configure文件,所以没有能够进行配置。而在根目录(解压后目录)下有需要的configure文件, 所以直接在根目录(boa-0.94rc21)下进行配置:
$./configure
得到结果:
[xu@XU boa-0.94.14rc21]$ ls
aclocal.m4    config.status  contrib  examples         Makefile
CHANGES       config.sub     COPYING  extra_macros.m4  Makefile.in
config.guess  configure      CREDITS  extras           README
config.log    configure.in   docs     install-sh       src
已经有Makefile文件了,而且,在boa-0.94.14rc21/src/目录下也产生了Makefile文件:
[xu@XU src]$ ls
access.c  cgi.c         defines.h  index_dir.c   pipe.c     response.c
access.h  cgi_header.c  escape.c   ip.c          poll.c     select.c
alias.c   compat.h      escape.h   log.c         queue.c    signals.c
boa.c     config.c      get.c       Makefile      range.c    sublog.c
boa.h     config.h      globals.h  Makefile.in   read.c     timestamp.c
buffer.c  config.h.in   hash.c     mmap_cache.c  request.c  util.c

4 得到目标文件boa
如果要在ARM平台构建,需要进入src目录下,修改Makefile:修改编译器的选择,使适合ARM:
CC = gcc
CPP = gcc -E
改为:
CC = arm-linux-gcc
CPP = arm-linux-g++ -E
(注:这里在Fedora上就不用修改。)

修改完后在src目录下直接: make
生成了boa文件:
[xu@XU src]$ ll boa
-rwxrwxr-x 1 xu xu 233461 Mar 15 21:03 boa
为boa文件瘦身:
[xu@XU src]$ arm-linux-strip boa
[xu@XU src]$ ll boa
-rwxrwxr-x 1 xu xu 72896 Mar 15 21:06 boa
果然,文件变成原来的3分之一了,这里,介绍一下这个:arm-linux-strip的作用:
arm-linux-strip:
UNIX下文件压缩命令compress大家都比较熟悉了,它的压缩率比较高, 和tar命令结合使用来做数据备份是最合适不过了。但compress压缩也有缺点,就是被压缩后的文件需要用命令uncompress解压后才能正常使用。而用strip命令就没有这个问题,它能清除执行文件中不必要的标示符及调试信息,可减小文件大小而不影响正常使用。但与compress 不同的是,文件一旦strip后就不能恢复原样了,所以strip是一个减肥工具而不是压缩工具。而且,被strip后的文件不包含调试信息,就不能用dbx来调试程序了。

可见,这个arm-linux-strip也是对文件清除不必要的标示符、调试信息等,减小文件大小。

至此,我们得到了想要的 boa文件。

二 移植cgic
1 下载源码
参考上文,下载源码: http://www.boutell.com/cgic/cgic205.tar.gz
然后解压:
$tar xzvf cgic205.tar.gz -C ~/opt
解压了部分,然后出现错误:
gzip: stdin: unexpected end of file
cgic205/cgic.c
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
上网查找原因,别人提示是因为文件不完整,可能是下载或者传输过程出了问题,从新下载就OK了。果然,重新下载源码,继续解压,没有问题。

2 修改Makefile
修改交叉编译项,应用在ARM平台。对解压目录下 Makefile进行修改:
CC=gcc
AR=ar
改为:
CC = arm-linux-gcc
AR = arm-linux-ar

以及:
 23 cgictest.cgi: cgictest.o libcgic.a
 24         $(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS}  #修改后
 26 capture: capture.o libcgic.a
 27         $(CC) $(CFLAGS) capture.o -o capture ${LIBS}    #修改后
(注:在Fedora上这里不用修改。)

3 得到可执行文件
然后Make,
得到可执行文件 capture,和次使用的 cgictest.cgi
[xu@XU cgic205]$ ls
capture    cgic.c     cgic.o        cgictest.o   Makefile
capture.c  cgic.h     cgictest.c    libcgic.a    readme.txt
capture.o  cgic.html   cgictest.cgi  license.txt  support.txt
可以继续优化:
$arm-linux-strip capture

三 配置WEB服务器
1 配置boa
修改boa.conf文件,但是在主目录下没有找到这个文件,在src/目录下也没有,看来这个版本不一样,还是有很多区别的啊,不能按照别人的步骤来实现,只能作为参考,细节还要自己搞定。
这个配置文件可以自己写,但是有模板来修改就更快了。在文件目录下有个文件: example,里面应该是例子,进去就发现有要找的文件: boa.conf,可以复制后在里面修改。
[xu@XU examples]$ cp boa.conf ../
在主目录下就有了这个文件:
[xu@XU boa-0.94.14rc21]$ ls
aclocal.m4    config.log     configure.in  docs             install-sh   src
boa.conf      config.status  contrib       examples         Makefile
CHANGES       config.sub     COPYING       extra_macros.m4  Makefile.in
config.guess  configure      CREDITS       extras           README

对boa.conf进行修改, 我的修改内容为:
Port 80
Listen 192.168.1.111 
User 0
Group 0
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
ServerName www.your.org.here
DocumentRoot /var/www
UserDir public_html
DirectoryIndex index.html
DirectoryMaker /usr/lib/boa/boa_indexer
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /etc/mime.types
DefaultType text/plain
CGIPath /bin:/usr/bin:/usr/local/bin
Alias /doc /usr/doc
ScriptAlias /cgi-bin/ /var/www/cgi-bin/

2 测试
在root下建立目录:
#mkdir /etc/boa
复制文件boa.conf到上述目录下,
修改boa.conf:
建立文件目录:依据上面的修改: http://blog.csdn.net/bull_liu/article/details/7486298
#mkdir /var/boa
#mkdir /var/www
#mkdir /var/www/cgi-bin
#mkdir -p /var/lob/boa

把之前编译cgi205得到的文件:
capture和cgictest.cgi拷贝到/var/www/cgi-lin/下面,
运行boa:
./boa
在浏览器输入:
http://192.168.1.111/cgi-bin/cgictest.cgi
能够进入例子。

设计hello代码:
# include < stdio . h >
# include < stdlib . h >
int  main ( void )
{
         printf ( "Content-type: text/html\n\n" ) ;  //注意\n\n
         printf ( "<html>/n" ) ;
         printf ( "<head><title>CGI Output</title></head>/n" ) ;
         printf ( "<body>/n" ) ;
         printf ( "<h1>Hello,world.</h1>/n" ) ;
         printf ( "<body>/n" ) ;
         printf ( "</html>/n" ) ;
         exit ( 0 ) ;
}
编译:
gcc -o hello.cgi hello.c
将得到的hello.cgi拷贝到/var/www/cgi-lin/
通过浏览器访问:
http://192.168.1.111/cgi-bin/hello.cgi
没有问题。

第二部分

1.启动boa
2../mjpg_streamer -i "input_uvc.so -yuv -d /dev/video0 -y -r 640x480" -o "output_http.so -w ./www"
3.cp /mjpg_streamer/www/* /var/www
4.在stream.html中添加<img src="http://192.168.1.102:8080/?action=stream" width="512px" height="384px" />就可以了
4.在客户端打开网页192.168.1.×××

验证完成



问题:可能会出现mime.types缺失问题,拷贝电脑etc下的mime.types到板子上etc文件下

你可能感兴趣的:(Linux 下Boa + cgic Web服务器 +mjgp----fwqlzz love is for ever)