X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=.inspircd.inc;h=54737fdd78c66fd66611bf6bdb8871566ee14942;hb=3a554ef1e9be9dbcf3de3301a4a6c2938d643bea;hp=f25a3a179eb7806b8a1044c9ccde6e46ccc99ad0;hpb=c881ce41209586df45a62c61ae1e74ed8456c0a0;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/.inspircd.inc b/.inspircd.inc index f25a3a179..54737fdd7 100644 --- a/.inspircd.inc +++ b/.inspircd.inc @@ -15,10 +15,12 @@ # I HATE PERL.. kthxbye # --------------------------------------------------- -my $confpath = "@CONFIG_DIR@/"; -my $binpath = "@BINARY_DIR@"; -my $libpath = "@LIBRARY_DIR@"; -my $executable = "@EXECUTABLE@"; +my $basepath = "@BASE_DIR@"; +my $confpath = "@CONFIG_DIR@/"; +my $binpath = "@BINARY_DIR@"; +my $libpath = "@LIBRARY_DIR@"; +my $executable = "@EXECUTABLE@"; +my $version = "@VERSION@"; my @filesparsed; # Lets see what they want to do.. Set the variable (Cause i'm a lazy coder) @@ -27,6 +29,9 @@ getpidfile($confpath."inspircd.conf"); if ($arg eq "start") { start(); exit(); } if ($arg eq "debug") { debug(); exit(); } +if ($arg eq "screendebug") { screendebug(); exit() } +if ($arg eq "valdebug") { valdebug(); exit(); } +if ($arg eq "screenvaldebug") { screenvaldebug(); exit(); } if ($arg eq "stop") { stop(); exit(); } if ($arg eq "status") { if (getstatus() == 1) { @@ -55,8 +60,14 @@ if ($arg eq "cron") { exit(); } +if ($arg eq "version") { + print "InspIRCd version: $version\n"; + exit(); +} + if ($arg eq "restart") { stop(); + unlink($pidfile) if (-e $pidfile); start(); # kthxbye(); exit(); @@ -72,7 +83,7 @@ if ($arg eq "Cheese-Sandwich") { # If we get here.. bad / no parameters. ### print "Invalid Argument: $arg\n"; -print "Usage: inspircd (start|stop|restart|rehash|status|cron)\n"; +print "Usage: inspircd (start|stop|restart|rehash|status|cron|version)\n"; exit(); ### @@ -83,18 +94,76 @@ sub start { # Check to see its not 'running' already. if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } # If we are still alive here.. Try starting the IRCd.. + print "$binpath/$executable doesn't exist\n" and return 0 unless(-e "$binpath/$executable"); + system("$binpath/$executable"); - sleep 2; return 1; } sub debug { - # Check to see its not 'running' already. - if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } - # If we are still alive here.. Try starting the IRCd.. - system("gdb --eval-command=\"handle SIGPIPE pass nostop noprint\" --eval-command=\"run\" --args $binpath/$executable -nofork -debug"); + # Check to see its not 'running' already. + if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } + + print "$binpath/$executable doesn't exist\n" and return 0 unless(-e "$binpath/$executable"); + + # Check we have gdb + checkgdb(); + + # If we are still alive here.. Try starting the IRCd.. + system("gdb --command=$basepath/.gdbargs --args $binpath/$executable -nofork -debug -nolog"); } +sub screendebug +{ + # Check to see its not 'running' already. + if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } + + print "$binpath/$executable doesn't exist\n" and return 0 unless(-e "$binpath/$executable"); + + #Check we have gdb + checkgdb(); + checkscreen(); + + # If we are still alive here.. Try starting the IRCd.. + print "Starting InspIRCd in `screen`, type `screen -r` when the ircd crashes to view the gdb output and get a backtrace.\n"; + print "Once you're inside the screen session press ^C + d to re-detach from the session\n"; + system("screen -m -d gdb --command=$basepath/.gdbargs --args $binpath/$executable -nofork -debug -nolog"); +} + +sub valdebug +{ + # Check to see its not 'running' already. + if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } + + print "$binpath/$executable doesn't exist\n" and return 0 unless(-e "$binpath/$executable"); + + # Check we have valgrind and gdb + checkvalgrind(); + checkgdb(); + + # If we are still alive here.. Try starting the IRCd.. + # May want to do something with these args at some point: --suppressions=.inspircd.sup --gen-suppressions=yes + # Could be useful when we want to stop it complaining about things we're sure aren't issues. + system("valgrind -v --tool=memcheck --leak-check=yes --db-attach=yes --num-callers=10 $binpath/$executable -nofork -debug -nolog"); +} + +sub screenvaldebug +{ + # Check to see its not 'running' already. + if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; } + + print "$binpath/$executable doesn't exist\n" and return 0 unless(-e "$binpath/$executable"); + + #Check we have gdb + checkvalgrind(); + checkgdb(); + checkscreen(); + + # If we are still alive here.. Try starting the IRCd.. + print "Starting InspIRCd in `screen`, type `screen -r` when the ircd crashes to view the valgrind and gdb output and get a backtrace.\n"; + print "Once you're inside the screen session press ^C + d to re-detach from the session\n"; + system("screen -m -d valgrind -v --tool=memcheck --leak-check=yes --db-attach=yes --num-callers=10 $binpath/$executable -nofork -debug -nolog"); +} sub stop { if (getstatus() == 0) { print "InspIRCd is not running. (Or PID File not found)\n"; return 0; } @@ -102,7 +171,6 @@ sub stop { my $pid = getprocessid(); print "Stopping InspIRCd...\n"; system("kill -TERM $pid >/dev/null 2>&1"); - sleep 2; if (getstatus() == 1) { print "InspIRCd not dying Quietly -- Forcing Kill\n"; @@ -174,7 +242,7 @@ sub getpidfile { } } else { # End of includes / No includes found. - return; + return $confpath . "inspircd.pid"; } } } @@ -198,3 +266,30 @@ sub getprocessid { close PIDFILE; return $pid; } + +sub checkvalgrind +{ + unless(`valgrind --version`) + { + print "Couldn't start valgrind: $!\n"; + exit; + } +} + +sub checkgdb +{ + unless(`gdb --version`) + { + print "Couldn't start gdb: $!\n"; + exit; + } +} + +sub checkscreen +{ + unless(`screen --version`) + { + print "Couldn't start screen: $!\n"; + exit; + } +}