發表文章

目前顯示的是 六月, 2009的文章

靈修分享:亞略巴古的演講

亞略巴古的演說是使徒行傳一篇非常著名的講道。基督徒往往用這段經文來說明上帝的屬性,同時也會參考這段經文作為和外邦人互動的一個參考方式。最近因為團契查經查到這一段,重新思想後看到了以前沒有考慮過的面向,在這邊記錄一下。

徒17:16-34保羅在雅典等候他們的時候,看見滿城都是偶像,就心裏着急;於是在會堂裏與猶太人和虔敬的人,並每日在市上所遇見的人,辯論。還有伊壁鳩魯和斯多亞兩門的學士,與他爭論。有的說:「這胡言亂語的要說甚麼?」有的說:「他似乎是傳說外邦鬼神的。」這話是因保羅傳講耶穌與復活的道。他們就把他帶到亞略‧巴古,說:「你所講的這新道,我們也可以知道嗎?因為你有些奇怪的事傳到我們耳中,我們願意知道這些事是甚麼意思。」(雅典人和住在那裏的客人都不顧別的事,只將新聞說說聽聽。)
保羅站在亞略‧巴古當中,說:「眾位雅典人哪,我看你們凡事很敬畏鬼神。我遊行的時候,觀看你們所敬拜的,遇見一座壇,上面寫着『未識之神』。你們所不認識而敬拜的,我現在告訴你們。創造宇宙和其中萬物的神,既是天地的主,就不住人手所造的殿,也不用人手服事,好像缺少甚麼;自己倒將生命、氣息、萬物,賜給萬人。他從一本本:有古卷是血脈造出萬族的人,住在全地上,並且預先定準他們的年限和所住的疆界,要叫他們尋求神,或者可以揣摩而得,其實他離我們各人不遠;我們生活、動作、存留,都在乎他。就如你們作詩的,有人說:『我們也是他所生的。』我們既是神所生的,就不當以為神的神性像人用手藝、心思所雕刻的金、銀、石。世人蒙昧無知的時候,神並不監察,如今卻吩咐各處的人都要悔改。因為他已經定了日子,要藉着他所設立的人按公義審判天下,並且叫他從死裏復活,給萬人作可信的憑據。」
眾人聽見從死裏復活的話,就有譏誚他的;又有人說:「我們再聽你講這個吧!」於是保羅從他們當中出去了。 但有幾個人貼近他,信了主,其中有亞略‧巴古的官丟尼修,並一個婦人,名叫大馬哩,還有別人一同信從。

對基督徒來說,保羅這篇講道講的真好,不但講出了上帝的超越性(像是不住人手所造的殿、也不是金銀石的彫刻),也帶出了耶穌基督復活的大能。但最近我才注意到眾人的反應:「眾人聽見從死裏復活的話,就有譏誚他的;又有人說:「我們再聽你講這個吧!」」不曉得你看到這一段有什麼感想?可能我是玻璃心吧,如果我是保羅,我大概會非常非常的難過,看起來似乎沒有人理會這個福音、這篇講道。這篇被基督…

Openswan Porting to Pronghorn-Metro 實務經驗分享 06

最後一回精彩大結局~

# ipsec --help

理論上來說,這個指令會 show 出所有支援的指令,但...沒 show 出來...。看了一下,show 指令的方式也夠奇特,居然事先用 ls 讀 /usr/local/libexec/ipsec/ 下面的檔案,然後在用 egrep 進行過濾的動作... 好傢伙。因為我懶的去安裝 egrep 了,就把 ipsec 這隻 script 稍微改寫一下,達到相同的目的(不過好像沒完全濾完,管他的,反正我也只用那幾個指令)

正當我把一切都準備好了以後,鼓起勇氣執行:

# ipsec setup start

產生了下面的 Log:

ipsec_setup: Starting Openswan IPsec U2.4.5/K2.6.17-uc1-adi3...
ipsec_setup: modprobe: module ah4 not found.
ipsec_setup: modprobe: failed to load module ah4
ipsec_setup: modprobe: module esp4 not found.
ipsec_setup: modprobe: failed to load module esp4
ipsec_setup: modprobe: module ipcomp not found.
ipsec_setup: modprobe: failed to load module ipcomp
ipsec_setup: modprobe: module xfrm4_tunnel not found.
ipsec_setup: modprobe: failed to load module xfrm4_tunnel
ipsec_setup: modprobe: module xfrm_user not found.
ipsec_setup: modprobe: failed to load module xfrm_user
ipsec_setup: modprobe: module hw_random not found.
ipsec_setup: modprobe: failed to load module hw_random
ipsec_setup: modprobe: module padlock not found.
ip…

Openswan Porting to Pronghorn-Metro 實務經驗分享 05

在上一次的最後,我們總算將這隻難纏的天鵝給移植到版子上了,接下來,會一帆風順嗎??(我好希望這答案是肯定句唷 ... )

