UCI defaults
Див. також: Система UCI
OpenWrt використовує UCI (Unified Configuration Interface) для налаштування основних сервісів. UCI defaults — це спосіб попередньо налаштувати прошивку OpenWrt через скрипти UCI.
Щоб задати значення за замовчуванням під час першого завантаження пристрою, створіть скрипт у каталозі: ``/etc/uci-defaults``
Усі скрипти в цьому каталозі автоматично виконуються службою `boot`:
- Якщо скрипт завершується з кодом 0, його буде видалено після виконання.
- Якщо скрипт завершується з ненульовим кодом, його буде збережено і повторно виконано при наступному завантаженні.
У «живому» роутері ви можете побачити оригінальні 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
Скрипт завершиться одразу, якщо вже задано правильне значення, і буде видалено.