Sunday, May 06, 2007

FON: Extend Your Internet Connection - Act I

Back

免責聲明:若您依照本文章內容修改您的FON,更改後出現任何問題,最後導致FON無法正常運作,您需自行負責,本人並未保證此修改方式適用於各種特殊情形!若您繼續閱讀本文章,則表示您同意此聲明。


在先前的Introduction提到了加密系統的部分,需藉由wpa_supplicant來完成連線的動作,也就是在所有的步驟之前,第一件事就是要先compile出能在FON使用的版本。而在OpenWRT的原始碼中,已經準備了我們需要的檔案,只需簡單的操作,即能得到我們想要的結果,不需要再大費周章的找齊各種需要的原始碼,由此可以節省大量的時間。接下來,將要介紹如何利用OpenWRT的toolchain,compile出適合FON使用的cross-compiler,並用它來compile wpa_supplicant。

註:以下提及的參數皆以實驗環境為例,您可能需要依您的環境進行適當的調整。



請先準備好Preliminary提到的OpenWRT和wpa_supplicant,並分別解壓縮在這兩個資料夾。
~/fon/fonera
~/fon/wpa_supplicant-0.5.7
首先,我們先來製作cross-compiler。先切換至~/fon/fonera,並執行以下命令。
make menuconfig
若您出現以下訊息,則表示您需調整您的Console大小至80*19以上,否則無法顯示選單。


Fig 1: Screen size limitation of Menuconfig


若順利的話,應該會看到下圖的畫面。


Fig 2: The menu of OpenWRT (Click to enlarge)


根據先前實驗得到的結果,您只需變更Libraries->libopensslDrivers->kmod-madwifibuilt-inpackage,其它部分保持預設值即可,而設成built-inpackage,在這裡並不影響最後得到的結果。修改完成後,請按ESC離開,並在出現的選單選擇儲存設定檔。

接下來,請執行以下指令,開始自動compile新的cross-compiler。此過程可能需要1小時或更多時間,視電腦處理速度而定。
make
當您看到以下的畫面,且無出現任何錯誤訊息,即表示您的cross-compiler已經就位,再來就可以compile能在FON使用的wpa_supplicant。


Fig 3: Job Finished! (Click to enlarge)




接下來要使用前面的cross-compiler來compile wpa_supplicant。先進入wpa_supplicant資料夾,並執行以下指令,把範例設定檔複製成主要設定檔。
cp defconfig .config
完成後,修改.config設定檔,並貼上以下的內容,貼在檔案中任意位置都可以。此部分是用來覆寫預設的MadWiFi和OpenSSL include和link的路徑,並修正make時link失敗的問題。
CC=../fonera/staging_dir_mips/bin/mips-linux-uclibc-gcc
CFLAGS = -I../fonera/build_mips/openssl-0.9.8b/include -Os -MMD -Wall
LIBS += -L../fonera/build_mips/openssl-0.9.8b -lssl
LIBS_p = -L../fonera/build_mips/openssl-0.9.8b -lcrypto

CONFIG_DRIVER_MADWIFI=y
CFLAGS += -I../fonera/build_mips/linux-2.4-ar531x/madwifi-0.9.0
CONFIG_NO_STDOUT_DEBUG=y
完成後,執行以下指令來compile wpa_supplicant。
make
註:經由本設定檔compile的wpa_supplicant,可使用None, WPA, WPA2的認證和WEP40, WEP104, TKIP, CCMP(AES)加密的組合,若您的網路環境需要使用EAP或其它加密系統,請自行修改.config設定檔。

若過程中無任何錯誤訊息,表示compile已經成功。您可以在資料夾中找到以下三個檔案,這些檔案將會在FON上面運作。


Fig 4: wpa_supplicant (Click to enlarge)


