天天看點

web伺服器boa移植

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上

繼續閱讀