linux上配置和移植BOA服務器


2010-08-03 10:00:41|  分類: Linux|字號 訂閱

一、下載Boa源碼

下載地址: http://www.boa.org/, 或者http://sourceforge.net/:

boa-0.94.13.tar.gz,解壓:# tar zxvf boa-0.94.13.tar.gz

二、編譯# ./configure# make可能出現的錯誤:1、Could not open boa.conf for reading.   boa.conf的SERVERROOT路徑指定不對,修改後重新make2、error: pasting "t" and "->" does not give a valid preprocessing token     修改 src/compat.h   找到 
  #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 
  修改成 
  #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
3、如果不幸出現icky Linux kernel bug!的錯誤,請將srcboa.c226行註釋掉,重新編譯下載即可。
225 if(setuid(0) != -1) {
226 // DIE(icky Linux kernel bug!);
227 }
三、配置

# mkdir /etc/boa

# cp / boa-0.94.13/boa.conf  /etc/boa/

修改boa.conf:

1、        Group的修改:修改 Group nogroup 爲Group 0

由於在/etc/group文件中沒有nogroup組,所以設成0。另外在/etc/passwd中有nobody用戶,所以User nobody不用修改。視情況而定。

2、scriptAlias的修改:修改 scriptAlias /cgi-bin/   /usr/lib/cgi-bin/

爲 scriptAlias /cgi-bin/   /var/www/cgi-bin/

3、ServerName的設置:修改 #ServerName www.your.org.here/

爲 ServerName www.your.org.here/

注意:該項默認爲未打開,執行Boa會異常退出,提示“gethostbyname::No such file or directory”,所以必須打開。其它默認設置即可。

# mkdir /var/log (注:redhat上已經存在,此步驟省略)

# mkdir /var/log/boa(創建日誌文件目錄)

# mkdir /var/www (創建HTML文檔的主目錄)(注:redhat上已經存在,此步驟省略)

可以將主機 /usr/share/doc/HTML/目錄下的index.html文件和img目錄複製到/var/www目錄下;

將主機/etc目錄下的mime.types文件放置到製作的根文件夾的/etc下;(注:redhat上已經存在,此步驟省略)

最後將boa-0.94.13下的boa可執行文件拷貝到/usr/local/bin下面。

四、執行

運行boa命令

#boa

在瀏覽器中輸入本機的ip地址,若不知道則輸入/sbin/ifconfig查看。

這時瀏覽器中就會出現/usr/share/doc/HTML/index.html的內容了。

五、移植到開發板

  1、 配置操作完成之後,修改Makefile文件:
   將:
    CC = gcc
    CPP = gcc -E    
   該爲:
    CC = arm-linux-gcc
    CPP = arm-linux-gcc -E
   make即可。
  2、 拷貝PC上/etc/mime.types文件到開發板/etc目錄下(或者將boa.conf文件中 MimeTypes /etc/mime.types 修改爲: MimeTypes /dev/null )
六、常見錯誤
1>. 錯誤1: gethostbyname:: No such file or directory
     解決辦法: 修改boa.conf   去掉 ServerName www.your.org.here 前的註釋符號(#)
 2>. 錯誤1: util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o]
     解決辦法: 修改 src/compat.h
找到
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
 3>. 錯誤2: boa.c:211 - getpwuid: No such file or directory
     解決辦法: 修改src/boa.c
註釋掉下面這段程序:
   if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
   DIE(”initgroups”);
   }
即修改爲:
#if 0
   if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
#endif
 4>. 錯誤3: boa.c:228 - icky Linux kernel bug!: No such file or directory
    解決辦法: 修改src/boa.c
註釋掉下面語句:
if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}
即修改爲:
#if 0
if (setuid(0) != -1) {
   DIE(”icky Linux kernel bug!”);
   }
#endif
 5>. 錯誤4: log.c:73 unable to dup2 the error log:bad file descriptor
    解決方法: 
    方法1> 確定日誌目錄對與所有用戶都具有可讀/寫的權限
    方法2> 修改src/log.c (建議採用方法1)
註釋掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
即修改爲:
#if 0
     if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
    #endif

附:

Web服務器boa配置文件參數說明

boa的配置文件是/etc/boa/boa.conf。
  
  Port:boa服務器監聽的端口,默認的端口是80。如果端口小於1024,則必須是root用戶啓動服務器。
  Listen:綁定的ip地址。不使用這個參數時,將綁定所有的地址。
  User:連接到服務器的客戶端的身份,可以是用戶名或UID。(nobody用戶也有讀權限)
  Group:連接到服務器的客戶端的組,可以是組名或GID。
  ServerAdmin:服務器出故障時要通知的郵箱地址。
  ErrorLog:指定錯誤日誌文件。如果路徑沒有以“/”開始,則相對於ServerRoot路徑。沒有配置時默認的文件是/dev/stderr。若不想記錄日誌,指定文件爲/dev/null。
  AccessLog:設置存取日誌文件,與ErrorLog類似。
  UseLocaltime:設置使用本地時間,使用UTC時註釋這個參數。這個參數沒有值。
  VerboseCGILogs:在錯誤日誌文件中記錄CGI啓動和停止時間,若不記錄,註釋這個參數。這個參數沒有值。
  ServerName:指定服務器的名稱,當客戶端使用gethostname + gethostbyname時返回給客戶端。
   VirtualHost:虛擬主機開關。使用此參數,則會在DocumentRoot設定的目錄添加一個ip地址作爲新的DocumentRoot來 處理客戶端的請求。如DocumentRoot設置爲/var/www,則http://localhost/ 則轉換成/var/www/127.0.0.1/,若註釋此參數,則爲/var/www/。
  DocumentRoot:HTML文件的根目錄(也就是網站的目錄)。
  UserDir:指定用戶目錄。
  DirectoryIndex:指定預生成目錄信息的文件,註釋此變量將使用DirectoryMaker變量。這個變量也就是設置默認主頁的文件名。
  DirectoryMaker:指定用於生成目錄的程序,註釋此變量將不允許列目錄。
  DirectoryCache:當DirectoryIndex文件不存在,而DirecotryMaker又被註釋掉時,將列出這個參數指定目錄給客戶端。
  KeepAliveMax:每個連接允許的請求數量。如果將此值設爲" 0 ",將不限制請求的數目。
  KeepAliveTimeOut:在關閉持久連接前等待下一個請求的秒數。(秒)。
  MimeTypes:設置包含mimetypes信息的文件,一般是/etc/mime.types或者也可以使用/dev/null。
  DefaultType:默認的mimetype類型,一般是text/html。
  CGIPath:相當於給CGI程序使用的$PATH變量。
  SinglePostLimit:一次POST允許最大的字節數,默認是1MB.
  AddType: 增加MimeType沒有指定的類型,例: AddType type extension [extension ...]。要使用cgi,必須添加cgi類型:AddType application/x-httpd-cgi cgi
  Redirect:重定向文件
  Aliases:指定路徑的別名。
  ScriptAlias:指定腳本路徑的虛擬路徑。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章