首先,來參考一下官方網頁的設定步驟:

http://wiki.openswan.org/index.php/Openswan/Configure

首先,來看看自己身上的金鑰

# ipsec showhostkey --left

結果,當然找不到金鑰囉,哼,那就自己產生吧。

# ipsec newhostkey --output /etc/ipsec.secrets

恩,好像有點久ㄟ,畢竟只是版子,運算能力差了點,RSA 又是很需要運算的動作,先去作其他事吧...。天真的我真的去處理其他工作上的事了。幾個小時以後... 「甚麼,還沒算完,到底怎麼了??」嵌入式系統在爛也不是這樣的吧!!於是一氣之下,去看看到底他程式是怎麼寫得...

openswan/programs/rsasigkey/rsasigkey.c

33 #ifndef DEVICE
34 #define DEVICE "/dev/random"
35 #endif

恩... /dev/random ... 嗎... 思緒飄回過去。那年,我還是甚麼都不懂得研究生,一個叫做「小龍」的學長正在研究室完版子,那時候他正在 porting 一個叫做 dropbear 的 SSH Server (附帶一題,這是嵌入式系統常見的 SSH Server,跟常見的 Openssh 比起來輕巧多了)

小龍:阿,總算搞定了

我:不過就是 porting 一個伺服器上去啊,怎麼能讓學長這麼鬆了一口氣(我真是不知天高地厚)

小龍:是早就上版子了啦,但一直不知道為甚麼會卡住,剛剛才解決。

我:卡住?

小龍:對啊,就是程式執行就會停在那邊。找到理由就很簡單了。聽好了, Linux 底下是透過 /dev/random 去取得 random number,而 /dev/random 會收集系統的 interrupt 來作為產生亂數的 seed。你想想看之前你用 putty key gen 來產生憑證的時候,他是不是有要你敲鍵盤嗎?那也是同樣的意思。而在 Linux 底下,如果他覺得他無法產生「數學上夠完美」的亂數,整個系統就會停在那裡,等到收集到足夠的熵。

我:如果是這樣的話,那照理來說 Openssh 也有同樣的問題啊,可是我…

Openswan Porting to Pronghorn-Metro 實務經驗分享 04

上次處理到 Openswan 的編譯,最後停在了 endian 的問題,這次能不能順利解決呢?

在使用 GCC 的編譯上,預設為 little-endian,如果要特別編譯成 big-endian 的話,要加上一個 -mbig-endian 的參數,所以,我們再來一遍。

編譯 GMP

./configure --host=arm-linux CC="arm-linux-gcc" CXX="ucfront-g++ arm-linux-uclibc-g++" --prefix=/usr/local/arm-linux CFLAGS=-mbig-endian
make
make install

然後,在 openswan/Makefile.inc 加上 CFLAGS += -mbig-endian

編譯 Openswan

make KERNELSRC=../../ADI/linux-2.6.x ARCH=arm OSDEP=linux USE_NETKEY=yes CC="arm-linux-gcc -L../ADI/romfs/lib" LD=arm-linux-ld RANLIB=arm-linux-ranlib AR=arm-linux-ar AS=arm-linux-as STRIP=arm-linux-strip programs
make DESTDIR=../../ADI/romfs install

過了嗎??沒有!!怎麼可能... 我發現在 make 的時候,回報的信息告訴我說要編譯 little-endian 的執行檔卻使用 big-endian 的 library。How could it be?? 我不是連 CFLAGS 都設定好了嗎? 正當一籌莫展的時候,幸好辦公室的同事(Hidding)即時出手相救。他很有耐心的去觀看編譯的過程,發現在編譯那幾隻程式的時候根本沒有吃到 -mbig-endian!於是我在打開 Makefile (openswan/program/pluto/Makefile) 來看 ... 天啊... 在編譯的時候根本沒有使用 CFLAGS 嘛(你前面的 CFLAGS 是寫好玩得就是了)

罪魁禍首是下面幾個~
alg_info_test:
$(BINNAMEPLUTO):
$(BINNAMEADN…

Openswan Porting to Pronghorn-Metro 實務經驗分享 03

圖片
很好,下一步是編譯 「開放天鵝」OpenSwan 了~

應該不會有甚麼難度吧(假設語氣)。首先,來乖乖看看安裝文件怎麼說:

To use the native (aka, Netkey) stack:
0) Please use at least version kernel version 2.6.6, as prior
versions of the kernel have serious bugs in the IPsec stack.
1) From the openswan source directory:
make programs
2) As root, install the userland tools:
make install

哼,簡單來說,就是 make programs, make install 嘛 (再提醒一下,因為我們沒有使用 KLIPS ... 所以不要去理會 make module 的部份了),編譯的過程並不十分順利,有少部份要進行修改,但都是簡單的修改,所以把修改的地方列在下面而不列出錯誤信息:

