source: fedkit/prep_gateway.pl @ 5e71d34

Last change on this file since 5e71d34 was 5e71d34, checked in by Ted Faber <faber@…>, 12 years ago

Fix fedkit to work on Ubuntu 12.04

  • Property mode set to 100644
File size: 3.6 KB
Line 
1#!/usr/bin/perl
2
3use strict;
4
5use gateway_lib;
6
7use Getopt::Long;
8use File::Copy;
9use IO::File;
10
11my $ssh_pubkey;
12my $tunnelip;
13my $peer;
14my $use_file;
15my $fed_dir = "/usr/local/federation/";
16my %opts = (
17    'ssh_pubkey=s' => \$ssh_pubkey,
18    'tunnelip' => \$tunnelip,
19    'peer=s' => \$peer,
20    'use_file' => \$use_file,
21);
22
23exit(20) unless GetOptions(%opts);
24
25if ($use_file) {
26    gateway_lib::read_config(gateway_lib::config_filename(), \%opts)
27}
28
29my $uname = `uname`;
30chomp $uname;
31
32# on portals make sure client.conf is in the override position (in fed_dir).
33my $client_conf = gateway_lib::client_conf_filename();
34
35copy($client_conf, "$fed_dir/etc/client.conf") 
36    unless $client_conf =~ /^$fed_dir/;
37
38if ($uname =~ /Linux/) {
39    # Restart sshd with tunnel params
40    gateway_lib::set_sshd_params( 
41        { 'GatewayPorts' => 'yes', 'PermitTunnel' => 'yes' } );
42    if ( -x "/etc/init.d/sshd") {
43        system("/etc/init.d/sshd restart");
44    }
45    elsif (-x "/etc/init.d/ssh") {
46        # XXX should look for service
47        system("/etc/init.d/ssh restart");
48    }
49    else {
50        print "Cannot figure out how to restart sshd\n";
51    }
52    gateway_lib::import_key($ssh_pubkey,'/root/.ssh/authorized_keys')
53        if $ssh_pubkey;
54    # Install bridging software if not present
55    if ( -x '/usr/bin/yum' ) {
56        system('/usr/bin/yum -y install bridge-utils');
57    }
58    elsif (-x '/usr/bin/apt-get') {
59        system('/usr/bin/apt-get -y update');
60        system('/usr/bin/apt-get -y install bridge-utils');
61    }
62    else {
63        print "Cannot install bridge utils, hope they're here.\n"
64    }
65}
66elsif ($uname =~ /FreeBSD/ ){
67    gateway_lib::set_sshd_params( 
68        { 'GatewayPorts' => 'yes', 'PermitTunnel' => 'yes' } );
69    system("/etc/rc.d/sshd restart");
70
71    gateway_lib::import_key($ssh_pubkey,'/root/.ssh/authorized_keys')
72        if $ssh_pubkey;
73
74    # Need these to make the Ethernet tap and bridge work.
75    system("kldload /boot/kernel/bridgestp.ko") 
76        if -r "/boot/kernel/bridgestp.ko"; 
77    system("kldload /boot/kernel/if_bridge.ko");
78    system("kldload /boot/kernel/if_tap.ko");
79}
80
81if ( $tunnelip ) {
82    my ($interface, $ip, $netmask, $mac, $router) = 
83        gateway_lib::deter_tunnelip();
84
85    gateway_lib::configure_outgoing_iface($interface, $ip, $netmask);
86    # Add the route to a peer.  Wait up to an hour for the peer's IP address to
87    # appear in the DNS.
88    foreach my $p (split(/\s*,\s*/, $peer)) {
89        gateway_lib::add_route($p, $router, 1, 60 *60) 
90            if $p && $router;
91    }
92}
93my $coord_fn = "$fed_dir/etc/prep_done";
94my $coord_file = new IO::File(">$coord_fn") || die "Cannot open $coord_fn";
95
96print $coord_file `date`;
97$coord_file->close();
98
99exit(0);
100
101=pod
102
103=head1 NAME
104
105B<prep_tunnel.pl> - Prepare a tunnel node for use as either a service or connectivity gateway.
106
107=head1 OPTIONS
108
109=over 8
110
111=item B<peer=>I<hostname>
112
113The other gateway providing forwarding.
114
115=item B<ssh_pubkey=>I<keyfile>
116
117A public to install as authorized.
118
119=item B<tunnelip>
120
121True if the testbed uses the DETER tunnelip extension to provide external
122connectivity information
123
124=item B<use_file>
125
126If given read additional parameters from the file in
127/proj/I<project>/exp/I<experiment>/tmp/I<hostname>.gw/conf where those are the
128current testbed project and experiment and the hostname is before the first
129dot.  The file is option: value.
130
131
132=back
133
134=head1 SYNOPSIS
135
136B<prep_gateway.pl> laods the necessary kernel modules for low-level bridging
137configures the local sshd to allow it, restarts that sshd, and installs the
138given key in root's authorized keys.
139
140If the gateway supports DETER gateway, it setablishes outside connectivity and
141adds a host rout to the given peer.
142
143=head1 AUTHORS
144
145Ted Faber <faber@isi.edu>
146
147=cut
Note: See TracBrowser for help on using the repository browser.