以上程序完成後,您可以先把下列檔案上傳至FON,我們將會在稍後的操作中使用這些檔案。
Source of Linux Box:
~/fon/wpa_supplicant-0.5.7/wpa_supplicant.conf
~/fon/wpa_supplicant-0.5.7/wpa_cli
~/fon/wpa_supplicant-0.5.7/wpa_passphrase
~/fon/wpa_supplicant-0.5.7/wpa_supplicant
~/fon/fonera/build_mips/openssl-0.9.8b/libcrypto.so.0.9.8
~/fon/fonera/build_mips/openssl-0.9.8b/libssl.so.0.9.8

Destination of FON:
/etc/wpa_supplicant.conf
/usr/sbin/wpa_cli
/usr/sbin/wpa_passphrase
/usr/sbin/wpa_supplicant
/lib/libcrypto.so.0.9.8
/lib/libssl.so.0.9.8

以上步驟皆完成後,您可以繼續閱讀下一篇文章。

4 comments:

Ryan1 said...

你好~~我在要執行最一開始的指令
執行make menuconfig時
出現在以下兩個error
svn : '.' is not a working copy
/bin/sh : Syntax error:"&" unexpected

不曉得這兩問題該如何解決呢
我的linux是使用ubuntu 7.10
已安裝了gcc 及 make等工具了..

抱歉~我是個linux新手
因為某些原因~~需要去研究fon怎麼玩
所以就找到了你的blog

(T)ttrick said...

你好!
雖然我還沒下載來測試
但依照您提供的訊息
根據我的推測
您的Shell似乎是使用"sh"?
如果是的話,請務必換成"Bash"再試試看
等我回去之後會再幫你試試看
我也有Ubuntu 7.10的環境可以使用!

(T)ttrick said...

因為你的訊息裡面包含聯絡資料
所以我幫你把它拿掉重貼 XD

==========

Ryan1 said...
一般linux的shell不是原來就預設為BASH嗎?
我下達 cat /etc/passwd
可以看到
root:x:0:0:root:/root:/bin/bash
ryan:x:1000:1000:Ryan,,,:/home/ryan:/bin/bash
所以是代表說我這個帳號是使用bash吧?
還有我在電腦的linux的kernel下打make menuconfig 會跑出configuration畫面

只有在 OpenWrt下打make menuconfig才會出現我上面說的錯誤

如果真的是因為我的shall為"sh"
那我應該要到哪去將它改成"Bash"呢??

還有阿 我家網路是使用中華電信
中華電信似乎不提供DHCP連線方式
所以我是使用PPPoE 此種連線方式可以實作這個實驗嗎??
因為是用PPPoE所以在你的FON: Unbrick your La Fonera!這邊我就沒辦法實作
所以我是用Serial Console來連到fon

將來可能還會有很多問題想要問你
不曉得方不方便跟你要個msn之類的
或是你在ptt上的ID??
我的msn:****************
ptt :**************

謝謝你囉!!

(T)ttrick said...

Bash是多數的預設值沒錯
但像FreeBSD或是FON等*nix系統
有的是真正"原始"的sh FON則是ash
你的狀況只是我的推測而已 我有提到
說不定你有什麼特別需求要使用其它的Shell XD
照目前你提供的訊息來看
使用的是Bash沒錯
錯誤訊息裡面出現的/bin/sh
然後推測你可能使用"sh"
應該也算是合理推測 XD

大概就在你貼訊息的時間
我有試了一下
和你出現的是一樣的訊息
但實際上應該不只這兩行吧
裡面有一行提到要你重新跑一次make menuconfig V=99
這樣就可以看到真正的錯誤訊息是什麼
再來我的是出現文章裡面螢幕太小的訊息
修正一下再跑一次make menuconfig V=99就進選單了

PPPoE調整DNS的部分
至少FON的介面做不到
之所以我會有這樣的環境
是因為FON在NAT之後
這樣才可以設定Static IP
同時手動指定DNS Server
如果你有Serial Console Cable的話
大可不必弄這個東西
你已經有一把瑞士刀了
小刀片就可以丟一邊去 XD
若真的很想試這一部分的話
就弄個NAT環境出來吧 會Linux的話應該不難