use boolean;
-use screen;
use kvm;
$SIG{CHLD} = 'IGNORE';
# child
my $invoke = 'start';
$invoke = $1 if $daemon =~ s{/(.+)}{};
- my $eval = $daemon . '::' . $invoke . '(' . ( @_ ? dump(@_) : '' ) . ')';
- warn "eval $eval";
- eval $eval;
- warn "can't start $daemon: $@" if $@;
+ if ( $daemon =~ m{dhcpd|tftpd|dnsd} ) {
+ my $exec = "perl -I$server::base_dir/lib -I$server::base_dir/lib/PXElator -M$daemon -e ${daemon}::${invoke}";
+ warn "exec $exec";
+ exec "xterm -T $daemon -n $daemon -e $exec";
+ } else {
+ my $eval = $daemon . '::' . $invoke . '(' . ( @_ ? dump(@_) : '' ) . ')';
+ warn "eval $eval";
+ eval $eval;
+ warn "can't start $daemon: $@" if $@;
+ }
exit;
} else {
die "fork error $!";
warn "static $found" if $debug;
} elsif ( $path eq '/' ) {
- my $screen = $pids->{screen} ? qq|stop <tt>$pids->{screen}</tt>| : 'start';
- my $kvm = $pids->{kvm} ? qq|stop <tt>$pids->{kvm}</tt>| :
- $pids->{screen} ? qq|start| : qq|start screen first|;
-
my @rows = (
'debug', qq|<a href=/our/debug/| . boolean::toggle($debug) . qq|>$debug</a>|,
);
warn $@ if $@;
print $client $redirect, qq|<big>$1 = $2</big><br>Location: <a href="$url">$url</a>|;
server::debug( $debug ) if $1 eq 'debug';
- } elsif ( $path =~ m{^/start_stop/((?:screen|kvm).*)} ) { # XXX we don't want to stop all classes
+ } elsif ( $path =~ m{^/start_stop/(\S+)} ) {
print $client $redirect, start_stop($1);
} elsif ( $path =~ m{^/action/([^/]+)/(.+)} ) {
$1->$2();
print "url $url\n";
start_stop 'browser', $url;
- start_stop 'screen';
+ start_stop 'dhcpd';
+ start_stop 'tftpd';
+ start_stop 'dnsd';
start_stop 'kvm';
while (1) {
+++ /dev/null
-package screen;
-
-use warnings;
-use strict;
-use autodie;
-
-use File::Slurp;
-
-use log;
-use server;
-
-our $debug = server::debug;
-
-my $screenrc = '/tmp/screenrc';
-
-sub screen_daemon {
- my $daemon = shift;
- my $run = "sudo perl -I$server::base_dir/lib/PXElator -I$server::base_dir/lib -M$daemon -e " . $daemon . "::start";
- warn "screen_daemon $daemon $run\n";
-qq|
-
-split
-
-screen -t $daemon $run
-logfile $log::dir/$daemon.log
-log on
-
-focus down
-|}
-
-write_file $screenrc, qq|
-
-autodetach off
-altscreen off
-defscrollback 10000
-startup_message off
-
-sessionname PXElator
-
-|
-. screen_daemon('dhcpd')
-. screen_daemon('tftpd')
-. screen_daemon('dnsd')
-#. screen_daemon('httpd')
-. qq|remove|;
-;
-
-warn "screenrc $screenrc ", -s $screenrc if $debug;
-
-sub start {
-
- my $screen="screen -R PXElator -c $screenrc";
- warn $screen;
-
- chdir $server::base_dir;
-
- if ( defined $ENV{DISPLAY} ) {
- exec "xterm -fg yellow -e $screen";
- } else {
- exec $screen;
- }
-
-}
-
-1;