安防监控项目中Boa的移植

1.Boa服务器在x86平台上的移植

1.1准备阶段

  • 准备好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

1.2开始对解压后的文件进行修改(对原料进行加工)

  1. 进入解压后后目录到达src-------cd boa-0.94.13/src

  2. 执行./configure--------这是根据configure.in文件进行一系列的配置,生成config.status,configure,和Makefile文件。

    如果无法执行,考虑权限,修改该目录下的configure的属性为可执行 chmod 755 configure

  3. 在本级src目录下vi compat.h +120,对第120行进行一些修改,防止出现宏定义问题:TIMEZONE_OFFSET

    找到
    #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
    修改成
    #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
    
  4. 在本级src目录下将boa.c进行修改, vi boa.c

    		225     #if 0     //注释掉
    		226         if (setuid(0) != -1) {
    		227             DIE("icky Linux kernel bug!");
    		228         }
    		229     #endif   
    
  5. 在本级src目录下将defines.h进行修改---------此处修改的值是之后创建文件夹的绝对路径,也就是在1.3 -1创建的目录

    将src/defines.h中的
    		 #define SERVER_ROOT "/etc/boa" 
    修改为
     	     #define SERVER_ROOT "/boa"
    
  6. 在本级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  
    
    
  7. 以上修改完成后在src下执行make命令

  8. 进行上一级目录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/  
    

    1.3将文件进行移动

    1. 创建一个目录放修改后的文件----假设这个文件放在根目录下

    2. 并创建三个文件夹 sudo mkdir -p /boa /boa/www /boa/cgi-bin /boa/log

    3. 进行移动

      • boa-0.94.13/src目录下生成的boaboa_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

1.4进行测试

  1. 将如下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>
    
  2. 如下是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; }
  3. /boa下启动服务器sudo ./boa

  4. 在虚拟机的浏览器上使用http://127.0.0.1/index.html进行访问,可以进入这个html,即可成功

  5. 可按照如下关闭服务器

    	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
    

2.Boa服务器在ARM-A9平台上的移植

2.1 准备阶段

与上面的类似,创建一个新的文件,解压上述文件,``tar -xvf boa-0.94.13.tar.gz进行解压,生成boa-0.94.13`为解压完成后的目录

2.2开始对解压后的文件进行修改(对原料进行加工)

  1. 进入解压后后目录到达src-------cd boa-0.94.13/src

  2. 执行./configure--------这是根据configure.in文件进行一系列的配置,生成config.status,configure,和Makefile文件。

    如果无法执行,考虑权限,修改该目录下的configure的属性为可执行 chmod 755 configure

  3. 在本级src目录下vi compat.h +120,对第120行进行一些修改,防止出现宏定义问题:TIMEZONE_OFFSET

    找到
    #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
    修改成
    #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
    
  4. 在本级src目录下将boa.c进行修改, vi boa.c

    		225     #if 0     //注释掉
    		226         if (setuid(0) != -1) {
    		227             DIE("icky Linux kernel bug!");
    		228         }
    		229     #endif   
    
  5. 在本级src目录下将defines.h进行修改---------此处修改的值是根文件系统下放/boa文件夹的路径,也就是在2.3 -1创建的目录

    将src/defines.h中的
    		 #define SERVER_ROOT "/etc/boa" 
    修改为
     	     #define SERVER_ROOT "/boa"
    
  6. 在本级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  
    
    
  7. 在本级src目录下对boa.c进行修改

    	注释掉下面两句话:
    	#if 0
            if (passwdbuf == NULL) {
                    DIE(”getpwuid”);
                    }
                    if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
                    DIE(”initgroups”);
                    }
    	#endif
    
    
  8. 在本级src目录下对Makefile进行修改

    	
    CC = gcc   CPP=gcc -E 
    改为
    CC = arm-linux-gcc,
    CPP = arm-linux-gcc -E,
    
    
  9. 以上修改完成后在src下执行make命令

  10. 进行上一级目录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/  
    

2.3 对文件进行移动

  1. 创建一个目录放修改后的文件----在跟文件系统下-------cd /opt/4412/rootfs

  2. 并创建三个文件夹 sudo mkdir -p /boa /boa/www /boa/cgi-bin /boa/log

  3. 进行移动

    • boa-0.94.13/src目录下生成的boaboa_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

2.4 进行测试

  1. 将如下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>
    
  2. 如下是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; }
  3. /boa下启动服务器sudo ./boa

  4. 在虚拟机的浏览器上使用http://192.168.3.200/index.html对板子进行访问,可以进入这个html,即可成功

  5. 可按照如下关闭服务器

    	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
    

你可能感兴趣的:(嵌入式学习,linux,ubuntu)