UCI默认设置
另请参阅:UCI系统
OpenWrt 依赖于UCI(Unified Configuration Interface)来配置其核心服务。 UCI默认设置提供了一种使用UCI预配置您的镜像的方法。
要在设备首次启动时设置一些系统默认值,请在目录/etc/uci-defaults
中创建一个脚本。
该目录中的所有脚本都会被“boot”服务自动执行:
- 如果它们以代码0退出,之后会被删除。
- 以非零退出代码退出的脚本不会被删除,并将在下次启动时重新执行,直到它们也成功退出。
在实时路由器中,您可以在/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
中删除,如上所述。