Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| docs:guide-developer:uci-defaults [2016/11/13 17:59] – [UCI Defaults] bobafetthotmail | docs:guide-developer:uci-defaults [2023/10/14 09:08] (current) – [UCI defaults] vgaetera | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== UCI defaults ====== | ====== UCI defaults ====== | ||
| + | See also: [[docs: | ||
| - | ===== UCI Defaults ===== | + | //OpenWrt// relies on UCI, the //Unified Configuration Interface//, |
| + | UCI defaults provides a way to preconfigure your images, using UCI. | ||
| - | //LEDE// relies on UCI, the //Unified Configuration Interface//, | + | To set some system defaults the first time the device boots, create a script in the directory '' |
| - | ==== Integrating custom settings ==== | + | All scripts in that directory are automatically executed by the '' |
| + | * If they exit with code 0 they are deleted afterwards. | ||
| + | * Scripts that exit with non-zero exit code are not deleted and will be re-executed at the next boot until they also successfully exit. | ||
| - | You can preload custom settings by adding batch scripts | + | In a live router you can see the existing UCI defaults |
| - | < | + | UCI defaults scripts can be created by packages or they can be inserted into the build manually as custom files. |
| - | $ cat zzzz_customisations | + | |
| - | #!/bin/sh | + | |
| - | uci -q batch << | + | ===== Integrating custom settings ===== |
| - | add dhcp host | + | See also: |
| - | set dhcp.@host[0].name=' | + | [[docs: |
| - | set network.@host[0].ip=' | + | [[docs:guide-user:additional-software:imagebuilder# |
| - | set network.@host[0].mac=' | + | |
| - | EOT | + | |
| - | </ | + | |
| - | Once the script has run successfully and exited cleanly (exit status 0), it will be removed from '' | + | Easiest way to include |
| + | You can preload custom settings by adding batch scripts containing UCI commands into the ''/ | ||
| + | The path is identical for the buildroot and the image generator. | ||
| + | The scripts will be run **after** the flashing process - in case of upgrading, that also includes appending the existing configuration to the JFFS2 partition (mounted as ''/ | ||
| + | Scripts should not be executable. | ||
| + | To ensure your scripts are not interfering with any other scripts, make sure they get executed last by giving them a high prefix (e.g. // | ||
| + | A basic script could look like this: | ||
| - | ==== Ensuring scripts don’t overwrite custom settings: implementing checks | + | <code bash> |
| + | cat << " | ||
| + | uci -q batch << EOI | ||
| + | set network.lan.ipaddr=' | ||
| + | set wireless.@wifi-device[0].disabled=' | ||
| + | set wireless.@wifi-iface[0].ssid=' | ||
| + | add dhcp host | ||
| + | set dhcp.@host[-1].name=' | ||
| + | set dhcp.@host[-1].ip=' | ||
| + | set dhcp.@host[-1].mac=' | ||
| + | rename firewall.@zone[0]=' | ||
| + | rename firewall.@zone[1]=' | ||
| + | rename firewall.@forwarding[0]=' | ||
| + | EOI | ||
| + | EOF | ||
| + | </ | ||
| - | Scripts in ''/ | + | This is a simple example to set up the LAN IP address, SSID, enable Wi-Fi, configure a static DHCP lease, rename firewall zone and forwarding sections. |
| + | Once the script has run successfully and exited cleanly (exit status 0), it will be removed from ''/ | ||
| + | You can still consult | ||
| - | < | + | ===== Ensuring scripts don’t overwrite custom settings: implementing checks ===== |
| + | Scripts in ''/ | ||
| + | If this behaviour is undesired, we recommend you implement a test at the top of your script - e.g. probe for a custom setting your script would normally configure: | ||
| + | |||
| + | < | ||
| [ "$(uci -q get system.@system[0].zonename)" | [ "$(uci -q get system.@system[0].zonename)" | ||
| </ | </ | ||
| This will make sure, when the key has the correct value set, that the script exits cleanly and gets removed from ''/ | This will make sure, when the key has the correct value set, that the script exits cleanly and gets removed from ''/ | ||
| + | |||
| + | ===== Examples ===== | ||
| + | * [[docs: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||