uucp/utils/bootstrap.pl

176 lines
3.3 KiB
Perl
Raw Permalink Normal View History

#!/usr/bin/perl
#
use warnings;
use strict;
2019-03-19 13:27:58 +00:00
use Digest::MD5 qw(md5_hex);
use Getopt::Std;
my $myNode = "";
my $passwdFile = "passwd";
my $callFile = "call";
my $confFile = "config";
my $sysFile = "sys";
my $portFile = "port";
my %options = ();
sub getNodes {
my $nodelist = "../nodelist";
2019-03-06 19:13:50 +00:00
open(my $data, '<', $nodelist) or die ("Cannot open nodelist");
if ($options{t}) {
print("Truncating existing files\n");
truncate($passwdFile,0);
truncate($callFile,0);
truncate($confFile,0);
truncate($sysFile,0);
truncate($portFile,0);
}
print("Generating files\n");
while (my $line = <$data>) {
chomp $line;
my @fields = split(",", $line);
my $nodeName = $fields[0];
2019-03-26 11:04:50 +00:00
#$nodeName eq $myNode && continue
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);
print("System ".$nodeName." added successfully\n");
}
2019-03-26 11:04:50 +00:00
generateConfig($myNode);
2019-03-06 19:13:50 +00:00
print("Done\n\n");
}
sub generatePort {
2019-03-06 19:13:50 +00:00
my $nodeName = shift;
my $nodeAddress = shift;
2019-03-06 19:13:50 +00:00
my $currentNode = ucfirst($nodeName);
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
};
2019-03-26 11:04:50 +00:00
open(FH, '>>', $portFile);
print FH $template;
}
sub generateSys {
my $nodeName = shift;
2019-03-06 19:13:50 +00:00
my $currentNode = ucfirst($nodeName);
my $template = qq{
system $nodeName
call-login *
call-password *
called-login U$nodeName
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-26 11:04:50 +00:00
open(FH, '>>', $sysFile);
print FH $template;
}
2019-03-06 19:48:12 +00:00
sub generateConfig {
2019-03-06 18:37:16 +00:00
my $nodeName = shift;
2019-03-26 11:04:50 +00:00
open(FH, '>>',$confFile);
2019-03-06 18:37:16 +00:00
2019-03-26 11:04:50 +00:00
my $nodeConfig = "nodename\t\t".$nodeName."\n";
2019-03-06 18:37:16 +00:00
print FH $nodeConfig;
}
sub getKeys {
my $address = shift;
2019-03-24 23:16:20 +00:00
my $cmd = "/usr/bin/ssh-keyscan -H $address >> /var/spool/uucp/.ssh/known_hosts";
2019-03-06 18:37:16 +00:00
system($cmd);
}
2019-03-19 13:27:58 +00:00
sub generateCall{
my $nodeName = shift;
my $password = $nodeName.$myNode;
my $callHash = md5_hex($password);
my $callPasswd = $nodeName."\t"."U".$myNode."\t".$callHash."\n";
2019-03-26 11:04:50 +00:00
open(FH, '>>', $callFile);
2019-03-19 13:27:58 +00:00
print FH $callPasswd;
}
sub generatePasswd {
my $nodeName = shift;
my $password = $myNode.$nodeName;
my $passwdHash = md5_hex($password);
my $authPasswd = "U".$nodeName."\t".$passwdHash."\n";
2019-03-26 11:04:50 +00:00
open(FH, '>>', $passwdFile);
2019-03-19 13:27:58 +00:00
print FH $authPasswd;
}
2019-03-06 18:37:16 +00:00
sub preCheck()
{
print("Updating git repo\n");
chdir("../");
#system("git pull");
2019-03-06 18:37:16 +00:00
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();
}
sub showHelp()
{
print("Usage: bootstrap.pl [OPTION...] node-id\n");
print("Generate uucp configuration files.\n\n");
print(" -t truncate files before appending config\n");
print(" -h display this help and exit\n");
}
getopts("ht", \%options);
if ($ARGV[0]) {
$myNode=$ARGV[0];
} else {
showHelp();
exit;
}
if ($options{h}) {
showHelp();
exit;
}
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");