Administration von Unix-Rechnern mit cfengine


Grundlagen

Einführendes Beispiel

# Erstes Beispiel 

control: 
    actionsequence = ( links tidy ) 

links: 
  sun4:: 
    /bin -> /usr/bin 
  redhat:: 
    /usr/X11 ->! /usr/X11R6 

tidy: 
    /tmp pattern=* age=7 recurse=inf 

 

 
  • dieses Programm
    • prüft, falls es sich um ein System mit SunOS 4.x handelt, die Existenz des symbolischen Links /bin nach /usr/bin und erstellt diesen, falls erforderlich (existiert /bin, ist aber kein symbolischer Link nach /usr/bin, so wird eine Warnung ausgegeben)
    • prüft, falls es sich um ein System mit Redhat-Linux handelt, die Existenz des symbolischen Links /usr/X11 nach /usr/X11R6 und erstellt diesen, falls erforderlich (existiert /usr/X11, ist aber kein sybolischer Link nach /usr/X11R6, so wird das Einrichten des Links erzwungen)
    • löscht rekursiv alle Files im Verzeichnis /tmp, die älter als 7 Tage sind
  • Kommentare werden eingeleitet durch das Zeichen # (davor muß ein Newline oder Leerzeichen stehen)
  • Worte, die mit ":" enden, bezeichnen sections
  • Worte, die mit "::" enden, bezeichnen Klassen
  • Anweisungen der Form

  • name  = ( list )
    sind Wertzuweisungen
  • die section control: gibt an, wie sich das Programm verhalten soll (hier: hinzufügen der  sections links: und tidy: zu actionsequence)
  • die section links: gibt an, daß im folgenden einzurichtende Links definiert werden
  • die section tidy: gibt an, daß im folgenden zu löschende Files definiert werden
  • ein cfengine-Programm besteht mindestens aus
    • einer Menge von Deklarationen, die angeben, was zu tun ist
    • einer action sequence, die angibt, welche Teile des Programms in welcher Reihenfolge und wie oft auszuführen sind

Programmstruktur

  • ein cfengine-Programm besteht aus einer Folge von section-Deklarationen:
  • action-type: 

      class1:: 

        list of things to do ... 

      class2:: 

        list of things to do ... 
     

  • für action-type ist ein reservierte Bezeichner anzugeben, es gibt folgende Möglichkeiten:

  • binservers, broadcast, control, copy, defaultroute, directories, disable, editfiles, files, groups, homeservers, ignore, import, links, mailserver, miscmounts, mountables, processes, resolve, required, shellcommands, tidy
  • die Reihenfolge der section-Deklarationen ist frei wählbar, jedoch müssen alle Variablen, Klassen, Gruppen etc. definiert sein, bevor sie verwendet werden können
  • die Abarbeitungsreihenfolge wird definiert durch die Aufzählung der sections im Statement
  • actionsequence = ( ... ) 
     
  • ist diese Liste leer, macht das Programm nichts

Aufruf von cfengine-Programmen

  • zahlreiche verschiedene Varianten
  • host% cfengine                    # führt ./cfengine.conf aus 
    host% cfengine -f configure       # führt ./configure aus 
    host% cfengine -f configure -v -n # führt ./configure im "do nothing"-Modus (-n) aus 
    host% cfengine -h 
    GNU cfengine: A system configuration tool  
    cfengine-1.4.8a 
    Free Software Foundation 1995, 1996, 1997 
    Donated by Mark Burgess, Centre of Science and Technology 
    Faculty of Engineering, Oslo College, 0254 Oslo, Norway 

    Options: 

    --help                    (-h) 
    --debug                   (-d) 
    --verbose                 (-v) 
    --traverse-links          (-l) 
    --recon                   (-n) 
    --dry-run                 (-n) 
    --just-print              (-n) 
    --no-ifconfig             (-i) 
    --file                    (-f) 
    --parse-only              (-p) 
    --no-mount                (-m) 
    --no-check-files          (-c) 
    --no-check-mounts         (-C) 
    --no-tidy                 (-t) 
    --no-commands             (-s) 
    --sysadm                  (-a) 
    --version                 (-V) 
    --define                  (-D) 
    --negate                  (-N) 
    --undefine                (-N) 
    --delete-stale-links      (-L) 
    --no-warn                 (-w) 
    --silent                  (-S) 
    --quiet                   (-w) 
    --no-preconf              (-x) 
    --no-links                (-X) 
    --no-edits                (-e) 
    --enforce-links           (-E) 
    --no-copy                 (-k) 
    --use-env                 (-u) 
    --no-processes            (-P) 
    --underscore-classes      (-U) 
    --no-hard-classes         (-H) 
    --no-splay                (-q) 
    --no-lock                 (-K) 
    --auto                    (-A) 

    Debug levels: 1=parsing, 2=running, 3=summary 

    Bug reports to bug-cfengine@prep.ai.mit.edu (News: gnu.cfengine.bug) 
    General help to help-cfengine@prep.ai.mit.edu (News: gnu.cfengine.help) 
    Info & fixes at http://www.iu.hioslo.no/~mark/cfengine.html 
    host% 

  • wenn die Umgebungsvariable CFINPUTS gesetzt ist, werden die cfengine-Programme in dem Verzeichnis gesucht, welches CFINPUTS bezeichnet
  • ausführbare cfengine-Scripts (analog Shell-Scripts):
  • host% cat ./configure 
    #!/uni/global/bin/cfengine -f 
    # 
    ... 
     
  • weitere Möglichkeiten:
    • cfd/cfrun

    • cfd ist ein Server (gestartet über inetd), welcher cfengine-Progamme starten kann
      cfrun ist der cfd Client zum Aufruf von cfengine-Programmen an entfernten Hosts
    • per cron
    • beim Booten
    • ...


29. November 1997, überarbeitet: 01. Dezember 1998
Thomas Müller, TU Chemnitz, URZ