openswan/programs/pluto/server.c:780
LIST_INSERT_HEAD(&interface_dev, id, id_entry) => LIST_INSERT_HEAD(&interface_dev, id, id_entry);

openswan/programs/pluto/foodgroups.c: 22
#include => #include <linux/limits.h>

順利的 make 過了,之後就要 install 囉。因為要特別指定安裝路徑,所以指令如下:

make DESTDIR=../ADI/romfs install

簡單啊~之後在製作新的 ramdisk,下 make image 的指令... 結果... 它跟我抱怨 romfs 太大?? 奇怪了,這隻開放天鵝是有多肥啊,我看看 ... 天啊... 它把 man/docs 全都放進去了 ... 難怪啊,好吧,那我再把那些 manual, documents 砍掉總可以了吧~ 成功!很高興的開機進去執行 rsasigkey 看看 ...

cannot execute binary file

又怎麼…

Openswan Porting to Pronghorn-Metro 實務經驗分享 02

首先,先編出一個可以動的系統吧~

這部份倒是很簡單,按照下面的步驟即可:

1. tar zxvf ADILinuxDistribution-adi3.tgz
2. Get the cross compiler tool chain (http://www.snapgear.org/snapgear/downloads.html)
3. Intel Access Library Integration
4. make menuconfig
...4.1 Vendor/Product Selection -> ADI, PronghornMetro
...4.2 Kernel/Library/Defaults Selection -> linux-2.6.x, uClibc
5. make
6. 將編出來的 image 和 ramdisk 放到版子上 ( 於 boot loader 執行下面的 command )
...6.1 ip_address -l 192.168.8.234 -h 192.168.8.239
...6.2 load -r -v -b 0x01600000 zImage
...6.3 load -r -v -b 0x00800000 ramdisk.gz
...6.4 go -n 0x01600000

這樣就完成了~
那接下來,要開始進入重頭戲了(或是說,我的一連串搞笑演出),也就是將 OpenSwan 放到版子上。

首先,理所當然的, IPSec 會動到 Linux 本身的 IP Stack,這也意味著,一定有不少的 Kernel Option 會需要進行選擇。在我印象中(這兩個字真是害慘我了,以後記得要多看看官方文件才是),kernel 2.4 並不支援 IPsec ,或是說要加上一些 Patch 才能支援,kernel 2.6 則是天生就支援 IPSec,這也是為甚麼前面我編得時候, kernel 選擇 2.6 的理由。所以,我就很勇敢的進入 Kernel 的 menuconfig 畫面,開始選擇我所需要的模組。

一進去就直接來到 Networking --> Networking options 底下,很快的就找到了幾個 Option:

IPsec user configuration interface
PF_KEY sockets ( 我是看到 KEY…

Openswan Porting to Pronghorn-Metro 實務經驗分享 01

緣由:

不知道為甚麼,Femtocell 突然之間變成一個很 Hot 的題目 (我到現在還是搞不懂為甚麼有人想把基地台放在室內 ...)。Femtocell 的概念很簡單,將為型基地台放入用戶的家裡面,透過用戶家裡現有的寬頻網路,將資料(包含語音,反正現在都講 IP 網路了嘛)傳到後端的 Access Network。整個架構看起來會像下面的樣子:

User --- Femto AP --- Broadband Provider --- Access Service Provider --- Connectivity Service Provider

然而,對電信業者來說,資料經過 Broadband Provider 才回到自己的手上當然很不放心(擔心被搞鬼就是了),所以他們採用了現成的解決方案,IPSec Tunnel。由 Femto AP 建一條 IPSec Tunnel 到 Access Service Provider 來保護資料的傳送。

這就是所有故事的由來囉~

系統環境:

Platform: ADI Pronghorn-Metro x 2
OS: uclinux (2.6.17-uc1-adi3)
Src: ADILinuxDistribution-adi3.tgz
Openswan: Version 2.4.5

目標:

讓 IPSec 在 Pronghorn-Metro 執行起來,並且運作 OK。

限制:

ADILinuxDistribution-adi3.tgz 是一套很棒的架構,坦白說,要把 OpenSwan 編起來很容易,只要 Follow 下面的步驟:

1. make menuconfig;
2. 選取 Customize Kernel Settings & Customize Vendor/User Settings
3. 選取適當的 Kernel Module
4. 選取 OpenSwan 的套件
5. make

簡單吧~但這次我們不這樣處理,理由很簡單,因為 Access Provider 那一端雖然是 ADI Pronghorn-Metro 的版子,但是,FAP 那一端卻是我們自製的 Picochip HDP203,沒有這一套架構。所以,為了將來在一次的 Porting,我們還是按照正規的作法來處理,至於其他的部份,我們依舊是使用 ADILinuxDistri…

這個網誌中的熱門文章

如何將Linux打造成OpenFlow Switch:Openvswitch

我弟家的新居感恩禮拜分享:善頌善禱

如何利用 Wireshark 來監聽 IEEE 802.11 的管理封包