#!/usr/bin/perl # $Id: faimond,v 1.2 2004/06/27 11:18:55 lange Exp $ #********************************************************************* # # faimond -- monitor daemon which collects client status info # # This script is part of FAI (Fully Automatic Installation) # (c) 2003-2004 by Thomas Lange, lange@informatik.uni-koeln.de # Universitaet zu Koeln # #********************************************************************* #use strict; use Socket; $| = 1; my $port = 4711; @tasklist = qw/confdir defclass defvar partition mountdisks extrbase updatebase instsoft configure finish/; %tasks = ( confdir => [' ', "Beziehe System-Einstellungen"], defclass => [' ',"Definieren von Klassen"], defvar => [' ',"Definieren von Variablen"], partition => [' ',"Paritionieren der Festplatten"], mountdisks => [' ',"Einbinden der Dateisysteme"], extrbase => [' ',"Installieren des Basis-Systems"], updatebase => [' ',"Aktualisieren des Basis-Systems"], instsoft => [' ',"Installieren der Software"], configure => [' ',"Abschließende Konfiguration"], finish => [' ',"Abschließen der Installation"] ); # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sub server_init() { my $proto = getprotobyname('tcp'); socket(SERVER, PF_INET, SOCK_STREAM, $proto) or die "socket: $!"; setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!"; my $paddr = sockaddr_in($port, INADDR_ANY); bind(SERVER, $paddr) or die "bind: $!"; listen(SERVER, SOMAXCONN) or die "listen: $!"; # print "FAI monitoring daemon started on port $port\n"; } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sub big_loop() { # accept a connection, print message received and close my ($client_addr,$inp); while ($client_addr = accept(CLIENT, SERVER)) { $inp = ; close CLIENT; ($host,$begend,$task,$ecode) = split /\s+/,$inp; chomp $ecode; $strecode = sprintf "%-3s",$ecode; $sym = ($begend =~ /TASKEND/) ? " \\Z2OK\\Zn" : " ->"; $tasks{$task}[0] = $ecode ? " \\Z1E$strecode\\Zn" : $sym; showtab(); # Stop if we've reached faiend if ( $task =~ /faiend/ ){ system("dialog --timeout 60 --msgbox '\nDie Installation wurde abgeschlossen. Drücken Sie die Eingabetaste um das System neu zu starten.' 8 60"); break; } } } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - sub showtab() { # nach taskbeg soll es blinken, bei taskend, X oder error code my $pre = '--colors --title " Aktueller Installationsverlauf "'; my $s2 = " --infobox \"\n"; # show tabular %tasks $str = "$pre $s2"; foreach (@tasklist) { $x = sprintf "%5s $tasks{$_}[1]\n", $tasks{$_}[0]; $str .= $x; } $str .= "\" 14 50\n"; # print $str; system("dialog $str"); } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - server_init; big_loop;