Code

Swapped php4/php5 in dependencies
[gosa.git] / contrib / fai / goto-fai / faimond
1 #!/usr/bin/perl
3 # $Id: faimond,v 1.2 2004/06/27 11:18:55 lange Exp $
4 #*********************************************************************
5 #
6 # faimond -- monitor daemon which collects client status info
7 #
8 # This script is part of FAI (Fully Automatic Installation)
9 # (c) 2003-2004 by Thomas Lange, lange@informatik.uni-koeln.de
10 # Universitaet zu Koeln
11 #
12 #*********************************************************************
14 #use strict;
15 use Socket;
17 $| = 1;
18 my $port = 4711;
20 @tasklist = qw/confdir defclass defvar partition mountdisks extrbase updatebase instsoft configure finish/;
22 %tasks = (
23 confdir => [' ', "Beziehe System-Einstellungen"],
24 defclass => [' ',"Definieren von Klassen"],
25 defvar => [' ',"Definieren von Variablen"],
26 partition => [' ',"Paritionieren der Festplatten"],
27 mountdisks => [' ',"Einbinden der Dateisysteme"],
28 extrbase => [' ',"Installieren des Basis-Systems"],
29 updatebase => [' ',"Aktualisieren des Basis-Systems"],
30 instsoft => [' ',"Installieren der Software"],
31 configure => [' ',"Abschließende Konfiguration"],
32 finish => [' ',"Abschließen der Installation"]
33 );
35 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
36 sub server_init() {
38   my $proto = getprotobyname('tcp');
39   socket(SERVER, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
40   setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!";
42   my $paddr = sockaddr_in($port, INADDR_ANY);
44   bind(SERVER, $paddr) or die "bind: $!";
45   listen(SERVER, SOMAXCONN) or die "listen: $!";
46 #  print "FAI monitoring daemon started on port $port\n";
47 }
48 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
49 sub big_loop() {
51   # accept a connection, print message received and close
52   my ($client_addr,$inp);
53   while ($client_addr = accept(CLIENT, SERVER)) {
54     $inp = <CLIENT>;
55     close CLIENT;
56     ($host,$begend,$task,$ecode) = split /\s+/,$inp;
57     chomp $ecode;
58     $strecode = sprintf "%-3s",$ecode;
59     $sym = ($begend =~ /TASKEND/) ? "   \\Z2OK\\Zn" : "   ->";
60     $tasks{$task}[0] = $ecode ? " \\Z1E$strecode\\Zn" : $sym;
61     showtab();
63     # Stop if we've reached faiend
64     if ( $task =~ /faiend/ ){
65         system("dialog --timeout 60 --msgbox '\nDie Installation wurde abgeschlossen. Drücken Sie die Eingabetaste um das System neu zu starten.' 8 60");
66         break;
67     }
68   }
69 }
70 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
71 sub showtab() {
73 # nach taskbeg soll es blinken, bei taskend, X oder error code
75   my $pre = '--colors --title " Aktueller Installationsverlauf "';
76   my $s2 = " --infobox \"\n";
77   # show tabular %tasks
79   $str = "$pre $s2";
80   foreach (@tasklist) {
81     $x = sprintf "%5s  $tasks{$_}[1]\n", $tasks{$_}[0];
82     $str .= $x;
83   }
85   $str .=  "\" 14 50\n";
86 #  print $str;
87   system("dialog $str");
89 }
90 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
92 server_init;
93 big_loop;