Compile OpenWRT with Open vSwitch
(Last updated: 2015/3/18)
雖然說在 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
修改feeds/openvswitch/openvswitch/Makefile PKG_RELEASE:=1 PKG_VERSION:=2.3.0
PKG_RELEASE
與PKG_VERSION
這兩個值: 然後再次執行feeds/openvswitch/openvswitch/Makefile 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-0Source-Makefile: feeds/openvswitch/openvswitch/Makefile Package: openvswitch-ipsec Version: 2.3.1-0
-
更改 Open vSwitch 版本
原本的 maintainer 已經不再維護了,因此版本還是 2.3.0。如果想要更改版本,則編輯
-
執行
feeds install
user@localhost:~/openwrt$ ./scripts/feeds install -a
-
執行
make menuconfig
user@localhost:~/openwrt$ make menuconfig
接下來會開啟編譯選單:
利用上下左右、M、空白鍵來切換與選擇不同的編譯選項。在選擇編譯選項時,原則上是:
- 系統預設值保留不變,除非要拿掉甚麼功能,ex: ppp。
- 盡量將需要編譯的項目選擇為 M,而不是 *,除非認定必要存在。
選擇的過程中或是離開前,選擇 save 可以將選項儲存起來,檔名保留為 .config (檔名不可以變更)。
-
Target Profile
如果 OpenWRT 是要自己使用的,可以指定要編譯哪些 firmware,這樣可以節省不少編譯時間。
選擇Target Profile
-> 選擇指定的 device 名稱,例如: TP-Link TL-W1043N/ND
-
Open vSwitch
- 選擇
Network
->openvswitch-common
、openvswitch-ipsec
、openvswitch-switch
- 選擇
Advanced configuration options (for developers)
->Target Options
-> 取消勾選Build packages with MPIS16 instructions
- 選擇
Advanced configuration options (for developers)
->Toolchain Options
->Binutils Version
->Linaro binutils 2.24
- 選擇
-
Luci (Option.)
如果想要網頁管理介面,可以選擇加裝 luci
選擇Luci
->Collections
->luci
-
Compile OpenWRT
選擇完編譯選項,並將設定值儲存為 .config 之後,接下來執行:user@localhost:~/openwrt$ echo '#CONFIG_KERNEL_BRIDGE is not set' >> .config
這個步驟再每一次
make menuconfig
之後都要執行一次
然後開始編譯 OpenWRTuser@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
- URL:
- 重啟 nginx
user@localhost:~/openwrt$ sudo service nginx restart
然後打開瀏覽器,輸入網址:
http://<<your ip>>/openwrt/downloads
,應該要出現類似以下的畫面:
點擊 ar71xx 後:
- 安裝 web server
使用 OpenWRT
接下來就可以利用 Luci 、Sysupgrade 指令、AP 原廠的管理介面等方法去燒 OpenWRT。
OpenWRT 第一次開機時,要使用 telnet 的方式連入
telnet 192.168.1.1
進入系統之後,更換 root 密碼。登出之後,接下來就改用 ssh (或是 Luci) 登入。