Table of Contents

UCI默认设置

另请参阅:UCI系统

OpenWrt 依赖于UCI(Unified Configuration Interface)来配置其核心服务。 UCI默认设置提供了一种使用UCI预配置您的镜像的方法。

要在设备首次启动时设置一些系统默认值,请在目录/etc/uci-defaults中创建一个脚本。

该目录中的所有脚本都会被“boot”服务自动执行:

在实时路由器中,您可以在/rom/etc/uci-defaults中看到现有的UCI默认设置脚本,因为/etc/uci-defaults本身通常是空的(在所有脚本成功运行并被删除后)。

UCI默认设置脚本可以由软件包创建,也可以手动将其作为自定义文件插入构建中。

集成自定义设置

另请参阅: 构建系统 - 自定义文件, 镜像生成器 - 自定义文件

将uci-defaults脚本包含在固件中的最简单方法可能是作为自定义文件。 您可以通过将包含UCI命令的批处理脚本添加到/files/etc/uci-defaults目录中来预加载自定义设置。 该路径对于构建系统和镜像生成器是相同的。 这些脚本将在刷写过程之后运行 - 在升级的情况下,这还包括将现有配置附加到JFFS2分区(挂载为/overlay)。 脚本不应该是可执行的。 为确保您的脚本不会干扰其他脚本,请确保它们以高前缀(例如xx_custom)的方式最后执行。 一个基本的脚本可能如下所示:

cat << "EOF" > /etc/uci-defaults/99-custom
uci -q batch << EOI
set network.lan.ipaddr='192.168.178.1'
set wireless.@wifi-device[0].disabled='0'
set wireless.@wifi-iface[0].ssid='OpenWrt0815'
add dhcp host
set dhcp.@host[-1].name='bellerophon'
set dhcp.@host[-1].ip='192.168.2.100'
set dhcp.@host[-1].mac='a1:b2:c3:d4:e5:f6'
rename firewall.@zone[0]='lan'
rename firewall.@zone[1]='wan'
rename firewall.@forwarding[0]='lan_wan'
EOI
EOF

这是一个简单的示例,用于设置LAN IP地址、SSID、启用Wi-Fi、配置静态DHCP租约、重命名防火墙区域和转发部分。 一旦脚本成功运行并干净地退出(退出状态为0),它将从/etc/uci-defaults中删除。 如果需要,仍然可以在/rom/etc/uci-defaults中查看原始脚本。

确保脚本不会覆盖自定义设置:实施检查

位于/etc/uci-defaults中的脚本将在每次首次启动时执行(即在干净安装或升级后),可能会覆盖已经存在的值。 如果不希望出现这种行为,建议在脚本顶部实施一个测试 - 例如,探测脚本通常会配置的自定义设置:

[ "$(uci -q get system.@system[0].zonename)" = "America/New York" ] && exit 0

这将确保当键具有正确设置的值时,脚本会干净地退出并从/etc/uci-defaults中删除,如上所述。

Examples