2019-03-06 04:48:20 +00:00
|
|
|
#!/usr/bin/perl
|
|
|
|
#
|
|
|
|
use warnings;
|
|
|
|
use strict;
|
2019-03-19 13:27:58 +00:00
|
|
|
use Digest::MD5 qw(md5_hex);
|
2019-03-06 04:48:20 +00:00
|
|
|
|
2019-03-06 18:37:16 +00:00
|
|
|
my $myNode = $ARGV[0];
|
2019-03-06 04:48:20 +00:00
|
|
|
|
|
|
|
sub getNodes {
|
|
|
|
my $nodelist = "../nodelist";
|
|
|
|
|
2019-03-06 19:13:50 +00:00
|
|
|
open(my $data, '<', $nodelist) or die ("Cannot open nodelist");
|
2019-03-06 04:48:20 +00:00
|
|
|
|
|
|
|
print("Generating files\n");
|
|
|
|
while (my $line = <$data>) {
|
|
|
|
chomp $line;
|
|
|
|
|
|
|
|
my @fields = split(",", $line);
|
|
|
|
my $nodeName = $fields[0];
|
|
|
|
my $nodeAddress = $fields[1];
|
|
|
|
generatePort($nodeName,$nodeAddress);
|
|
|
|
generateSys($nodeName);
|
2019-03-19 13:27:58 +00:00
|
|
|
generateCall($nodeName);
|
|
|
|
generatePasswd($nodeName);
|
2019-03-06 18:37:16 +00:00
|
|
|
getKeys($nodeAddress);
|
2019-03-19 13:27:58 +00:00
|
|
|
generateConfig($myNode);
|
2019-03-06 04:48:20 +00:00
|
|
|
print("System ".$nodeName." added successfully\n");
|
|
|
|
}
|
|
|
|
|
2019-03-06 19:13:50 +00:00
|
|
|
print("Done\n\n");
|
2019-03-06 04:48:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub generatePort {
|
|
|
|
|
2019-03-06 19:13:50 +00:00
|
|
|
my $nodeName = shift;
|
2019-03-06 04:48:20 +00:00
|
|
|
my $nodeAddress = shift;
|
|
|
|
|
2019-03-06 19:13:50 +00:00
|
|
|
my $currentNode = ucfirst($nodeName);
|
2019-03-06 04:48:20 +00:00
|
|
|
|
|
|
|
my $template = qq{
|
|
|
|
port $currentNode
|
|
|
|
type pipe
|
|
|
|
command /usr/bin/ssh -a -x -q -i /var/spool/uucp/.ssh/id_rsa -l uucp $nodeAddress
|
|
|
|
reliable true
|
|
|
|
protocol etyig
|
|
|
|
};
|
|
|
|
|
|
|
|
my $portFile = "port";
|
|
|
|
open(FH, '>>', $portFile);
|
|
|
|
print FH $template;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sub generateSys {
|
|
|
|
my $nodeName = shift;
|
|
|
|
|
2019-03-06 19:13:50 +00:00
|
|
|
my $currentNode = ucfirst($nodeName);
|
|
|
|
|
2019-03-06 04:48:20 +00:00
|
|
|
my $template = qq{
|
|
|
|
system $nodeName
|
|
|
|
call-login *
|
|
|
|
call-password *
|
|
|
|
local-send /
|
|
|
|
local-receive /var/spool/uucppublic
|
|
|
|
remote-send /
|
|
|
|
remote-receive /var/spool/uucppublic
|
|
|
|
time any
|
|
|
|
forward ANY
|
|
|
|
chat \"\" \\d\\d\\r\\c login: \\d\\L word: \\P
|
|
|
|
chat-timeout 60
|
|
|
|
protocol t
|
2019-03-06 19:13:50 +00:00
|
|
|
port $currentNode
|
2019-03-06 04:48:20 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
my $sysFile = "sys";
|
|
|
|
|
|
|
|
open(FH, '>>', $sysFile);
|
|
|
|
print FH $template;
|
|
|
|
}
|
2019-03-06 19:48:12 +00:00
|
|
|
|
2019-03-06 04:48:20 +00:00
|
|
|
sub generateConfig {
|
2019-03-06 18:37:16 +00:00
|
|
|
my $nodeName = shift;
|
|
|
|
|
|
|
|
my $confFile = "config";
|
|
|
|
open(FH, '>',$confFile);
|
|
|
|
|
2019-03-06 19:48:12 +00:00
|
|
|
my $nodeConfig = "nodename\t\t".$nodeName;
|
2019-03-06 18:37:16 +00:00
|
|
|
|
|
|
|
print FH $nodeConfig;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub getKeys {
|
|
|
|
my $address = shift;
|
|
|
|
|
|
|
|
my $cmd = "/usr/bin/ssh-keyscan ".$address;
|
|
|
|
system($cmd);
|
|
|
|
}
|
2019-03-06 04:48:20 +00:00
|
|
|
|
2019-03-19 13:27:58 +00:00
|
|
|
sub generateCall{
|
|
|
|
my $nodeName = shift;
|
|
|
|
|
|
|
|
my $callFile = "call";
|
|
|
|
|
|
|
|
my $password = $nodeName.$myNode;
|
|
|
|
my $callHash = md5_hex($password);
|
|
|
|
my $callPasswd = $nodeName."\t"."U".$myNode."\t".$callHash."\n";
|
|
|
|
|
|
|
|
open(FH, '>>', $callFile);
|
|
|
|
print FH $callPasswd;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub generatePasswd {
|
|
|
|
my $nodeName = shift;
|
|
|
|
|
|
|
|
my $passwdFile = "passwd";
|
|
|
|
|
|
|
|
my $password = $myNode.$nodeName;
|
|
|
|
my $passwdHash = md5_hex($password);
|
|
|
|
my $authPasswd = "U".$nodeName."\t".$passwdHash."\n";
|
|
|
|
|
|
|
|
open(FH, '>>', $passwdFile);
|
|
|
|
print FH $authPasswd;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-03-06 18:37:16 +00:00
|
|
|
sub preCheck()
|
|
|
|
{
|
|
|
|
print("Updating git repo\n");
|
|
|
|
chdir("../");
|
|
|
|
system("git pull");
|
|
|
|
print("Installing authorized_keys\n");
|
|
|
|
rename("authorized_keys",".ssh/authorized_keys");
|
2019-03-06 19:13:50 +00:00
|
|
|
chdir("./utils");
|
2019-03-06 18:37:16 +00:00
|
|
|
print("Pre-flight checks done\n");
|
|
|
|
getNodes();
|
2019-03-06 04:48:20 +00:00
|
|
|
}
|
|
|
|
|
2019-03-06 18:37:16 +00:00
|
|
|
preCheck();
|
2019-03-06 19:13:50 +00:00
|
|
|
print("\n\n");
|
|
|
|
print("This setup script has finished. Please move the generated configuration files as ROOT to /etc/uucp\n");
|