Názor k článku Linuxu chybí univerzální konfigurační systém od Jan Molič - Právě že ta svoboda jazyka je u modulů...

  • Článek je starý, nové názory již nelze přidávat.
  • 10. 1. 2008 21:25

    Jan Molič (neregistrovaný)

    Právě že ta svoboda jazyka je u modulů nutná, jakmile by měly být jedině v C, tak je většina lidí nebude umět napsat, ačkoli mohou být dobrými programátory. Osobně preferuji unixový přístup STDIN-STDOUT, a to zvláště proto, že by se tak moduly velmi dobře testovaly (třeba CUPS backendy jsou také běžné spustitelné soubory, které mají definované argumenty+vstup+výstup; když cups netiskne, je kolikrát fajn, že lze spustit backend ručně, případně i přes strace).

    Pod pojmem "modul" myslím adresář, který by obsahoval jak spustitelné, tak nespustitelné soubory. Ty spustitelné by mohly být napsány třeba v C nebo by to mohly být i skripty (díky shebang hlavičce je to jedno). Jejich úkolem by bylo provádět akce na základě čtení či zápisu do virtuálního filesystému. Statické soubory by byly různá metadata.

    Daemon by pak, podle přístupu do virtuálního filesystému, rozhodl, na který spustitelný soubor je virtuální cesta namapována, spustil by ten program a provázal jeho stdin/stdout s virtuálním souborem.

    Daemon by se rozhodoval podle mapy "virtuální cesta - program". Tato mapa by mohla být definována jak ve statických souborech, tak i generována dynamicky - například pro virtuální cestu /setup/network/eth0. Ačkoli většina mapování by šla zvládnout regulárními výrazy.

    Příklad:

    cat /setup/pgsql/current_locks
    

    1. daemon se podívá do modulu zaregistrovaném jako "pgsql"
    2. modul obsahuje mapování na program "curlocks"
    3. daemon spustí program "curlocks", což je BASHový skript a prováže jeho stdin-stdout s virtuálním souborem "/setup/pgsql/current_locks" (program může virtuální cestu dostat třeba jako argument)
    4. program zpracuje požadavek a zapíše výstup na stdout

    Někdo, kdo by měl jinou verzi Postgresu, by měl pod klíčem "pgsql" registrován odlišný modul. Též by provedl "cat /setup/pgsql/current_locks", ale odlišný modul by, samozřejmě, provedl jinou činnost.

    ---

    Co se týče uživatelského rozhraní, o němž jsem psal, že by mohlo být generováno i automaticky, součástí modulu by tedy byla metadata pro tvorbu formulářů. Tento soubor by daemon exportoval stejně jako jiné soubory, třeba jako /setup/network/ui.xml. Záleželo by pak na aplikaci, zda definice využije nebo ne.

    Zdá se mi, že to vlastně vůbec nebude složité ;-)

    Ještě je nutné vyřešit zámky při přístupu do souborů, práva či stream (tj. že by program z modulu zůstal spuštěn a zpracovával by více požadavků, jako server). A určitě pár dalších věcí.

    ---

    pozn. Proč by tohle nemohlo být tak, že by místo FUSE byly na těch místech přímo spustitelné programy? a) nebylo by to dynamické, b) nebylo by to použitelné přes síť