Commit fcad5296 authored by Gary Wong's avatar Gary Wong

Add Emulab manual.

parent e6f18e2c
Pipeline #381 failed with stage
......@@ -5,6 +5,7 @@ TOPLEVEL=apt-manual
SCRIBBLEFILES=$(wildcard *.scrbl)
SCREENSHOTFILES=$(wildcard screenshots/*)
all: each
pdf: pdf/apt-manual.pdf pdf/cloudlab-manual.pdf pdf/phantomnet-manual.pdf
pdf: pdf/apt-manual.pdf pdf/cloudlab-manual.pdf pdf/phantomnet-manual.pdf \
apt: $(SOURCES)
scribble --htmls ++style apt-manual.css $(TOPLEVEL).scrbl
......@@ -25,6 +27,9 @@ cloudlab: $(SOURCES)
phantomnet: $(SOURCES)
scribble --htmls ++style phantomnet-manual.css ++arg pnet phantomnet-manual.scrbl
emulab: $(SOURCES)
scribble --htmls ++style emulab-manual.css ++arg elab emulab-manual.scrbl
pdf/apt-manual.pdf: $(SOURCES)
scribble --dest pdf/ --pdf ++arg pdf $(TOPLEVEL).scrbl
......@@ -34,14 +39,18 @@ pdf/cloudlab-manual.pdf: $(SOURCES)
pdf/phantomnet-manual.pdf: $(SOURCES)
scribble --dest pdf/ --pdf ++arg pnet ++arg pdf phantomnet-manual.scrbl
each: apt cloudlab phantomnet
pdf/emulab-manual.pdf: $(SOURCES)
scribble --dest pdf/ --pdf ++arg elab ++arg pdf emulab-manual.scrbl
each: apt cloudlab phantomnet emulab
.PHONY: apt cloudlab phantomnet all each clean install-dev install-live
.PHONY: apt cloudlab phantomnet emulab all each clean install-live install-cloudlab install-phantomnet install-emulab
-rm -rf $(TOPLEVEL)/
-rm -rf cloudlab-manual/
-rm -rf phantomnet-manual/
-rm -rf emulab-manual/
-rm -rf pdf/*
-rm *.bak
-rm *.tex
......@@ -61,3 +70,7 @@ install-cloudlab: cloudlab pdf/cloudlab-manual.pdf
install-phantomnet: phantomnet pdf/phantomnet-manual.pdf
-rsync -v -az -e ssh --delete phantomnet-manual/ $(INSTALL_PNET)
scp pdf/phantomnet-manual.pdf $(INSTALL_PNET)/manual.pdf
install-emulab: emulab pdf/emulab-manual.pdf
-rsync -v -az -e ssh --delete emulab-manual/ $(INSTALL_ELAB)
scp pdf/emulab-manual.pdf $(INSTALL_ELAB)/manual.pdf
......@@ -2,8 +2,9 @@
This repository contains the documentation for multiple testbed
environments---currently [Apt](,
[CloudLab](, and [PhantomNet](
The three have similar user interfaces and
[CloudLab](, [PhantomNet](,
and [Emulab](
The four have similar user interfaces and
concepts, so each share much documentation in common.
......@@ -50,6 +51,12 @@ To build PhantomNet HTML pages only:
make phantomnet
To build Emulab HTML pages only:
make emulab
To build PDFs for all testbeds: (warning: can be quite slow)
......@@ -59,8 +66,8 @@ To build PDFs for all testbeds: (warning: can be quite slow)
### Viewing
Simply open `apt-manual/index.html`, `cloudlab-manual/index.html`,
or `phantomnet-manual/index.html` in your browser. PDFs are placed
in the `pdf/` subdirectory.
`phantomnet-manual/index.html`, or `emulab-manual/index.html` in your browser.
PDFs are placed in the `pdf/` subdirectory.
......@@ -18,11 +18,14 @@
((vector-member "pnet" (current-command-line-arguments))
((vector-member "elab" (current-command-line-arguments))
(else 'apt)))
(define (apt?) (if (equal? tb-mode 'apt) #t #f))
(define (clab?) (if (equal? tb-mode 'clab) #t #f))
(define (pnet?) (if (equal? tb-mode 'pnet) #t #f))
(define (elab?) (if (equal? tb-mode 'elab) #t #f))
; Check to see if we are building for web or PDF; there is probably some
; nicer way to do this by inspecting the scribble/run state directly, but
......@@ -32,17 +35,19 @@
(define (apt-vs-clab #:apt [apt-version (list)] #:clab [clab-version (list)] #:pnet [pnet-version (list)])
(define (apt-vs-clab #:apt [apt-version (list)] #:clab [clab-version (list)] #:pnet [pnet-version (list)] #:elab [elab-version (list)])
(case tb-mode
('apt apt-version)
('clab clab-version)
('pnet pnet-version)))
('pnet pnet-version)
('elab elab-version)))
(define (apt-vs-clab* #:apt [apt-version ""] #:clab [clab-version ""] #:pnet [pnet-version ""])
(define (apt-vs-clab* #:apt [apt-version ""] #:clab [clab-version ""] #:pnet [pnet-version ""] #:elab [elab-version ""])
(decode-flow (list (case tb-mode
('apt apt-version)
('clab clab-version)
('pnet pnet-version)))))
('pnet pnet-version)
('elab elab-version)))))
(define (apt-only . stuff)
(apt-vs-clab #:apt stuff))
......@@ -53,28 +58,35 @@
(define (pnet-only . stuff)
(apt-vs-clab #:pnet stuff))
(define (elab-only . stuff)
(apt-vs-clab #:elab stuff))
(define apt-base-url
(case tb-mode
('apt "")
('clab "")
('pnet "")))
('pnet "")
('elab "")))
(define apt-doc-url
(case tb-mode
('apt "")
('clab "")
('pnet "")))
('pnet "")
('pnet "")))
(define forum-url
(case tb-mode
('apt "!forum/apt-users")
('clab "!forum/cloudlab-users")
('pnet "!forum/phantomnet-users")))
('pnet "!forum/phantomnet-users")
('elab "!forum/emulab-users")))
(define tb (lambda () (case tb-mode
('apt "Apt")
('clab "CloudLab")
('pnet "PhantomNet"))))
('pnet "PhantomNet")
('elab "Emulab"))))
; We want the 'version' to be the date of the most recent commit
(define apt-version
......@@ -105,6 +117,7 @@
(let* ([aptpath (string-append "screenshots/apt/" path)]
[clabpath (string-append "screenshots/clab/" path)]
[pnetpath (string-append "screenshots/pnet/" path)]
[elabpath (string-append "screenshots/elab/" path)]
[fullpath (case tb-mode
('apt aptpath)
......@@ -114,7 +127,11 @@
(if (file-exists? pnetpath)
(cdr (cons (displayln (string-append "WARNING: PhantomNet missing screenshot " path)) aptpath)))))]
(cdr (cons (displayln (string-append "WARNING: PhantomNet missing screenshot " path)) aptpath))))
(if (file-exists? elabpath)
(cdr (cons (displayln (string-append "WARNING: Emulab missing screenshot " path)) aptpath)))))]
[b (make-object bitmap% fullpath)]
[width (send b get-width)]
[scale-factor (* 1.0 (/ screenshot-width width))])
* Overrides some of Scribble's default stying to match Emulab's colors
@import url(,400,700);
@import url(,400italic,700,700italic,300,300italic);
.navsettop, .navsetbottom, .tocset {
background-color: black;
color: white;
.navsettop, .navsetbottom, .tocset td a {
color: white;
.tocset td a.tocviewselflink {
color: inherit;
font-weight: bolder;
.navsettop a, .navsetbottom a {
color: inherit;
.navsettop .nonavigation, .navsetbottom .nonavigation {
color: #bbb;
.navsettop a:hover, .navsetbottom a:hover {
background: #7f3300;
.tocviewsublist, .tocviewsublistonly, .tocviewsublisttop, .tocviewsublistbottom {
border-left: 1px solid #bbb;
.refcolumn {
background: #adc4cc;
border-color: #0099cc;
* Override some of the default fonts
body, .main {
font-family: 'Roboto', sans-serif;
font-weight: lighter;
h1, h2, h3, h4, h5, h6 {
font-family: 'Roboto Slab', serif;
.SAuthorListBox {
font-family: 'Roboto Slab', serif;
font-weight: lighter;
.tocset td, .navsettop, .navsetbottom {
font-family: 'Roboto', sans-serif;
#lang scribble/manual
@(require racket/date)
@(require "defs.rkt")
@title[#:version apt-version
#:date (date->string (current-date))]{The Emulab Manual}
"Eric Eide" "Robert Ricci" "Jacobus (Kobus) Van der Merwe" "Leigh Stoller" "Kirk Webb" "Jon Duerig" "Gary Wong" "Keith Downie" "Mike Hibler"
@italic[(if (equal? doc-mode 'pdf)
(list "The HTML version of this manual is available at " (hyperlink apt-doc-url apt-doc-url))
(list "This manual is also available as a " (hyperlink "" "PDF")))]
Emulab is a network testbed, giving researchers a wide range of
environments in which to develop, debug, and evaluate their
systems. The name Emulab refers both to a facility and to a software
system. The primary Emulab installation is run by the
@hyperlink[""]{Flux Research Group}, part of the
@hyperlink[""]{School of Computing} at the
@hyperlink[""]{University of Utah}.
There are also installations of the Emulab software at more than two
dozen sites around the world, ranging from testbeds with a handful of
nodes up to testbeds with hundreds of nodes. Emulab is widely used by
computer science researchers in the fields of networking and
distributed systems. It is also designed to support education, and has
been used to teach classes in those fields.
Emulab is a public facility, available without charge to most
researchers worldwide. If you are unsure if you qualify for use,
please see our policies document, or ask us. If you think you qualify,
you can apply to start a new project.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment