Compile OpenWRT with Open vSwitch
雖然說在 google 上很多資料都說,Open vSwitch 已經加入到 OpenWRT 的 packages repository,而且在 GitHub 上也有看到 Open vSwitch 的身影。但是實際上,在官方的 repository 中並沒有 Open vSwitch。因此決定自行編譯。
實驗環境
-
編譯環境
- Operating System: Ubuntu 14.04 x64
- OpenWRT version: 14.07
- Open vSwitch version: 2.3.1
-
路由器
開始編譯
- 首先要先安裝編譯環境
sudo apt-get -y install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl unzip
- 下載 source code (stable version, 14.07)
user@localhost:~$ git clone git://git.openwrt.org/14.07/openwrt.git
- 建立 feeds.conf
user@localhost:~$ cd openwrt
user@localhost:~/openwrt$ mv feeds.conf.default feeds.conf
- 執行
feeds update
user@localhost:~/openwrt$ ./scripts/feeds update -a
指令結束後,會看到當前目錄下多了一個資料夾,名稱為 **feeds**,裡面將會根據 feeds.conf 的每個項目,一個項目將會產生兩個目錄、一個 soft-link,例如:
user@localhost:~/openwrt$ ls -lh feeds/
drwxrwxr-x 13 user user 4.0K 3月 9 14:24 packages
lrwxrwxrwx 1 user user 25 3月 9 14:52 packages.index -> packages.tmp/.packageinfo
drwxrwxr-x 3 user user 4.0K 3月 9 14:24 packages.tmp
-
將 Open vSwitch repo 新增到 feeds.conf 中
先檢查看看 packages 與 oldpackages 裡面是否有 openvswitch:
user@localhost:~/openwrt$ ls feeds/packages/net/ | grep openvswtich
user@localhost:~/openwrt$ ls feeds/oldpackages/net/ | grep openvswitch
如果有,則跳過此步驟;反之,則新增 Open vSwitch repo:
user@localhost:~/openwrt$ echo 'src-git openvswitch git://github.com/pichuang/openvwrt.git' >> feeds.conf
user@localhost:~/openwrt$ ./script/feeds update -a
然後打上 libatomic patch:
user@localhost:~/openwrt$ wget https://gist.githubusercontent.com/pichuang/7372af6d5d3bd1db5a88/raw/4e2290e3e184288de7623c02f63fb57c536e035a/openwrt-add-libatomic.patch -q -O - | patch -p1
執行完之後,在 feeds 資料夾裡面看到 openvswitch:
user@localhost:~/openwrt$ ls -lh feeds/ | grep openvswitch
drwxrwxr-x 4 user user 4.0K 3月 9 14:52 openvswitch
lrwxrwxrwx 1 user user 28 3月 9 14:52 openvswitch.index -> openvswitch.tmp/.packageinfo
drwxrwxr-x 3 user user 4.0K 3月 9 14:52 openvswitch.tmp
- **更改 Open vSwitch 版本**
原本的 maintainer 已經不再維護了,因此版本還是 2.3.0。如果想要更改版本,則編輯 `feeds/openvswitch/openvswitch/Makefile`
PKG_RELEASE:=1
PKG_VERSION:=2.3.0
修改 `PKG_RELEASE` 與 `PKG_VERSION` 這兩個值:
PKG_RELEASE:=0
PKG_VERSION:=2.3.1
然後再次執行 `feeds update`
user@localhost:~/openwrt$ ./scripts/feeds update openvswitch
這時候就可以看到 `feeds/openvswitch.index` 裡面,Open vSwitch 的版本就改成了 **2.3.1-0**
Source-Makefile: feeds/openvswitch/openvswitch/Makefile
Package: openvswitch-ipsec
Version: 2.3.1-0
- 執行
feeds install
user@localhost:~/openwrt$ ./scripts/feeds install -a
- 執行
make menuconfig
user@localhost:~/openwrt$ make menuconfig
接下來會開啟編譯選單:<br />
利用上下左右、M、空白鍵來切換與選擇不同的編譯選項。在選擇編譯選項時,原則上是:
1. 系統預設值保留不變,除非要拿掉甚麼功能,ex: ppp。
2. 盡量將需要編譯的項目選擇為 **M**,而不是 <strong>*</strong>,除非認定必要存在。
選擇的過程中或是離開前,選擇 **save** 可以將選項儲存起來,檔名保留為 **.config** (檔名不可以變更)。<br />
- **Target Profile**
如果 OpenWRT 是要自己使用的,可以指定要編譯哪些 firmware,這樣可以節省不少編譯時間。<br />
選擇 `Target Profile` -> 選擇指定的 device 名稱,例如: TP-Link TL-W1043N/ND<br />
- **Open vSwitch**
1. 選擇 `Network` -> `openvswitch-common`、`openvswitch-ipsec`、`openvswitch-switch` <br /><br />
2. 選擇 Advanced configuration options (for developers)
-> Target Options
-> 取消勾選 Build packages with MPIS16 instructions
3. 選擇 Advanced configuration options (for developers)
-> Toolchain Options
-> Binutils Version
->Linaro binutils 2.24
- **Luci** (Option.)
如果想要網頁管理介面,可以選擇加裝 luci<br />
選擇 `Luci` -> `Collections` -> `luci`<br />
- Compile OpenWRT 選擇完編譯選項,並將設定值儲存為 .config 之後,接下來執行:
user@localhost:~/openwrt$ echo '#CONFIG_KERNEL_BRIDGE is not set' >> .config
這個步驟再每一次 `make menuconfig` 之後都要執行一次<br />
然後開始編譯 OpenWRT<br/>
user@localhost:~/openwrt$ make V=s
編譯完成後的檔案會放在 `openwrt/bin/`
-
架設 repository 為了方便燒 OpenWRT 到 AP 裡面,可以順便架設 web server ,透過 HTTP 來提供 firmware 載點。以 nginx 為範例:
- 安裝 web server
user@localhost:~/openwrt$ sudo apt-get -y install nginx
- 編輯 `/etc/nginx/sites-available/default`,在 **server** 的設定裡面,新增以下 location 片段:
location /openwrt/downloads {
alias /home/user/openwrt/bin;
autoindex on;
}
請根據喜好與系統狀態去設定:
- URL: `/openwrt/downloads`
- PATH (編譯後的 firmware 放置位置): `/home/user/openwrt/bin`
- 重啟 nginx
user@localhost:~/openwrt$ sudo service nginx restart
然後打開瀏覽器,輸入網址: `http://<<your ip>>/openwrt/downloads`,應該要出現類似以下的畫面:<br />
點擊 ar71xx 後:
使用 OpenWRT
接下來就可以利用 Luci 、Sysupgrade 指令、AP 原廠的管理介面等方法去燒 OpenWRT。 OpenWRT 第一次開機時,要使用 telnet 的方式連入
telnet 192.168.1.1
進入系統之後,更換 root 密碼。登出之後,接下來就改用 ssh (或是 Luci) 登入。