newnode_reboot.in 2.29 KB
Newer Older
1 2 3
#!/usr/bin/perl -wT

#
4
# Copyright (c) 2003, 2007 University of Utah and the Flux Group.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# 
# {{{EMULAB-LICENSE
# 
# This file is part of the Emulab network testbed software.
# 
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
# 
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public
# License for more details.
# 
# You should have received a copy of the GNU Affero General Public License
# along with this file.  If not, see <http://www.gnu.org/licenses/>.
# 
# }}}
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
#

#
# 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";

57 58 59 60
#
# 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.
#
61
my $rootkey = "/root/.ssh/id_rsa";
62

63 64 65 66
if (!TBAdmin($UID)) {
    die "Sorry, only admins can run this script\n";
}

67 68 69 70 71 72
#
# We seem to have to do this so that ssh gets proper root permissions to read
# the key file. Argh.
#
$UID = $EUID = 0;

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
#
# 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;
}

91
my $rv = system("$ssh -l root -i $privkey -i $rootkey $IP /sbin/reboot");
92 93 94 95 96 97

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