天天看點

【硬創邦】跟hoowa學做智能路由(六):系統基礎配置

  在這一章當中,我們将介紹在openwrt系統下的編輯和配置的基礎指令和操作知識,因為後續的章節主要用于介紹如何配置路由的相關功能,在配置的操作時我們需要掌握編輯和處理的方法。 本章中,編輯和配置的基礎方法我們分為三種,三種方式都可以操作成功。分别為:

使用vi編輯器: 适合教學時直接修改配置檔案。

使用uci進行編輯: 适合教學時使用,更适合用于自己開發的第三方程式修改配置檔案。

使用scp下載下傳到本地編輯: 适合教學和系統的測試,檔案通過scp工具下載下傳到本地修改,完成後再上傳到伺服器上(要注意使用notepad++或editplus或ue這類支援unix格式文本檔案編輯器)

vi(visual interface)是linux上最通用的标準編輯器,幾乎99.99%的linux發行版中都包含它。vi可以在不需要圖形界面的情況下實作對檔案的檢視、修改、删除、查找、替換等衆多功能。vi的操作,适用于通過序列槽直接修改檔案,以及通過ssh遠端登入系統修改檔案。 在openwrt中,系統允許通過vi編輯器直接修改uci配置檔案,進而實作對系統的配置。

在本節我們就簡單的介紹下vi的基本操作方法。

vi指令文法: vi [檔案名]

如果指定的檔案名不存在,将會在記憶體中自動建立一個空檔案,等待儲存時儲存到磁盤上。如果檔案名存在則将打開該檔案。vi在打開檔案後有兩種工作模式:

vi指令模式: 在這個模式下,不能對檔案做修改,指令輸入内容在螢幕的左下方顯示。

vi編輯模式: 在編輯模式下,可以對檔案内容進行修改,删減,或增加。在openwrt的系統下,我們可以輸入鍵盤上的主鍵盤區内容,也可以使用上下左右箭頭按鍵調整位置。

兩種模式切換: 在指令模式下,按鍵盤上的字母"i"既進入編輯模式(insert方式),這個時候可對檔案進行修改編輯。在編輯模式下按鍵盤的esc鍵,即可傳回指令模式,可以輸入指令。 vi支援的指令清單,所有指令都要輸入":"作為指令開頭,以回車作為指令結束:

退出vi編輯器指令,放棄對檔案的修改: :q! 退出vi編輯器: :q 儲存目前内容: :w 儲存退出: :wq 強制儲存退出: :wq! 搜尋字元: :/[字元内容]

操作舉例:

<a href="http://static.leiphone.com/uploads/2014/05/195.jpg"></a>

鍵盤輸入 i 進入編輯模式,然後可以随便輸入一些字元(這時已經可以寫文字了)

<a href="http://static.leiphone.com/uploads/2014/05/338.jpg"></a>

儲存退出:進入指令模式,輸入儲存退出指令:wq 該檔案即儲存。再次使用vi /tmp/test打開檔案即可看到檔案儲存内容。

衆所周知,在linux下各種軟體包有各種不同的配置腳本,每個配置腳本的文法格式和操作方式不同,這樣的設計雖然可以展現出各軟體包自身的優勢,同時也增加了智能路由産品開發的難度。在這一點上openwrt下的uci技術無疑是一種創新。

uci是(unified configuration interface)集中式配置資訊管理接口的縮寫,他是openwrt引進的一套配置參數管理機制。uci管理了openwrt下最主要的系統配置,并且提供了簡單,容易,标準化的人機互動接口。uci的管理包含了網絡配置,無線配置,系統資訊配置等作為路由器的系統主要配置參數。uci可以幫助開發人員快速的開發出基于openwrt的智能路由産品的控制界面(諸如浏覽器界面,手機界面等)。

在openwrt下有大量的軟體包的配置實用了uci相容模式。大量的應用程式其實都有他們自己的配置檔案,比如samba的配置檔案預設是/etc/samba/samba.conf,但是在openwrt下samba軟體包使用的配置方式也是uci。當執行/etc/init.d/samba start的時候,啟動腳本将通過uci的shell解碼器分析/etc/config/samba配置檔案,并且生成需要的/etc/samba/samba.conf配置,來完成配置。

