歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Real6410移植Boa Webserver詳解

Real6410移植Boa Webserver詳解

日期:2017/3/1 10:23:36   编辑:Linux編程

boa源碼包:

下載在Linux公社的1號FTP服務器裡,下載地址:

FTP地址:ftp://www.linuxidc.com

用戶名:www.6688.cc

密碼:www.linuxidc.com

在 2012年LinuxIDC.com\5月\Real6410移植Boa Webserver詳解

下載方法見 http://www.linuxidc.net/thread-1187-1-1.html

boa的配置不是太復雜,就是有點折騰,設置arm-linux-gcc的過程這裡不再詳述。

解壓縮boa的源碼包:

  1. [root@ www.linuxidc.com boa]# tar zvxf boa-0.94.13.tar.gz
進入src文件夾,進行配置
  1. [root@ www.linuxidc.com boa]# cd src/
  2. [root@ www.linuxidc.com src]# ./configure
生成的Makefile文件是針對X86平台的,為了生成能夠在ARM上運行的boa,需要修改Makefile文件

將Makefile的31~32行內容:

PS:這裡跳轉到31~32行,可以在vi下直接31+G,這樣按,也可以:set nu,這樣顯示行數,方便點
CC = gcc
CPP = gcc –E
應用(在交叉編譯時使用):
CC = arm-linux-gcc
CPP = arm-linux-gcc –E
然後輸入make命令進行編譯,在src目錄下就會生成boa文件。

PS:這裡Make可能會出現錯誤,這裡大致總結下

錯誤1:
bison -y -d boa_grammar.y
gcc -g -O2 -pipe -Wall -I. -c -o y.tab.o y.tab.c
y.tab.c: In function ‘yyparse’:
y.tab.c:1295: warning: implicit declaration of function ‘yylex’
lex boa_lexer.l
make: lex: Command not found
make: *** [lex.yy.c] Error 127
解決辦法:由於沒有flex,出現了缺少lex.yy.c文件的報錯。只要安裝上flex即可。
$ sudo apt-get install flex

錯誤2:
request.c: In function ‘get_request’:
request.c:84: warning: pointer targets in passing argument 3 of ‘accept’ differ in signedness
gcc -g -O2 -pipe -Wall -I. -c -o response.o response.c
gcc -g -O2 -pipe -Wall -I. -c -o select.o select.c
gcc -g -O2 -pipe -Wall -I. -c -o signals.o signals.c
gcc -g -O2 -pipe -Wall -I. -c -o util.o util.c
util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token
make: *** [util.o] Error 1
解決辦法:根據提示修改源碼中的src/compat.h文件。
修改:#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
為:#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff


錯誤3:Could not open boa.conf for reading 這個是因為根目錄定義好了後,啟動boa就要去這個根目錄下讀取boa.conf mime.types,因此根目錄下必須有這兩個文件。


錯誤4:boa.c:226 - icky Linux kernel bug!: Success 這是從log/boa/error_log中讀到的,打沒打開boa從這個文件就可看到。注釋掉下面語句: if (setuid(0) != -1) { DIE(”icky Linux kernel bug!”); } 為 #if 0 if (setuid(0) != -1) { DIE(”icky Linux kernel bug!”); } #endif打開正確後,error_log將顯示boa: server version Boa/0.94.13 [20/Sep/2010:08:26:24 +0000] boa: server built Sep 20 2010 at 16:20:39. [20/Sep/2010:08:26:24 +0000] boa: starting server pid=28683, port 80 同時一定要注意權限問題,配置裡的用戶一定要和實際一致,在那些文件拷貝過程中,要注意拷貝到/bin,/var/www/cgi-bin下後,文件權限需要做修改,用sudo chmod 755 文件名,這時才可用。


然後就可以把boa傳輸到6410板子上,這裡我采用Nfs的方式直接掛載(如果遇到無法cp到板子本地目錄的情況,需要把boa文件目錄chmod -R 777,這樣就能復制了)

接著就是要修改boa.conf文件

這裡只給出一種比較簡單的修改方式

(1)Group的修改
修改 Group nogroup
為 Group 0

(2)user的修改
修改 User nobody
為 User 0

(3)ScriptAlias的修改(這裡如果沒有cgi-bin文件夾需要創建以下)
修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
為 ScriptAlias /cgi-bin/ /www/cgi-bin/

(4)DoucmentRoot的修改(這個是你網頁文件夾放置的地方,可以按你自己放的改)
修改DoucmentRoot /var/www
為DoucmentRoot /www

(5)ServerName的設置
修改#ServerName www.your.org.here
為 ServerName www.your.org.here
否則會出現錯誤“gethostbyname::No such file or directory”

(6)AccessLog修改
修改AccessLog /var/log/boa/access_log
為#AccessLog /var/log/boa/access_log
否則會出現錯誤提示:“unable to dup2 the error log: Bad file descriptor”

(7)ErrorLog修改(PS:這裡這種修改方法是不保存日志的,比較偷懶)
修改為ErrorLog /dev/null

ErrorLog /var/log/boa/error_log,錯誤日志文件,如果沒有以/開始,則表示從服務器的根路徑開始。如果不需要錯誤日志,則用/dev/null。在下面設置時,注意一定要建立/var/log/boa目錄

(8)以下配置和boa.conf的配置有關,都是在ARM根文件系統中創建
以下步驟在開發板上進行:
創建目錄/etc/boa並且把boa 和 boa.conf拷貝到這個目錄下
mkdir /etc/boa
創建HTML文檔的主目錄/www
mkdir /www
創建CGI腳本所在錄 /www/cgi-bin
mkdir /www/cgi-bin
以下步驟在Linux下進行:
將boa.conf拷貝到開發板根文件系統的/etc/boa下
#cp boa.conf /etc/boa
將boa拷貝到開發板根文件系統的/etc/boa下
#cp src/boa /etc/boa
將Ubuntu下/etc/mime.types拷貝到開發板根文件系統的/etc下
#cp /etc/mime.types /etc
將你的主頁index.html拷貝到www目錄下

最後運行,就Ok了

  1. [root@Real6410 boa]# boa &
PS:這裡也可以-c指定默認目錄,boa啟動時需要一個配置文件boa.conf,該文件的缺省目錄由src/defines.h文件的SERVER_ROOT定義,或者在啟動boa的時候通過參數“-c”指定。其中指定的默認目錄是:/etc/boa/,即是
  1. [root@Real6410 boa]# boa -c /etc/boa/ &
Copyright © Linux教程網 All Rights Reserved