newnode_reboot.in 1.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#!/usr/bin/perl -wT

#
# EMULAB-COPYRIGHT
# Copyright (c) 2003 University of Utah and the Flux Group.
# All rights reserved.
#

#
# Script to reboot nodes that are not yet in the database - overlaps a bit with
# node_reboot, but can't make any assumptions about the node (given as an IP
# address) being in the database, no event system, etc.
#

use English;

use lib '@prefix@/lib';
use libdb;

my $TB = "@prefix@";

#
# Ack! Using sshtb gives all kinds of problems, so we have to duplicate a lot
# of stuff it does.
#
my $SSH_ARGS = '@SSH_ARGS@';
my $ssh = "/usr/bin/ssh -n $SSH_ARGS";

#
# Scrub PATH
#
$ENV{PATH} = "/bin";

#
# We use a different private key so that we can have a single MFS for this that
# works at every site
#
my $privkey = "$TB/etc/identity.newnode";

40 41 42 43 44 45
#
# We also try root's own private key in case the node has somehow ended up in a
# state where it's booted from the special boot CD or a 'regular' image.
#
my $rootkey = "/root/.ssh/identity";

46 47 48 49
if (!TBAdmin($UID)) {
    die "Sorry, only admins can run this script\n";
}

50 51 52 53 54 55
#
# We seem to have to do this so that ssh gets proper root permissions to read
# the key file. Argh.
#
$UID = $EUID = 0;

56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
#
# XXX - Check to see if the node we're sshing into is the one we think it is?
#

if (@ARGV != 1) {
    die "usage: $0 <IP>\n";
}

#
# Check IP
#
my $IP;
if ($ARGV[0] !~ /^(\d+\.\d+\.\d+\.\d+)$/) {
    die "Invalid IP address\n";
} else {
    $IP = $1;
}

74
my $rv = system("$ssh -l root -i $privkey -i $rootkey $IP /sbin/reboot");
75 76 77 78 79 80

#
# XXX - We can't check the return value of ssh for failure, since reboot on
# FreeBSD seems to always return non-zero.
#
exit $rv;