openwrt下服務軟體加載流程(samba舉例):

啟動腳本---&gt;/etc/config/samba(uci解碼器)---&gt;/etc/samba/samba.conf---&gt;啟動samba服務

openwrt下配置處理流程(samba舉例):

uci指令---&gt;uci編解碼器---&gt;/etc/config/samba

由于uci配置檔案非常适合人機互動,是以如果你是需要人工修改配置,也可以簡單的使用常見的vi編輯器直接修改配置:

vi /etc/config/samba

預設的openwrt系統擁有以下幾個配置檔案,随着軟體包的增加系統配置檔案數量也會增加:

dhcp 路由器的dhcp服務,面向lan口下計算機提供ip位址配置設定服務 dropbear ssh服務 firewall 路由轉發,端口轉發,防火牆規則 fstab 外部存儲器配置 network wan / lan 網絡配置 system 時間伺服器時區配置 wireless 無線網絡配置

uci預設情況下隻處理/etc/config中的配置檔案,通過參數指定也可以讓它來處理其它位置的配置檔案。uci的配置檔案同xml不同(xml的設計更适應機器讀取),而uci配置檔案的設計對于人讀取非常友好。是以即使你手工修改這些配置也是沒有任何問題的。

uci檔案内容格式舉例:

config 'example' 'test' option 'string' 'some value' option 'boolean' '1' list 'collection' 'first item' list 'collection' 'second item'

從config開始一直到下一個config出現中間的内容表示一個段配置(以下均用section表達),其作用類似程式設計語言中的{}作用,是表示一個區域資料。

section開始文法: config '類型' '名字'

其中上面例子的example就是這個配置的類型,而test就是這個配置的名字。uci允許"匿名"的配置存在是以可能存在隻有"類型"而沒有"名字"的配置。

參數定義文法: option '鍵' '值'

option表示目前的配置中的鍵/值定義文法。上面例子定義了一個鍵為'string',值為'some value'的配置參數。

清單定義文法: list '集合名字' '值'

list表示一種集合參數,uci會根據相同集合名字生成一個數組(以上例子資料中包含'first item'和'second item'兩個值)給予相應的軟體包使用。 uci允許的參數格式:

option example value option 'example' value option example "value" option "example" 'value' option 'example' "value"

當遇到上面錯誤的時候,uci還是可以很好的工作,但是如果遇到下面的格式,uci将出現問題:

option 'example" "value' option example some value with space

還有一點非常重要:盡量使用正常字元去處理器uci,特殊字元(acsii标準之外)有可能會破壞資料結構的完整性。

uci檔案的讀寫有兩種方式:

uci檔案的讀寫可以通過openwrt附帶的uci指令來完成,這種讀寫方式可以用于指令行也可以用于自己開發的web程式來操作。

直接使用系統的vi編輯器直接修改uci檔案,所做的修改也可以被系統所識别。

文法格式: uci [&lt;options&gt;] &lt;command&gt; [&lt;arguments&gt;] 檢視類文法:

uci get &lt;config&gt;.&lt;section&gt;[.&lt;option&gt;] 取得一個鍵的值 或根據段的名字取得類型 uci show [&lt;config&gt;[.&lt;section&gt;[.&lt;option&gt;]]] 顯示出全部 / 配置檔案 / 段 / 鍵 的完整格式 uci changes [&lt;config&gt;] 顯示出全部 / 配置檔案 的未儲存修改(經過commit文法儲存後就不再有記錄)

變更類文法:

uci add &lt;config&gt; &lt;section-type&gt; 增加一個匿名段配置到配置檔案中 uci set &lt;config&gt;.&lt;section&gt;[.&lt;option&gt;]=&lt;value&gt; (增加/修改)一個有名字的段 / 增加一個段中的鍵和值 uci add_list &lt;config&gt;.&lt;section&gt;.&lt;option&gt;=&lt;string&gt; 增加一個清單集合資料到配置檔案中 uci del_list &lt;config&gt;.&lt;section&gt;.&lt;option&gt;=&lt;string&gt; 删除一個指定值的清單集合資料 uci delete &lt;config&gt;[.&lt;section&gt;[[.&lt;option&gt;][=&lt;id&gt;]]] 删除一個 段 / 鍵 / 指定值的鍵 uci commit [&lt;config&gt;] 将變更儲存在檔案中,或儲存全部變更到各自檔案

