Linux

Mireczki od #linux #embedded…

Mireczki od #linux #embedded mały #protip

Jakby ktoś szukał parsera w C/C++(i inne) do linuksowych configów co by sobie na przykład zmieniać konfigurację interfejsów sieciowych w pliku /etc/network/interfaces z własnego interfejsu użytnika napisanego np. z pomocą Qt to jest takie coś.

Biblioteka http://augeas.net/ (Augiasz – spoko to nazwali xD )
Dziś korzystałem i jest bardzo bardzo spoko.
Chyba nawet Redhat sypie na to piniondz.

Ugółem to działa w taki sposób że biblioteka na domyślnej konfiguracji przepierdoli przez wszystkie pliki w katalogu /etc(i innych jak się jej każe) i udostępnia ustawienia w nich zawarte w postaci drzewa opcji z edytowalnymi parametrami.

I tak na przykład jak mamy zdefiniowany w /etc/network/interfaces interfejs wlan0:

auto wlan0
iface wlan0 inet dhcp
wpa-ssid myssid
wpa-psk a1b2c3d4e5

i chcemy aby używał statycznego adresu IP to wystarczy takie wywołanie:

augset(aug, „/files/etc/network/interfaces/ifaces[ . = „wlan0″ ]/method”, „static”);
augsave(aug);

i zawartość pliku nam się ładnie zmienia bez ruszania pozostałych rzeczy

auto wlan0
iface wlan0 inet static
wpa-ssid myssid
wpa-psk a1b2c3d4e5

+ dodatkowo do tego jest augtool – program konsolowy pozwalający na podgląd i edycję configów za pomocą biblioteki augeas.

Podobną do tego rzeczą jest UCI używane w OpenWRT, ale tam filozofia jest trochę inna – UCI trzyma własne configi, a tutaj jest to pozostawione tak jak stwórcy-stworzyciele oprogramowania planowali.

Może się komuś przyda – bo sam straciłem z dwa dni na pisanie czegoś co już ktoś zrobił.
Tu lista z plikami jakich składnię jest w stanie parsować biblioteka augeas – jest tego sporo:
http://augeas.net/stock_lenses.html

#linux #programowanie #jezykc #cpp