Table of Contents

UCI defaults

Див. також: Система UCI

OpenWrt використовує UCI (Unified Configuration Interface) для налаштування основних сервісів. UCI defaults — це спосіб попередньо налаштувати прошивку OpenWrt через скрипти UCI.

Щоб задати значення за замовчуванням під час першого завантаження пристрою, створіть скрипт у каталозі: ``/etc/uci-defaults``

Усі скрипти в цьому каталозі автоматично виконуються службою `boot`:

У «живому» роутері ви можете побачити оригінальні uci-defaults-скрипти у каталозі ``/rom/etc/uci-defaults``, оскільки каталог ``/etc/uci-defaults`` зазвичай порожній (усі скрипти були успішно виконані та видалені).

UCI-defaults-скрипти можуть бути як частиною встановлених пакетів, так і додані вручну під час створення прошивки.

Додавання власних налаштувань

Див. також:

Найпростіший спосіб додати `uci-defaults` у прошивку — через custom files:

1. Створіть скрипт з командами UCI. 2. Збережіть його у каталозі

 ``/files/etc/uci-defaults/``  
 (той самий шлях для buildroot та ImageBuilder).

3. Скрипти повинні бути не виконуваними (`chmod -x`). 4. Для гарантованого порядку виконання — використовуйте префікс із великим номером, наприклад `99-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

Скрипт виконується після прошивки (навіть при оновленні) і змінює IP, SSID, вмикає Wi-Fi, додає DHCP-прив’язку, змінює назви зон фаєрволу.

Після успішного завершення (exit 0) скрипт буде видалено з `/etc/uci-defaults`. Оригінальну версію завжди можна подивитись у `/rom/etc/uci-defaults`.

Як уникнути перезапису користувацьких налаштувань

UCI-defaults виконуються після кожного першого запуску системи — навіть після оновлення. Якщо ви не хочете, щоб скрипт перезаписував уже наявні значення, додайте перевірку на початку:

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

Скрипт завершиться одразу, якщо вже задано правильне значення, і буде видалено.

Приклади