UCI
https://wiki.openwrt.org/doc/uci
https://wiki.openwrt.org/zh-cn/doc/uci
about
[UCI] OpenWrt-uci 命令系统:http://developer.t-firefly.com/forum.php?mod=viewthread&tid=1035
- UCI 命令
一个众所周知的原因,在 Linux 下各种软件包有各种不同的配置脚本,每个配置脚本的语法格式和操作方式不同,这样的设计虽然可以体现出各软件包自身的优势,同时也增加了学习曲线。在这一点上 OpenWrt 的 UCI 无疑处理的更胜一筹。UCI 是 集中式配置信息管理接口 (Unified Configuration Interface) 的缩写,他是 OpenWrt 引进的一套配置参数管理系统。UCI 管理了 OpenWrt 下最主要的系统配置参数并且提供了简单、容易、标准化的人机交互接口。UCI 中已经包含了网络配置、无线配置、系统信息配置等作为基本路由器所需的主要配置参数。同时 UCI 也可以帮助开发人员快速的建立一套基于OpenWrt的智能路由产品控制界面。
- UCI 的文件和流程
UCI 的配置文件全部存储在 /etc/config
目录下
root@OpenWrt:~# ls /etc/config/
dhcp dropbear firewall network system wireless
日前已有大量软件包支持 UCI 模式管理,但不是所有的软件包,支持的软件包是这样来完成启动的(以 samba 举例):
- 启动脚本
/etc/init.d/samba
- 启动脚本通过 UCI 分析库从
/etc/config/samba
获得启动参数 - 启动脚本完成正常启动
由于 UCI 的数据文件较为简单,并且具备了很 nice 的直接观感,所以配置文件既可以使用 UCI 命令进行修改,也可以使用 VI 编辑器直接修改文件。但如果两种方式都是用时需要注意 UCI 命令修改会 产生缓存,每次修改好要 尽快确认保存避免出现冲突。
最常见的几个 UCI 配置作用说明
文件 | 作用 |
---|---|
/etc/config/dhcp |
DHCP 服务配置,为 LAN 口提供 IP |
/etc/config/dropbear |
SSH 服务配置 |
/etc/config/firewall |
路由转发,端口转发,防火墙规则 |
/etc/config/network |
自身网络接口配置 |
/etc/config/system |
时间服务器时区配置 |
/etc/config/wireless |
无线网络配置 |
syntax
- UCI 的文件语法
keyword
UCI 文件语法举例
config 'section-type' 'section'
option 'key' 'value'
list 'list_key' 'list_value'
关键字 | 含义 |
---|---|
config |
节点 |
section-type |
节点类型 |
section |
节点名称 |
config 'example' 'test'
option 'string' 'some value'
option 'boolean' '1'
list 'collection' 'first item'
list 'collection' 'second item'
注意:UCI 的 文件名 和 标识符 ( option example test
中的 example
即为 标识符,test
为 option
的 值 ) 可以使用 a-z
, 0-9
和 下划线 _
组合的任意字符串,不允许使用横杠线 -
,而 option
的 值 可以使用任意字符
关键字 | 含义 |
---|---|
option |
选项 (节点中的一个元素) |
key |
键 |
value |
值 |
list |
列表选项 列表形式的一组参数 |
list_key |
列表键 |
list_value |
列表值 |
config 节点语法格式
config 'section-type' 'section'
config 节点 (后文统一称为节点) 原则:
- UCI 允许只有节点类型的 匿名节点 存在
- 节点类型和名字建议使用 单引号 包含以免引起歧义
- 节点中可以包含多个
option
选项或list
列表选项 - 节点遇到 文件结束 或遇到 下一个节点 代表完成
option 选项语法格式:
option 'key' 'value'
option
选项 (后文统一称为选项) 原则:
- 选项的键与值建议使用 单引号 包含
- 避免相同的选项键存在于同一个节点,否则只有一个生效
list
列表选项语法格式:
list 'list_key' 'list_value'
list
列表选项 (后文统一称为列表) 原则:
- 选项的键与值建议使用 单引号 包含
- 列表键的名字如果相同,则 相同键 的值将会被当作数组传递给相应软件
UCI 的语法容错:
option example value
option 'example' value
option example "value"
option "example" 'value'
option 'example' "value"
UCI 无法容忍的语法:
option 'example" "value'
option example some value with space
尽量使用常规字符去处理器 UCI,特殊字符有可能会破坏数据结构的完整性
- UCI 命令读写配置
语法格式
uci [<options>] <command> [<arguments>]
读写规则
- UCI 读取总是先读取 内存 中的缓存,然后再读取 文件 中的
- 进行过增加,修改,删除操作后要执行生效指令,否则所做修改只存留在 缓存 中
read
取得 节点类型 :
uci get <config>.<section>
取得一个 值 :
uci get <config>.<section>.<option>
显示全部 UCI 配置
uci show
显示指定文件配置
uci show <config>
显示指定节点名字配置
uci show <config>.<section>
显示指定选项配置
uci show <config>.<section>.<option>
显示尚未生效的修改记录
uci changes <config>
匿名节点 显示(如果所显示内容有匿名节点,使用 -X
参数可以显示出匿名节点的 ID
)
uci show -X <config>.<section>.<option>
write
增加一个 匿名节点 到文件
uci add <config> <section-type>
增加一个节点到 文件 中
uci set <config>.<section>=<section-type>
增加一个 选项 和 值 到节点中
uci set <config>.<section>.<option>=<value>
增加一个值到 列表 中
uci add_list <config>.<section>.<option>=<value>
修改一个节点的类型
uci set <config>.<section>=<section-type>
修改一个选项的值
uci set <config>.<section>.<option>=<value>
删除指定名字的节点
uci delete <config>.<section>
删除指定选项
uci delete <config>.<section>.<option>
删除列表
uci delete <config>.<section>.<list>
删除列表中一个值
uci del_list <config>.<section>.<option>=<string>
生效修改 (任何写入类的语法,最终都要执行生效修改,否则所做修改只在缓存中)
uci commit <config>
example
[UCI+入门] FireWRT 新手教程 uci 设置网络命令:http://developer.t-firefly.com/forum.php?mod=viewthread&tid=1014
在我们将 FireWRT 固件刷上 openwrt 系统后,如果 openwrt 未安装 WEB 管理界面,所以我们需要先通过 SSH 或者 telnet 对路由器进行网络设置,设置完成后可通过 openwrt 的软件包管理 opkg 安装 web 设置界面 Luci
设置 LAN IP (即访问路由的 ip)
uci set network.lan.ipaddr=[LAN_IP]
使用 pppoe 设置
uci set network.wan.proto=pppoe // 设置 WAN 口类型为 pppoe
uci set network.wan.username=[USER]
uci set network.wan.password=[PASSWORD] // 这两行设置 pppoe 用户名和密码
如果要挂在 上级路由 下面,就需要进行下面的设置
uci set network.wan.proto=none // 关掉 wan
uci set network.lan.gateway=[IP] // 网关指向上级路由
uci set network.lan.dns=[IP] // DNS 指向上级路由
uci set dhcp.lan.ignore=1 // 关掉 LAN 的 DHCP
最后对无线网络进行配置
uci set wireless.@wifi-device[0].disabled=0 // 打开无线
uci set wireless.@wifi-device[0].txpower=17 // 设置功率为 17dbm 太高会烧无线模块
uci set wireless.@wifi-device[0].channel=6 // 设置无线信道为 6
uci set wireless.@wifi-iface[0].mode=ap // 设置无线模式为 AP
uci set wireless.@wifi-iface[0].ssid=[SSID] // 设置无线 SSID
uci set wireless.@wifi-iface[0].network=lan // 无线链接到 LAN 上
uci set wireless.@wifi-iface[0].encryption=psk2 // 设置加密为 WPA2-PSK
uci set wireless.@wifi-iface[0].key=[password] // 设置无线密码
提交应用配置
uci commit // 应用
/etc/init.d/network restart // 重启网络服务
安装 LUCI 管理界面
opkg update // 更新软件列表
opkg list-installed // 查看已安装软件
opkg install luci // 安装 LUCI
opkg install luci-i18n-chinese // 支持中文
即可完成 LUCI 的安装
输入以下命令开启支持 web 服务的 uhttpd 并设置其为自启动:
/etc/init.d/uhttpd enable
/etc/init.d/uhttpd start
keep practice
shadowsocks
UCI 使用手册:https://sourceforge.net/p/openwrt-dist/wiki/UCI/
查看当前的 UCI 配置文件
uci export shadowsocks
修改/增加 option
uci set shadowsocks.@shadowsocks[-1].option='value'
删除 option
uci delete shadowsocks.@shadowsocks[-1].option
提交对 UCI 配置文件的修改, 提交后配置才能生效
uci commit shadowsocks