[linux-l] [Lösung-II] awk

Olaf Radicke briefkasten at olaf-radicke.de
Do Aug 4 07:08:32 CEST 2011




Peter Ross <Peter.Ross at bogen.in-berlin.de> hat am 4. August 2011 um 03:01
geschrieben:

> Quoting "Olaf Radicke" <briefkasten at olaf-radicke.de>:
>
> > Philipp Grau <phgrau at ZEDAT.FU-Berlin.DE> hat am 3. August 2011 um 15:16
> > geschrieben:
> >
> >> Wenn es der Auftraggeber ist, sollte man dann nicht mit ihm reden und sich
> >> auf etwas einigen, was eine brauchbare Lösung in angemessener Zeit
> >> ermöglicht? Perl, Python, Ruby und ähnliches sind heutzutage quasi überall
> >> verfügbar.
> >  
> > Alle genannten Sprachen sind leider nicht im initrd vorhanden
> > (http://de.wikipedia.org/wiki/Dracut-Projekt). Ich hätte es mit C++ machen
> > wollen, aber mein Chef ist dagegen.  
> >  
> > Das initrd vom Open-Sharedroot
> > (http://www.ohloh.net/p/Open-Sharedroot-initrd-ng/analyses/latest> > besteht aus 30.000 Zeilen Bash-Code. Da kommt Freude auf...
>
> Wenn ich das Projekt verstehe, koenntest Du jedes Binary reinhaengen 
> (z.B. mit C++ erzeugt)?
 
Theoretisch und Praktisch schon. Nur sperrt sich der Hauptentwickler von
Open-Sharedroot-initrd-ng dagegen, und der von Dracut - vermutlich - auch. 
 
> Das klingt auch etwas ueberzeugender, wenn der Sinn des Ganzen die 
> Beschleunigung des Bootvogangs ist, wenn ich das recht verstanden habe.
 
Die Boot-Zeit ist für Eingebettete Systeme interessant. Aber nicht so sehr im
HA-Cluster-Umfeld. Zumal der Ininit-Prozesse die längere Seit in Anspruch nimmt.
Also das, was nach initrd kommt. 
 
> Ich bin auch schon mal von der schoenen neuen Welt gebissen worden, 
> mit einem udev, welches beim Booten die nsswitch.conf auswertet - und 
> da hatte ich "ldap files" reingeschrieben. Herrlich, beim Anlegen 
> jedes /dev-Knotens auf das LDAP-Timeout fuer user/group-Aufloesung zu 
> warten, da es ja noch kein Netzwerk gibt. Das macht dann ein Booten in 
> 20 Minuten. Red Hat schliesst so einen Bug mit "Kein Problem, es ist 
> so designed"..
 
Ich kenne die anderen initrd-Systeme inicht. Bei dracut könntest du als
book-Parameter rd.break=pre-udevangeben. Dann stoppt dracut bevor udev
aufgerufen wird und du landest in einer dash. Da kannst du die udev-Reglen
ändern und mit "exit" den Prozess weiter laufen lassen.
 
> Es ist in Kurz dieses "Es funktioniert fuer mich"-Syndrom. Bei Gnome3 
> haben sie es auf die Spitze getrieben, nach dem Motto: "Gnome braucht 
> systemd und nichts anderes".
>
> Aber nicht jedes Linux/Unix braucht systemd.. Die Server-Adnmins 
> wollen das Ding nicht mit 'ner Kneifzange anfassen. Niht davon zu 
> reden, dass es aus einer urspruenglich fuer das X Windows System 
> geschriebenen GUI eine GUI fuer "Linux only" macht.
 
Bis her, hatte (fast) jeder Distri ihr eigenes initrd gehabt. Dracut ist der
Versuch etwas universelleres und flexibleres zu schaffen. Das Konzept ist
offenbar so überzeugend, das dass Linux-Kernel-Projekt das zum Quasi-Standard
erklärt hat und es bei sich  als Unterprojekt aufgenommen hat. Fedora hat es
seid geraumer Zeit. RedHat seid kurzem. SUSE wird wohl demnächst folgen.
 
Dracut will darüber hinaus alle möglichen Szenarien abdecken: Das booten über
Live-Medien (CD,DVD,USB...) und über Netzwerk (NFS, ....).
 
 
> Zuruecjk zu Deiner Programmierung: Du kannst praktisch jede Sprache 
> "objektorientiert" programmieren, wenn es "Pointer" hat, die 
> untypisiert uebergeben werden.
 
Es gibt folgende Limmits in AWK-Funktionen:
- Übergebene Variablen (Parameter) sind  lokal.
- Funktionen können keine komplexen Datentypen wie Array zurückgeben.
 
Das heißt diese Pseudo-Code würde nicht funtionieren:
 
<code>
 
auto["typ"] = "BMW"
auto["eigentümer"] = "Peter Musstermann"
auto["Nummerschil"] = "B 24345" 
 
tankstelle_auftanken(auto)
autobahnfahrt(auto, "Berlin", "München")
 
if( auto["Tankur"] < 10)
{
    tankstelle_auftanken(auto)
} 
autobahnfahrt(auto, "München", "Rom")
 
resultat = papstaudienz(auto["eigentümer"])
 
 
if( resutat == absulution)
{
    gehe_in_himmel(auto["eigentümer"])
    exit 0 
 }else{
    gehe_in_hoelle(auto["eigentümer"])
    exit 1 
}
 
</code> 
 
Wenn "auto" global wäre, könnte ich nur eines haben. Ist "auto" nicht global,
kann ich es zwar einer Funtion übergeben, diese kann "Auto" aber nicht
verändern. Die Funtion in AWK kann auch nicht "auto" zurückgeben.
 
Vielleicht bekommt man das mit mehrdimensionalen Arrays hin. Muss ich mal drüber
nachdenken...
 
Gruß
 
Olaf   



Mehr Informationen über die Mailingliste linux-l