OpenWrt - Tajniki UCI
Praktyczne zastosowania interfejsu UCIOstatnia zmiana: 2012-09-21 18:18
1. Budowa pliku konfiguracji
2. Składnia UCI
3. Odwołanie do sekcji
4. Modyfikacje
4.1. Ustawianie opcji
4.2. Dodanie listy
4.3. Usuwanie opcji
4.4. Wyświetlenie zmian
4.5. Zatwierdzanie zmian
4.6. Anulowanie zmian
4.7. Dodawanie nowej sekcji
4.8. Usuwanie sekcji
4.9. Dodawanie grupowe
5. Zakończenie
6. Przykłady
6.1. Dodanie nowej sekcji
6.2. Dodanie nowej sekcji nazwanej
Interfejs "uci" (Unified Configuration Interface - ujednolicony interfejs konfiguracyjny) jest następcą mechanizmu nvram stosowanego oryginalne w urządzeniach bazujących na chipie Broadcoma, a także zaimplementowanych do innych platform (np. produkowanych przez Linksysa). Zastosowanie uci ma tez inne zalety - mniejsze zużycie flash (nie jest ciągle zapisywany ten sam obszar, tylko przydzielane jest losowo miejsce do zapisania pliku - wynika z właściwości systemu plików) czy możliwość zastosowania w normalnych systemach plików (np. dla x86).
Budowa pliku konfiguracji
Domyślnie pliki konfiguracyjne zawarte są w katalogu /etc/config. Ważna jest nazwa pliku (przez nią odwołujemy się do poszczególnych sekcji) oraz jego budowa w postaci podzielonych sekcji. Nie wnikając w szczegóły, sekcja zwykle wygląda w następujący sposób:
config 'example' 'test'
option 'string' 'wartosc'
option 'boolean' '1'
list 'kolekcja' 'first item'
list 'kolekcja' 'second item'
option ifname 'eth0 wl0'
config 'rule'
option 'src' 'wan'
option 'proto' 'udp'
option 'dest_port' '68'
option 'target' 'ACCEPT'
config 'rule'
option '_name' 'SSH'
option 'src' 'wan'
option 'target' 'ACCEPT'
option 'proto' 'tcp'
option 'dest_port' '22'
config 'rule' 'poczta'
option '_name' 'smtp'
option 'src' 'wan'
option 'target' 'ACCEPT'
option 'proto' 'tcp'
option 'dest_port' '25'
Składnia UCI
Odwołanie zawsze następuje wg schematu
konfig.sekcja.nazwa_opcji=wartość
Przykład
- wyświetlenie całej konfiguracji
uci show
uci show firewall
Odwołanie do sekcji
Poszczególne sekcje numerowane są od 0 (od góry) lub od -1 (od dołu). Aby odwołać się do pierwszej sekcji wystarczy więc
uci show firewall.@rule[0]
uci show firewall.@rule[-1]
uci show firewall.@rule[2]
Oczywiście możliwe jest także pobranie wartości konkretnej opcji, np.
uci get firewall.@rule[2]._name
uci -q get firewall.@rule[2]._n1ame
Modyfikacje
Ustawianie opcji
uci set firewall.@rule[0]._name='test'
uci set firewall.poczta._name='test'
Dodanie listy
uci add_list firewall.@rule[0]._name='test'
Usuwanie opcji
uci del firewall.@rule[0]._name
uci del firewall.poczta._name
Wyświetlenie zmian
Aby zobaczy listę zmian wystarczy wydać polecenie
uci changes firewall
Zatwierdzanie zmian
Opcje ustawia się "w pamięci". Podobnie jak w przypadku nvram, aby przetrwało to po restarcie systemu należy zapisać jest na stałe do pliku poleceniem commit, np.
uci commit firewall
uci set wireless.@wifi-device[0].disabled=0
wifi
Anulowanie zmian
uci revert firewall
Dodawanie nowej sekcji
uci add firewall rule
uci set firewall.@rule[-1]._name=poczta
uci set firewall.@rule[-1].src=wan
uci set firewall.@rule[-1].target=ACCEPT
uci set firewall.@rule[-1].proto=tcp
uci set firewall.@rule[-1].dest_port=110
uci commit firewall
Aby nazwać sekcje zamiast "uci add firewall rule" wprowadzamy po prostu:
uci set firewall.poczta=rule
Usuwanie sekcji
uci delete firewall.@rule[2]
uci delete firewall.poczta
Dodawanie grupowe
Możliwa jest także grupowa modyfikacja opcji bez potrzebny wołania za każdym razem uci. Składania tego polecenia jest następująca.
uci batch << EOF
set firewall..
set firewall..
set firewall..
del firewall...
EOF
Zakończenie
UCI posiada także inne możliwości (import, eksport sekcji, zmiana położenia plików konfiguracyjnych itd), ale są one niezbyt często używane.Opcje można ustawić także poprzez edycję określonego pliku, ale warto zaznajomić się z obsługą uci, bo może to być przydatne w zrozumieniu działania skryptów w systemie.
Przykłady
Dodanie nowej sekcji
uci add firewall rule
uci set firewall.@rule[-1].src=wan
uci set firewall.@rule[-1].target=ACCEPT
uci set firewall.@rule[-1].proto=tcp
uci set firewall.@rule[-1].dest_port=110
uci commit firewall
config 'rule'
option 'src' 'wan'
option 'target' 'ACCEPT'
option 'proto' 'tcp'
option 'dest_port' '110'
Dodanie nowej sekcji nazwanej
uci set firewall.poczta=rule
uci set firewall.poczta.src=wan
uci set firewall.poczta.target=ACCEPT
uci set firewall.poczta.proto=tcp
uci set firewall.poczta.dest_port=110
uci commit firewall
config 'rule' 'poczta'
option 'src' 'wan'
option 'target' 'ACCEPT'
option 'proto' 'tcp'
option 'dest_port' '110'