Wpis z mikrobloga

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 #!$%@? 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
  • 3