uci在讀取的時候優先顯示記憶體中的緩存,其次顯示檔案中的。uci在進行變更的時候隻變更記憶體的,如果要使變更生效需要執行commit将其寫入檔案。 來舉個例子。首先産生一個用來做測試的樣本測試:

root@openwrt:~# cp /etc/config/system /etc/config/mytest

檢視目前狀态:

<a href="http://static.leiphone.com/uploads/2014/05/433.jpg"></a>

取出mytest.ntp.server的值:

<a href="http://static.leiphone.com/uploads/2014/05/518.jpg"></a>

增加一個名為mytest類型為hello的段到mytest檔案中:

root@openwrt:~# uci set mytest.mytest=hello

增加一個配置到這個段中:

root@openwrt:~# uci set mytest.mytest.enable=1

修改mytest.@system[0].hostname這個參數:

root@openwrt:~# uci set mytest.@system[0].hostname=hoowa

删除掉一個ntp.server的值:

root@openwrt:~# uci del_list mytest.ntp.server=2.openwrt.pool.ntp.org

檢視都修改了啥:

<a href="http://static.leiphone.com/uploads/2014/05/614.jpg"></a>

儲存修改:

root@openwrt:~# uci commit mytest

看看檔案有啥變化:

<a href="http://static.leiphone.com/uploads/2014/05/77.jpg"></a>

舉例,開啟wifi功能:

root@openwrt:/# uci set wireless.radio0.disabled=0 root@openwrt:/# uci commit wireless

讓wifi開啟生效:

root@openwrt:/# wifi

scp(secure copy)是openwrt中的ssh附帶的檔案傳輸功能,scp在操作上類似ftp可以實作一個安全的資料檔案傳輸。

scp适用于調試階段的程式檔案上下載下傳,進而進行快速測試,這是個非常不錯的工具。

在預設的情況下由于沒有密碼,是以ssh無法登入。首先修改系統超級賬戶密碼,在提示中填寫兩次新密碼:

root@openwrt:/# passwd

完成後重新開機ssh的服務:

root@openwrt:/# /etc/init.d/dropbear restart

大家可以使用一個winscp的工具實作這個操作。winscp工具已經放在了教學伺服器上,下載下傳位址為http://182.92.3.46/hoowa/openwrt/tools/winscp439setup.zip。安裝這個工具軟體,然後讓你的電腦連接配接到開發闆的wifi上(在上邊案例中,你已經開啟過wifi了,對嗎?),同時打開軟體。

<a href="http://static.leiphone.com/uploads/2014/05/85.jpg"></a>

主機名填寫ip位址,預設的開發闆是192.168.1.1 端口填寫22 使用者名填寫root 密碼就填寫剛才設定的那個密碼 檔案協定選擇scp

點選連接配接, 連接配接過程中有提示找不到group指令,沒關系直接确認就行了。

登入後,操作起來就像ftp工具一樣,左側是你的電腦,右側是開發闆系統,你可以上載下載下傳檔案。

<a href="http://static.leiphone.com/uploads/2014/05/99.jpg"></a>

在本章,我們介紹了三種進行配置編輯的方法,請選擇其中一種最為你進行後續操作所使用的方式即可。其他的用到了再回來學習也可以的。

到這裡,我們在硬體部分的第一次操作基本完成,接下來将進入軟體環節,來學習如何配置出一個具備完整功能的路由系統來。

最後,大家現在可以開始提問,在雷鋒網(公衆号:雷鋒網)文章評論、公衆号「宅客」:letshome、qq群:196302618、郵箱:diyrouter#163.com都可以送出,問題我将會在下章的時候統一解答。需要提醒下,我并不是高手,我回答問題有三個原則:1、我會的我直接回答 2、我不太會的我看着回答 3、我不會的我瞎忽悠 是以我給的答案是否正确需要大家自行判斷。

繼續閱讀