文件语法
配置文件由配置节(section)组成,配置节由多个"name/value"选项组成。每个配置节需要有一个类,但是不一定需要名字。
语法如下:
config <type> ["<name>"] #section
option <name> "<value>" # option
UCI的配置文件通常包含一个或者多个配置节,所谓配置节就是带有一个或者多个选项的语句。
如/etc/config/system
config system
option hostname OpenWrt
option timezone UTC
config timeserver ntp
list server 0.openwrt.poll.ntp.org
list server 1.openwrt.poll.ntp.org
option enable 1
配置节config system, 类型为system , 没有名字,为匿名配置节。
配置节config timeserver ntp, 类型为timeserver, 名字为ntp。
option 用来定义单个值。
list 用来定义多个值,名字相同,如server.
一般不需要在name和value上使用引号,只有在value上有空格或者制表符的时候才使用引号。
UCI标识符和配置文件的名称之后能包含字符a~z,A~Z,0~9和下划线_.,选项的值可以是任何字符,但是要正确使用引号。
统一配置原理
在OpenWrt上很多第三个应用的原始配置文件是通过UCI配置文件来生成的,然后在启动应用程序。
如dnsmasq程序。
首先/etc/init.d/dnsmasq会通过/etc/config/dhcp生成/var/tmp/dnsmasq.conf配置文件,然后启动dnsmasq应用程序。
/etc/init.d/dnsmasq ----> /etc/config/dhcp -----> 生成/var/tmp/dnsmasq.conf配置文件
/etc/init.d/dnsmasq 启动dnsmasq应用程序。
OpenWrt的核心配置分成很多文件,可以通过命令行修改,也可以通过编程语言(shell/c/lua)API修改。这也是web接口修改,如luci修改uci文件的方式。
修改uci配置之后,需要通过/etc/init.d进行重启,这样更新的UCI才会生效。
如果只是重启引用程序,UCI修改可能不会生效,不会生成原始配置文件。
uci set network.lan.ipaddr=192.168.6.1
uci commit network
/etc/init.d/network restart
文件路径 | 含义 |
/etc/config/dhcp | dnsmasq软件包配置,包含dhcp和dns. |
/etc/config/dropbear | ssh服务器配置 |
/etc/config/firewall | 防火墙,网络地址转换,报过滤,端口转发等 |
/etc/config/network | 网络配置,包括桥,接口,路由配置 |
/etc/config/system | 系统设置,主机名称,网络时间同步 |
/etc/config/timeserver | rdate的时间服务配置 |
/etc/config/luci | 基本luci配置 |
/etc/config/wireless | 无线设置和wifi网络定义 |
/etc/config/uhttpd | web服务器设置 |
/etc/config/umnpd | miniupnpd UPnP服务器设置 |
/etc/config/qos | 网络服务质量配置文件 |
UCI工具
uci
Usage: uci [<option>] <commands> [<arguments>]
commands:
batch
export
import
changes
commit
add
add_list
del_list
show
get
set
delete
rename
revert
reorder
Option:
-c <path> 设置搜索路径,默认是/etc/config
-d <str> 设置list在uci show 的显示分隔符
-f <file> 文件输入而不是stdin
-m when importing, merge data into existing package
-n name unnamed serction on export
所有的uci set / uci add / uci rename /uci delete都是将配置写入一个临时配置,运行uci commit 协议实际存储的配置。
创建一个UCI配置文件:
touch /etc/config/hello #创建一个hello的配置文件
uci set hello.global=system #创建一个配置节 config global system
uci set hello.global.agent=bjbook #创建一个选项 option agent bjbook
uci set hello.global.url='www.baidu.com' # 创建一个配置项 option url www.baidu.com
uci commit hello # 提交配置修改