User Tools

Site Tools


ru:doc:uci

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ru:doc:uci [2012/11/26 09:40]
ru:doc:uci [2013/10/15 16:38] (current)
Line 1: Line 1:
 +====== Система UCI ======
  
 +Сокращение //​UCI// ​ значит //​**__U__**nified **__C__**onfiguration **__I__**nterface//​ и направлен на //​централизованную//​ настройку OpenWrt. Настройка должна быть простой,​ понятной и документированной. ​
 +
 +Многие программы имеют собственный конфигурационный файл, например ''/​etc/​network/​interfaces''​ или ''/​etc/​exports''​ или ''/​etc/​dnsmasq.conf''​ ''/​etc/​samba/​samba.conf''​ и иногда они используют несколько отличающуюся структуру синтаксиса. В OpenWRT вам не нужно мучиться с ними, мы только заменяем файлы настроек UCI!
 +
 +Вам //не нужно//​ перезагружать свою систему для изменения настроек! Перейдите по ссылке [[doc:​uci#​command.line.utility:​]],​чтобы знать как это делается. И, пожалуйста,​ не забывайте,​ что некоторые демоны уже имеются в системе,​ но по умолчанию они отключены! К примеру,​ демон cron отключён по умолчанию,​ следовательно,​ редактирование crontab не даст результата. Вам необходимо либо запустить демона при помощи ''/​etc/​init.d/​cron start''​ или включить его ''/​etc/​init.d/​cron enable''​. Вы можете ''​disable''​(отключить),​ ''​stop''​(остановить) и ''​restart''​(перезапустить) большинство демонов. Возможно документация по [[doc:​howto:​notuci.config]] поможет вам.
 +
 +===== Общие принципы =====
 +
 +Централизованная конфигурация OpenWrt находится в нескольких файлах,​ расположенных в каталоге ''/​etc/​config/''​. Каждый файл относится к части системы,​ который он настраивает. Вы можете редактировать файлы конфигурации в текстовом редакторе или с помощью утилиты командной строки ''​uci'', ​ или через различные интерфейсы программирования (например,​ Shell, Lua и C).
 +
 +===== Конфигурационные Файлы =====
 +
 +^ Файл ^ Описание ^
 +^ Основные ^^
 +| [[doc:​uci:​dhcp|/​etc/​config/​dhcp]] | Конфигурация Dnsmasq и установки DHCP |
 +| [[doc:​uci:​dropbear|/​etc/​config/​dropbear]] | Опции SSH сервера |
 +| [[ru:​doc:​uci:​firewall|/​etc/​config/​firewall]] | NAT, пакетная фильтрация,​ перенаправление портов,​ и т.д. ​ |
 +| [[doc:​uci:​network|/​etc/​config/​network]] | Конфигурация коммутатора,​ интерфейсов и маршрутизатора |
 +| [[doc:​uci:​system|/​etc/​config/​system]] | Доп. системные настройки |
 +| [[doc:​uci:​timeserver|/​etc/​config/​timeserver]] | Список серверов времени для //rdate// |
 +| [[doc:​uci:​wireless|/​etc/​config/​wireless]] | Настройки беспроводного подключения и сети wifi |
 +^ IPv6 ^^
 +| [[doc:​uci:​ahcpd|/​etc/​config/​ahcpd]] | Ad-Hoc Configuration Protocol (AHCP) server and forwarder configuration |
 +| [[doc:​uci:​aiccu|/​etc/​config/​aiccu]] | AICCU client configuration |
 +| [[doc:​uci:​dhcp6c|/​etc/​config/​dhcp6c]] | WIDE-DHCPv6 client |
 +| [[doc:​uci:​dhcp6s|/​etc/​config/​dhcp6s]] | WIDE-DHCPv6 server |
 +| [[doc:​uci:​gw6c|/​etc/​config/​gw6c]] | GW6c client configuration |
 +| [[doc:​uci:​radvd|/​etc/​config/​radvd]] | Router Advertisement (radvd) configuration |
 +^ Другое ^^
 +| [[doc:​uci:​bbstored|/​etc/​config/​bbstored]] | Конфигурация сервера резервного копирования BoxBackup |
 +| [[doc:​uci:​etherwake|/​etc/​config/​etherwake]] | Wake-on-Lan:​ etherwake |
 +| [[doc:​uci:​fstab|/​etc/​config/​fstab]] | Точки монтирования и раздел подкачки |
 +| [[doc:​uci:​hd-idle|/​etc/​config/​hd-idle]] | Another idle-daemon for attached hard drives |
 +| [[doc:​uci:​httpd|/​etc/​config/​httpd]] | Установки веб-серввера (Busybox httpd, устарело) |
 +| [[doc:​uci:​luci|/​etc/​config/​luci]] | Основные настройки LuCI |
 +| [[doc:​uci:​luci_statistics|/​etc/​config/​luci_statistics]] | Настройка пакета статистики |
 +| [[doc:​uci:​mini_snmpd|/​etc/​config/​mini_snmpd]] | Настройки SNMP демона mini_snmpd |
 +| [[doc:​uci:​minidlna|/​etc/​config/​minidlna]] | Настройки MiniDLNA |
 +| [[doc:​uci:​mjpg-streamer|/​etc/​config/​mjpg-streamer]] | Настройки потокового вещания для Linux-UVC совместимых веб-камер |
 +| [[doc:​uci:​mountd|/​etc/​config/​mountd]] | Настройки демона автомонтирования OpenWrt |
 +| [[doc:​uci:​mroute|/​etc/​config/​mroute]] | Конфигурационные файлы для маршрутов мульти-WAN |
 +| [[doc:​uci:​multiwan|/​etc/​config/​multiwan]] | Конфигурация простого мульти-WAN |
 +| [[doc:​uci:​ntpclient|/​etc/​config/​ntpclient]] | Настройки NTP клиента синхронизации времени |
 +| [[doc:​uci:​p910nd|/​etc/​config/​p910nd]] | Настройки для без-буферного демона печати [[doc:​howto:​p910nd.server]] |
 +| [[doc:​uci:​pure-ftpd|/​etc/​config/​pure-ftpd]] | Конфигурация сервера Pure-FTPd |
 +| [[doc:​uci:​qos|/​etc/​config/​qos]] | Реализация QoS для //upload// |
 +| [[doc:​uci:​racoon|/​etc/​config/​racoon]] | Настройки сервиса IPsec //racoon// |
 +| [[doc:​uci:​samba|/​etc/​config/​samba]] | Настройки сервера SAMBA для шаринга файлов и принтеров сетей Microsoft|
 +| [[doc:​uci:​snmpd|/​etc/​config/​snmpd]] | Настройки SNMP демона SNMPd |
 +| [[doc:​uci:​sshtunnel|/​etc/​config/​sshtunnel]] | Установки пакета ''​sshtunnel''​ |
 +| [[doc:​uci:​stund|/​etc/​config/​stund]] | Настройки сервера STUN |
 +| [[doc:​uci:​transmission|/​etc/​config/​transmission]] | Настройки BitTorrent |
 +| [[doc:​uci:​uhttpd|/​etc/​config/​uhttpd]] | Настройки веб-сервера (uHTTPd) |
 +| [[doc:​uci:​miniupnpd|/​etc/​config/​upnpd]] | Настройки UPnP сервера miniupnpd |
 +| [[doc:​uci:​users|/​etc/​config/​users]] | База данных пользователей для различных сервисов |
 +| [[doc:​uci:​ushare|/​etc/​config/​ushare]] | Настройки сервера UPnP uShare |
 +| [[doc:​uci:​vblade|/​etc/​config/​vblade]] | vblade userspace AOE target |
 +| [[doc:​uci:​vnstat|/​etc/​config/​vnstat]] | vnstat downloader settings |
 +| [[doc:​uci:​wifitoggle|/​etc/​config/​wifitoggle]] | Скрипт для вкл. WiFi кнопкой |
 +| [[doc:​uci:​wol|/​etc/​config/​wol]] | Wake-on-Lan:​ wol |
 +| [[doc:​uci:​wshaper|/​etc/​config/​wshaper]] | wondershaper qos script settings |
 +| [[doc:​uci:​znc|/​etc/​config/​znc]] | ZNC bouncer configuration |
 +
 +===== Синтакс Файлов =====
 +
 +Конфигурационные файлы uci обычно содержат одно или более конфигурационных ''​определений'',​ которые также называются секциями,​ в которых содержатся одна или более ''​опций''​ определений,​ определяющих фактические значения.
 +
 +Ниже приведен пример простого конфигурационного файла:
 +
 +<​code>​package '​example'​
 +
 +config '​example'​ '​test'​
 +        option ​  '​string' ​     'some value'
 +        option ​  '​boolean' ​    '​1'​
 +        list     '​collection' ​ 'first item'
 +        list     '​collection' ​ '​second item'</​code>​
 +
 +  * Утверждение ''​config '​example'​ '​test'​ ''​ определяет начало секции с типом ''​example''​ и именем ''​test''​. Секция также может быть //​анонимной//​ с указанием только типа, без имени секции. Тип необходим для программ обработки для принятия решения о том, как интерпретировать входящие в секцию ''​опции''​.
 +
 +  * Строки ''​option '​string'​ 'some value' ''​ и ''​ option '​boolean'​ '​1'​ ''​ определяют простые значения внутри секции. Заметьте,​ что синтаксически нет разницы между текстовыми и булевскими опциями. По соглашению,​ булевские опции могут иметь одно из значений '​0',​ '​no',​ '​off'​ или '​false'​ для определения значения '​ложь'​ или ​ '​1'​ , '​yes',​ '​on'​ или '​true'​ для определения значения '​истина'​.
 +
 +  * В строках начинающихся с дескриптора ''​list''​ определены опции с множественными значениями. Все определения ''​list'',​ которые используют одинаковое имя (''​collection''​ в нашем примере),​ будут объединены в один список значений в том порядке,​ в котором они были в конфигурационном файле.
 +
 +  * Наличие отступов в строчках с определениями ''​option''​ и ''​list''​ является соглашением для улучшения читаемости конфигурационного файла, но синтаксически не обязательно.
 +
 +Обычно Вам не требуется заключать идентификаторы или значения в кавычки. Кавычки требуются только если заключаемое в них значение содержит символы пробела или табуляции. Также вполне допустимо использовать двойные кавычки (") вместо одинарных (') при вводе конфигурационных опций.
 +
 +Все приведенные ниже примеры являются синтаксически корректными в uci:
 +
 +  * ''​option example value''​
 +  * ''​option '​example'​ value''​
 +  * ''​option example "​value"''​
 +  * ''​option "​example" ​   '​value'​ ''​
 +  * ''​option ​  '​example'​ "​value"''​
 +
 +В противовес,​ следующий пример синтаксически неверен:​
 +
 +  * ''​option '​example"​ "​value'​ ''​ (несбалансированность кавычек)
 +  * ''​option example some value with space ''​ (кавычки отсутствуют вокруг значения)
 +
 +Важно знать, что идентификаторы UCI и имена конфигурационных файлов могут содержать только символы ''​a-z'',​ ''​0-9''​ и ''​_''​. Значения опций могут содержать любые символы (пока они в кавычках).
 +
 +===== Утилита Командной Строки (UCI) =====
 +
 +Использование awk и grep для парсинга конфигурационных файлов OpenWrt является избыточным,​ неумным и неэффективным. Вместо этого используйте утилиту //uci// для получения того что Вам нужно.
 +
 +Ниже приведено описание,​ а также некоторые полезные примеры использования этой мощной утилиты. Запомните,​ друзья не позволяют друзьям парсить собственные конфигурационные файлы!
 +
 +Когда есть несколько правил,​ следующих одно за другим,​ uci использует для них ссылки похожие на адресацию в массивах. ​
 +Если есть 8-мь серверов NTP, uci позволит Вам ссылаться на их секции как timeserver.@timeserver[0] для первого сервера или timeserver.@timeserver[7] для последнего. Вы также можете использовать отрицательные индексы,​ как например timeserver.@timeserver[-1]. "​-1"​ означает "​последний",​ "​-2"​ предпоследний,​ и т.д. Это оказывается очень удобно,​ когда добавляются новые правила к концу списка. См. пример ниже.
 +
 +==== Использование ====
 +''​root@OpenWrt:/​lib/​config#​ **uci**''​
 +
 +<​code>​
 +Usage: uci [<​options>​] <​command>​ [<​arguments>​]
 +
 +Commands:
 + batch
 + export ​    ​[<​config>​]
 + import ​    ​[<​config>​]
 + changes ​   [<​config>​]
 + commit ​    ​[<​config>​]
 + add        <​config>​ <​section-type>​
 + add_list ​  <​config>​.<​section>​.<​option>​=<​string>​
 + show       ​[<​config>​[.<​section>​[.<​option>​]]]
 + get        <​config>​.<​section>​[.<​option>​]
 + set        <​config>​.<​section>​[.<​option>​]=<​value>​
 + delete ​    <​config>​[.<​section[.<​option>​]]
 + rename ​    <​config>​.<​section>​[.<​option>​]=<​name>​
 + revert ​    <​config>​[.<​section>​[.<​option>​]]
 +
 +Options:
 + -c <​path> ​ установка пути поиска конфигурационных файлов (по умолчанию:​ /​etc/​config)
 + -d <​str> ​  ​установка разделителя для значений списка в uci show
 + -f <​file> ​ использовать для ввода информации содержимое файла <​file>​ вместо стандартного потока stdin
 + -m         ​при импорте,​ объединение данных в уже существующий пакет
 + -n         ​имя не именованной секции при экспорте (по умолчанию)
 + -N         не присваивать имени не именованным секциям
 + -p <​path> ​ добавить путь поиска файлов измененной конфигурации
 + -P <​path> ​ добавить путь поиска файлов измененной конфигурации и использовать его по умолчанию
 + -q         ​тихий режим (не печатаются сообщения об ошибках)
 + -s         ​строгий режим (останавливаться на ошибках парсинга,​ используется по умолчанию)
 + -S         ​отключить строгий режим
 + -X         не использовать расширенный синтаксис для '​show'​
 +</​code>​
 +
 +^ ''​Команда''​ ^ Цель ^ Описание ​ ^
 +| ''​commit'' ​  | ''​[<​config>​]''​ | Сохраняет изменения данного конфигурационного файла, либо, если он не указан,​ всех конфигурационных файлов в файловую систему. Все команды "uci set", "uci add", "uci rename"​ и "uci delete"​ сохраняют результаты во временное хранилище и сохраняются сразу скопом во флэш-память с помощью "uci commit"​. Это не нужно делать после редактирования конфигурационного файла в текстовом редакторе,​ но необходимо для скриптов,​ GUI и других программ работающих непосредственно с UCI файлами. |
 +| ''​batch'' ​   | - | Запускает многострочный UCI скрипт,​ который обычно выполнен в форме [[http://​www.tldp.org/​LDP/​abs/​html/​here-docs.html|here-документа]]). |
 +| ''​export'' ​  | ''​[<​config>​]''​ | Экспорт конфигурации в машино-читаемый формат. Используется внутренне для преобразования конфигурационных файлов в shell-скрипты. |
 +| ''​import'' ​  | ''​[<​config>​]''​ | Импорт конфигурационных файлов в синтаксисе UCI. |
 +| ''​changes'' ​ | ''​[<​config>​]''​ | Список зарезервированных (пер. но еще не сохраненных) изменений данного конфигурационного файла или, если файл не указан,​ всех конфигурационных файлов. |
 +| ''​add'' ​     | ''<​config> ​ <​section-type>''​ | Добавить анонимную секцию типа ''​section-type''​ в данную конфигурацию. |
 +| ''​add_list''​ | ''<​config>​.<​section>​.<​option>​=<​string>''​ | Добавить данную строку в существующий список опций. |
 +| ''​show'' ​    | ''​[<​config>​[.<​section>​[.<​option>​]]]''​ | Отобразить данную опцию, секцию или конфигурацию в компактном виде. |
 +| ''​get'' ​     | ''<​config>​.<​section>​[.<​option>​]''​ | Получить значение данной опции или тип данной секции. |
 +| ''​set'' ​     | ''<​config>​.<​section>​[.<​option>​]=<​value>''​ | Установить значение данной опции, или добавить новую секцию с типом равным указанному значению. |
 +| ''​delete'' ​  | ''<​config>​[.<​section[.<​option>​]]'' ​ | Удалить данную секцию или опцию. |
 +| ''​rename'' ​  | ''<​config>​.<​section>​[.<​option>​]=<​name>''​ | Переименовать данную секцию или опцию. |
 +| ''​revert'' ​  | ''<​config>​[.<​section>​[.<​option>​]]''​ | Отменить изменения данной опции, секции или конфигурационного файла. |
 +
 +==== Примеры:​ ====
 +
 +=== Нет необходимости рестарта всей системы ===
 +
 +После изменения порта, который слушает сервер uhttpd, с 80 на 8080 в файле /​etc/​config/​uhttpd,​ сохраним изменения. Затем выполним
 +
 +| ''​uci commit uhttpd''​ |
 +
 +И затем
 +
 +| ''/​etc/​init.d/​uhttpd restart''​ |
 +
 +Все сделано. Перезагрузка не требуется.
 +
 +=== Экспорт всей конфигурации ===
 +
 +| ''​root@OpenWrt:​~#​ **uci export httpd**
 +package '​httpd'​
 +
 +config '​httpd'​
 + option '​port'​ '​80'​
 + option '​home'​ '/​www'​
 +
 +root@OpenWrt:​~#''​ |
 +
 +=== Отобразить в древовидном виде данную конфигурацию ===
 +
 +| ''​root@OpenWrt:​~#​ **uci show httpd**
 +httpd.@httpd[0]=httpd
 +httpd.@httpd[0].port=80
 +httpd.@httpd[0].home=/​www
 +root@OpenWrt:​~#''​ |
 +
 +=== Отобразить только значение опции ===
 +
 +| ''​root@OpenWrt:​~#​ **uci get httpd.@httpd[0].port**
 +80
 +root@OpenWrt:​~#''​ |
 +
 +=== Адресация в UCI ===
 +
 +Рассмотрим следующий пример конфигурационного файла:
 +
 +|''#​ /​etc/​config/​foo
 +config bar '​first'​
 + option name '​Mr. First'
 +config bar
 + option name '​Mr. Second'​
 +config bar '​third'​
 + option name '​Mr. Third'
 +''​|
 +
 +В соответствующих группах адресация эквивалентна:​
 +
 +|''#​ Mr. First
 +uci get foo.@bar[0].name
 +uci get foo.@bar[-0].name
 +uci get foo.@bar[-3].name
 +uci get foo.first.name
 +
 +# Mr. Second
 +uci get foo.@bar[1].name
 +uci get foo.@bar[-2].name
 +# uci get foo.second.name не работает;​ метка '​second'​ не определена.
 +
 +# Mr. Third
 +uci get foo.@bar[2].name
 +uci get foo.@bar[-1].name
 +uci get foo.third.name
 +''​|
 +
 +=== Запрос состояния интерфейса ===
 +
 +| ''​root@OpenWrt:​~#​ **uci -P/​var/​state show network.wan**
 +network.wan=interface
 +network.wan.ifname=eth0.1
 +network.wan.proto=dhcp
 +network.wan.defaultroute=0
 +network.wan.peerdns=0
 +network.wan.device=eth0.1
 +network.wan.ipaddr=10.11.12.13
 +network.wan.broadcast=255.255.255.255
 +network.wan.netmask=255.255.255.0
 +network.wan.gateway=10.11.12.1
 +network.wan.dnsdomain=
 +network.wan.dns=10.11.12.100 10.11.12.200
 +network.wan.up=1
 +network.wan.lease_gateway=10.11.12.1
 +network.wan.lease_server=10.11.12.25
 +network.wan.lease_acquired=1262482940
 +network.wan.lease_lifetime=5400
 +network.wan.lease_hostname=x-10-11-12-13
 +root@OpenWrt:​~#''​ |
 +
 +
 +=== Добавление правила межсетевого экрана ===
 +
 +Это хороший пример,​ демонстрирующий добавление правила для перенаправления TCP SSH порта и синтаксис отрицательной адресации (-1), используемый в uci (пер. - в данном случае,​ используется ссылка на последнее добавленное правило).
 +
 +| ''​root@OpenWrt:​~#​ uci add firewall rule
 +root@OpenWrt:​~#​ uci set firewall.@rule[-1].src=wan
 +root@OpenWrt:​~#​ uci set firewall.@rule[-1].target=ACCEPT
 +root@OpenWrt:​~#​ uci set firewall.@rule[-1].proto=tcp
 +root@OpenWrt:​~#​ uci set firewall.@rule[-1].dest_port=22
 +root@OpenWrt:​~#​ uci commit firewall
 +root@OpenWrt:​~#​ /​etc/​init.d/​firewall restart''​ |
 +
 +=== Получение IP адреса WAN интерфейса ===
 +  * Backfire <​code>​uci -P/​var/​state get network.wan.ipaddr</​code>​
 +  * Trunk (not really uci) <​code>​. /​lib/​functions/​network.sh;​ network_get_ipaddr ip wan; echo $ip</​code>​
 +
 +=== Получение SSID ===
 +<​code>​ uci get wireless.@wifi-iface[-1].ssid</​code>​
 +
 +===== Портирование UCI на различные Linux дистрибутивы =====
 +  * [[https://​forum.openwrt.org/​viewtopic.php?​id=15243]]