Commit 480fdc70 authored by Mike Hibler's avatar Mike Hibler

Updates for new FreeBSD 10.1 based servers.

Big changes a comin' to try to get us back on the supported path.

 * perl 5.14 -> 5.20
 * mysql 5.1 -> 5.5
 * php 5.4   -> 5.6
 * tcl 8.4   -> 8.6
 * number of vim patches up to 683.

Not everything tested yet, but getting there.

Specific changes:

 * New install/ports directory. New packages for FreeBSD 10.1 are version
   6.1. Cleaned up the ports' Makefiles getting rid of conditionals for
   all older versions. Also got rid of ports we don't use. Old ports tree
   is now install/oports.

 * Install script changes. Make sure /usr/bin/perl and /usr/local/bin/python
   links exist. Ports no longer make these but we use them in '#!'. Changes
   to mysql install and startup script--mysql has changed a LOT since we did
   the support in 4.x. Create syslog entry for named.log. Make sure php.conf
   loads the legacy "mysql" module rather than using "mysqli".

 * Elabinelab support. reflect new packages, remove all old packages
   (except perl) before installing new...
parent b9d8f28b
#
# Copyright (c) 2000-2012 University of Utah and the Flux Group.
# Copyright (c) 2000-2015 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
......@@ -39,6 +39,9 @@ endif
SYSTEM := $(shell uname -s)
ARCH := $(shell uname -m)
# For the swig-*wrappers targets
SWIG = swig2.0
# We should be able to use va_copy everywhere, but be conservative
SWIGCFLAGS =
ifeq ($(ARCH),amd64)
......@@ -127,7 +130,7 @@ util.So: util.c
# instructions
#
swig-wrappers: event.i event.c event.pm.tail
swig -exportall -perl5 -shadow -I$(SRCDIR) $(SRCDIR)/event.i
$(SWIG) -exportall -perl5 -shadow -I$(SRCDIR) $(SRCDIR)/event.i
cat $(SRCDIR)/event.pm.tail >> $(SRCDIR)/event.pm
event_wrap.o: $(SRCDIR)/event_wrap.c
......@@ -140,7 +143,7 @@ event_wrap.So: $(SRCDIR)/event_wrap.c
# same problems as the perl one.
#
swig-pywrappers: event.i event.h event.c tbevent.py.tail
swig -python -I$(SRCDIR) -o $(SRCDIR)/event_wrap_py.c -module tbevent \
$(SWIG) -python -I$(SRCDIR) -o $(SRCDIR)/event_wrap_py.c -module tbevent \
$(SRCDIR)/event.i
cat $(SRCDIR)/tbevent.py.tail >> $(SRCDIR)/tbevent.py
touch $@
......
# This file was automatically generated by SWIG (http://www.swig.org).
# Version 1.3.39
# Version 2.0.12
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
......@@ -645,6 +645,17 @@ sub EventFork() {
$event::EventSendHandle = undef;
}
#
# When we exit, unregister with the event system if we're connected
#
END {
if ($event::EventSendHandle) {
if (event_unregister($event::EventSendHandle) == 0) {
warn "Could not unregister with event system";
}
}
}
push @EXPORT, qw(event_subscribe event_poll event_poll_blocking EventSend
EventSendFatal EventSendWarn EventFork EventRegister);
1;
......
This diff is collapsed.
This diff is collapsed.
# This file was automatically generated by SWIG (http://www.swig.org).
# Version 1.3.39
# Version 2.0.12
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
# This file is compatible with both classic and new-style classes.
from sys import version_info
if version_info >= (2,6,0):
......@@ -21,7 +24,7 @@ if version_info >= (2,6,0):
_mod = imp.load_module('_tbevent', fp, pathname, description)
finally:
fp.close()
return _mod
return _mod
_tbevent = swig_import_helper()
del swig_import_helper
else:
......@@ -39,7 +42,7 @@ def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
return
method = class_type.__swig_setmethods__.get(name,None)
if method: return method(self,value)
if (not static) or hasattr(self,name):
if (not static):
self.__dict__[name] = value
else:
raise AttributeError("You cannot add attributes to %s" % self)
......@@ -503,6 +506,7 @@ event_notification_get_sender = _tbevent.event_notification_get_sender
def event_notification_set_sender(*args):
return _tbevent.event_notification_set_sender(*args)
event_notification_set_sender = _tbevent.event_notification_set_sender
# This file is compatible with both classic and new-style classes.
cvar = _tbevent.cvar
......
#!/usr/bin/perl -w
#
# Copyright (c) 2004-2014 University of Utah and the Flux Group.
# Copyright (c) 2004-2015 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
......@@ -642,7 +642,7 @@ sub doboot()
$emulabconfig{BOSS_PKG} = "emulab-boss-5.1";
$emulabconfig{PACKAGE_TARBALL} = "FreeBSD-9.2-packages${suf}.tar.gz";
$emulabconfig{PGENI_PKG} = "emulab-protogeni-3.1";
} elsif ($FBSD_VERSION >= 10.0) {
} elsif ($FBSD_VERSION == 10.0) {
my $suf = ($FBSD_ARCH eq "amd64") ? "-64" : "";
$emulabconfig{FS_PKG_DIR} = "/share/freebsd/10.0/packages${suf}";
$emulabconfig{OPS_PKG_DIR} = $emulabconfig{FS_PKG_DIR};
......@@ -652,6 +652,18 @@ sub doboot()
$emulabconfig{BOSS_PKG} = "emulab-boss-6.0";
$emulabconfig{PACKAGE_TARBALL} = "FreeBSD-10.0-packages${suf}.tar.gz";
$emulabconfig{PGENI_PKG} = "emulab-protogeni-4.0";
} elsif ($FBSD_VERSION >= 10.1) {
my $suf = ($FBSD_ARCH eq "amd64") ? "-64" : "";
$emulabconfig{FS_PKG_DIR} = "/share/freebsd/10.1/packages${suf}";
$emulabconfig{OPS_PKG_DIR} = $emulabconfig{FS_PKG_DIR};
$emulabconfig{BOSS_PKG_DIR} = $emulabconfig{FS_PKG_DIR};
$emulabconfig{EXTRA_PKG_DIR}= $emulabconfig{FS_PKG_DIR};
$emulabconfig{FS_PKG} = "emulab-fs-6.1";
$emulabconfig{OPS_PKG} = "emulab-ops-6.1";
$emulabconfig{BOSS_PKG} = "emulab-boss-6.1";
$emulabconfig{EXTRA_PKG} = "emulab-extras-6.1";
$emulabconfig{PACKAGE_TARBALL} = "FreeBSD-10.1-packages${suf}.tar.gz";
$emulabconfig{PGENI_PKG} = "emulab-protogeni-6.1";
}
#
# If there is a package tarball, prefer that and grab it now.
......@@ -661,6 +673,7 @@ sub doboot()
$emulabconfig{FS_PKG_DIR} = "$TBDIR/packages";
$emulabconfig{OPS_PKG_DIR} = $emulabconfig{FS_PKG_DIR};
$emulabconfig{BOSS_PKG_DIR} = $emulabconfig{FS_PKG_DIR};
$emulabconfig{EXTRA_PKG_DIR} = $emulabconfig{FS_PKG_DIR};
mysystem("fetch $FETCHOPTIONS -q -o /usr/packages.tar.gz ".
"'http://${bossname}/downloads/" .
......@@ -672,7 +685,8 @@ sub doboot()
else {
if (! -e $emulabconfig{"BOSS_PKG_DIR"} ||
! -e $emulabconfig{"OPS_PKG_DIR"} ||
! -e $emulabconfig{"FS_PKG_DIR"}) {
! -e $emulabconfig{"FS_PKG_DIR"} ||
! -e $emulabconfig{"EXTRA_PKG_DIR"}) {
SetupFatal("Could not locate boss/ops/fs packages");
}
}
......@@ -1002,9 +1016,30 @@ sub SetupFsNode()
SetupFatal("Could not get package info from Emulab!");
}
if ($FBSD_VERSION >= 10.1) {
print "Removing ALL packages.\n";
DelAllPackages();
}
print "Installing the fs metaport.\n";
RecreateDir("/usr/ports", 1);
AddPackage($emulabconfig{FS_PKG}, $emulabconfig{FS_PKG_DIR}, 0);
# Add extras (i.e., emacs) to make life worth living
if ($FBSD_VERSION >= 10.1) {
AddPackage($emulabconfig{EXTRA_PKG}, $emulabconfig{EXTRA_PKG_DIR}, 1);
}
# XXX FreeBSD got rid of the /usr/bin/perl symlink; we need it.
if ($FBSD_VERSION >= 10.1) {
if (! -x "/usr/bin/perl") {
system("ln -sf /usr/local/bin/perl5 /usr/bin/perl");
}
# hmm...python too?
if (! -x "/usr/local/bin/python") {
system("ln -sf /usr/local/bin/python2 /usr/local/bin/python");
}
}
}
#
......@@ -1512,28 +1547,33 @@ sub SetupOpsNode($)
}
my $pdir = $emulabconfig{OPS_PKG_DIR};
print "Removing conflicting packages.\n";
$ENV{"PYEASYINSTALL_UNINSTALLARGS"} = "-H None";
DelPackage(1, "mysql-client")
if (-e "/usr/local/bin/mysql");
DelPackage(0, "emacs")
if (-e "$pdir/emacs-23");
# XXX 8.2+ images have rpm-3 installed
if ($FBSD_VERSION >= 8.2) {
DelPackage(0, "rpm-3");
}
if ($FBSD_VERSION >= 10.1) {
print "Removing ALL packages.\n";
DelAllPackages();
} else {
print "Removing conflicting packages.\n";
$ENV{"PYEASYINSTALL_UNINSTALLARGS"} = "-H None";
DelPackage(1, "mysql-client")
if (-e "/usr/local/bin/mysql");
DelPackage(0, "emacs")
if (-e "$pdir/emacs-23");
# XXX 8.2+ images have rpm-3 installed
if ($FBSD_VERSION >= 8.2) {
DelPackage(0, "rpm-3");
}
# XXX 10.x images have py-distribute installed
if ($FBSD_VERSION == 10.0) {
DelPackage(0, "py27-distribute");
}
# XXX 10.x images have py-distribute installed
if ($FBSD_VERSION == 10.0) {
DelPackage(0, "py27-distribute");
}
# XXX 7.3 image is out of sync right now
if ($FBSD_VERSION == 7.3) {
DelPackage(0, "python25", "py25",
"sudo", "png", "tiff",
"git", "rpm", "p5-libwww");
# XXX 7.3 image is out of sync right now
if ($FBSD_VERSION == 7.3) {
DelPackage(0, "python25", "py25",
"sudo", "png", "tiff",
"git", "rpm", "p5-libwww");
}
}
print "Installing the ops metaport.\n";
......@@ -1549,9 +1589,24 @@ sub SetupOpsNode($)
print "Installing the fs metaport.\n";
AddPackage($emulabconfig{FS_PKG}, $emulabconfig{FS_PKG_DIR}, 0);
}
if (-e "$pdir/emacs-23") {
# Add extras (i.e., emacs) to make life worth living
if ($FBSD_VERSION >= 10.1) {
AddPackage($emulabconfig{EXTRA_PKG}, $emulabconfig{EXTRA_PKG_DIR}, 1);
} elsif (-e "$pdir/emacs-23") {
AddPackage("$pdir/emacs-23", "emacs-23.2_4,2", 0);
}
# XXX FreeBSD got rid of the /usr/bin/perl symlink; we need it.
if ($FBSD_VERSION >= 10.1) {
if (! -x "/usr/bin/perl") {
system("ln -sf /usr/local/bin/perl5 /usr/bin/perl");
}
# hmm...python too?
if (! -x "/usr/local/bin/python") {
system("ln -sf /usr/local/bin/python2 /usr/local/bin/python");
}
}
}
#
......@@ -1828,6 +1883,15 @@ sub SetupOpsNode($)
# fail if this mountd restart fails!
#
system("mountd -r");
#
# XXX force regeneration of a key and cert for sendmail
#
if ($FBSD_VERSION >= 10) {
mysystem("rm -f /etc/mail/certs/[ch]*");
# XXX this can takes 5-10 minutes, use the one from the image
#system("openssl dhparam -out /etc/mail/certs/dh.param 2048");
#chmod(0600, "/etc/mail/certs/dh.param");
}
mysystem("/etc/rc.d/sendmail start");
} else {
# XXX FBSD4 is such a pain...
......@@ -2199,32 +2263,41 @@ sub SetupBossNode($)
}
my $pdir = $emulabconfig{BOSS_PKG_DIR};
print "Removing conflicting packages.\n";
$ENV{"PYEASYINSTALL_UNINSTALLARGS"} = "-H None";
DelPackage(1, "mysql-client")
if (-e "/usr/local/bin/mysql");
DelPackage(0, "emacs")
if (-e "$pdir/emacs-23");
DelPackage(0, "net-snmp")
if (-e "/usr/local/include/net-snmp");
# XXX 8.2+ images have dhcp3 client installed, but we need dhcp4
# XXX 8.2+ images have rpm-3 installed
if ($FBSD_VERSION >= 8.2) {
DelPackage(0, "isc-dhcp3");
DelPackage(0, "rpm-3");
}
#
# Let's see if we can do this the easy way...
# Remove all packages execpt pkg and perl and see what happens!
#
if ($FBSD_VERSION >= 10.1) {
print "Removing ALL packages.\n";
DelAllPackages();
} else {
print "Removing conflicting packages.\n";
$ENV{"PYEASYINSTALL_UNINSTALLARGS"} = "-H None";
DelPackage(1, "mysql-client")
if (-e "/usr/local/bin/mysql");
DelPackage(0, "emacs")
if (-e "$pdir/emacs-23");
DelPackage(0, "net-snmp")
if (-e "/usr/local/include/net-snmp");
# XXX 8.2+ images have dhcp3 client installed, but we need dhcp4
# XXX 8.2+ images have rpm-3 installed
if ($FBSD_VERSION >= 8.2) {
DelPackage(0, "isc-dhcp3");
DelPackage(0, "rpm-3");
}
# XXX 10.x images have py-distribute installed
if ($FBSD_VERSION == 10.0) {
DelPackage(0, "py27-distribute");
}
# XXX 10.x images have py-distribute installed
if ($FBSD_VERSION == 10.0) {
DelPackage(0, "py27-distribute");
}
# XXX 7.3 image is out of sync right now
if ($FBSD_VERSION == 7.3) {
DelPackage(0, "python25", "py25",
"sudo", "png", "tiff",
"git", "rpm", "p5-libwww");
# XXX 7.3 image is out of sync right now
if ($FBSD_VERSION == 7.3) {
DelPackage(0, "python25", "py25",
"sudo", "png", "tiff",
"git", "rpm", "p5-libwww");
}
}
print "Installing the boss metaport.\n";
......@@ -2246,9 +2319,24 @@ sub SetupBossNode($)
# XXX lives in the boss package dir
AddPackage($emulabconfig{PGENI_PKG}, $emulabconfig{BOSS_PKG_DIR}, 1);
}
if (-e "$pdir/emacs-23") {
# Add extras (i.e., emacs) to make life worth living
if ($FBSD_VERSION >= 10.1) {
AddPackage($emulabconfig{EXTRA_PKG}, $emulabconfig{EXTRA_PKG_DIR}, 1);
} elsif (-e "$pdir/emacs-23") {
AddPackage("$pdir/emacs-23", "emacs-23.2_4,2", 0);
}
# XXX FreeBSD got rid of the /usr/bin/perl symlink; we need it.
if ($FBSD_VERSION >= 10.1) {
if (! -x "/usr/bin/perl") {
system("ln -sf /usr/local/bin/perl5 /usr/bin/perl");
}
# hmm...python too?
if (! -x "/usr/local/bin/python") {
system("ln -sf /usr/local/bin/python2 /usr/local/bin/python");
}
}
}
#
......@@ -2867,32 +2955,54 @@ sub SetupOpsJail()
if (!$emulabconfig{OPS_PKG_DIR} || !$emulabconfig{OPS_PKG}) {
SetupFatal("Could not get package info from Emulab!");
}
print "Removing conflicting packages.\n";
$ENV{"PYEASYINSTALL_UNINSTALLARGS"} = "-H None";
DelPackage(1, "mysql-client")
if (-e "/usr/local/bin/mysql");
# XXX 8.2+ images have rpm-3 installed
if ($FBSD_VERSION >= 8.2) {
DelPackage(0, "rpm-3");
}
# XXX 10.x images have py-distribute installed
if ($FBSD_VERSION == 10.0) {
DelPackage(0, "py27-distribute");
}
if ($FBSD_VERSION >= 10.1) {
print "Removing ALL packages.\n";
DelAllPackages();
} else {
print "Removing conflicting packages.\n";
$ENV{"PYEASYINSTALL_UNINSTALLARGS"} = "-H None";
DelPackage(1, "mysql-client")
if (-e "/usr/local/bin/mysql");
# XXX 8.2+ images have rpm-3 installed
if ($FBSD_VERSION >= 8.2) {
DelPackage(0, "rpm-3");
}
# XXX 10.x images have py-distribute installed
if ($FBSD_VERSION == 10.0) {
DelPackage(0, "py27-distribute");
}
# XXX 7.3 image is out of sync right now
if ($FBSD_VERSION == 7.3) {
DelPackage(0, "python25", "py25",
"sudo", "png", "tiff",
"git", "rpm", "p5-libwww");
# XXX 7.3 image is out of sync right now
if ($FBSD_VERSION == 7.3) {
DelPackage(0, "python25", "py25",
"sudo", "png", "tiff",
"git", "rpm", "p5-libwww");
}
}
print "Installing the ops metaport.\n";
RecreateDir("/usr/ports", 1);
# Mounted from outside the jail.
AddPackage($emulabconfig{OPS_PKG}, "/packages", 0);
# Add extras (i.e., emacs) to make life worth living
if ($FBSD_VERSION >= 10.1) {
AddPackage($emulabconfig{EXTRA_PKG}, "/packages", 1);
}
# XXX FreeBSD got rid of the /usr/bin/perl symlink; we need it.
if ($FBSD_VERSION >= 10.1) {
if (! -x "/usr/bin/perl") {
system("ln -sf /usr/local/bin/perl5 /usr/bin/perl");
}
# hmm...python too?
if (! -x "/usr/local/bin/python") {
system("ln -sf /usr/local/bin/python2 /usr/local/bin/python");
}
}
}
#
......@@ -3701,3 +3811,14 @@ sub DelPackage($@)
# note: non-fatal
system("$cmd $args $list");
}
sub DelAllPackages()
{
if (system("pkg lock -yq perl5") || system("pkg lock -yq pkg")) {
SetupFatal("Could not lock perl5 and pkg!");
}
if (system("pkg delete -yaf >>/tmp/rperrs 2>&1")) {
SetupFatal("Could not delete old packages!");
}
system("pkg unlock -yaq");
}
# -*- python -*-
#
# Copyright (c) 2000-2011 University of Utah and the Flux Group.
# Copyright (c) 2000-2015 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
......@@ -142,6 +142,9 @@ def TBDBConnect(dbnum=0,db=None,user=None,host=None,passwd=None):
if cargs.has_key('passwd'):
cargs['passwd'] = None
pass
# XXX we need this for mysql 5.5 and above to avoid metadata
# lock hangs, even when using MyISAM tables.
__DB[dbnum].autocommit(True)
__DBConnectArgs[dbnum] = cargs
except:
if debug:
......
#!/usr/bin/perl -w
#
# Copyright (c) 2010-2014 University of Utah and the Flux Group.
# Copyright (c) 2010-2015 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
......@@ -243,8 +243,7 @@ elsif ($server eq "boss") {
'exports', 'nfsmounts', 'boss/mibs', 'boss/crontab', 'sudoers',
'samba', 'boss/ssh', 'boss/hostkeys',
'boss/rndc', 'boss/loaderconf', 'boss/sysctlconf',
'boss/sslcerts', 'boss/mailman', 'boss/pubsub',
'boss/software',
'boss/sslcerts', 'boss/pubsub', 'boss/software',
#
# The next few items must be after the software install since
# they use testbed libraries and such.
......@@ -268,7 +267,7 @@ elsif ($server eq "ops") {
'ops/ports', 'ops/portfix', 'ops/patches', 'ntpd', 'ops/rcconf',
'ops/sendmail', 'ops/syslog', 'exports', 'nfsmounts',
'ops/crontab', 'sudoers', 'samba', 'ops/ssh', 'capture',
'ops/rcfiles', 'apache', 'ops/database', 'ops/mailman',
'ops/rcfiles', 'apache', 'ops/database',
'ops/cvsd', 'ops/flyspray', 'ops/twiki', 'ops/firewall'
);
}
......
......@@ -64,7 +64,11 @@ $BOSS_PORT = "emulab-boss-1.8";
$OPS_PORT = "emulab-ops-1.4";
$FS_PORT = "emulab-fs-1.4";
if ($FBSD_MAJOR > 4) {
if ($FBSD_MAJOR > 9) {
if ($FBSD_MAJOR > 10 || ($FBSD_MAJOR == 10 && $FBSD_MINOR > 0)) {
$BOSS_PORT = "emulab-boss-6.1";
$OPS_PORT = "emulab-ops-6.1";
$FS_PORT = "emulab-fs-6.1";
} elsif ($FBSD_MAJOR > 9) {
$BOSS_PORT = "emulab-boss-6.0";
$OPS_PORT = "emulab-ops-6.0";
$FS_PORT = "emulab-fs-6.0";
......@@ -104,7 +108,10 @@ $PHP_VERSION = 4;
$PHP_PORT = "php4-extensions-1.0";
if ($FBSD_MAJOR > 7 || ($FBSD_MAJOR == 7 && $FBSD_MINOR > 2)) {
$PHP_VERSION = 5;
if ($FBSD_MAJOR > 9 || ($FBSD_MAJOR == 9 && $FBSD_MINOR > 1)) {
# there is no longer an explict extensions package
if ($FBSD_MAJOR > 10 || ($FBSD_MAJOR == 10 && $FBSD_MINOR > 0)) {
$PHP_PORT = "php56-5.6.9";
} elsif ($FBSD_MAJOR > 9 || ($FBSD_MAJOR == 9 && $FBSD_MINOR > 1)) {
$PHP_PORT = "php5-extensions-1.7";
} elsif ($FBSD_MAJOR > 8 || ($FBSD_MAJOR == 8 && $FBSD_MINOR > 2)) {
$PHP_PORT = "php5-extensions-1.6";
......@@ -133,7 +140,10 @@ $SELFLOAD_PATCH = "$main::TOP_SRCDIR/patches/SelfLoader.patch";
#
$PYM2_PKG = "py25-m2crypto-0.19.1";
$PY_VER = "python2.5";
if ($FBSD_MAJOR > 9) {
if ($FBSD_MAJOR > 10 || ($FBSD_MAJOR == 10 && $FBSD_MINOR > 0)) {
$PYM2_PKG = "py27-m2crypto-0.22.3";
$PY_VER = "python2.7";
} elsif ($FBSD_MAJOR > 9) {
$PYM2_PKG = "py27-m2crypto-0.21.1_1";
$PY_VER = "python2.7";
} elsif ($FBSD_MAJOR > 8 || ($FBSD_MAJOR == 8 && $FBSD_MINOR > 2)) {
......@@ -205,6 +215,19 @@ $NEEDMROUTED = 0;
$ARCHSUPPORT = @ARCHIVESUPPORT@;
$BROWSER_CONSOLE_ENABLE = @BROWSER_CONSOLE_ENABLE@;
#
# Python/Perl paths
#
# EMULAB* are the paths we expect and use in '#!'
# PORT* are the paths that the ports install and should always exist
#
# We make sure the former is symlinked to the latter.
#
$EMULAB_PERL_PATH = "/usr/bin/perl";
$EMULAB_PYTHON_PATH = "/usr/local/bin/python";
$PORT_PERL_PATH = "/usr/local/bin/perl5";
$PORT_PYTHON_PATH = "/usr/local/bin/python2";
#
# Some programs we use
#
......@@ -271,6 +294,7 @@ $AUTHKEYS = "/root/.ssh/authorized_keys";
$RCCAPTURE = "$PREFIX/etc/rc.capture";
$RCLOCAL = "/etc/rc.local";
$PHP_INI = "/usr/local/etc/php.ini";
$PHP_CONF = "/usr/local/etc/php.conf";
$SENDMAIL_CF = "/etc/mail/sendmail.cf";
$INETD_CONF = "/etc/inetd.conf";
$ETCSSH = "/etc/ssh";
......
#!/usr/bin/perl -w
#
# Copyright (c) 2003-2014 University of Utah and the Flux Group.
# Copyright (c) 2003-2015 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
......@@ -399,6 +399,18 @@ sub DoneIfDoesntExist($) {
}
}
#
# Check to see if the phase is already done, as evidenced by the existance
# and executability of a file.
#
sub DoneIfExecutable($) {