source: fedkit/federate.sh @ f3691ff

axis_examplecompt_changesinfo-opsversion-1.30version-2.00version-3.01version-3.02
Last change on this file since f3691ff was f3691ff, checked in by Ted Faber <faber@…>, 16 years ago

checkpoint includes some ucb and some FC6 code

  • Property mode set to 100755
File size: 4.6 KB
RevLine 
[61f19e0]1#!/bin/sh
2
[4abace9]3# Set up a federated environment on a client.  Unmount all local file systems,
4# erase all local accounts and then bring in accounts and file systems from the
5# master testbed.  Once all that's done, restore client communication to the
6# local bossnode and execute any startup command passed in as arguments to this
7# script.
[d53dda5]8
[4abace9]9
10# The file containing the DNS name of the current boss
[61f19e0]11BOSSNODE="/usr/local/etc/emulab/bossnode"
12
[4abace9]13# Ports that the master gateway will forward
[63f7c7e]14PORTS="139 7777"
[4abace9]15# network cat command (to listen for the gateway)
[63f7c7e]16NC="/usr/bin/nc"
[4abace9]17# Emulab rc scripts directory
[63f7c7e]18RCDIR="/usr/local/etc/emulab/rc"
19
[4abace9]20# Emulab rc script to reset accounts and federation srcipt to start the smb
21# automount process.
[63f7c7e]22RCACCT="rc.accounts"
[f3691ff]23SMBMOUNT="smbmount.`uname`.pl"
24
25# Find the right version of pkill.  For killing.
26if [ -x "/usr/bin/pkill" ] ; then 
27        PKILL="/usr/bin/pkill"
28else
29        if [ -x "/bin/pkill" ] ; then 
30                PKILL="/bin/pkill"
31        else
32                PKILL="echo"
33        fi
34fi
35
36if [ -x "/usr/bin/perl" ]; then
37    PERL="/usr/bin/perl"
38else
39    if [ -x "/usr/local/bin/perl" ]; then
40        PERL="/usr/local/bin/perl"
41    else
42        # Wing it...
43        PERL="perl"
44    fi
45fi
[63f7c7e]46
[5166ad4]47# Find somewhere safe to stop
48cd /tmp
49
[61f19e0]50if [ -f $BOSSNODE ]
51then
52        rm -f $BOSSNODE
53fi
54
55EMUDIR="/usr/local/etc/emulab/"
56
[63f7c7e]57# Find this experiment's stashed scripts.  (Perl for advanced parsing)
[f3691ff]58SCRIPTDIR=`$EMUDIR/tmcc -b status | $PERL -ne '/ALLOCATED=([^\/]+)\/([^\s]+)/ && print "/proj/$1/exp/$2/tmp\n";'`
[61f19e0]59
[4abace9]60# Die if Scripts are not where they should be.  NB, this is checked by the
61# bootstrapper, too, so a failure here is unlikely.
[63f7c7e]62if [ -z "$SCRIPTDIR" ] ; then
63    echo "Can't find federation scripts.  Tmcc status says:"
64    $EMUDIR/tmcc -b status
65    exit 1;
66fi
67
68# Copy the global hostnames file into /etc/hosts so this node can address
[4abace9]69# others in the experiment on other testbeds.  The extra steps preserves teh
70# localhost entry that's aliased to this host's name.
[63f7c7e]71grep 127\\.0\\.0\\.1 /etc/hosts > /tmp/hosts
72cat "$SCRIPTDIR/hosts" >> /tmp/hosts
73cp /tmp/hosts /etc/hosts && rm /tmp/hosts
74
[3c7da22]75# Get our gateway, share, and mount user from the configuration file.
76# There's probably a way to get all three at once, but this works.
[f3691ff]77GATEWAY=`$PERL -ne '/ControlGateway:\s+(.*)/i && print "$1\n";' $SCRIPTDIR/client.conf`
78SHARE=`$PERL -ne '/SMBShare:\s+(.*)/i && print "$1\n";' $SCRIPTDIR/client.conf`
79SMBUSER=`$PERL -ne '/ProjectUser:\s+(.*)/i && print "$1\n";' $SCRIPTDIR/client.conf`
80SMBPROJECT=`$PERL -ne '/ProjectName:\s+(.*)/i && print "$1\n";' $SCRIPTDIR/client.conf`
81
82# XXX:
83# The standard emulab rc.accounts script won't replace existing user accounts
84# with our new ones, so we have to patch it to do so.  This is obviously pretty
85# fragile and needs to change.  To make matters worse, our FBSD62-SMB images
86# contain the patched rc.accounts, so this patching step will fail there.
87cd "$EMUDIR/rc"
88patch -f < /tmp/rc.accounts.patch
89cd /tmp
[61f19e0]90
91#
92# Spin on our gateway!
93#
94
95echo "Waiting for the tunnel to come online."
96
97for port in $PORTS
98do
99        until $NC -z $GATEWAY $port
100        do
101                sleep 5
102        done
103done
104
105#
106# Setup TMCC to use our gateway
107#
108
109echo "Configuring TMCC."
110echo $GATEWAY > $BOSSNODE
111
[63f7c7e]112
[61f19e0]113#
[f3691ff]114# Unmount stuff before messing with accounts
115# Linux doesn't believe in -A so run umount without it if the first fails
[61f19e0]116#
117
[f3691ff]118umount -A -f -t nfs,smbfs,cifs  || umount -a -f -t nfs,smbfs,cifs
[61f19e0]119
120#
121# Setup new accounts
122#
[f3691ff]123
124# Clear the cache, just in case:
125rm -f /var/emulab/boot/tmcc/accounts
126
[61f19e0]127$RCDIR/rc.accounts reconfig
128
129#
[f3691ff]130# Call the smbmount perl script, this invokes the automounter to mount the
[4abace9]131# needed smb filesystems.
[61f19e0]132#
133echo "Mounting via SMB."
[f3691ff]134$PERL "/tmp/$SMBMOUNT" $SHARE $GATEWAY $SMBUSER $SMBPROJECT
[d53dda5]135
[4abace9]136echo "Restoring old bossnode"
137# remove bossnode override
138/bin/rm -f $BOSSNODE
139# Also clear any cached data that might interfere with rourte construction.
140/bin/rm -f /var/emulab/boot/tmcc/ifconfig
141
142# I remain unclear why ospfd seems screwed up after the resetting of accounts
143# and mounts.  This seems to fix it, but it's not very satisfying.  At this
144# point the federated topology is complete, so any problems with routing in a
145# partial topology -e.g. failed or partial bridging - that might have confused
146# the router should be gone.
[f3691ff]147$PKILL ospf
148$PKILL gated
149# XXX Danger, hack ahead.  Apparently our FC6-SMB image and emulab disagree
150# about where gated lives.  This will alias it.
151if [ ! -x /usr/sbin/gated ] ; then 
152        if [ -x /sbin/gated ] ; then
153                ln /sbin/gated /usr/sbin/gated
154        fi
155fi
[4abace9]156/usr/local/etc/emulab/rc/rc.route boot
157
158# Execute any command passed in as a startcmd.  This basically daisy chains the
159# startcmd.
[d53dda5]160if [ ! -z "$1" ]; then 
161        su -l "$1" -c "$2"
162fi
Note: See TracBrowser for help on using the repository browser.