diff --git a/db/dhcpd_makeconf.in b/db/dhcpd_makeconf.in index d97b8577156dd1c321a024b79297dce78ed920a2..e023a3964c602dcbafc2e43ae616c95e530a8994 100755 --- a/db/dhcpd_makeconf.in +++ b/db/dhcpd_makeconf.in @@ -158,7 +158,11 @@ while (my %row = $query_result->fetchhash()) { open(IF,"<$template") or fatal("Unable to open $template for reading"); while (<IF>) { - if (/^(\s*)\%\%nodetype=(\w+)/) { + if (/^(\s*)range\s*;/) { + # Comment out a null DHCPD_DYNRANGE line. + my $spaces = $1; + print $OUT "${spaces}#range ... ...;\n"; + } elsif (/^(\s*)\%\%nodetype=(\w+)/) { my $spaces = $1; my $nodetype = $2; diff --git a/doc/setup-ops.txt b/doc/setup-ops.txt index fb968ecb34ce2d9409b63c75fff2510969a78e0f..88db0a96f899a76881997f6787322a06776cf5a1 100644 --- a/doc/setup-ops.txt +++ b/doc/setup-ops.txt @@ -6,7 +6,7 @@ ##### ##### Setting up the Utah Network Testbed software -##### Most recently tested on FreeBSD 4.11. +##### Most recently tested on FreeBSD 6.1 . ##### ##### Step 1 - OS installation and setup @@ -97,37 +97,36 @@ collection that are known to work with our software, and to save you hours of compile time, we provide pre-built binary packages of the ports required by Emulab. -(Do not let the names of the following tar files bother you, e.g. -"FreeBSD-4.10" or the apparent 20041102 date stamp. These are indeed -the correct files to use with FreeBSD 4.11 and with the current (May 2005) -Emulab distribution.) - Download the packages tarball from: - http://www.emulab.net/downloads/FreeBSD-4.10-20041102.tar.gz + http://www.emulab.net/downloads/FreeBSD-6.1-20060921.tar.gz (You can use the FreeBSD 'fetch' command to download the file.) -Now, untar this someplace (you need about 70MB of space, so don't use /tmp). +Now, untar this someplace (you need about 140MB of space, so don't use /tmp). Let's say you untarred it into /usr/tmp. You would then run: - env PKG_PATH=/usr/tmp/FreeBSD-4.10-20041102 pkg_add emulab-ops-1.4 + env PKG_PATH=/usr/tmp/FreeBSD-6.1-20060921 pkg_add emulab-ops-2.0 Of course, if you untarred it somewhere else, put in the correct path. -Now you need to download a ports tree that corresponds to the above -packages. We have run into many, many problems with versions of the +We provide all of the binary packages necessary to build ops/fs/boss in our +packages tarball, making setup of an Emulab-in-Emulab very quick. You may +want to install more packages built from ports tree makefiles with downloaded +sources, but if not there is no need to install a /usr/ports tree. + +We have run into many, many problems with clashes between versions of the FreeBSD ports. So, rather than using the /usr/ports tree that comes on the FreeBSD installation media, we use one that we've tested against. You can grab our 'approved' copy of the ports tree from: - http://www.emulab.net/downloads/ports-20041102.tar.gz + http://www.emulab.net/downloads/ports-20060921.tar.gz +The tarball is about 40 meg; it unpacks to 175 meg. + Untar it, move it into place as /usr/ports (rename the old directory to ports.old, or just remove it), and install whatever ports you want to make -ops feel like 'home' (like emacs, jove, or whatever). NOTE: You must -download and copy the ports tree into place, even if you do not intend to -install any packages yourself. +ops feel like 'home' (like emacs, jove, or whatever) ##### Step 3 - Unpacking and running configure @@ -159,7 +158,7 @@ an 'install' subdirectory, with a script called 'ops-install'. Just run this script as root (note the same package directory argument as above). cd install - env PKG_PATH=/usr/tmp/FreeBSD-4.10-20041102 perl ops-install + perl ops-install -p /usr/tmp/packages It will take care of installing any additional ports, and doing various other configuration of FreeBSD required to make it into an ops node. The diff --git a/doc/setup.txt b/doc/setup.txt index f4067ab3a76f1c8244084f555edf4eb3f95aaea7..485e7eea1a76acac586008cbe4c9e6ab7788d24e 100644 --- a/doc/setup.txt +++ b/doc/setup.txt @@ -1,6 +1,6 @@ # # EMULAB-COPYRIGHT -# Copyright (c) 2001-2005 University of Utah and the Flux Group. +# Copyright (c) 2001-2006 University of Utah and the Flux Group. # All rights reserved. # @@ -144,9 +144,9 @@ and make sure the home directories for them are removed as well! Again, almost the same as on ops. Download the same tarball, and follow the same pkg_add procedure, except this time, you're going to install -the emulab-boss-1.8 package instead of emulab-ops: +the emulab-boss package instead of emulab-ops: - env PKG_PATH=/usr/tmp/FreeBSD-4.10-20041102 pkg_add emulab-boss-1.8 + env PKG_PATH=/usr/tmp/FreeBSD-6.1-20060921 pkg_add emulab-boss-2.0 Also grab a copy of our approved ports tree and install it, the same as described in setup-ops.txt. @@ -184,13 +184,16 @@ boss-install in the object tree, instead of ops-install. Just run this script as root (note the same package directory argument as above). cd install - env PKG_PATH=/usr/tmp/FreeBSD-4.10-20041102 perl boss-install + perl boss-install -p /usr/tmp/packages Like the ops-install script, boss-install sets up passwordless sudo for anyone in the wheel group. ##### Step 7 - Installing from source. +This step is now done as part of boss-install. You can check it or fix up +problems by doing the makes yourself, as follows: + In your object directory, do a 'gmake && gmake boss-install'. Then, as root, do a 'gmake post-install'. The post-install target needs to run as root, so that it can make certain scripts setuid, etc. @@ -311,8 +314,9 @@ Utah for some. locate database - It can be useful to update the 'locate' database to help you find files as you're learning the system. This normally happens nightly, but -you can force it to happen now by running 'locate.updatedb' as root. This will -take several minutes. You can then find foo.conf by running 'locate foo.conf'. +you can force it to happen now by running '/usr/libexec/locate.updatedb' as +root. This will take several minutes. You can then find foo.conf by running +'locate foo.conf'. ##### Step 11 - Reboot boss diff --git a/install/boss-install.in b/install/boss-install.in index 20205402bf15d4362ac47d9935a3db9c34fa3dfb..0335c71555f8252594f8922eff7d2d02c53fb12c 100644 --- a/install/boss-install.in +++ b/install/boss-install.in @@ -246,16 +246,18 @@ use Getopt::Std; # Handle command-line options # sub usage { - print "Usage: boss-install [-p packagedir] [-P portname]\n"; + print "Usage: boss-install [-b] [-p packagedir] [-s] [-P portname]\n"; + print " Required: -p (for binary packages) or -s (for source makes.)\n"; exit(1); } my $packagedir = ""; my $batchmode = 0; +my $domakes = 0; my $password; my %opts; -if (! getopts("P:p:bw:", \%opts)) { +if (! getopts("P:p:bsw:", \%opts)) { usage(); } if (defined($opts{p})) { @@ -264,13 +266,24 @@ if (defined($opts{p})) { if (defined($opts{b})) { $batchmode = 1; } +if (defined($opts{s})) { + $domakes = 1; +} if (defined($opts{w})) { $password = $opts{w}; } if (defined($opts{P})) { $BOSS_PORT = $opts{P}; } - +# Don't just charge into making ports from source by default. +if ($packagedir eq "" and $domakes eq 0) { + print "At least one of -p and -s must be given.\n"; + usage(); +} +if ($packagedir ne "" and $domakes eq 1) { + print "Only one of -p and -s can be given.\n"; + usage(); +} if (@ARGV) { usage(); } @@ -296,26 +309,26 @@ if ($UID != 0) { Phase "usersgroups", "Creating users and groups", sub { Phase "tbadmin", "Creating tbadmin group", sub { if (getgrnam("tbadmin")) { - PhaseSkip("tbadmin group already exists"); + PhaseSkip("Group already exists"); } ExecQuietFatal("$PW groupadd tbadmin -g 101"); }; Phase "root", "Creating root group", sub { if (getgrnam("root")) { - PhaseSkip("root group already exists"); + PhaseSkip("Group already exists"); } ExecQuietFatal("$PW groupadd root -g 103"); }; # Added next two cause the mysql package does not do this (port does). Phase "mysqlgroup", "Creating mysql group", sub { if (getgrnam("mysql")) { - PhaseSkip("mysql group already exists"); + PhaseSkip("Group already exists"); } ExecQuietFatal("$PW groupadd mysql -g 88"); }; Phase "mysqluser", "Creating mysql user", sub { if (getpwnam("mysql")) { - PhaseSkip("mysql user already exists"); + PhaseSkip("User already exists"); } ExecQuietFatal("$PW useradd mysql -g 88 -g 88 -h - ". "-d $MYSQLDBDIR -s /sbin/nologin -c 'MySQL Daemon'"); @@ -344,8 +357,8 @@ Phase "dirs", "Setting directory permissions", sub { Phase "tftp", "Setting up directories for tftp", sub { Phase "tftpoff", "Disabling BSD tftpd", sub { - PhaseSkip("no inetd.conf!?") unless (-e $INETD_CONF); - PhaseSkip("already disabled") unless `grep '^tftp' $INETD_CONF`; + PhaseSkip("No inetd.conf!?") unless (-e $INETD_CONF); + PhaseSkip("Already disabled") unless `grep '^tftp' $INETD_CONF`; ExecQuietFatal("sed -i .orig -e '/^tftp/s/^/#/' $INETD_CONF"); HUPDaemon("inetd"); }; @@ -391,7 +404,7 @@ Phase "ports", "Installing ports", sub { }; } }; - PhaseSkip("Package directory provided; not installing from source") + PhaseSkip("Package directory provided; not installing from sources") if ($packagedir); Phase "pcopy", "Copying ports into place", sub { @@ -403,7 +416,7 @@ Phase "ports", "Installing ports", sub { # it - hopefully it'll get fixed someday, and we remove this Phase "php4patch", "Patching php4 port", sub { if (!ExecQuiet("$PATCH -C -f -l -R -p0 -i $PHP4_PATCH")) { - PhaseSkip("$PHP4_PATCH already applied"); + PhaseSkip("Patch already applied"); } ExecQuietFatal("$PATCH -f -l -p0 -i $PHP4_PATCH"); }; @@ -458,7 +471,7 @@ Phase "patches", "Applying patches", sub { if ($FBSD_VERSION == 4) { Phase "g++patch", "Patching g++'s STL", sub { if (!ExecQuiet("$PATCH -C -f -R -p0 -i $STL_PATCH")) { - PhaseSkip("$STL_PATCH already applied"); + PhaseSkip("Patch already applied"); } ExecQuietFatal("$PATCH -f -p0 -i $STL_PATCH"); }; @@ -470,13 +483,13 @@ Phase "patches", "Applying patches", sub { $patchfile = "${patchfile}-0.13"; } if (!ExecQuiet("$PATCH -C -f -l -R -p0 -i $patchfile")) { - PhaseSkip("$patchfile already applied"); + PhaseSkip("Patch already applied"); } ExecQuietFatal("$PATCH -f -l -p0 -i $patchfile"); }; Phase "Mysql.pm.patch", "Patching Mysql.pm", sub { my $patchfile = $MYSQL_PM_PATCH; - my $patchfile = `realpath $patchfile`; + $patchfile = `realpath $patchfile`; chomp $patchfile; my $dir; @@ -491,7 +504,7 @@ Phase "patches", "Applying patches", sub { } if (!ExecQuiet("$PATCH -d $dir -C -f -l -R -i $patchfile")) { - PhaseSkip("$patchfile already applied"); + PhaseSkip("Patch already applied"); } ExecQuietFatal("$PATCH -d $dir -f -l -i $patchfile"); }; diff --git a/install/libinstall.pm b/install/libinstall.pm index 0cd191469c8e7056912f5e928eb28a30325ef80d..2d8f47f20515e11ec5e20d3ab05b5dfb98f16ad2 100644 --- a/install/libinstall.pm +++ b/install/libinstall.pm @@ -104,7 +104,7 @@ sub Phase($$$) { # SWITCH: for ($@) { (/^skip$/) && do { - print "[ Skipped ]\n"; + print "[ Skipped ($libinstall::reason) ]\n"; $$parentSkipped++; $libinstall::phaseResults{$name} = $_; last SWITCH; @@ -224,7 +224,7 @@ sub DoneIfExists($) { my ($filename) = @_; if (!$filename) { PhaseFail("Bad filename passed to DoneIfExists"); } if (-e $filename) { - PhaseSkip("File $filename already exists"); + PhaseSkip("File already exists"); } } @@ -235,7 +235,7 @@ sub DoneIfDoesntExist($) { my ($filename) = @_; if (!$filename) { PhaseFail("Bad filename passed to DoneIfExists"); } if (!-e $filename) { - PhaseSkip("File $filename does not exist"); + PhaseSkip("File does not exist"); } } @@ -249,7 +249,7 @@ sub DoneIfEdited($) { open(FH,$filename) or return; if (grep /$MAGIC_STRING/, <FH>) { close(FH); - PhaseSkip("File $filename has already been edited\n"); + PhaseSkip("File has already been edited"); } close(FH); } @@ -291,7 +291,7 @@ sub DoneIfMounted($) if ($opt eq "nfs") { if ($dir eq $2) { close(MOUNT); - PhaseSkip("NFS dir $dir already mounted"); + PhaseSkip("NFS dir already mounted"); } } } diff --git a/install/ops-install.in b/install/ops-install.in index 62a8d489bd4a3d491b460f388feabefc835c4cc4..0aaff2531d3b56f0485b5a4733ecc83ec2175cea 100644 --- a/install/ops-install.in +++ b/install/ops-install.in @@ -79,7 +79,9 @@ use Getopt::Std; # Handle command-line options # sub usage { - print "Usage: ops-install [-b] [-p packagedir] [-P portname]\n"; + print "Usage: ops-install [-b] [-p packagedir] [-s] " . + "[-P ops-portname] [-F fs-portname]\n"; + print " Required: -p (for binary packages) or -s (for source makes.)\n"; exit(1); } @@ -102,9 +104,10 @@ my $PHP4_PORT = "php4-extensions-1.0"; my $packagedir = ""; my $batchmode = 0; +my $domakes = 0; my $password; my %opts; -if (! getopts("P:p:bw:F:", \%opts)) { +if (! getopts("P:p:bsw:F:", \%opts)) { usage(); } if (defined($opts{p})) { @@ -113,6 +116,9 @@ if (defined($opts{p})) { if (defined($opts{b})) { $batchmode = 1; } +if (defined($opts{s})) { + $domakes = 1; +} if (defined($opts{P})) { $OPS_PORT = $opts{P}; } @@ -122,6 +128,15 @@ if (defined($opts{F})) { if (defined($opts{w})) { $password = $opts{w}; } +# Don't just charge into making ports from source by default. +if ($packagedir eq "" and $domakes eq 0) { + print "At least one of -p and -s must be given.\n"; + usage(); +} +if ($packagedir ne "" and $domakes eq 1) { + print "Only one of -p and -s can be given.\n"; + usage(); +} if (@ARGV) { usage(); } @@ -381,7 +396,7 @@ Phase "ports", "Installing ports", sub { ExecQuietFatal("$ENV PKG_PATH=$packagedir $PKG_ADD $pname"); }; } - PhaseSkip("Package directory provided; not installing from source") + PhaseSkip("Package directory provided; not installing from sources") if ($packagedir); Phase "pcopy", "Copying ports into place", sub { @@ -474,7 +489,7 @@ Phase "patches", "Applying patches", sub { $patchfile = "${patchfile}-0.13"; } if (!ExecQuiet("$PATCH -C -f -l -R -p0 -i $patchfile")) { - PhaseSkip("$patchfile already applied"); + PhaseSkip("Patch already applied"); } ExecQuietFatal("$PATCH -f -l -p0 -i $patchfile"); }; @@ -483,7 +498,7 @@ Phase "patches", "Applying patches", sub { my $patchfile = $MAILMAN_PATCH; if (!ExecQuiet("$PATCH -C -f -l -R -p0 -i $patchfile")) { - PhaseSkip("$patchfile already applied"); + PhaseSkip("Patch already applied"); } ExecQuietFatal("$PATCH -f -l -p0 -i $patchfile"); };