1 UCI系統(tǒng)介紹
UCI即統(tǒng)一接口配置(UnifiedConfigurationInterface)的簡稱,它被應(yīng)用于OpenWrt系統(tǒng)上面。
UCI是簡單、實用、直接了當?shù)摹CI是OpenWrt上面主要的配置用戶接口,用來作為主要的系統(tǒng)設(shè)置,這些設(shè)置通常對設(shè)備是至關(guān)重要的,例如網(wǎng)絡(luò)接口、無線設(shè)置、遠程登陸權(quán)限設(shè)置等都是通過UCI來實現(xiàn)配置的。他是構(gòu)建一整套系統(tǒng)的必須部分。
此外,大部分第三方軟件也被集成到UCI中,因此他們在openwrt中也能很簡單的配置。許多程序有他們自己的配置文件,像/etc/network/interfaces、/etc/exports、/etc/dnsmasq.conf、/etc/samba/smb.conf,并且他們有他們自己的語法,opewnrt不需要改變他們,只需要改UCI設(shè)置就行,opewnrt開發(fā)者已經(jīng)對許多軟件做了UCI集成,當然openwrt開發(fā)者不可能把所有軟件都集成進來。因為他們的精力也是有限的。
大部分被集成到UCI系統(tǒng)中的軟件通過修改UCI配置文件,都能很簡單的被配置,這些配置主要應(yīng)用于系統(tǒng)初始化腳本,他們在/etc/ini.d下面,開啟被UCI系統(tǒng)集成的進程就需要用UCI配置文件。比如運行/etc/init.d/sambastart就會用到/etc/config/samba配置文件。
2 UCI系統(tǒng)規(guī)則
Openwrt中UCI配置文件被放在/etc/config目錄下面,每一個配置文件設(shè)計到系統(tǒng)的一種配置。你可以用文本編輯器修改這個配置文件,或者用uci命令修改。當然它也可以用其他API接口來修改,比如shell、lua等,而且web接口像luci、webif也可以改變它。當配置文件被改變后,必須重啟程序才能生效。
下面舉一個修改ip地址的例子,如果你想把默認的ip:192.168.1.1改為192.168.2.1,可以通過vi來編輯配置文件。
$vi /etc/config/network
在/etc/config/network中找到:
option ipaddr192.168.1.1
把他改變?yōu)?/p>
option ipaddr192.168.2.1
然后重啟網(wǎng)絡(luò)/etc/init.d/networkrestart就會發(fā)現(xiàn)系統(tǒng)的ip已經(jīng)變?yōu)樾耰p地址了。
3 UCI文件語法
UCI配置文件通常一個或者更多的config語句,一個config語句中包括一個或者更多的option語句來表示配置內(nèi)容。下面一個UCI配置文件的內(nèi)容:
package'example'
config'example''test'
option'string''somevalue'
option'boolean''1'
list'collection''firstitem'
list'collection''seconditem'
config'example''test'這條語句是一個config語句的開始,表示類型是example,test代表名字,其中類型是必不可少的,而且不同的config語句不能有相同的類型,它對啟動腳本有非常重要的意義,但是名字不是必不可少的,可以沒有,也可以有。
option'string''somevalue'和option'boolean''1'定義了值的內(nèi)容,這里string和boolean在語法上面沒有差異。在boolean中‘0’,‘no’,‘off’,‘disable’,‘false’都代表0,而‘1’,‘yes’、‘on’、‘true’,‘enable’都代表1。
用list語句可以定義多個值,他們都有相同的名字,在這里為collection。
其中option和list對配置文件是非常重要的,每個字段都是用option或者list來表示,option代表字段值唯一(后面叫option字段),list代表字段有多個值(后面叫l(wèi)ist字段),他們是配置文件賦值的重要表示。但是在一個配置文件中,它們不是必須的語法。通常值不需要用引號括起來,只有有空格或者TAB建的時候才需要用引號。而且單引號和雙引號要一一對應(yīng),下面表示合法的語言:
optionexamplevalue
option'example'value
optionexample"value"
option"example"'value'
option'example'"value"
4 UCI命令
用vi、腳本、lua等工具修改uci配置文件比較麻煩還容易出錯,openwrt提供了uci命令工具來操作uci配置文件。uci工具可以獲取一個值,設(shè)置一個值等功能。在終端下面運行uci命令可以查看他的幫助說明。
Usage :uci [] []
Commands:
batch
export []
import []
changes []
commit []
add
add_list .
.=
show [[.
[.]]]
get .
[.]
set .
[.]=
delete [.]]
rename .
[.]=
revert [.
[.]]
reorder .
=
Options:
-c setthesearchpathforconfigfiles(default:/etc/config)
-d setthedelimiterforlistvaluesinucishow
-f useasinputinsteadofstdin
-a applynewconfigurationaftercommit
-L donotloadanyplugins
-m whenimporting,mergedataintoanexistingpackage
-n nameunnamedsectionsonexport(default)
-N don'tnameunnamedsections
-p addasearchpathforconfigchangefiles
-P addasearchpathforconfigchangefilesanduseasdefault
-q quietmode(don'tprinterrormessages)
-s forcestrictmode(stoponparsererrors,default)
-S disablestrictmode
-X donotuseextendedsyntaxon'show'
下面的表格詳細的介紹了他們的主要用法:
名字 | Config****字段 | 描述 |
---|---|---|
commit | [] | 把改變的uci配置的改變寫入文件系統(tǒng)中,所有的"uciset","uciadd","ucirename"和"ucidelete"都是通過ucicommit寫入flash中。 |
batch | - | 執(zhí)行uci腳本 |
export | [] | 導出一個配置,供使用人員閱讀 |
import | [] | 輸入一個uci語句 |
changes | [] | 顯示在沒有運行ucicommit之前的所有配置文件改變記錄 |
add | 增加一個config | |
get | .[.] | 得到option字段值 |
set | .[.]= | 設(shè)置option字段值 |
delete | [.]] | 刪除一個option或者list字段 |
add | _list..= | 增加一個存在的list字段鏈表 |
rename | .[.]= | 給option字段重命名 |
show | [[.[.]]] | 展示一個配置的具體內(nèi)容 |
下面我們舉例說明常用的一些用法。
獲取一個值:
獲取lan口的ip地址:ucigetnetwork.lan.ipaddr
#ucigetnetwork.lan.ipaddr192.168.1.1
設(shè)置一個值:
設(shè)置lan口的ip地址為192.168.2.1
#ucisetnetwork.lan.ipaddr=192.168.2.1
完成之后需要要使其生效,運行ucicommit
#ucisetnetwork.lan.ipaddr=192.168.2.1
#ucicommit
設(shè)置好之后重啟network,/etc/config/networkrestart,我們發(fā)現(xiàn)網(wǎng)口ip已經(jīng)被改變了。
運行ifconfig。
#ifconfig
br-lanLinkencap:EthernetHWaddr00:11:22:33:44:55
inetaddr:192.168.2.1Bcast:192.168.2.255
Mask:255.255.255.0
inet6addr:fd18:75c3:2be6::1/60Scope:Global
inet6addr:fe80::211:22ff:fe33:4455/64Scope:Link
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
RXpackets:16errors:0dropped:0overruns:0frame:0
TXpackets:8errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:0
RXbytes:4904(4.7KiB)TXbytes:976(976.0B)
已經(jīng)變?yōu)?92.168.2.1了。
導出顯示一個選項的配置,現(xiàn)在我們導出uhttp的配置,效果如下所示:
#uciexportuhttpd
packageuhttpd
configuhttpd'main'
listlisten_http'0.0.0.0:80'
listlisten_http'[::]:80'
listlisten_https'0.0.0.0:443'
listlisten_https'[::]:443'
optionhome'/www'
optionrfc1918_filter'1'
optionmax_requests'3'
optionmax_connections'100'
optioncert'/etc/uhttpd.crt'
optionkey'/etc/uhttpd.key'
optioncgi_prefix'/cgi-bin'
optionscript_timeout'60'
optionnetwork_timeout'30'
optionhttp_keepalive'20'
optiontcp_keepalive'1'
optionubus_prefix'/ubus'
configcert'px5g'
optiondays'730'
optionbits'1024'
optioncountry'DE'
optionstate'Berlin'
optionlocation'Berlin'
optioncommonname'OpenWrt'
用show可以展示uhttp的具體內(nèi)容,和export不同的是,export時導出配置文件的內(nèi)容,show時顯示uhttp配置的值。效果如下:
#ucishowuhttpd
uhttpd.main=uhttpd
uhttpd.main.listen_http=0.0.0.0:80[::]:80
uhttpd.main.listen_https=0.0.0.0:443[::]:443
uhttpd.main.home=/www
uhttpd.main.rfc1918_filter=1
uhttpd.main.max_requests=3
uhttpd.main.max_connections=100
uhttpd.main.cert=/etc/uhttpd.crt
uhttpd.main.key=/etc/uhttpd.key
uhttpd.main.cgi_prefix=/cgi-bin
uhttpd.main.script_timeout=60
uhttpd.main.network_timeout=30
uhttpd.main.http_keepalive=20
uhttpd.main.tcp_keepalive=1
uhttpd.main.ubus_prefix=/ubus
uhttpd.px5g=cert
uhttpd.px5g.days=730
uhttpd.px5g.bits=1024
uhttpd.px5g.country=DE
uhttpd.px5g.state=Berlin
uhttpd.px5g.location=Berlin
uhttpd.px5g.commonname=OpenWrt
前面大部分是option字段的內(nèi)容,現(xiàn)在說一下怎么增加list字段。首先看一下system的配置內(nèi)容,他的ntp服務(wù)器就是list字段。用export我們先看一下:
#uciexportsystem
packagesystem
configsystem
optionhostname'OpenWrt'
optiontimezone'UTC'
configtimeserver'ntp'
listserver'0.openwrt.pool.ntp.org'
listserver'1.openwrt.pool.ntp.org'
listserver'2.openwrt.pool.ntp.org'
listserver'3.openwrt.pool.ntp.org'
optionenabled'1'
optionenable_server'0'
看到server就是list字段,從表格可以看到,add_list可以增加list字段。uciadd_listsystem.ntp.server='4.de.pool.ntp.org'這個命令可以增加4.de.pool.ntp.org進入list字段。增加完之后可以看一下,如下所示:
#uciexportsystem
packagesystem
configsystem
optionhostname'OpenWrt'
optiontimezone'UTC'
configtimeserver'ntp'
listserver'0.openwrt.pool.ntp.org'
listserver'1.openwrt.pool.ntp.org'
listserver'2.openwrt.pool.ntp.org'
listserver'3.openwrt.pool.ntp.org'
listserver'4.de.pool.ntp.org'
optionenabled'1'
optionenable_server'0'
如果增加一個新的配置,只需要按照UCI系統(tǒng)的語法,增加一個配置文件就可以,或者用uci add命令。下面列出用uci命令增加一個新配置的用法:
#touch/etc/config/playapp
新建一個配置文件
#ucishowplayapp
顯示配置內(nèi)容,可以看到無內(nèi)容
#uciaddplayappblah
增加一個配置項
#ucishowplayapp
顯示配置內(nèi)容
playapp.@blah[0]=blah
root@OpenWrt:/#ucicommit&&cat/etc/config/playapp
configblah
顯示文件內(nèi)容,可以看到用uci命令設(shè)置進去了。其他的命令大家可以都自己試一試,這里就不一一列舉了。Opewnrt界面采用luci,他很好的應(yīng)用了uci系統(tǒng),學好uci系統(tǒng)對學習luci有很好的幫助,所以大家需要好好學習這個章節(jié)。
審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
8712瀏覽量
152014 -
無線
+關(guān)注
關(guān)注
31文章
5471瀏覽量
173902 -
命令
+關(guān)注
關(guān)注
5文章
697瀏覽量
22126 -
編輯器
+關(guān)注
關(guān)注
1文章
806瀏覽量
31305 -
OpenWrt
+關(guān)注
關(guān)注
10文章
130瀏覽量
39482
發(fā)布評論請先 登錄
相關(guān)推薦
Openwrt開發(fā)指南 第1章 OpenWrt入門
Openwrt開發(fā)指南 第2章 OpenWrt開發(fā)環(huán)境搭建
Openwrt開發(fā)指南 第3章 OpenWrt下載及配置
Openwrt開發(fā)指南 第7章 添加Web界面
Openwrt開發(fā)指南 第12章 添加OpenWrt軟件包
Openwrt開發(fā)指南 第13章 OpenWrt啟動流程
Openwrt開發(fā)指南 第22章 Openwrt串口的使用2
Openwrt開發(fā)指南 第29章 OpenWrt 防火墻介紹
![<b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>29<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b> 防火墻介紹](https://file1.elecfans.com/web2/M00/8C/D1/wKgaomSyVr-AB38EAACpb5ioTgU243.png)
CPLD/FPGA高級應(yīng)用開發(fā)指南 光盤
AVR單片機應(yīng)用開發(fā)指南及實例
《嵌入式-STM32開發(fā)指南》第二部分 基礎(chǔ)篇 - 第4章 定時器(HAL庫)
![《嵌入式-STM32<b class='flag-5'>開發(fā)指南</b>》第二部分 基礎(chǔ)篇 - <b class='flag-5'>第</b>4<b class='flag-5'>章</b> 定時器(HAL庫)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論