Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • alex_orange/emulab-devel
  • hakasapl/emulab-devel
  • cecchet/emulab-devel
  • srirams/emulab-devel
  • chuck/emulab-devel
  • crd/emulab-devel
  • kwebb/emulab-devel
  • moate/emulab-devel
  • grubb/emulab-devel
  • nasir/emulab-devel
  • asydney/emulab-devel
  • kdownie/emulab-devel
  • wvdemeer/emulab-devel
  • anilmr/emulab-devel
  • bvermeul/emulab-devel
  • emulab/emulab-devel
16 results
Show changes
Commits on Source (30048)
VERSION export-subst
# Files that already had DOS-style line endings and those
# that require them should be added to the list below.
clientside/sensors/slothd/idlemon.vbs -crlf
clientside/tmcc/cygwinseven/SetupComplete.cmd -crlf
clientside/tmcc/cygwinseven/unattend-x86.xml.in -crlf
clientside/tmcc/cygwinxp/cygwin-tcsh.bat -crlf
clientside/tmcc/cygwinxp/resolv.conf -crlf
clientside/tmcc/cygwinxp/site-lisp/cygwin-mount.el -crlf
clientside/tmcc/cygwinxp/site-lisp/site-start.el -crlf
clientside/tmcc/cygwinxp/sysprep.inf -crlf
delay/linux/iptables_mods/iptables-1.3.6-imq.diff -crlf
hyperviewer/hv.dsp -crlf
hyperviewer/hv.dsw -crlf
hyperviewer/hypview.bat -crlf
hyperviewer/hypviewer/examples/mfc/h3.cpp -crlf
hyperviewer/hypviewer/examples/mfc/h3Doc.cpp -crlf
hyperviewer/hypviewer/examples/mfc/h3Doc.h -crlf
hyperviewer/hypviewer/examples/mfc/h3.dsp -crlf
hyperviewer/hypviewer/examples/mfc/h3.dsw -crlf
hyperviewer/hypviewer/examples/mfc/h3.h -crlf
hyperviewer/hypviewer/examples/mfc/h3.rc -crlf
hyperviewer/hypviewer/examples/mfc/H3View.cpp -crlf
hyperviewer/hypviewer/examples/mfc/H3View.h -crlf
hyperviewer/hypviewer/examples/mfc/main.cpp -crlf
hyperviewer/hypviewer/examples/mfc/MainFrm.cpp -crlf
hyperviewer/hypviewer/examples/mfc/MainFrm.h -crlf
hyperviewer/hypviewer/examples/mfc/main.h -crlf
hyperviewer/hypviewer/examples/mfc/res/h3.rc2 -crlf
hyperviewer/hypviewer/examples/mfc/Resource.h -crlf
hyperviewer/hypviewer/examples/mfc/StdAfx.cpp -crlf
hyperviewer/hypviewer/examples/mfc/StdAfx.h -crlf
hyperviewer/win32/sets.py -crlf
image-test/tests/linkdelay/nsfile.ns -crlf
image-test/tests/traffic-gen/nsfile.ns -crlf
mote/powermon/powerMeasure/exceptions.cpp -crlf
mote/powermon/powerMeasure/exceptions.h -crlf
mote/powermon/powerMeasure/main.cpp -crlf
mote/powermon/powerMeasure/Makefile -crlf
mote/powermon/powerMeasure/powerMeasure.cpp -crlf
mote/powermon/powerMeasure/powerMeasure.h -crlf
pelab/magent/Command.h -crlf
pelab/magent/CommandInput.h -crlf
pelab/magent/CommandOutput.h -crlf
pelab/magent/Connection.cc -crlf
pelab/magent/KernelTcp.cc -crlf
pelab/magent/lib.cc -crlf
pelab/magent/main.cc -crlf
pelab/magent/SensorList.h -crlf
pelab/stub/lookup.cc -crlf
pelab/stub/stub.h -crlf
protogeni/demo/speed-test/Main.as -crlf
protogeni/demo/speed-test.php -crlf
protogeni/demo/src/AbstractNodes.as -crlf
protogeni/demo/src/ActiveNodes.as -crlf
protogeni/demo/src/AddLinkClip.as -crlf
protogeni/demo/src/com/mattism/http/xmlrpc/MethodFault.as -crlf
protogeni/demo/src/ComponentView.as -crlf
protogeni/demo/src/Console.as -crlf
protogeni/demo/src/CustomCellRenderer.as -crlf
protogeni/demo/src/Link.as -crlf
protogeni/demo/src/ListItem.as -crlf
protogeni/demo/src/Node.as -crlf
protogeni/demo/src/Queue.as -crlf
protogeni/demo/src/QueueNode.as -crlf
protogeni/demo/src/RemoveLinkClip.as -crlf
protogeni/demo/src/RequestReleaseTicket.as -crlf
protogeni/demo/src/RequestSliceEmbedding.as -crlf
protogeni/demo/src/RequestSliverCreate.as -crlf
protogeni/demo/src/RequestSliverDestroy.as -crlf
protogeni/demo/src/RequestSliverStart.as -crlf
protogeni/demo/src/RequestSliverUpdate.as -crlf
protogeni/demo/src/SimpleNodeClip.as -crlf
protogeni/demo/src/SliceWait.as -crlf
tbsetup/ipassign/dre/prepass/pistream.h -crlf
tbsetup/ipassign/dre/prepass/postream.h -crlf
tbsetup/ipassign/etc/autocheck.conf -crlf
tbsetup/plab/libdslice/xmlrpcserver.py -crlf
www/csshover.htc -crlf
www/cssmenu.css -crlf
www/cssmenu-new.css -crlf
www/emulab-mime-winxp.reg -crlf
www/hardware-cmuemlab.html -crlf
www/js/mootools-core.js -crlf
www/js/mootools-tips.js -crlf
www/js/treemap.js -crlf
www/rdp-mime-winxp.c -crlf
www/rdp-mime-winxp.pl -crlf
www/ssh-mime-windows.pl -crlf
www/ssh-mime-winxp.c -crlf
www/ssh-mime-winxp.pl -crlf
www/style.css -crlf
www/style-new.css -crlf
.merge-build
clientside/tmcc/cygwinseven/unattend-7pro-x86.xml.in
extendCMV
\ No newline at end of file
[submodule "protogeni/rspec-geni"]
path = protogeni/rspec-geni
url = git://git-public.flux.utah.edu/geni-rspec.git
configure
autoconf/config.guess
autoconf/config.sub
autoconf/install.sh
clientside/configure
clientside/autoconf/config.guess
clientside/autoconf/config.sub
clientside/autoconf/install.sh
clientside/os/imagezip/fat
clientside/os/imagezip/ntfs/liblocale
clientside/lib/event/event_wrap*
clientside/tmcc/cygwinxp/site-lisp
clientside/tmcc/freebsd/init
clientside/tmcc/plab
os/shd
www/cvsweb
robots/vmcd/camera_data/output_camera*
robots/mezzanine
robots/mtp/*.java
robots/mtp/xdr_sizeof.c
robots/vmcd/etc
lib/event_wrap*
doc/ChangeLog
tmcd/cygwinxp/site-lisp
tmcd/plab
tbsetup/checkpass/cracklib,2.7
mote/tools
mote/apps
mote/powermon/DataqSDK_Linux
robots/mezzanine
daikon
uisp
sensors/healthd*
sensors/and
sensors/nfstrace/nfsdump2
discvr
os/imagezip/fat
os/imagezip/ntfs/liblocale
tbsetup/plab/libdslice
tool/svn/svn_load_dirs.pl
copyrights
hyperviewer/hypviewer
www/sec-check
www/tutorial
sql
doc
www/doc
GPL-COPYING
LGPL-COPYING
AGPL-COPYING
TODO.plab
MOVED-TO-WIKI
VERSION
protogeni/flack/js/forge
protogeni/flack/src/com/hurlant
protogeni/flack/src/com/mattism
protogeni/protogeniflash/src/com/mattism
This diff is collapsed.
*** cvsupd. - Sep 17 2001 - Fixed by Mike on Sep 24 2001
The old version of cvsupd had the billenium bug, whereby number of
seconds since the epoc is greater than 1billion, and thus breaking
cvsupd. Upgrading was a disaster on Linux. It appears the new version
was trashing the boot block in Linux, and so nodes were not booting
after a cvsupd run.
*** mountd/exports - Sep 17 2001 - Needs to be fixed
Reported by Matt on Sep 17 2001, but actually a known bug with the
exports_setup script and the current mountd/kernel impl, which wipes
out all mounts before installing the new set. This causes transient
failures in NFS access from the testbed nodes since the mounts become
momentarily invalid.
*** Batch Mode Nits - Sep 18 2001 - Fixed by LBS on Sep 25 2001
Reported by Mike.
Nit: experiment create date in Experiment Info "header" is not set.
Is this field meaningless or just not filled in correctly?
Nit: there are two "header" tables shown
I assume this is bacause the batch code prints out a header and then calls
the regular experiment info script to do the rest. Anyway, the second table
is missing lots of date info as well.
Nit: web page for expr takes forever to show the nodes that were allocated.
For a regular experiment, the allocated nodes show up almost immediately,
presumably as soon as assign is done. For a batch experiment, it seems to
take minutes. I can go out and look at assign.log and see that nodes have
been assigned almost right away, they just doesn't wind up in the report
(the DB?) for awhile.
*** Shell experiments - Sep 18 2001 - Needs to be fixed
Reported by Rob.
Perhaps a feature instead of a bug. Shell experiments remain in the
"new" state, and are thus not cleaned up (nodes frees) when the
experiment is terminating. I view that as intended behaviour, but its
easy to change, so we should.
*** Broken lilo.conf - Sep 17 2001 - Partially fixed by LBS on Sep 24 2001
Reported by Matt (and then Rob).
According to Matt, our lilo.conf file is broken. In the next version
of the disk image, we should fix it. Matt sent a fixed version to
testbed-ops on Sep. 17 that we could use as a base.
Partially fixed means I hardwired some assembly code to the serial
line at 115200. A bug was causing it to go to the VGA all the time,
and the higher speeds are just a mess in lilo and I did not want to
mess with the assembly language. Too much of a time sink.
*** IPOD support - Sep 17 2001 - Needs to be fixed.
Reported by Rob.
Our Linux kernel needs to be rebuilt with ping of death support.
*** DummyNet support - Sept 19 2001 - Needs to be fixed.
Reported by Jay.
We need to pass through more DummyNet pipe configuration parameters
for delay nodes. It basically needs some front end parser work (not
too hard), and some changes to the DB where we store that stuff (a few
tables, not too hard), the tmcd to return the additional stuff (not
too hard), and the client delay configuration to use the additional
stuff when configuring the pipes (not too hard).
*** Multiple batch/reload daemons. - Sept 24 2001 - Needs to be fixed.
It is possible to start multiple batch and reload daemons (and many
other TB daemons). Can really mess things up!
*** No text box in approve user page - Sept 24 2001 - Needs to be fixed.
Reported by Mac.
We need to add a text box for sending a message to the applicant, just
like we have in the project approval page.
*** Cleanup of batch experiments - Sep 26 2001 - Needs to be fixed.
Reported by LBS.
Batch experiment system was created before Chris' big rework of the
tb system. At this point, it would be cleaner to combine the batch
experiment table into the normal experiment table (would result in a
couple of extra slots). The two tables make for consistency and
locking problems. What I do like about the current batch system is
that it is more scriptable cause most stuff is done in the backend
script; the web interface does just a bit of checking and then passes
the whole thing off. The normal experiment creation path should look
like this too, since splitting stuff between the web interface and the
perl scripts is messy, and the PHP DB interface is not as nice or
robust as the perl interface.
*** LastLogin info in web page - Sep 27 2001 - Done by LBS on Oct 1 2001.
From: Jay Lepreau <lepreau@cs.utah.edu>
To: "Leigh B. Stoller" <stoller@moab.cs.utah.edu>
Cc: testbed@fast.cs.utah.edu
Subject: Re: cvs commit: testbed/www showproject_list.php3
Date: Wed, 26 Sep 2001 19:11:11 MDT
If it were pretty easy to get wtmp info from plastic
into the database, and displayed in a separate column
on this page, that would be great.
It's the info we need to know who's really active and who's inactive,
which is not only interesting but affects who we ask to free up nodes.
LBS Comment: Probably want last web login info too. This would be
easy to add with a last_login DB table that would be updated in
DOLOGIN in the web server.
*** Need to install ssh on Linux - Sep 27 2001 - Needs to be done.
Suggested by Jay.
I think we should install xinetd and rsh by default. (But not turn on
rsh.) For one thing, many computational cluster users will want MPI.
RPMS: /proj/parmc/rpms/xinetd-2.1.8.9pre14-6.i386.rpm
/proj/parmc/rpms/rsh-server-0.17-2.5.i386.rpm
*** Needs web page to change proj trust - Oct 3 2001 - Needs to be fixed.
Reported by James Griffioen.
No way to change the trust level for a user in a project. Need to
provide a web page for it.
*** Paperbag/plasticwrap bug - Oct 5 2001 -- Fixed by Rob.
Reported by magnus.
magnus@ops ~> os_load -i UTAHPC-FBSD+LINUX -w pc121 pc122 pc123 pc124
pc125 pc126 pc127
Sorry, you used a forbidden character
**********
SSH failed. You may need to run the following commands:
mkdir -m 0755 /users/magnus/.ssh
ssh-keygen -P '' -f /users/magnus/.ssh/identity
cp /users/magnus/.ssh/identity.pub /users/magnus/.ssh/authorized_keys
chmod 600 /users/magnus/.ssh/authorized_keys
**********
*** Inconsistent exit in scripts. Oct 3 2001 - Needs to be fixed
When going to background we should a __DIE__ hook to make sure that
the log file gets emailed off. Generally, the fatal error amd email
stuff is very inconsistent. Normal users should get warm fuzzies.
Informational stuff should go to us.
*** Per User info change - Oct 8 2001 - Needs to be fixed
From: Jay Lepreau <lepreau@cs.utah.edu>
To: Leigh Stoller <stoller@fast.cs.utah.edu>
Subject: Re: Feature Request
Date: Mon, 08 Oct 2001 06:14:43 MDT
After I sent that, I just checked it out. Realized that you
(logically) display the info on the general user info page. What I
was originally wanting was more accurate and precise data for the
general project info page. That would take a bunch of processing: for
each proj, go thru its users, find the minimum time for each type of
login and display that.
Don't need it right now, but eventually we're going to need the kind
of info to move projects to 'inactive'.
The same info is what we'll need to deschedule experiments, or arm twist
their users. But for expts we have the creator, who will usually
be the one using the machines.
*** Node control changes lost on swapin/out - Oct 30 2001 - Fixed by LBS
> From: Mac Newbold <newbold@cs.utah.edu>
> Subject: Re: swapin/out anomoly
> Date: Tue, 30 Oct 2001 15:53:45 -0700 (MST)
>
> Sometimes when we update settings, we update only the physical, and not
> the virtual, and the virtual is all that persists between swaps. IMHO, I
> think what we need to do is evaluate which things make sense to keep
> between swaps, which things don't, and which things should offer a
> choice. This affects OSs, delay params, and potentially other things
> too. Perhaps there's even a unified solution we can implement as part of
> the swapout process.
Its probably a good idea to take the nodecontrol web page and remove the
stuff that changes the DB. Instead, lets use a backend perl script that
will update the DB appropriately (and can be used from the command line
too). Basically, I'm not happy about doing that much DB munging in the web
interface, especially virt_nodes and virt_lans (since it would be nice to
present a web interface to change the delay params at some point).
*** Frisbee sucks up CPU - Nov 10 2001 - Needs to be fixed
Frisbee is sucking up 15% of the CPU. Needs to be profiled.
*** Add virtual name to node control for. - Nov 12 2001 -
Fixed by Leigh on Nov 28 2001.
Requested by Dave.
*** Add quotas on /users. - Nov 12 2001 - Needs to be done.
Need to build and install a kernel on ops with quotas configured in.
*** Have Linux kernel source available - Nov 12 2001 - Needs to be done.
Requested by Jay.
*** Use switch port for 10MBs - Nov 28 2001 - Needs to be done.
LBS - Nov 28th: I worked on this. Turns out the switches do not
like it when the nodes force their ports into 10MB full duplex,
and the switch disables the port.
*** Add "Must Change Password" state. - Dec 3rd 2001 - Needs to be done.
Suggested by Mac. When we change the password and email it, we
should require that user changes his password next time he logs
in.
*** Mysterious TCP drop problem - Nov 21 2001 - Needs to be fixed.
From: Tian Bu <tbu@cs.umass.edu>
To: Mike Hibler <mike@fast.cs.utah.edu>
cc: <testbed-ops@fast.cs.utah.edu>
Subject: News on packet drop
Date: Thu, 29 Nov 2001 14:52:04 -0500 (EST)
After spending sometime on investigating why the packet drop occur
between a pair of linux nodes, I found that this problem is not
related to the OS. Instead, the mysterious packet drop only occurs
between a pair of nodes where one end is PC850 and the other end
is PC600. The settting I first saw the drop was a link between
a PC850 and a PC600. I did report that the drop does not appear
between a pair of freeBSD nodes. That is misleading because it was
measured on a different setting where the pair of nodes I reserved happen
to be both PC850. :-). Today I start another experiment where there are
a pair of PC850 running Linux and observe no mysterious packet drop
between them. I guess there may be some incompatible features between
either the interfaces installed on these two different types of machines.
#
# Copyright (c) 2000-2021 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
# This file is part of the Emulab network testbed software.
#
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
# License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this file. If not, see <http://www.gnu.org/licenses/>.
#
# }}}
#
# Testbed Makefile
#
SRCDIR = @srcdir@
......@@ -6,74 +27,348 @@ OBJDIR = .
SUBDIR =
TESTBED_SRCDIR = @top_srcdir@
DISTCLEAN_FILES = @DISTCLEAN_FILES@
EVENTSYS = @EVENTSYS@
PELABSUPPORT = @PELABSUPPORT@
PGENISUPPORT = @PROTOGENI_SUPPORT@
ISMAINSITE = @TBMAINSITE@
SPEWFROMOPS = @SPEWFROMOPS@
MOBILESUPPORT = @MOBILESUPPORT@
SYSTEM := $(shell uname -s)
include Makeconf
SUBDIRS = lib assign discvr tbsetup db os security pxe tmcd utils www \
tip capture ipod vis sensors @optional_subdirs@
#
# Ordering here matters!
# Things with no dependencies go first:
# assign db lib www
# Things that may have dependencies go next:
# @optional_subdirs@ (has event)
# ipod os security sensors
# Then things that only depend on stuff we've done:
# pxe tbsetup tmcd utils backend www tip vis
# Then things that depend on stuff we just did:
#
ifeq ($(STANDALONE_CLEARINGHOUSE),0)
SUBDIRS = \
clientside/lib \
db assign www @optional_subdirs@ clientside ipod security sensors \
pxe tbsetup account tmcd utils wbstore backend ipod vis \
sensors os xmlrpc autofs install/newnode_sshkeys \
tools/svn collab/exp-vis node_usage install
ifeq ($(ISMAINSITE),1)
SUBDIRS += tools/whol
endif
ifeq ($(PGENISUPPORT),1)
SUBDIRS += protogeni apt powder
endif
else
SUBDIRS = db tbsetup account protogeni
endif
all: all-subdirs just-builddirs
all: all-subdirs
#
# We used to statically link our event agents. We no longer do this, but
# if you want "old style" agents, use this target.
#
all-static:
@LDSTATIC=-static $(MAKE) all
ifeq ($(STANDALONE_CLEARINGHOUSE),0)
install:
@echo "Choose either boss-install (paper) or ops-install (plastic)"
@echo "Choose either boss-install, ops-install or fs-install"
@echo "Choose opsfs-install instead of ops-install for a combined ops/fs machine"
@echo "Choose tipserv-install for dedicated tip server machines."
else
install: clrhouse-install
endif
#
# For installation on boss node (okay, paper).
# For installation on boss node
#
boss-install: install-schemacheck install-subdirs install-mkdirs
@echo "DON'T FORGET TO RUN A POST-INSTALL AS ROOT"
boss-install: install-checks \
install-subdirs install-mkdirs \
install-setbuildinfo
@echo "Boss node installed!"
#
# Same target, with the install-schemacheck dependency omitted
#
boss-install-force: install-subdirs install-mkdirs
@echo "DON'T FORGET TO RUN A POST-INSTALL AS ROOT"
# Same target, with the checks omitted
boss-install-force: install-subdirs install-mkdirs install-setbuildinfo
@echo "Boss node installed!"
# Skip only the schema checks, but do the other checks.
boss-install-noschemacheck: install-updatecheck \
install-sitevarscheck install-dbfillcheck \
install-genischemacheck install-subdirs install-mkdirs \
install-setbuildinfo
# Skip the update check.
boss-install-noupdatecheck: install-schemacheck \
install-sitevarscheck install-dbfillcheck \
install-genischemacheck install-subdirs install-mkdirs \
install-setbuildinfo
# Only the checks:
install-checks: \
install-updatecheck \
install-schemacheck \
install-sitevarscheck \
install-dbfillcheck install-genischemacheck
@echo "Installation checks completed!"
clrhouse-install: install-subdirs install-mkdirs
@echo "CleaingHouse code installed!"
post-install:
@$(MAKE) -C db post-install
@$(MAKE) -C ipod post-install
@$(MAKE) -C tbsetup post-install
@$(MAKE) -C account post-install
@$(MAKE) -C security post-install
@$(MAKE) -C vis post-install
@$(MAKE) -C www post-install
ifeq ($(EVENTSYS),1)
@$(MAKE) -C event post-install
endif
ifeq ($(MOBILESUPPORT),1)
@$(MAKE) -C mobile
endif
@$(MAKE) -C tools post-install
@$(MAKE) -C collab post-install
@$(MAKE) -C utils post-install
ifeq ($(NODE_USAGE_SUPPORT),1)
@$(MAKE) -C node_usage post-install
endif
#
# For installation on the 'ops' or 'users' node (okay, plastic)
#
ops-install:
-mkdir -p $(INSTALL_TOPDIR)/log
-mkdir -p $(INSTALL_TOPDIR)/log/mysql
-chmod 770 $(INSTALL_TOPDIR)/log/mysql
-chown mysql $(INSTALL_TOPDIR)/log/mysql
-chgrp mysql $(INSTALL_TOPDIR)/log/mysql
-mkdir -p $(INSTALL_TOPDIR)/log/logfiles
-chmod 777 $(INSTALL_TOPDIR)/log/logfiles
@$(MAKE) -C rc.d control-install
@$(MAKE) -C tbsetup control-install
@$(MAKE) -C security control-install
@$(MAKE) -C tip control-install
@$(MAKE) -C os control-install
@$(MAKE) -C db control-install
@$(MAKE) -C tbsetup control-install
@$(MAKE) -C utils control-install
@$(MAKE) -C clientside control-install
ifeq ($(EVENTSYS),1)
@$(MAKE) -C event control-install
endif
@$(MAKE) -C account control-install
ifeq ($(PELABSUPPORT),1)
@$(MAKE) -C pelab control-install
endif
fs-install:
@$(MAKE) -C rc.d fs-install
@$(MAKE) -C tbsetup fs-install
@$(MAKE) -C clientside fs-install
@$(MAKE) -C sensors fs-install
opsfs-install: ops-install fs-install
@echo "Combined ops/fs install done."
install-mkdirs:
-mkdir -p $(INSTALL_TOPDIR)/db
-mkdir -p $(INSTALL_TOPDIR)/locks
-mkdir -p $(INSTALL_TOPDIR)/log
-mkdir -p $(INSTALL_TOPDIR)/log/mysql
-mkdir -p $(INSTALL_TOPDIR)/etc
-mkdir -p $(INSTALL_TOPDIR)/www
-mkdir -p $(INSTALL_TOPDIR)/suidbin
-mkdir -p $(INSTALL_TOPDIR)/ssl
-chmod 770 $(INSTALL_TOPDIR)/ssl
ifeq ($(STANDALONE_CLEARINGHOUSE),0)
-mkdir -p $(INSTALL_TOPDIR)/opsdir
-mkdir -p $(INSTALL_TOPDIR)/log/exports
-mkdir -p $(INSTALL_TOPDIR)/lists
-mkdir -p $(INSTALL_TOPDIR)/backup
-mkdir -p $(INSTALL_TOPDIR)/etc
-mkdir -p $(INSTALL_TOPDIR)/expwork
-mkdir -p $(INSTALL_TOPDIR)/batch
-chmod 777 $(INSTALL_TOPDIR)/batch
-mkdir -p $(INSTALL_TOPDIR)/expinfo
-chmod 777 $(INSTALL_TOPDIR)/expinfo
-ln -s /usr/testbed/bin/nse $(INSTALL_TOPDIR)/bin
-mkdir -p $(INSTALL_TOPDIR)/exparchive
-chmod 777 $(INSTALL_TOPDIR)/exparchive
-mkdir -p $(INSTALL_TOPDIR)/exparchive/Archive
-chmod 777 $(INSTALL_TOPDIR)/exparchive/Archive
-mkdir -p $(INSTALL_TOPDIR)/images
-chmod 775 $(INSTALL_TOPDIR)/images
-ln -sf /usr/testbed/bin/nse $(INSTALL_TOPDIR)/bin
endif
just-builddirs:
@$(MAKE) -C rc.d all
@$(MAKE) -C apache all
tipserv-install:
-mkdir -p $(INSTALL_TOPDIR)/log/tiplogs
-mkdir -p $(INSTALL_TOPDIR)/etc
@$(MAKE) -C tip tipserv-install
@$(MAKE) -C capture tipserv-install
@$(MAKE) -C clientside/tip tipserv-install
@$(MAKE) -C clientside/os/capture tipserv-install
@$(MAKE) -C tbsetup tipserv-install
client-mkdirs:
-mkdir -p $(DESTDIR)$(CLIENT_BINDIR)
-mkdir -p $(DESTDIR)$(CLIENT_MANDIR)
client:
@$(MAKE) -C clientside client
@$(MAKE) -C os client
client-install: client client-mkdirs
@$(MAKE) -C clientside client-install
@$(MAKE) -C os client-install
subboss:
@$(MAKE) -C clientside subboss
@$(MAKE) -C tbsetup subboss
@$(MAKE) -C db subboss
@$(MAKE) -C os subboss
@$(MAKE) -C utils subboss
subboss-install: subboss
@$(MAKE) -C clientside subboss-install
@$(MAKE) -C tbsetup subboss-install
@$(MAKE) -C os subboss-install
@$(MAKE) -C utils subboss-install
@$(MAKE) -C db subboss-install
@$(MAKE) -C rc.d subboss-install
@$(MAKE) -C dhcpd subboss-install
# Hack: this should probably be done by a subboss-install
# script, but there isn't a huge need for that yet
@rm -f $(INSTALL_RCDIR)/isc-dhcpd
TARBALLDESTDIR = /var/tmp/emulab-client
client-tarball:
@$(MAKE) -C clientside client-tarball
client-src-tarball:
@rm -f emulab-client-src.tar.gz
tar clzf emulab-client-src.tar.gz -C clientside
# This is not finished yet.
client-shadow-rpm:
-$(RM) -rf rpmbuild
mkdir -p rpmbuild/SOURCES rpmbuild/SRPMS
$(CP) emulab-client-src.tar.gz rpmbuild/SOURCES
$(RPM) -v -bs --nodeps --define='_topdir $(TOPDIR)/rpmbuild' \
clientside/shadow.spec
destdircheck:
@if [ -z "$(DESTDIR)" ]; then \
echo "You must define DESTDIR for this target!"; \
false; \
fi
@if [ "$(DESTDIR)" = "/" ]; then \
echo "DESTDIR is '/', really really bad idea!"; \
false; \
fi
mfsoscheck:
@if [ `uname -s` != "FreeBSD" ]; then \
echo "Must build CDROM/MFS files on a FreeBSD system!"; \
false; \
fi
mfs: mfsoscheck
@$(MAKE) -C clientside mfs
mfs-nostatic: mfsoscheck
@NOSTATIC=1 $(MAKE) -C clientside mfs
mfs-install: destdircheck mfs client-mkdirs
@$(MAKE) -C clientside mfs-install
mfs-nostatic-install: destdircheck mfs-nostatic client-mkdirs
@$(MAKE) -C clientside mfs-install
frisbee-mfs: mfsoscheck
@$(MAKE) -C clientside frisbee-mfs
frisbee-mfs-nostatic: mfsoscheck
@NOSTATIC=1 $(MAKE) -C clientside frisbee-mfs
frisbee-mfs-install: destdircheck frisbee-mfs
@$(MAKE) -C clientside frisbee-mfs-install
frisbee-mfs-nostatic-install: destdircheck frisbee-mfs-nostatic
@$(MAKE) -C clientside frisbee-mfs-install
newnode-mfs: mfsoscheck
@$(MAKE) -C clientside newnode-mfs
newnode-mfs-nostatic: mfsoscheck
@NOSTATIC=1 $(MAKE) -C clientside newnode-mfs
newnode-mfs-install: destdircheck newnode-mfs client-mkdirs
@$(MAKE) -C clientside newnode-mfs-install
newnode-mfs-nostatic-install: destdircheck newnode-mfs-nostatic client-mkdirs
@$(MAKE) -C clientside newnode-mfs-install
cdboot: mfsoscheck client
@echo "CD/Dongle files built"
cdboot-install: destdircheck cdboot
@$(MAKE) -C cdrom client-install
@$(MAKE) -C clientside/tmcc/freebsd6 cdboot-install
flashboot: mfsoscheck client
@echo "Flash dongle files built"
flashboot-install: destdircheck flashboot
@$(MAKE) -C clientside/tmcc/freebsd6 cdboot-install
@$(MAKE) -C os frisbee-mfs-install
@$(MAKE) -C flash client-install
@$(MAKE) -C clientside frisbee-mfs-install
#
# A check to see if this is a 'real' install. Kinda hacky, but as far as I can
# tell, you can't put ifeq()'s inside of targets
#
ifeq ($(TBROOT),/usr/testbed)
UPDATETESTBED= @cd $(OBJDIR)/install && perl update-testbed
else
UPDATETESTBED= @echo "Skipping update check, since prefix isn't /usr/testbed"
endif
ifeq ($(ISMAINSITE),1)
update-testbed: update-testbed-nostop
else
update-testbed: update-testbed-install
endif
update-testbed-install:
@echo "Updating the testbed ..."
$(UPDATETESTBED) -i -s
update-testbed-noinstall:
@echo "Updating the testbed ..."
$(UPDATETESTBED)
update-testbed-nostop:
@echo "Updating the testbed ..."
$(UPDATETESTBED) -i
update-testbed-force:
@echo "Updating the testbed in force mode ..."
$(UPDATETESTBED) -f
ifeq ($(TBROOT),/usr/testbed)
UPDATECHECK= @cd $(OBJDIR)/install && perl update-testbed -v
else
UPDATECHECK= @echo "Skipping update checks, since prefix isn't /usr/testbed"
endif
install-updatecheck:
@echo "Checking to see if updates need to be run"
$(UPDATECHECK)
ifeq ($(TBROOT),/usr/testbed)
SCHEMACHECK= cd $(OBJDIR)/db && perl schemacheck
else
......@@ -83,11 +378,125 @@ install-schemacheck:
@echo "Checking DB schema..."
$(SCHEMACHECK)
ifeq ($(TBROOT),/usr/testbed)
SITEVARSCHECK= cd $(OBJDIR)/db && perl sitevarscheck
else
SITEVARSCHECK= @echo "Skipping sitevars check, since prefix isn't /usr/testbed"
endif
install-sitevarscheck:
@echo "Checking Site variables..."
$(SITEVARSCHECK)
ifeq ($(TBROOT),/usr/testbed)
DBFILLCHECK= cd $(OBJDIR)/db && perl dbfillcheck
else
DBFILLCHECK= @echo "Skipping DB fill check, since prefix isn't /usr/testbed"
endif
install-dbfillcheck:
@echo "Checking Initial DB Fill ..."
$(DBFILLCHECK)
ifeq ($(TBROOT),/usr/testbed)
SETBUILDINFO= cd $(OBJDIR)/utils && perl setbuildinfo
else
SETBUILDINFO= @echo "Skipping setbuildinfo, since prefix isn't /usr/testbed"
endif
install-setbuildinfo:
@echo "Setting the Build and Version info"
$(SETBUILDINFO)
install-genischemacheck:
ifeq ($(PGENISUPPORT),1)
@$(MAKE) -C protogeni install-genischemacheck
endif
@echo "Done"
BRANCHCHECK=
BRANCHECHO= @echo "Skipping branch check since not the Mothership"
ifeq ($(ISMAINSITE),1)
ifeq ($(TBROOT),/usr/testbed)
BRANCHCHECK= cd $(SRCDIR) && \
git status --porcelain -s -b | head -1 | grep -q -s current
BRANCHECHO= @echo "Checking to make sure you are on the mothership branch"
endif
endif
install-branchcheck:
$(BRANCHECHO)
$(BRANCHCHECK)
# We use separate src and obj trees in Emulab, so the traditional distclean to
# clean "made" files from a mingled source-and-obj tree is unnecessary.
# However, this may be useful if you mistakenly configure and make a src tree.
clean: clean-subdirs
distclean: distclean-subdirs
rm -f Makeconf GNUmakefile config.status config.cache config.log
rm -f Makeconf GNUmakefile config.h config.status config.cache config.log
rm -f $(DISTCLEAN_FILES)
#
# Be careful, do not run these unless you are updating your installation
# with a new IP subnet or domain name.
#
boss-updateip-clean: clean
@$(MAKE) -C rc.d clean
@$(MAKE) -C apache clean
@$(MAKE) -C named clean
@$(MAKE) -C dhcpd clean
ops-updateip-clean: clean
@$(MAKE) -C rc.d clean
@$(MAKE) -C apache clean
update-rcd:
@$(MAKE) -C rc.d all
@$(MAKE) -C rc.d install
#
# Here's a different approch to recover from just configure problems. It cleans
# all files from an obj tree that have a corresponding .in file in the src tree.
undo-configure:
find $SRCDIR -name '*.in' -a -not -name configure.in | \
sed -e "s;$SRCDIR;$OBJDIR;" -e 's;[.]in$;;' | xargs rm -f
#
# XXX a "temporary" hack for scripts that were evolving fast.
# We didn't want to have to remake the client image whenever we changed these.
# They are copied over to the embryonic boss and ops during setup.
#
elabinelab-scripts:
mkdir -p $(INSTALL_TOPDIR)/etc
cp -f $(SRCDIR)/clientside/tmcc/freebsd/mkextrafs.pl $(INSTALL_TOPDIR)/etc/
cp -f $(SRCDIR)/clientside/tmcc/common/config/rc.mkelab $(INSTALL_TOPDIR)/etc/
ifeq ($(SPEWFROMOPS),1)
elabinelab-nogit: elabinelab-scripts
-mkdir -p /share/emulab
rm -f /share/emulab/emulab-src.tar.gz
tar czf /share/emulab/emulab-src.tar.gz -C $(SRCDIR) --exclude=.git .
elabinelab-git: elabinelab-scripts
-mkdir -p /share/emulab
rm -f /share/emulab/emulab-src.tar.gz
(cd $(SRCDIR); \
git archive HEAD > /share/emulab/emulab-src.tar)
tar rf /share/emulab/emulab-src.tar -C $(SRCDIR) \
--exclude=.git protogeni/rspec-geni
gzip /share/emulab/emulab-src.tar
else
elabinelab-nogit: elabinelab-scripts
-mkdir -p $(INSTALL_TOPDIR)/src
rm -f $(INSTALL_TOPDIR)/src/emulab-src.tar.gz
tar czf $(INSTALL_TOPDIR)/src/emulab-src.tar.gz -C $(SRCDIR) --exclude=.git .
elabinelab-git: elabinelab-scripts
-mkdir -p $(INSTALL_TOPDIR)/src
rm -f $(INSTALL_TOPDIR)/src/emulab-src.tar.gz
(cd $(SRCDIR); \
git archive HEAD > $(INSTALL_TOPDIR)/src/emulab-src.tar)
tar rf $(INSTALL_TOPDIR)/src/emulab-src.tar -C $(SRCDIR) \
--exclude=.git protogeni/rspec-geni
gzip $(INSTALL_TOPDIR)/src/emulab-src.tar
endif
# How to recursively descend into subdirectories to make general
# targets such as `all'.
%.MAKE:
......@@ -97,7 +506,10 @@ distclean: distclean-subdirs
# By default, make any target by descending into subdirectories.
%: %-subdirs ;
.PHONY: post-install install-mkdirs
.PHONY: post-install install-mkdirs clrhouse-install install \
boss-install-noupdatecheck boss-install-noschemacheck \
boss-install-force update-testbed update-testbed-install \
update-testbed-noinstall update-testbed-nostop
# Get rid of a bunch of nasty built-in implicit rules.
.SUFFIXES:
#
# Insert Copyright Here.
#
# Copyright (c) 2000-2012, 2016 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
# This file is part of the Emulab network testbed software.
#
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
# License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this file. If not, see <http://www.gnu.org/licenses/>.
#
# }}}
# Get rid of a bunch of nasty built-in implicit rules,
# to avoid bogus circular dependencies and make things go faster.
......@@ -35,13 +53,76 @@ $(INSTALL_ETCDIR)/%: %
-mkdir -p $(INSTALL_ETCDIR)
$(INSTALL_DATA) $< $@
$(addprefix $(INSTALL_SBINDIR)/, $(SETUID_SBIN_PROGS)): $(INSTALL_SBINDIR)/%: %
echo "Installing (setuid) $<"
-mkdir -p $(INSTALL_SBINDIR)
$(SUDO) $(INSTALL) -o root -m 4755 $< $@
$(addprefix $(INSTALL_BINDIR)/, $(SETUID_BIN_PROGS)): $(INSTALL_BINDIR)/%: %
echo "Installing (setuid) $<"
-mkdir -p $(INSTALL_BINDIR)
$(SUDO) $(INSTALL) -o root -m 4755 $< $@
$(addprefix $(INSTALL_LIBEXECDIR)/, $(SETUID_LIBX_PROGS)): $(INSTALL_LIBEXECDIR)/%: %
echo "Installing (setuid) $<"
-mkdir -p $(INSTALL_LIBEXECDIR)
$(SUDO) $(INSTALL) -o root -m 4755 $< $@
$(addprefix $(INSTALL_SBINDIR)/, $(SETUID_SBIN_SCRIPTS)): $(INSTALL_SBINDIR)/%: % $(INSTALL_SUIDDIR)/%
echo "Installing (link to wrapper) $<"
-mkdir -p $(INSTALL_SBINDIR)
-rm -f $@
ln -s $(INSTALL_LIBEXECDIR)/runsuid $@
$(addprefix $(INSTALL_BINDIR)/, $(SETUID_BIN_SCRIPTS)): $(INSTALL_BINDIR)/%: % $(INSTALL_SUIDDIR)/%
echo "Installing (link to wrapper) $<"
-mkdir -p $(INSTALL_BINDIR)
-rm -f $@
ln -s $(INSTALL_LIBEXECDIR)/runsuid $@
$(addprefix $(INSTALL_LIBEXECDIR)/, $(SETUID_LIBX_SCRIPTS)): $(INSTALL_LIBEXECDIR)/%: % $(INSTALL_SUIDDIR)/%
echo "Installing (link to wrapper) $<"
-mkdir -p $(INSTALL_LIBEXECDIR)
-rm -f $@
ln -s $(INSTALL_LIBEXECDIR)/runsuid $@
# Special libexec rule for scripts invoked by suexec (cannot be a symlink)
$(addprefix $(INSTALL_LIBEXECDIR)/, $(SETUID_SUEXEC_SCRIPTS)): $(INSTALL_LIBEXECDIR)/%: % $(INSTALL_SUIDDIR)/%
echo "Installing (hard link to wrapper) $<"
-mkdir -p $(INSTALL_LIBEXECDIR)
-rm -f $@
ln $(INSTALL_LIBEXECDIR)/runsuid $@
$(INSTALL_SUIDDIR)/%: %
echo "Installing (real script) $<"
-mkdir -p $(INSTALL_SUIDDIR)
$(SUDO) $(INSTALL_PROGRAM) $< $@
CFLAGS += $(LOCALCFLAGS)
clean:
distclean: clean
# This is to avoid warnings about duplicate targets.
distclean: default-clean
default-clean:
rm -f GNUmakefile
# This is to avoid warnings about duplicate targets.
default-install-notusing:
ifeq ($(ISMAINSITE),1)
ifeq ($(TBROOT),/usr/testbed)
(cd $(SRCDIR) ; \
git status --porcelain -s -b | head -1 | grep -q -s current)
else
/usr/bin/true
endif
else
/usr/bin/true
endif
#install: default-install
#
# Where to find source files.
# Using specific patterns instead of the catch-all VPATH variable
......@@ -62,9 +143,63 @@ vpath % $(SRCDIR) $(MOSTLY_SRCDIRS)
%.o: %.cc
$(CXX) -c -o $@ $(CXXFLAGS) $<
%.o: %.C
$(CXX) -c -o $@ $(CXXFLAGS) $<
%_xdr.h: %.x
rpcgen -h $< > $@
%_xdr.c: %.x %_xdr.h
rpcgen -c $< > $@
%: %-debug
$(STRIP) -o $@$(EXE) $<$(EXE)
%-version.c:
echo >$@ "char build_info[] = \"Built on `date` by `id -nu`@`hostname | sed 's/\..*//'`:`pwd`\";"
#
# Rules to regen configure written files.
#
%: %.in
%: %.in $(OBJDIR)/config.status
@echo "Regenerating $@"
cd $(OBJDIR) && CONFIG_FILES=$(SUBDIR)/$@ ./config.status
ifeq ($(TESTS),)
.PHONY: check
else
check: $(TESTS)
@export SRCDIR=${SRCDIR}; for tst in $^; do \
if test `basename $$tst .sh` != `basename $$tst`; then \
tst="sh $$tst"; \
fi; \
if $$tst; then \
echo "PASS: $$tst"; \
else \
echo "FAIL: $$tst"; \
exit 1; \
fi \
done
endif
ifeq ($(MERGE_BUILD),1)
.PRECIOUS: ${SRCDIR}/*
#
# I really want to say something like:
# ${TESTBED_SRCDIR}/.merged: $(wildcard ${OBJDIR}/${MERGE_BUILD_SANDBOX}/${SUBDIR}/*)
# but that causes problems if one the prereq. has a rule for it (such
# as when both GNUmakefile and GNUmakefile.in exist in the source tree),
# thus I do the equivalent manually
#
newest=$(shell ls -rtd "${OBJDIR}/${MERGE_BUILD_SANDBOX}/${SUBDIR}/"* "${TESTBED_SRCDIR}/.merged" | tail -n 1)
ifneq ($(newest),${TESTBED_SRCDIR}/.merged)
${TESTBED_SRCDIR}/.merged:
cd ${TESTBED_SRCDIR} && utils/merge-build sync
.PHONY: ${TESTBED_SRCDIR}/.merged
else
${TESTBED_SRCDIR}/.merged:
endif
${SRCDIR}/*: ${TESTBED_SRCDIR}/.merged
endif
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
This diff is collapsed.
# The following documentation files are now available on the WIKI at
# at http://users.emulab.net/trac/emulab/wiki/<PAGE>
#
FILE WIKI PAGE
doc/arch-hier.txt ArchHeir
doc/arch.txt Arch
doc/boot-scaling-issues.txt BootScalingIssues
doc/care-and-feeding.txt CareAndFeeding
doc/cisco-voodoo.txt CiscoVoodoo
doc/client-selfconfig.txt ClientSelfConfig
doc/create-generic-image.txt CreateGenericImage
doc/cross-compiling.txt CrossCompiling
doc/customize-image.txt CustomizeImage
doc/customize-mfs.txt CustomizeMfs
doc/dbtoir.txt dbtoir
doc/delay-implementation.txt DelayImplementation
doc/errorcodes.txt ErrorCodes
doc/hardware-mail.mbox HardwareMail
doc/ip-assumptions.txt IP Assumptions
doc/kernel-patches.txt KernelPatches
doc/linux-kernel.txt LinuxKernel
doc/multiplexed-links.txt MultiplexedLinks
doc/newimage.txt NewImage
doc/newnode-from-admin.txt NewnodeFromAdmin
doc/overview.txt Overview
doc/package-building.txt PackageBuilding
doc/port2-serial-console.txt Port2SerialConsole
doc/security.txt SecurityNotes
doc/setup-elabinelab.txt SetupElabinelab
doc/setup-plc.txt SetupPLC
doc/shellonboss.txt ShellOnBoss
doc/snmpit-internals.txt SnmpitInternals
doc/tftpboot-setup.txt TftpbootSetup
doc/tim-stack.nits TimStackNits
doc/uk-image.txt UK Image
doc/ulsshxmlrpcpp.txt ulsshxmlrpcpp
doc/update-mfs.txt UpdateMFS
doc/update-node.txt UpdateNode
doc/updating-RHL/ UpdatingRHL
doc/vnode-impl.txt VnodeImpl
doc/vnode-setup.txt VnodeSetup
doc/webglimpse.txt WebGlimpse
event/linktest/linktest.html linktest
www/auth.html Auth
www/doc.php3 .
www/doc/emotes.html emotes
www/doc/exclasses.html Classes
www/doc/hw-recommend.html HWRecommend
www/doc/jail.html jail
www/doc/linkdelays.html linkdelays
www/doc/netbuilddoc.html netbuilddoc
www/doc/pc2000.html pc2000
www/doc/pc3000.html pc3000
www/doc/plab.html plab
www/doc/windows.html Windows
www/groups.html Groups
www/hardware-emulab.net.html UtahHardware
www/otheremulabs.html OtherEmulabs
www/policies.html AdminPolicies
www/rdp-mime.html rdp_mime
www/security.html SecReqs
www/software.html software
www/ssh-mime.html ssh_mine
www/swapping.html Swapping
www/tutorial/advanced.html AdvancedExample
www/tutorial/behindthescenes.html behindthescenes
www/tutorial/elabinelab.php3 elabinelab
www/tutorial/eventsystem.html eventsystem
www/tutorial/firewall.html firewall
www/tutorial/gnuradio.html gnuradio
www/tutorial/ixp.html ixp
www/tutorial/netfpga.html netfpga
www/tutorial/nscommands.html nscommands
www/tutorial/nse.html nse
www/tutorial/routing.html routing
www/tutorial/secure.html secure
www/tutorial/tutorial.html Tutorial
www/tutorial/tutorial.php3 Tutorial
www/tutorial/vnodes.html vnodes
www/tutorial/widearea.html widearea
www/tutorial/wireless.html wireless
www/widearea.html wideareaAUP
#
# Copyright (c) 2000-2016 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
# This file is part of the Emulab network testbed software.
#
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
# License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this file. If not, see <http://www.gnu.org/licenses/>.
#
# }}}
#
# Most of the configure-substitution magic is done here.
# All the other makefiles in the NodeOS include
# this fragment
#
# Need the PATH because the older autoconf does not support
# AC_PATH_TOOL which is needed for cross-compilation to work.
export PATH = @PATH@
export CC = @CC@
export CXX = @CXX@
export LD = @CC@ ${CFLAGS}
......@@ -11,20 +36,31 @@ export STRIP = @STRIP@
export RANLIB = @RANLIB@
export AR = @AR@
export ELVIN_CONFIG = @ELVIN_CONFIG@
export JAVAC = @JAVAC@
export JAR = @JAR@
prefix = @prefix@
exec_prefix = @exec_prefix@
ISMAINSITE = @TBMAINSITE@
TBROOT = @prefix@
TBDEFS = @TBDEFS@
TBDBNAME = @TBDBNAME@
TBADMINGROUP = @TBADMINGROUP@
TBOPSEMAIL = @TBOPSEMAIL@
TBROBOCOPSEMAIL = @TBROBOCOPSEMAIL@
TBLOGSEMAIL = @TBLOGSEMAIL@
TBAUDITEMAIL = @TBAUDITEMAIL@
TBACTIVEARCHIVE = @TBACTIVEARCHIVE@
TBUSERSARCHIVE = @TBUSERSARCHIVE@
TBERRORSEMAIL = @TBERRORSEMAIL@
TBAPPROVALEMAIL = @TBAPPROVALEMAIL@
BOSSNODE = @BOSSNODE@
USERNODE = @USERNODE@
FSNODE = @FSNODE@
WWW = @WWW@
OURDOMAIN = @OURDOMAIN@
FSDIR_PROJ = @FSDIR_PROJ@
FSDIR_GROUPS = @FSDIR_GROUPS@
......@@ -42,11 +78,47 @@ INSTALL_BINDIR = @bindir@
INSTALL_SBINDIR = @sbindir@
INSTALL_LIBEXECDIR = @libexecdir@
INSTALL_ETCDIR = @sysconfdir@
INSTALL_INCDIR = @includedir@
INSTALL_WWWDIR = @exec_prefix@/www
INSTALL_SUIDDIR = @exec_prefix@/suidbin
INSTALL_RCDIR = @INSTALL_RCDIR@
INSTALL_APACHE_CONFIG = @INSTALL_APACHE_CONFIG@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL@ -m 755
EXE = @EXEEXT@
INSTALL_DATA = @INSTALL@ -m 444
SUDO = @SUDO@
CLIENT_ETCDIR = @CLIENT_ETCDIR@
CLIENT_BINDIR = @CLIENT_BINDIR@
CLIENT_VARDIR = @CLIENT_VARDIR@
CLIENT_MANDIR = @CLIENT_MANDIR@
LOG_TESTBED = @LOG_TESTBED@
EVENTSYS = @EVENTSYS@
ELVIN_COMPAT = @ELVIN_COMPAT@
HAVE_MEZZANINE = @HAVE_MEZZANINE@
GTK_CONFIG = @GTK_CONFIG@
BRAINSTEM_DIR = @BRAINSTEM_DIR@
WITH_EMULAB = @WITH_EMULAB@
OPSVM_ENABLE = @OPSVM_ENABLE@
OPSVM_MOUNTPOINT= @OPSVM_MOUNTPOINT@
APACHE_VERSION = @APACHE_VERSION@
APACHE_START_COMMAND = @APACHE_START_COMMAND@
host_cpu = @host_cpu@
HAVE_ULXMLRPCPP = @HAVE_ULXMLRPCPP@
STANDALONE_CLEARINGHOUSE = @STANDALONE_CLEARINGHOUSE@
NODE_USAGE_SUPPORT = @NODE_USAGE_SUPPORT@
MERGE_BUILD = @MERGE_BUILD@
MERGE_BUILD_SANDBOX = @MERGE_BUILD_SANDBOX@
EXP_VIS_SUPPORT = @EXP_VIS_SUPPORT@
TESTBED_LIBSRCDIR = ${TESTBED_SRCDIR}/clientside/lib
TESTBED_LIBOBJDIR = ${OBJDIR}/clientside/lib
TESTBED_IMAGEZIPSRCDIR = ${TESTBED_SRCDIR}/clientside/os/imagezip
Things that could be done:
1. Monitor temperature sensor on CPU (mike)
Linux and probably BSD have drivers/software for reading the temp
sensors. We should use, maybe in conjunction with Dave's autostatus
to make sure things like fan failure don't kill a CPU.
2. Filesystem compression (mike)
[ Leigh is working on this. ]
Jay's Holy Grail of Ultimate Disk Image Compression. I see three
ways of doing this:
- Have the "zip" part effectively do a tar of everything in the FS
and make a note of how big the FS is. Unzip will newfs a filesystem
of the same size and untar. Note that I don't necessarily mean a
literal tar/untar as you may want to operate beneath the FS level
for speed. Downside is that you don't create an exact copy of the
original. If something in the original relies on exact location
(e.g., LILO), ya be screwed.
- Modify zlib (or create a new OSKit library) to know about filesystem
formats, at least UFS and EXT2FS. The zipper will recognize free
blocks and encode them special. The unzipper will note these special
runs and just leave room on the disk (rather than zero them). Note
the information security issue here, we need to provide the user
with an option to wipe the disk when they are done so that their
old stuff doesn't leak through into a new experiment.
- A not so obvious solution with beneficial side-effects would be to
write a tool to expand filesystems like UFS and EXT2FS. Then we
could make our image filesystems just big enough to hold everything
we care about, and create regularly zipped images of those.
The unzipper, expands the small disk image and then goes in and
grows the filesystem to some reasonable size. A filesystem
expansion (contraction?) tool would probably be a nice addition to
*BSD and/or Linux. Note that this assumes we are creating images
with only a single partition (OS), otherwise you still have to
fill out the first partition no matter how little of it you used.
FYI: long ago I asked Kirk about expanding an FFS filesystem and this
is what he said:
---------
From: mckusick@chez.Berkeley.EDU (Kirk Mckusick)
To: mike@cs (Mike Hibler)
Subject: Re: a UFS question
Date: Mon, 15 Jul 91 17:11:17 PDT
Date: Fri, 5 Jul 91 17:43:36 -0600
From: mike@cs.utah.edu (Mike Hibler)
To: mckusick@okeeffe.Berkeley.EDU
Subject: a UFS question
Occasionally we come across a situation where it would be
nice to expand a filesystem. Rather than create a new
filesystem it would be nice if you could extend an existing
one. How practical is that with the 4.2 FS? It seems like
things are fairly encapsulated at the cylinder group level
so it might not be that hard to add more groups. Is there
any static-sized global state (e.g. bitmaps in the superblock)
that would make this impossible?
Thought I would go straight to the source rather than
muddling around.
In theory expanding a filesystem is not too difficult. The basic
algorithm is to add more cylinder groups (possibly first expanding
an existing partial cylinder group at the end of the old filesystem).
The easiest way to do this is to update the superblock to reflect
the larger size and zero out the inode blocks in the new cylinder
groups (if any). Then run fsck to update the bit maps in the new or
expanded cylinder groups. The only caveat is that the superblock
summary maps are allocated in the data fragments immediately
following the inodes in the first cylinder group. If you add enough
new cylinder groups to overflow the previously allocated fragments,
you will have to relocate the immediately following fragment to make
room for the expanded summary information. On a filesystem with 1K
fragments, each fragment holds summaries for 64 cylinder groups,
so you can only easily increase (i.e. without relocating an existing
file) the total number of cylinder groups to a multiple of 64.
~Kirk
---------
3. A new tip (mike)
[ Mike fixed the easy stuff: ripped out most of the escape sequences
and dialer support, reduced to one process, cleanup tty on exit. ]
Things that are wrong with tip in the environment we use it for
(remote console access):
- Inflexible authentication model. If there is no lock file and you
can access the tty, you are in. We need to verify a user ID and tty
combo from a database.
- Obsolete escape sequences. Not only are useless, but interfere with
running things like emacs.
- Ineffective cleanup. You kill one half of the tip, the other side
might get left around, the lock file left, the tty left screwed up,
you name it.
- Obsolete or inefficient model. The two-process input/output model
hardly seems worthwhile. A simple select-based scheme is probably
more efficient in the modern age.
- No direct remote access. You must run tip on the machine with the
serial line. You can r/slogin to that machine from anywhere, but
there is an extra layer of program.
- Inadequate logging. We introduced a layer between the tty and tip
to provide good logging. Shouldn't be necessary.
What we want is something along the lines of our current capture,
a server per serial port which:
- always logs to a disk file,
- allows one (or multiple) users can connect via sockets and get output
from (or provide input to) the serial line,
- ensures all such connections are access checked, with access checking
abstracted to allow for different implementations,
- supports few (no?) magic escape sequences,
- possibly encrypts traffic,
4. Make DNARDs useful (mike)
Have someone produce interesting software for the DNARDs. If they
are going to be source/sinks, make useful standalone OSKit kernels
to avoid needing NetBSD if possible. Start with the oskit traffic-gen
programs and beef them up (i.e., make them work on the DNARDs, make
them remotely, dynamically controllable).
5. Teach tcpdump about spanning tree and other inter-switch traffic (mike)
Even if it could just make it easier to identify in the output,
or even better, give us a simple handle so that we can exclude it
(e.g., "tcpdump not switchtraffic") I am reminded of this by seeing
the never-ending stream of "Unknown IPX Data" packets.
6. Reduce (or eliminate) logging in default OSes (mike)
The standard daily/weekly/monthly activities are occurring and
sending mail to root (at least in our FreeBSD image). We should
either eliminate this or, better, reduce it and have it logged
on plastic or paper. We should at least do some security checking
and mail any anomalies to testbed-ops or someplace so we know if
some machine has been cracked.
7. Reduce power usage (mike)
We should do what we can to reduce excess power usage. The most
obvious thing to do is turn machines off when they are not assigned.
The benefits are:
- maximum power savings
- reduced vulnerability to script kiddies
- longer component life?
- no rc5des!
The downsides are:
- can't use unassigned machines for other purposes (abone)
- don't save anything if the testbed is in use 24/7/365
- frequent transitions would be harder on the HW
At the very least, we should make our scripts capable of dealing
with this model. For example, os_setup would need to check and see
if the machine is powered down and, if so, turn it on. Likewise,
deassignment should turn the machine off. Note we will need to
differentiate "down to save power" from "down cuz it emits large
billows of black smoke when turned on." Autostatus would have to
be taught to show "available/assigned/down" instead of "up/down".
To avoid excess transitions due to frequent reassignment, we can
delay shutting down a machine "for a while" after an experiment
has ended. The end-experiment algorithm might look like:
if someone is waiting for an available node,
immediately reassign/reload this one
else
"clean" (reload/zero) the disk
if the node still isn't needed,
power it down
That would give a 5-10 minute window for reclamation.
What can we do for machines that are turned on? For assigned
machines we probably can't dictate much. The best we can do
is make our default kernels "green". Both Linux and FreeBSD
probably idle the CPU, so we are probably ok there. Not sure
about spinning down the disk. Because of daemons and logging it
might be difficult to keep the disk spun down. Dave/Kevin/Steve
worked on this some on the Jaz-disk test machines. Some keys are:
- shutdown as many daemons as possible
- reduce logging and log across NFS if possible
- move unimportant logging to a memory disk
Maybe we should disconnect one of those big case fans in each
machine or get temperature regulated fans.
Of course, the most important thing to do is determine whether
we really have a problem and what components suck the most power.
8. Get ARM/Linux running on the DNARDs (mike)
I spent a couple of days on this, long enough to get a diskless
system basically working, figured out how to build a kernel, and
discover all the problems that we need to fix. For the complete
lowdown on my long, strange trip into DNARD/Linux, see
~mike/flux/doc/linux-dnard.txt.
Here are some of the things we still need to do:
1. Linux is not well setup for operating a large number
of diskless clients. It has provisions for booting each node
with a root of /tftpboot/<ip-addr> and then all mounting a
common /usr, but the root filesystem is still on the order
of 40MB. 10MB of this is /lib, which has lots of shared
libraries (glibc alone is 4MB) needed for binaries in /sbin.
14MB is /var, most of which is the RPM database (since this
disk images was loaded with about every package known to man).
Even if we go with the 40MB roots, I still had to hack some
startup files to deal with the NFS root. In particular, /
must be in the fstab but fsck will fail if / is an NFS
filesystem (duh!) Made a gross hack to deal with that
(look for .I_am_an_NFS_rootfilesystem) in rc.sysinit.
Also make sure ONBOOT=no in ifcfg-eth0 else it will hang
trying to initialize eth0 (which was already inited because
of NFS root).
2. There is a known NFS bug in pre-2.4 kernels which cause
much grief with diskless systems. Has to do with the old
open-and-unlink-a-file-but-still-have-access semantic.
We need a newer kernel.
3. Apparently you cannot use the PIT to get a periodic
interrupt on the DNARDs. Thought this was a Linux problem
but NetBSD doesn't use it either. Both use the RTC at 64Hz.
However, the Netwinder application base we are using doesn't
recognize 64Hz as a valid value and defaults to 100Hz.
Probably throwing lots of timing related things off.
We need to rebuild the appropriate shared library and
affected static binaries.
4. Related to #3 is just the general problem that the Linux
setup relies on mish-mash of kernel/binary releases.
We should build our own system from the sources. The
kernel may always be a problem since the Shark code is
bit-rotting in the ARM linux tree.
5. Reboot doesn't work, it just hangs.
This is a snapshot of the current source code and CVS logs for
the software that runs "emulab" at the University of Utah,
http://www.emulab.net/
Welcome to Emulab!
NOTE: See the file RESTRICTED-RIGHTS for restrictions on this interim
snapshot. In summary, you can't redistribute it or use it for
commercial purposes. Soon we will provide a better, redistributable
version.
This is the "official" source code for the software that runs the Emulab
network testbed at the University of Utah, as well as dozens of testbeds at
other sites around the world.
http://www.emulab.net/
HOW TO
Copy and localize the 'defs-default' file for your environment
and run ./configure.
This is a snapshot of a rapidly evolving system. It contains all Emulab
source required to build a running testbed, but interaction with Emulab
admins at Utah and elsewhere will likely be required to get things up
and running.
This is a snapshot, not a formal distribution, so don't expect
great documentation. See the files in the 'doc' directory.
To get started, see doc/setup*.
Emulab is being actively developed, so there may be features in deployed
Emulabs (in particular, Utah's) that are not included in this release.
Emulab is also a research project, and is rapidly evolving to satisfy the
needs of both our research needs and external researchers. For that reason,
you might find bugs! We hope you will tell us about them (nicely) and maybe
even help us to fix them. More on this below.
HELP
For help and to report bugs and problems, mail
testbed-ops@flux.cs.utah.edu
HOW TO SETUP AN EMULAB
The Emulab installation documentation is located on the Utah Emulab Wiki:
https://users.emulab.net/trac/emulab/wiki/InstallRoot
Don't be shy! No one's ever tried this before but us,
although we have cloned ours internally, which should
have caught most of the Utah'isms.
We are happy to get on the phone with you, too,
for "big picture" issues and problems.
HOW TO UPDATE AN EMULAB
Updating your existing Emulab is a bit harder than a fresh install, but is
mostly automated. A process that we hope will work for most sites is
located on the Utah Emulab Wiki:
http://users.emulab.net/trac/emulab/wiki/InstallRoot
under "Upgrade Documentation."
Jay Lepreau, lepreau@cs.utah.edu, 801-581-4285
February 26, 2002
TRACKING THE EMULAB SOURCE CODE
We encourage you to track the Emulab source code in real time and stay
current with our stable versions. More info on how to access the
Emulab source code repository is here:
http://users.emulab.net/trac/emulab/wiki/GitRepository
MAILING LISTS
If you are bringing up an Emulab, be sure to join the mailing list:
emulab-admins@googlegroups.com
http://groups.google.com/group/emulab-admins
which has open archives.
Users of your Emulab should join the Emulab users group, which is intended
for all users of Emulabs anywhere, to help each other:
emulab-users@googlegroups.com
http://groups.google.com/group/emulab-users
HELP/CONTACT INFORMATION
For help and to report bugs and problems, mail to
emulab-admins@googlegroups.com
Don't be shy! In most cases, you will have the same questions other people
have. Search the archives, too! There is lots of good information there.
COPYRIGHT, LICENSE, AND DISTRIBUTION
Emulab is copyrighted by the Flux Research Group and the University of Utah.
This release of the Emulab software is distributed under the terms of the GNU
Affero General Public License, version 3 (AGPLv3). The AGPLv3 is a popular
open source license; see the file AGPL-COPYING for licensing conditions. The
AGPLv3 consists of the GNU General Public License version 3 (GPLv3) with a
single short addition (Section 13), which requires that the source be freely
available to all users who interact with the software through a network.
The Emulab source tree contains various third-party, open-source packages that
are used by Emulab. These third-party packages are copyrighted and licensed as
described in their source files.
The development of Emulab has been supported by numerous organizations
including NSF, DARPA, Intel, HP, Microsoft, Novell, Nortel, and the University
of Utah. We thank all of these organizations for making Emulab possible.
The following statement is required by DARPA and pertains to DARPA's support
for portions of the Emulab software:
DoD Distribution Statement A: Approved for public release; distribution is
unlimited.
DOCUMENTATION
All of the Emulab documentation is available from the Utah Emulab site:
http://users.emulab.net/trac/emulab/wiki
We encourage people to help us improve our documentation. If you want to
make changes, please apply for an account at Utah; anyone with an account
at the Utah Emulab is allowed to edit the Wiki pages.
Other good places to start would include:
- The search box at www.emulab.net
- The Emulab Wiki (http://users.emulab.net/trac/emulab/wiki)
- Getting Started document (http://users.emulab.net/trac/emulab/wiki/Auth)
- The user tutorial (http://users.emulab.net/trac/emulab/wiki/Tutorial)
- The user FAQ (http://users.emulab.net/trac/emulab/wiki/FAQ)
- Papers and talks about Emulab (http://www.emulab.net/pubs.php3)
- Papers using Emulab (http://www.emulab.net/expubs.php)
QUICK TOUR
- The database maintains most testbed state.
* Assorted modules (db/*.pm.in) are the main DB interface for testbed
software.
* sql/database-create.sql contains the DB schema.
- The Web interface (www/*) is the primary means of managing and
interfacing with the system. There is also an experimental
standalone GUI that uses this interface.
- The tbsetup and backend directories contain the bulk of the server-side
experiment setup and management code.
* startexp (tbsetup/startexp.in) is the back end for experiment creation.
Important scripts it calls include tbprerun (tbsetup/tbprerun.in)
and tbswap (tbsetup/tbswap.in).
* ns2ir (tbsetup/ns2ir/*) converts NS files to DB state (via TCL and XML).
* snmpit (tbsetup/snmpit.in) configures VLANs on switch hardware.
- assign (assign/*) maps experiments to available hardware.
- The frisbee subsystem (os/frisbee.redux, os/imagezip) is used for the
creation and rapid deployment of disk images.
- The client-driven node configuration is handled by scripts on the client
which communicate with the server via a custom configuration protocol.
The server- and client-side of this mechanism is in the tmcd subdir.
- capture and console (capture/*, tip/*) provide serial line access to nodes.
- dynamic node and experiment control is provided via the Emulab event
system and its assorted agents (event/*).
SOURCE TREE ORGANIZATION
account - Account creation and management
apache - Apache HTTPD configuration
assign - Resource allocation software
backend - Server-side of the Emulab XML-RPC interface
bugdb - Optional per-project bug database
capture - Node serial line server software
cdrom - Software related to CD-booting local and remote machines
collab - Optional per-project "collaboration" tools: CVS, jabber, mailman
db - Variety of interfaces to testbed state
delay - RHL9 patches for supporting "end-node" traffic shaping
dhcpd - DHCPD configuration
doc - Documentation (mainly internal)
event - Event System
firewall - Code and notes for per-experiment control net firewalls
flash - Software related to flash-dongle-booting local and remote machines
hyperviewer - 3D experiment visualization tool (not used)
image-test - Test framework for auto-testing of new OS images
install - Site installation scripts
ipod - "Ping of Death" software/patches
lib - C/C++ interface libraries
mote - Initial testbed support for Berkeley/Crossbow motes
named - BIND configuration files
os - Client-side software (disk loading, route calculation, etc.)
patches - Patches needed to compile standard software packages
pelab - Preliminary support for "Flexlab," an Emulab/PlanetLab hybrid
(see http://www.cs.utah.edu/flux/flexlab/)
protogeni - Evolving software for a prototype GENI system based on Emulab
(see http://www.protogeni.net/)
pxe - Software related to PXE-booting machines
rc.d - Server-side startup scripts
robots - Support for mobile wireless (Garcia robots)
security - Tools for secure boss node access
sensors - Node monitoring daemons
sql - Database schema and initialization
ssl - SSL Certificate configurations
sysadmin - Apache Log Roller
tbsetup - Experiment creation and manipulation
testsuite - Automated testing suite
tip - Node serial line client software
tmcd - Testbed master control daemon and client (for node configuration)
tools - Miscellaneous infrastructure tools
utils - Testbed configuration and maintenance tools
vis - Experiment visualization
wiki - Support for per-project Wikis
www - Web Interface / User Documentation
xmlrpc - Programatic XML-RPC interface to testbed
Good luck!
The Emulab Team
Except for any files marked with the GNU Public License, or that bear
non-Utah copyrights and are unchanged from the original (eg, cracklib
and healthd), this emulab code snapshot has VERY RESTRICTED RIGHTS,
notwithstanding any per-file copyrights to the contrary.
This early snapshot of the emulab code is for use only for your own
research or teaching, cannot be used for commercial purposes, and
CANNOT BE REDISTRIBUTED. You must exercise reasonable precautions to
assure these conditions are met (e.g., make your group's members aware
of these restricted rights, and limit access to your group's members).
Soon, we will provide a somewhat more polished version that will be
redistributable, and have internal copyrights saying so. When that is
provided you must destroy this version.
February 26, 2002
Jay Lepreau, lepreau@cs.utah.edu, 801-581-4285
School of Computing
University of Utah
50 S. Central Campus Dr. Rm. 3190
Salt Lake City, UT 84112
This diff is collapsed.
For Elab interface to Plab
==BUGS
-Need more randomness in plab node selection, or keeps allocing
the bad ones with low loadavgs. Mike/Rob's idea is to add to load
a little bit if fails or is alloced, but every 5 mins that will get
wiped out: not good enough.
THIS IS A BIG PRACTICAL PROBLEM! When "fatal" is set, the retry gets
the same physnodes every time, therefore never succeeding. And
growing an expt to its full size via modify often fails because of this,
too.
-vnodesetup on a failed node not releasing the lease
-vnode setup on 122-4 in 'chknodes' expt 9/20: it thinks it succeeded,
but it didn't. Get permission denied when try to ssh in. Not checking
return code on the close's?
In teardown portion of chknodes it discovers this:
vnode plab122-4 teardown on plab122 returned 65280.
*** /usr/testbed/sbin/vnode_setup:
Virtual node plab122-4 teardown failure!
Node plab122-4 wasn't really allocated
This appears really to be a DB consistency problem.
It alloc'ed, then freed the node. Never did full setup.
==FEATURES
-Ask for "all nodes"
-Shrink the virtnodes table when a node fails?
Problem: It's unintuitive
that swapping out and swapping back in won't bring back the failed nodes.
Note that "modify" will bring them back.
-First class or good support for 'site'
- Ability to spread the nodes around
- Intuit when new nodes join
- Sortable Web page displaying them hierarchically
- Interaction with load metrics if not .99, and UI to it?
and probably the other criteria that Brent mentioned in his mail of 9/9
-Early abort if "cannot fail" is set and get a failed node
-Merge ron/pcwas/plab as much as possible and makes sense (eg showsites).
(-Modify when no nodes change?
fix-node ok hack may not be good idea in long run)
-When can't map because of fix-nodes not available, tell the user
why. (maybe won't occur if the modify fix is done).
==MAINTENANCE
-Document all the installation/maintenance issues.
Formalize the log of hostname/aux_type manual overrides.
...
==TESTING
-Build (regression) tests
==DOCUMENTATION
-Document Plab support. A few things aren't in the email and proto file,
e.g. how to queue, what cpu-usage and admission control map to.
-Describe/outline the internals of plab support, eg the process involved.
Version: $Format:%H %ci$
#!/usr/bin/perl -w
#
# Copyright (c) 2000-2007 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
# This file is part of the Emulab network testbed software.
#
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
# License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this file. If not, see <http://www.gnu.org/licenses/>.
#
# }}}
#
use English;
#
# This gets invoked from the Web interface. Simply a wrapper ...
# Automatically generated from the template in the toplevel dir.
#
#
# Configure variables
#
my $PROG = "@PROGTOINVOKE@";
#
# Run the real thing, and never return.
#
exec $PROG, @ARGV;
die("Could not exec $PROG: $!");
#
# Copyright (c) 2000-2024 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
# This file is part of the Emulab network testbed software.
#
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
# License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this file. If not, see <http://www.gnu.org/licenses/>.
#
# }}}
#
SRCDIR = @srcdir@
TESTBED_SRCDIR = @top_srcdir@
OBJDIR = ..
SUBDIR = account
UNIFIED = @UNIFIED_BOSS_AND_OPS@
include $(OBJDIR)/Makeconf
SBIN_STUFF = tbacct addsfskey addpubkey mkusercert quotamail genpubkeys \
newuser newproj mksyscert spewcert dumpuser dumpproject \
manageremote regencerts
LIBEXEC_STUFF = webtbacct webaddsfskey webaddpubkey webmkusercert \
webnewuser webnewproj webspewcert webmanageremote
CTRLSBIN_STUFF = adduserhook accountsetup
# These scripts installed setuid, with sudo.
SETUID_BIN_SCRIPTS =
SETUID_SBIN_SCRIPTS = tbacct addpubkey mkusercert mksyscert
SETUID_LIBX_SCRIPTS =
ifeq ($(PROTOGENI_SUPPORT),1)
SBIN_STUFF += manageremote
SETUID_SBIN_SCRIPTS += manageremote
endif
#
# Targets
#
ifeq ($(STANDALONE_CLEARINGHOUSE),0)
TARGETS = $(SBIN_STUFF) $(LIBEXEC_STUFF) $(CTRLSBIN_STUFF)
else
TARGETS = mksyscert
SETUID_SBIN_SCRIPTS = mksyscert
endif
#
# Force dependencies on the scripts so that they will be rerun through
# configure if the .in file is changed.
#
all: $(TARGETS)
include $(TESTBED_SRCDIR)/GNUmakerules
ifeq ($(STANDALONE_CLEARINGHOUSE),0)
install: boss-install
else
install: clrhouse-install
endif
boss-install: all script-install
@echo "Don't forget to do a post-install as root"
script-install: $(addprefix $(INSTALL_SBINDIR)/, $(SBIN_STUFF)) \
$(addprefix $(INSTALL_LIBEXECDIR)/, $(LIBEXEC_STUFF)) \
$(addprefix $(INSTALL_DIR)/opsdir/sbin/, $(CTRLSBIN_STUFF))
post-install:
chmod 775 $(INSTALL_BINDIR)
chmod 775 $(INSTALL_SBINDIR)
chmod 775 $(INSTALL_LIBDIR)
chmod 775 $(INSTALL_LIBEXECDIR)
chown root $(INSTALL_SBINDIR)/tbacct
chmod u+s $(INSTALL_SBINDIR)/tbacct
chown root $(INSTALL_SBINDIR)/addpubkey
chmod u+s $(INSTALL_SBINDIR)/addpubkey
chown root $(INSTALL_SBINDIR)/mkusercert
chmod u+s $(INSTALL_SBINDIR)/mkusercert
control-install:
hook-install: $(addprefix $(INSTALL_DIR)/opsdir/sbin/, $(CTRLSBIN_STUFF))
# Clearinghouse install.
clrhouse-install: $(INSTALL_SBINDIR)/mksyscert
# This rule says what web* script depends on which installed binary directory.
$(LIBEXEC_STUFF): $(INSTALL_SBINDIR)
# Just in case the dirs are not yet created,
$(INSTALL_SBINDIR):
# And then how to turn the template into the actual script.
$(LIBEXEC_STUFF): $(TESTBED_SRCDIR)/WEBtemplate.in
@echo "Generating $@"
cat $< | sed -e 's,@PROGTOINVOKE@,$(word 2,$^)/$(subst web,,$@),' > $@
clean:
rm -f *.o core
$(INSTALL_DIR)/opsdir/sbin/%: %
@echo "Installing $<"
-mkdir -p $(INSTALL_DIR)/opsdir/sbin
$(INSTALL) $< $@