一、下載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
# 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配置文件參數說明
Port:boa服務器監聽的端口,默認的端口是80。如果端口小於1024,則必須是root用戶啓動服務器。
Listen:綁定的ip地址。不使用這個參數時,將綁定所有的地址。
User:連接到服務器的客戶端的身份,可以是用戶名或UID。(nobody用戶也有讀權限)
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:指定腳本路徑的虛擬路徑。