diff --git a/tmcd/common/config/rc.mkelab b/tmcd/common/config/rc.mkelab index d12a59880cbb82439978bd80db778109c10a2af5..2f60ae6efc9b3a595bcef450fd0ea5798586f7d1 100755 --- a/tmcd/common/config/rc.mkelab +++ b/tmcd/common/config/rc.mkelab @@ -88,7 +88,7 @@ chomp($creator); my $hostname = `hostname`; chomp($hostname); -my ($bossname, $bossip) = tmccbossinfo(); +my ($bossname, $outer_bossip) = tmccbossinfo(); # Cert stuff to give the inner emulab my $RPCCERT = "/usr/testbed/etc/outer_emulab.pem"; @@ -133,7 +133,7 @@ exit(0); # More protos sub SetupFatal($); -sub mysystem($); +sub mysystem($;$); sub SetupOpsNode(); sub SetupBossNode(); sub CreateDefsFile($); @@ -194,7 +194,14 @@ sub doboot() # XXX To avoid NFS errors while copying goo from outer boss. # system("sysctl vfs.nfs.eacces_retry_enable=1 >/dev/null 2>&1"); - system("sysctl vfs.nfs.eacces_retry_count=20 >/dev/null 2>&1"); + system("sysctl vfs.nfs.eacces_retry_count=20 >/dev/null 2>&1"); + + # + # Temp hack; make sure control iface in full duplex mode! pc2000 problem. + # +# my $outer_controlif = `cat $BOOTDIR/controlif`; +# chomp($outer_controlif); +# mysystem("ifconfig $outer_controlif media 100baseTX mediaopt full-duplex"); if ($emulabconfig{"ROLE"} eq "ops") { SetupOpsNode(); @@ -226,7 +233,7 @@ sub SetupOpsNode() print "Copying over current testbed software from /proj\n"; mysystem("mkdir ${TBDIR}/testbed/src/testbed"); - mysystem("rsync -a --delete /proj/$pid/src/testbed ${TBDIR}/testbed/src"); + mysystem("rsync -a --delete /proj/$pid/src/testbed ${TBDIR}/testbed/src", 3); # # The mirror tree is copied to temp storage, and then copied into @@ -234,7 +241,7 @@ sub SetupOpsNode() # if (-e "/proj/$pid/mirror") { print "Copying over mirror tree from /proj/$pid/mirror\n"; - mysystem("rsync -a --delete /proj/$pid/mirror ${TBDIR}"); + mysystem("rsync -a --delete /proj/$pid/mirror ${TBDIR}", 3); } # @@ -242,7 +249,7 @@ sub SetupOpsNode() # We use an IP to avoid DNS issues (there will be a DNS running inside). # Ditto for the current router. Need that for later (rc.inelab). # - mysystem("echo '${bossip}' > $ETCDIR/outer_bossnode"); + mysystem("echo '${outer_bossip}' > $ETCDIR/outer_bossnode"); mysystem("cp -p $BOOTDIR/routerip $ETCDIR/outer_router"); # @@ -370,12 +377,12 @@ sub SetupOpsNode() print RC "network_interfaces=\"$outer_controlif $inner_controlif lo0\"\n"; print RC "ifconfig_${outer_controlif}=". - "\"inet $outer_ip netmask $outer_netmask\"\n"; + "\"inet $outer_ip netmask $outer_netmask\n"; print RC "ifconfig_${inner_controlif}=". "\"inet $inner_ip netmask $inner_netmask ". "media 100baseTX mediaopt full-duplex\"\n"; print RC "static_routes=\"outerboss\"\n"; - print RC "route_outerboss=\"$bossip $outer_routerip\"\n"; + print RC "route_outerboss=\"$outer_bossip $outer_routerip\"\n"; print RC "defaultrouter=\"$bossnode_ip\"\n"; print RC "hostname=\"" . $emulabconfig{"OPSNODE"} . "." . $domain . "\"\n"; @@ -473,14 +480,15 @@ sub SetupBossNode() print "Copying over current testbed software from /proj\n"; mysystem("mkdir ${TBDIR}/testbed/src/testbed"); - mysystem("rsync -a --delete /proj/$pid/src/testbed ${TBDIR}/testbed/src"); + mysystem("rsync -a --delete /proj/$pid/src/testbed ${TBDIR}/testbed/src", 3); print "Copying over initial dbstate from /proj\n"; mysystem("mkdir ${TBDIR}/testbed/stuff"); - mysystem("cp -p /proj/$pid/exp/$eid/dbstate.tar.gz ${TBDIR}/testbed/stuff"); + mysystem("cp -fp /proj/$pid/exp/$eid/dbstate.tar.gz ${TBDIR}/testbed/stuff", + 3); # Copy over creators ssl certificate for XMLRPC. See below. - mysystem("cp -p ~${creator}/.ssl/emulab.pem ${TBDIR}/testbed/stuff"); + mysystem("cp -fp ~${creator}/.ssl/emulab.pem ${TBDIR}/testbed/stuff", 3); # Still waiting for Rob to fix packages. This is some extra goo. # mysystem("cp -p /proj/$pid/exp/$eid/extras.tar.gz ${TBDIR}/testbed/stuff"); @@ -489,7 +497,7 @@ sub SetupBossNode() # Stash the IP of the outer emulab for tmcc (and script above). # We use an IP to avoid DNS issues (there will be a DNS running inside). # - mysystem("echo '${bossip}' > $ETCDIR/outer_bossnode"); + mysystem("echo '${outer_bossip}' > $ETCDIR/outer_bossnode"); mysystem("cp -p $BOOTDIR/routerip $ETCDIR/outer_router"); mysystem("cp -p $BOOTDIR/myip $ETCDIR/outer_ipaddr"); @@ -593,7 +601,7 @@ sub SetupBossNode() print RC "ntpdate_enable=\"YES\"\n"; # Points to outer boss - print RC "ntpdate_flags=\"${bossip}\"\n"; + print RC "ntpdate_flags=\"${outer_bossip}\"\n"; print RC "linux_enable=\"YES\"\n"; print RC "accounting_enable=\"YES\"\n"; @@ -603,12 +611,12 @@ sub SetupBossNode() print RC "network_interfaces=\"$outer_controlif $inner_controlif lo0\"\n"; print RC "ifconfig_${outer_controlif}=". - "\"inet $outer_ip netmask $outer_netmask\"\n"; + "\"inet $outer_ip netmask $outer_netmask\n"; print RC "ifconfig_${inner_controlif}=". "\"inet $inner_ip netmask $inner_netmask ". "media 100baseTX mediaopt full-duplex\"\n"; print RC "static_routes=\"outerboss\"\n"; - print RC "route_outerboss=\"$bossip $outer_routerip\"\n"; + print RC "route_outerboss=\"$outer_bossip $outer_routerip\"\n"; # # Use natd so that internal control network can talk to outside world. @@ -669,7 +677,7 @@ sub SetupBossNode() # Its the generic stuff; must localize. mysystem("cd /tftpboot; mv pxeboot.emu-sio pxeboot.emu; ". - " mv freebsd410 freebsd ; mv frisbee410 frisbee"); + " mv freebsd47 freebsd ; mv frisbee47 frisbee"); # # Copy the creators ssl certificate into place. This allows the @@ -869,6 +877,10 @@ sub CreateDefsFile($) print OUTDEFS "PUBLIC_NETMASK=255.255.255.0\n"; last SWITCH; }; + /^NAMED_FORWARDERS$/ && do { + print OUTDEFS "NAMED_FORWARDERS=\"${outer_bossip}\"\n"; + last SWITCH; + }; /^DHCPD_DYNRANGE$/ && do { print OUTDEFS "DHCPD_DYNRANGE=". "\"$dynrange_low $dynrange_high\"\n"; @@ -946,14 +958,23 @@ sub SetupSendMail($$) # # Run a command string. # -sub mysystem($) +sub mysystem($;$) { - my ($command) = @_; + my ($command, $retrycount) = @_; - print "Command: '$command\'\n"; - print "Started at: " . libsetup::TBTimeStamp() . "\n"; + $retrycount = 1 + if (!defined($retrycount)); - system($command); + while ($retrycount--) { + print "Command: '$command\'\n"; + print "Started at: " . libsetup::TBTimeStamp() . "\n"; + + system($command); + last + if ($? == 0 || $retrycount == 0); + + sleep(1); + } if ($?) { SetupFatal("Command failed: $? - $command"); }