Commit 469ab132 authored by Leigh Stoller's avatar Leigh Stoller

The latest wave of documentation hacking. Changes to numerous to

mention. Suffice to say there are more words.
parent f644ea11
......@@ -99,25 +99,6 @@ or supercomputer.
We are certainly open to suggestions, however, and already plan
to improve the interface in a number of ways.
<h3>A mini-FAQ</h3>
<ul>
<p>
<li><h4>Someone told me to join their project. How do I do that?</h4>
<p>
Go to the 'Join Project' page, fill out the
form, and wait for the project leader to approve you. When
approved you will receive an email message saying so,
and you can then log into the Testbed.
<p>
<li><h4>I'm already a testbed user, but I'm collaborating with
another project. Can I join that project too?</h4>
<p>
Yes, if that project leader approves you.
Do the appropriate stuff on the 'Join Project' page.
<p>
<li><h4>I've been approved. How do I use my account?</h4>
<p>
......@@ -137,19 +118,6 @@ You will also receive an account on the users' master host
nodes' serial line consoles via 'tip' as well as access console log
files.
<p>
<li><h4>You still haven't answered my question. Who can I ask?</h4>
<p>
You can try the other web pages for the testbed, located on the
<a href="http://www.cs.utah.edu/flux/testbed/">testbed
homepage</a>, or in the
<a href="http://www.cs.utah.edu/flux/testbed/doc/">testbed
documentation</a>. After checking those, you may
<a href="mailto:testbed-ops@flux.cs.utah.edu">
send e-mail to testbed-ops@flux.cs.utah.edu</a>.
</ul>
<hr size=2 noshade>
<center>
<!-- Force full window! -->
......@@ -162,10 +130,10 @@ send e-mail to testbed-ops@flux.cs.utah.edu</a>.
</center>
<p align=right>
<font size="-1">
<a href=\"mailto:testbed-ops@flux.cs.utah.edu\">
<a href="mailto:testbed-ops@flux.cs.utah.edu">
Testbed Operations (testbed-ops@flux.cs.utah.edu)</a>
<br>
Last modified on Mar 14, 2001
Last modified on Apr 4, 2001
</font>
</p>
......
<html>
<head>
<title>Emulab - Documentation</title>
<link rel='stylesheet' href='../tbstyle-doc.css' type='text/css'>
</head>
<body>
<basefont size=4>
<center>
<h1>
Documentation
</h1>
</center>
<ul>
<li> <a href="../tutorial/tutorial.html">
Emulab `Getting Started' Tutorial</a>.
<p>
<li> <a href="../faq.html">Emulab Frequently Asked Questions (FAQ)</a>.
<p>
<li> <a href="tmcd.html">Testbed Master Control Daemon (TMCD)
Reference Manual</a>
<p>
</ul>
<hr size=2 noshade>
<center>
<!-- Force full window! -->
<base target=_top>
[<a href="https://www.emulab.net/">Emulab.Net Home</a>]<br>
[<a href="http://www.cs.utah.edu/flux/testbed/">Utah Network Testbed</a>]
[<a href="http://www.cs.utah.edu/flux/">Flux Research Group</a>]
[<a href="http://www.cs.utah.edu/">School of Computing</a>]
[<a href="http://www.utah.edu/">University of Utah</a>]
</center>
<p align=right>
<font size="-1">
<a href=\"mailto:testbed-ops@flux.cs.utah.edu\">
Testbed Operations (testbed-ops@flux.cs.utah.edu)</a>
<br>
Last modified on Apr 2, 2001
</font>
</p>
</body>
</html>
This diff is collapsed.
......@@ -53,6 +53,11 @@
nodes in my experiment are ready?</a>
<li> <a href="#SWS-6">Can I run my own Operating System?</a>
</ul>
<li> <a href="#SEC">Security Issues</a>
<ul>
<li> <a href="#SEC-1">Is Emulab Firewalled?</a>
</ul>
</ul>
<hr>
......@@ -80,14 +85,14 @@
</p>
<li><a NAME="GS-2"></a>
<h3>Someone told me to join their project. How do I do that?</h3>
<h3>How do I join a project?</h3>
<p>
If you are new to the Testbed, simply click on the "Join Project"
link on the Emulab <a href="https://www.emulab.net">Home
Page</a>. You will need to fill in the form with your personal
information, and provide the name of the project you are trying to
join (typically, the <i>Project Leader</i> will have told you the
name of the project). The click on the "Submit" button, and wait
name of the project). Then click on the "Submit" button, and wait
for the project leader to approve you. When approved you will
receive an email message saying so, and you can then log into the
Testbed.
......@@ -101,7 +106,7 @@
<b>users.emulab.net</b>. We require that all Emulab users use ssh. For
example, if your Emulab account name is "joe", then you would do:
<pre>
ssh <b>users.emulab.net</b> -l joe </pre>
ssh users.emulab.net -l joe </pre>
</p>
<p>
Your password starts out the same as the password you initially
......@@ -386,6 +391,23 @@
</p>
</ul>
<hr>
<a NAME="SEC"></a>
<h3>Security Issues</h3>
<ul>
<li><a NAME="SEC-1"></a>
<h3>Is Emulab Firewalled?</h3>
<p>
Yes. Emulab blocks all of the <i>low numbered</i> ports (ports
below 1024), with the exception of port 22 (Secure Shell). This is
for the protection of experimentors, as well as to ensure that an
errant application cannot become the source of a Denial of Service
attack to sites outside of Emulab. If your application requires
external access to other low numbered ports, please contact us to
make special arrangements.
</p>
</ul>
<hr size=2 noshade>
<center>
......
......@@ -33,12 +33,16 @@ Antec IPC3480B</a>, with 300W PS and extra fan.
</ul>
<p>
<li>160 <a href = "http://www.research.digital.com/SRC/iag/">
Compaq DNARD "Sharks"</a> as edge nodes. 233 Mhz StrongARM processors,
32M memory, 10Mbps ethernet, diskless.
Runs NetBSD and custom kernels (OSKit, etc.)
<p>
<li>160 diskless <a href = "http://www.research.digital.com/SRC/iag/">
Compaq DNARD "Sharks"</a> edge nodes (<b>sh[1-20]-[1-8]</b>),
consisting of:
<ul>
<li> 233 Mhz StrongARM processors.
<li> 32MB RAM.
<li> 1 10Mbps ethernet interface.
</ul>
<p>
<li> a server (<b>users.emulab.net</b>), consisting of:
......@@ -118,10 +122,10 @@ The DNARD Sharks are also attached to the big Cisco switch by way of a
</center>
<p align=right>
<font size="-1">
<a href=\"mailto:testbed-ops@flux.cs.utah.edu\">
<a href="mailto:testbed-ops@flux.cs.utah.edu">
Testbed Operations (testbed-ops@flux.cs.utah.edu)</a>
<br>
Last modified on Mar 14, 2001
Last modified on Apr 4, 2001
</font>
</p>
......
......@@ -4,7 +4,12 @@
#
require("defs.php3");
$login_status = "";
$STATUS_LOGGEDIN = 1;
$STATUS_LOGGEDOUT = 2;
$STATUS_LOGINFAIL = 3;
$STATUS_TIMEDOUT = 4;
$login_status = 0;
$login_message = "";
if (isset($login)) {
#
......@@ -12,7 +17,7 @@ if (isset($login)) {
#
if (!isset($uid) ||
strcmp($uid, "") == 0) {
$login_status = "Login Failed";
$login_status = $STATUS_LOGINFAIL;
unset($uid);
}
else {
......@@ -24,14 +29,14 @@ if (isset($login)) {
# DB will not match the hash that came with the other frame.
#
if (CHECKLOGIN($uid) == 1) {
$login_status = "$uid Logged In";
$login_status = $STATUS_LOGGEDIN;
}
elseif (DOLOGIN($uid, $password)) {
$login_status = "Login Failed";
$login_status = $STATUS_LOGINFAIL;
unset($uid);
}
else {
$login_status = "$uid Logged In";
$login_status = $STATUS_LOGGEDIN;
}
}
}
......@@ -40,7 +45,7 @@ elseif (isset($logout)) {
# Logout button pressed.
#
DOLOGOUT($uid);
$login_status = "$uid Logged Out";
$login_status = $STATUS_LOGGEDOUT;
unset($uid);
}
elseif ($uid = GETUID()) {
......@@ -53,36 +58,125 @@ elseif ($uid = GETUID()) {
unset($uid);
break;
case 1:
$login_status = "$uid Logged In";
$login_status = $STATUS_LOGGEDIN;
break;
case -1:
$login_status = "$uid Login Timed Out";
$login_status = $STATUS_TIMEDOUT;
unset($uid);
break;
}
}
switch ($login_status) {
case $STATUS_LOGGEDIN:
$login_message = "$uid Logged In";
break;
case $STATUS_LOGGEDOUT:
$login_message = "$uid Logged Out";
break;
case $STATUS_LOGINFAIL:
$login_message = "Login Failed";
break;
case $STATUS_TIMEDOUT:
$login_message = "Login Timed Out";
break;
}
?>
<html>
<head>
<title>Emulab.Net</title>
<link rel='stylesheet' href='tbstyle.css' type='text/css'>
<script language="JavaScript">
<!--
var sURL = unescape(window.location.pathname);
function refresh()
{
// This version of the refresh function will cause a new
// entry in the visitor's history. It is provided for
// those browsers that only support JavaScript 1.0.
//
window.location.href = sURL;
}
//-->
</script>
<script language="JavaScript1.1">
<!--
function refresh()
{
// This version does NOT cause an entry in the browser's
// page view history. Most browsers will always retrieve
// the document from the web-server whether it is already
// in the browsers page-cache or not.
//
window.location.replace( sURL );
}
//-->
</script>
<script language="JavaScript1.2">
<!--
function refresh()
{
// This version of the refresh function will be invoked
// for browsers that support JavaScript version 1.2
//
// The argument to the location.reload function determines
// if the browser should retrieve the document from the
// web-server. In our example all we need to do is cause
// the JavaScript block in the document body to be
// re-evaluated. If we needed to pull the document from
// the web-server again (such as where the document contents
// change dynamically) we would pass the argument as 'true'.
//
window.location.reload( false );
}
//-->
</script>
<?php
#
# So that the user knows the login timed out.
#
if ($login_status == $STATUS_LOGGEDIN) {
$timeo = $TBAUTHTIMEOUT + 120;
echo "<noscript>
<META HTTP-EQUIV=\"refresh\" CONTENT=\"$timeo\">
</noscript>\n";
$timeo *= 1000;
echo "<script language=\"JavaScript\">
<!--
function doLoad() {
setTimeout(\"refresh()\", $timeo );
}
//-->
</script>\n";
}
#
# So I can test on my home machine easily. This *is* required to make the
# the frames work correctly.
#
echo "<base href=\"$TBBASE/\" target=\"dynamic\">\n";
echo "<link rel='stylesheet' href='tbstyle.css' type='text/css'>
<base href=\"$TBBASE/\" target=\"dynamic\">
</head>\n";
echo "</head>
<body>
<basefont size=5>
<a href=\"$TBBASE/welcome.html\"><b>Emulab.Net Home</b></a>
<basefont size=4>\n";
?>
#
# If logged in, start the refresh process.
#
if ($login_status == $STATUS_LOGGEDIN) {
echo "<body onload=\"doLoad()\">\n";
}
else {
echo "<body>\n";
}
echo "<basefont size=5>
<a href=\"$TBBASE/welcome.html\"><b>Emulab.Net Home</b></a>
<basefont size=4>\n";
<?php
if (isset($uid)) {
echo "<hr>";
$query_result = mysql_db_query($TBDBNAME,
......@@ -163,7 +257,7 @@ echo "<hr>";
echo "<table cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">";
echo "<form action=\"index.php3\" method=\"post\" target=\"fixed\">";
echo "<b>$login_status</b>";
echo "<b>$login_message</b>";
#
# Present either a login box, or a logout box
#
......
......@@ -98,10 +98,10 @@ that will attract attack.
</center>
<p align=right>
<font size="-1">
<a href=\"mailto:testbed-ops@flux.cs.utah.edu\">
<a href="mailto:testbed-ops@flux.cs.utah.edu">
Testbed Operations (testbed-ops@flux.cs.utah.edu)</a>
<br>
Last modified on Mar 14, 2001
Last modified on Apr 4, 2001
</font>
</p>
......
......@@ -49,10 +49,10 @@
</center>
<p align=right>
<font size="-1">
<a href=\"mailto:testbed-ops@flux.cs.utah.edu\">
<a href="mailto:testbed-ops@flux.cs.utah.edu">
Testbed Operations (testbed-ops@flux.cs.utah.edu)</a>
<br>
Last modified on Mar 14, 2001
Last modified on Apr 4, 2001
</font>
</p>
......
......@@ -19,13 +19,48 @@ if (! $query_result) {
TBERROR("Database Error getting node reservation status: $err\n", 1);
}
echo "<table border=1 padding=1>\n";
#
# Count the types up.
#
$numpcs = 0;
$numsharks = 0;
$freepcs = 0;
$freesharks= 0;
while ($r = mysql_fetch_array($query_result)) {
$type = $r["type"];
$eid = $r["eid"];
if ($type == "pc") {
$numpcs++;
}
if ($type == "shark") {
$numsharks++;
}
if ($eid && $eid != "NULL") {
continue;
}
if ($type == "pc") {
$freepcs++;
}
if ($type == "shark") {
$freesharks++;
}
}
echo "<center><h3>
$freepcs of $numpcs PCs Free <br>
$freesharks of $numsharks Sharks Free.
</h3></center>\n";
echo "<table border=1 align=center padding=1>\n";
echo "<tr>
<td><b>ID</b></td>
<td><b>Type</b></td>
<td><b>Reservation Status</b></td>
</tr>\n";
mysql_data_seek($query_result, 0);
while ($r = mysql_fetch_array($query_result)) {
$id = $r["node_id"]; $type = $r["type"];
$res = $r["eid"];
......
......@@ -39,7 +39,19 @@ the <i>server certificate</i>. Be sure to accept it!
<h3>SSH</h3>
We require all users to use Secure Shell (SSH) to log into Emulab
nodes.
nodes.
<h3>Firewalling</h3>
Emulab blocks all of the <i>low numbered</i> ports (ports below 1024),
with the exception of port 22 (Secure Shell). This is for the
protection of experimentors, as well as to ensure that an errant
application cannot become the source of a Denial of Service attack to
sites outside of Emulab. If your application requires external access
to other low numbered ports, please contact us to make special
arrangements.
<h3>Accounts</h3>
......@@ -71,10 +83,10 @@ networks are fully separated between experiments by way of VLANs.
</center>
<p align=right>
<font size="-1">
<a href=\"mailto:testbed-ops@flux.cs.utah.edu\">
<a href="mailto:testbed-ops@flux.cs.utah.edu">
Testbed Operations (testbed-ops@flux.cs.utah.edu)</a>
<br>
Last modified on Mar 14, 2001
Last modified on Apr 4, 2001
</font>
</p>
......
......@@ -337,7 +337,7 @@ function SHOWNODES($pid, $eid) {
<dt>[1]
<dd>Exit value of the node startup command.
<dt>[2]
<dd>User application has reported ready via TMCC.
<dd>User application ready status, reported via TMCC.
</dl>
</blockquote></blockquote></blockquote></blockquote></h4>\n";
}
......
......@@ -53,7 +53,8 @@
<li><b>sh[1-20]-[1-8].emulab.net</b>: Testbed Shark nodes
<p>
The Sharks NetBSD by default, with the filesystems provided via
NFS. You may also boot your own OSKit kernels.
NFS. You may also boot your own OSKit kernels. At this time, no support
is provided for running your own operating system on the Sharks.
<p>
Each Shark has a single 10Mbps ethernet which serves as both the control
......@@ -84,10 +85,10 @@
</center>
<p align=right>
<font size="-1">
<a href=\"mailto:testbed-ops@flux.cs.utah.edu\">
<a href="mailto:testbed-ops@flux.cs.utah.edu">
Testbed Operations (testbed-ops@flux.cs.utah.edu)</a>
<br>
Last modified on Mar 14, 2001
Last modified on Apr 2, 2001
</font>
</p>
......
......@@ -41,7 +41,7 @@ helping to support the network testbed.
</center>
<p align=right>
<font size="-1">
<a href=\"mailto:testbed-ops@flux.cs.utah.edu\">
<a href="mailto:testbed-ops@flux.cs.utah.edu">
Testbed Operations (testbed-ops@flux.cs.utah.edu)</a>
<br>
Last modified on Mar 14, 2001
......
......@@ -5,7 +5,6 @@ H1 { color: #002032; font-weight: bold; font-size: 20pt; margin-top: 10pt}
H2 { color: #002032; font-weight: bold; font-size: 16pt; margin-top: 10pt}
H3 { color: #002032; font-weight: bold; font-size: 14pt; margin-top: 10pt}
H4 { color: #002032; font-weight: bold; font-size: 12pt; margin-top: 10pt}
P { font-size: 10pt }
A { text-decoration: underline }
PRE { margin-left: 30pt; font-size: 8pt }
......
<html>
<head>
<title>Emulab - Advanced Topics Tutorial</title>
<link rel='stylesheet' href='../tbstyle-doc.css' type='text/css'>
</head>
<body>
<basefont size=4>
<center>
<h1>Emulab - Advanced Topics Tutorial</h1>
</center>
<h2>Contents</h2>
<ul>
<li> <a href="#RPMS">Installing RPMS automatically</a>
<li> <a href="#Startupcmd">Starting your application automatically</a>
<li> <a href="#ReadyBits">How do I know when all my nodes are ready?</a>
</ul>
<hr>
<ul>
<li> <a NAME="RPMS"></a>
<h3>Installing RPMS automatically</h3>
<p>
The Testbed NS extension <tt>tb-set-node-rpms</tt> allows you to
specify a (space separated) list of RPMs to install on each of your
nodes when it boots:
<code><pre>
tb-set-node-rpms $nodeA /proj/pid/rpms/silly-freebsd.rpm
tb-set-node-rpms $nodeB /proj/pid/rpms/silly-linux.rpm </code></pre>
The above NS code says to install the <tt>silly-freebsd.rpm</tt> file
on <tt>nodeA</tt>, and the <tt>silly-linux.rpm</tt> on <tt>nodeB</tt>.
RPMs are installed as root when the node first boots, and must reside
on the node's local filesystem, or in a directory that can be reached
via NFS. This is either the project's <tt>/proj</tt> directory, or a
project member's home directory in <tt>/users</tt>.
</p>
<li> <a NAME="Startupcmd"></a>
<h3>Starting your application automatically</h3>
<p>
You can start your application automatically when your nodes boot by
using the <tt>tb-set-node-startup</tt> NS extenstion. The argument is
the pathname of a script or program that is run as the <tt>UID</tt> of
the experiment creator, after the node has reached multiuser mode. You
can specify the same program for each node, or a different program.
For example:
<code><pre>
tb-set-node-startup $nodeA /proj/pid/runme.nodeA
tb-set-node-startup $nodeB /proj/pid/runme.nodeB </code></pre>
will run <tt>/proj/pid/runme.nodeA</tt> on nodeA and
<tt>/proj/pid/runme.nodeA</tt> on nodeB. The programs must reside on
the node's local filesystem, or in a directory that can be reached via
NFS. This is either the project's <tt>/proj</tt> directory, or a
project member's home directory in <tt>/users</tt>.
</p>
<li> <a NAME="ReadyBits"></a>
<h3>How do I know when all my nodes are ready?</h3>
<p>
It is often necessary for your startup program to determine when all
of the other nodes in the experiment have started, and are ready to
proceed. Sometimes called a <i>barrier</i>, this allows programs to
wait at a specific point, and then all proceed at once. Emulab
provides a primitive form of this mechanism using experiment <i>ready
bits</i>, which are set and read using the <a href = "../doc/tmcd.html">
TMCD/TMCC</a>. When an experiment is first configured, the ready bit
for each node is cleared. As each node starts its application and
reaches the point where it must be sure that all other nodes have
started up, it issues a TMCC <tt>ready</tt> command:
<code><pre>
tmcc ready </code></pre>
which tells Emulab's configuration system that the node is ready to
proceed. The node can then poll for the <i>ready count</i> to
determine how many nodes are ready (have issued a tmcc ready command):
<code><pre>
tmcc readycount </code></pre>
which will return the ready count as a string:
<code><pre>
READY=N TOTAL=M </code></pre>
where <tt>N</tt> is the number of nodes that are ready, and <tt>M</tt>
is the total number of nodes in the experiment. An application can
poll the ready count with a simple script, or it can encode the ready
bits check directly into its program. For example, here is a simple
Perl fragment that issues the ready command, and then polls for the
ready count, being sure to delay a small amount between each poll.
<code><pre>
system("tmcc ready");
while (1) {
my $bits = `tmcc readycount`;
if ($bits ~= /READY=(\d*) TOTAL=(\d*)/) {
if ($1 == $2) {
last;
}
}
#
# Please sleep to avoid swamping the TMCD!
#
sleep(1);
} </code></pre>
<i>Note that the ready count is essentially a use-once feature; The
ready count cannot be reinitialized to zero since there is no actual
synchronization happening. If in the future it appears that a
generalized barrier synchronization would be more useful, we will
investigate the implementation of such a feature.</i>
</p>
</ul>
<hr size=2 noshade>
<center>
<!-- Force full window! -->
<base target=_top>
[<a href="https://www.emulab.net/">Emulab.Net Home</a>]<br>
[<a href="http://www.cs.utah.edu/flux/testbed/">Utah Network Testbed</a>]
[<a href="http://www.cs.utah.edu/flux/">Flux Research Group</a>]
[<a href="http://www.cs.utah.edu/">School of Computing</a>]
[<a href="http://www.utah.edu/">University of Utah</a>]
</center>
<p align=right>
<font size="-1">
<a href=\"mailto:testbed-ops@flux.cs.utah.edu\">
Testbed Operations (testbed-ops@flux.cs.utah.edu)</a>
<br>
Last modified on Mar 14, 2001
</font>
</p>
</body>
</html>
This diff is collapsed.
<html>
<head>
<title>Emulab - Advanced Topics Tutorial</title>
<link rel='stylesheet' href='../tbstyle-doc.css' type='text/css'>
</head>
<body>
<basefont size=4>
<center>
<h1>Emulab - Batch Mode Tutorial</h1>
</center>
<h2>
Please check back again later!
</h2>
<hr size=2 noshade>
<center>
<!-- Force full window! -->
<base target=_top>
[<a href="https://www.emulab.net/">Emulab.Net Home</a>]<br>
[<a href="http://www.cs.utah.edu/flux/testbed/">Utah Network Testbed</a>]
[<a href="http://www.cs.utah.edu/flux/">Flux Research Group</a>]
[<a href="http://www.cs.utah.edu/">School of Computing</a>]
[<a href="http://www.utah.edu/">University of Utah</a>]
</center>
<p align=right>
<font size="-1">
<a href=\"mailto:testbed-ops@flux.cs.utah.edu\">
Testbed Operations (testbed-ops@flux.cs.utah.edu)</a>
<br>
Last modified on Mar 14, 2001
</font>
</p>
</body>
</html>
<html>
<head>
<title>Emulab - Advanced Topics Tutorial</title>
<link rel='stylesheet' href='../tbstyle-doc.css' type='text/css'>
</head>
<body>
<basefont size=4>
<center>
<h1>Emulab - Creating your own disk image Tutorial</h1>
</center>