1. 從http://www.boa.org 下載下傳 boa-0.94.13.tar.gz 。
2. 解壓之後進入src ,執行 ./configure 生成 Makefile。
3. 修改 Makefile :
CC= powerpc-e300c3-linux-gnu-gcc
CPP= powerpc-e300c3-linux-gnu-gcc -E
4. make
可能出現錯誤:
util.c:100:1: 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
5. 再次make ,編譯通過,生成的boa檔案。
6. 執行指令powerpc-e300c3-linux-gnu-strip boa 給 boa “減肥”,減後僅有60KB。
7. 找到源碼目錄下的boa.conf 和 主機根目錄下 /etc/mime.types 。
修改boa.conf
vim /source/rootfs/etc/boa
(1)Group的修改
修改 Group nogroup
為 Group 0
(2)user的修改
修改 User nobody
為 User 0
(3)ScriptAlias的修改
修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
為 ScriptAlias /cgi-bin/ /www/cgi-bin/
(5)DocumentRoot的修改
修改DocumentRoot /var/www
為DocumentRoot /www
(6)ServerName的設定
修改#ServerName www.your.org.here
為 ServerName www.your.org.here
否則會出現錯誤“gethostbyname::No such file or directory”
(7)AccessLog修改
修改AccessLog /var/log/boa/access_log
為#AccessLog /var/log/boa/access_log
(8)以下配置和boa.conf的配置有關,都是在ARM根檔案系統中建立
以下步驟在開發闆上進行:
建立HTML文檔的主目錄/www
mkdir /www
建立CGI腳本所在錄 /www/cgi-bin
mkdir /www/cgi-bin
當不能使用cgi 時
将#AddType application/x-httpd-cgi cgi改為AddType application/x-httpd-cgi cgi
boa器測試
将boa拷貝到開發闆根檔案系統的/etc/boa下
#cp src/boa /source/rootfs/etc/boa
将ubuntu下/etc/mime.types拷貝到開發闆根檔案系統的/etc下
#cp /etc/mime.types /source/rootfs/etc
将你的首頁index.html拷貝到www目錄下
#拷貝boa.conf到開發闆的/etc/boa/下
運作boa,然後在主機遊覽器輸入開發闆網址
[[email protected] boa]# ./boa
[30/10/2011:19:10:36 +0000] [[email protected] boa]# boa: server version Boa/0.94.13
[30/10/2011:19:10:36 +0000] boa: server built 10 30 2011 at 19:10:36
[30/10/2011:19:10:36 +0000] boa: starting server pid=968, port 80
附1):boa配置檔案參數說明
boa的配置檔案是/etc/boa/boa.conf。
Port:boa伺服器監聽的端口,預設的端口是80。如果端口小于1024,則必須是root使用者啟動伺服器。
Listen:綁定的ip位址。不使用這個參數時,将綁定所有的位址。
User:連接配接到伺服器的用戶端的身份,可以是使用者名或UID。
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。
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:指定腳本路徑的虛拟路徑。
附2):編譯中的出錯處理
報錯:[01/Jan/1970:00:56:51 +0000] log.c:73 - unable to dup2 the error log: Bad file descriptor
解決1:建立/var/log/boa/error_log檔案
解決2:修改 src/log.c
注釋掉
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
為:
再次執行boa指令
#boa
報錯:[01/Jan/1970:01:01:15 +0000] 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
再次運作boa指令
報錯:[01/Jan/1970:01:04:24 +0000] boa.c:226 - 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
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
根據以上步驟成功移植boa到MPC8315上