Merge branch 'test' into mojo
[spider.git] / perl / cluster.pl
index b45213a71ba4a5dd4f2b18bb43b24c08a2db989d..f7c85a6f9a18ad2bb4fe12672eb5cdba06c4002d 100755 (executable)
@@ -115,7 +115,6 @@ use Mojolicious 7.26;
 use Mojo::IOLoop;
 $DOWARN = 1;
 
-use DXDebug;
 use Msg;
 use IntMsg;
 use Internet;
@@ -169,6 +168,7 @@ use IsoTime;
 use BPQMsg;
 use RBN;
 use DXCIDR;
+use DXDebug;
 
 use Data::Dumper;
 use IO::File;
@@ -552,12 +552,6 @@ sub setup_start
        # log our path
        dbg "Perl path: " . join(':', @INC);
        
-       # try to load the database
-       if (DXSql::init($dsn)) {
-               $dbh = DXSql->new($dsn);
-               $dbh = $dbh->connect($dsn, $dbuser, $dbpass) if $dbh;
-       }
-
        # try to load Encode and Git
        {
                local $^W = 0;
@@ -600,6 +594,37 @@ sub setup_start
                $SIG{__DIE__} = $w;
        }
 
+       unless ($is_win) {
+               $SIG{HUP} = 'IGNORE';
+               $SIG{CHLD} = sub { $zombies++ };
+
+               $SIG{PIPE} = sub {      dbg("Broken PIPE signal received"); };
+               $SIG{IO} = sub {        dbg("SIGIO received"); };
+               $SIG{WINCH} = $SIG{STOP} = $SIG{CONT} = 'IGNORE';
+               $SIG{KILL} = 'DEFAULT'; # as if it matters....
+
+               # catch the rest with a hopeful message
+               for (keys %SIG) {
+                       if (!$SIG{$_}) {
+                               #               dbg("Catching SIG $_") if isdbg('chan');
+                               $SIG{$_} = sub { my $sig = shift;       DXDebug::confess("Caught signal $sig");  };
+                       }
+               }
+       }
+
+
+       # banner
+       my ($year) = (gmtime)[5];
+       $year += 1900;
+       LogDbg('cluster', "DXSpider v$version build $build (git: $gitbranch/$gitversion) using perl $^V on $^O started");
+       LogDbg('cluster', "Copyright (c) 1998-$year Dirk Koopman G1TLH");
+       LogDbg('cluster', "Capabilities: ve7cc rbn");
+
+       # prime some signals
+       unless ($DB::VERSION) {
+               $SIG{INT} = $SIG{TERM} = sub { $ending = 10; };
+       }
+
 
        # setup location of motd & issue
        localdata_mv($motd);
@@ -610,12 +635,6 @@ sub setup_start
        # try to load XML::Simple
        DXXml::init();
 
-       # banner
-       my ($year) = (gmtime)[5];
-       $year += 1900;
-       LogDbg('cluster', "DXSpider v$version build $build (git: $gitbranch/$gitversion) using perl $^V on $^O started");
-       LogDbg('cluster', "Copyright (c) 1998-$year Dirk Koopman G1TLH");
-       LogDbg('cluster', "Capabilities: ve7cc rbn");
 
        # load Prefixes
        dbg("loading prefixes ...");
@@ -638,14 +657,14 @@ sub setup_start
        {
                die "\$myalias \& \$mycall are the same ($mycall)!, they must be different (hint: make \$mycall = '${mycall}-2';). Oh and don't forget to rerun create_sysop.pl!" if $mycall eq $myalias;
                my $ref = DXUser::get($mycall);
-               die "$mycall missing, run the create_sysop.pl script and please RTFM" unless $ref && $ref->priv == 9;
+               die "\$mycall missing, run the create_sysop.pl script and please RTFM" unless $ref && $ref->priv == 9;
                my $oldsort = $ref->sort;
                if ($oldsort ne 'S') {
                        $ref->sort('S');
                        dbg("Resetting node type from $oldsort -> DXSpider ('S')");
                }
                $ref = DXUser::get($myalias);
-               die "$myalias missing, run the create_sysop.pl script and please RTFM" unless $ref && $ref->priv == 9;
+               die "\$myalias missing, run the create_sysop.pl script and please RTFM" unless $ref && $ref->priv == 9;
                $oldsort = $ref->sort;
                if ($oldsort ne 'U') {
                        $ref->sort('U');
@@ -653,6 +672,23 @@ sub setup_start
                }
        }
 
+       # make sure that mycall, myalias and homenode are upper case;
+       my $flag = 0;
+       if ($mycall =~ /[a-z]/) {
+               LogDbg('err', "\$mycall '$mycall' contains lower case letters, correcting");
+               $mycall = uc $mycall;
+               ++$flag;
+       }
+       if ($myalias =~ /[a-z]/) {
+               LogDbg('err', "\$myalias '$myalias' contains lower case letters, correcting");
+               $myalias = uc $myalias;
+               ++$flag;
+       }
+       if ($flag) {
+               LogDbg('err', "DXVars.pm has $flag errors. See above. Please edit DXVars.pm to correct");
+               sleep 10;
+       }
+       
        # read any route cache there might be
        Route::read_cache() if $save_route_cache;
        
@@ -683,35 +719,6 @@ sub setup_start
        dbg("UDP Listener") if $UDPMsg::enable;
        UDPMsg::init(\&new_channel);
 
-       # load bad words
-       BadWords::load();
-
-       # prime some signals
-       unless ($DB::VERSION) {
-               $SIG{INT} = $SIG{TERM} = sub { $ending = 10; };
-       }
-
-       # get any bad IPs 
-       DXCIDR::init();
-
-       unless ($is_win) {
-               $SIG{HUP} = 'IGNORE';
-               $SIG{CHLD} = sub { $zombies++ };
-
-               $SIG{PIPE} = sub {      dbg("Broken PIPE signal received"); };
-               $SIG{IO} = sub {        dbg("SIGIO received"); };
-               $SIG{WINCH} = $SIG{STOP} = $SIG{CONT} = 'IGNORE';
-               $SIG{KILL} = 'DEFAULT'; # as if it matters....
-
-               # catch the rest with a hopeful message
-               for (keys %SIG) {
-                       if (!$SIG{$_}) {
-                               #               dbg("Catching SIG $_") if isdbg('chan');
-                               $SIG{$_} = sub { my $sig = shift;       DXDebug::confess("Caught signal $sig");  };
-                       }
-               }
-       }
-
        # start dupe system
        dbg("Starting Dupe system");
        DXDupe::init();
@@ -757,6 +764,13 @@ sub setup_start
        dbg("Starting DX Spot system");
        Spot->init();
 
+       # try to load the spot database if present
+       if (DXSql::init($dsn)) {
+               $dbh = DXSql->new($dsn);
+               $dbh = $dbh->connect($dsn, $dbuser, $dbpass) if $dbh;
+       }
+
+
        # read in any existing message headers and clean out old crap
        dbg("Reading existing Message/Bulletine headers ...");
        DXMsg->init();
@@ -777,6 +791,13 @@ sub setup_start
        dbg("Starting DXQsl system");
        QSL::init(1);
 
+       # load bad words
+       BadWords::load();
+
+       # get any bad IPs 
+       DXCIDR::init();
+
+
        dbg("Ooing local initialisations ...");
        if (defined &Local::init) {
                eval {