diff --git a/GNUmakefile b/GNUmakefile index 1fff3de26d366ae5d0e603e797e5deb79e11564a..f8d6bb4cc2cd197b6a06f2be79717d31191e0ef4 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -6,6 +6,7 @@ INSTALL_LIVE=ops.emulab.net:/usr/testbed/aptdocs/ INSTALL_CLAB=ops.emulab.net:/usr/testbed/cloudlabdocs/ INSTALL_PNET=ops.emulab.net:/usr/testbed/phantomnetdocs/ INSTALL_ELAB=ops.emulab.net:/usr/testbed/emulabdocs/ +INSTALL_POWDER=ops.emulab.net:/usr/testbed/powderdocs/ SCRIBBLEFILES=$(wildcard *.scrbl) SCREENSHOTFILES=$(wildcard screenshots/*) @@ -18,7 +19,7 @@ SOURCES=$(SCRIBBLEFILES) $(SCREENSHOTFILES) $(DEFSFILE) all: each pdf: pdf/apt-manual.pdf pdf/cloudlab-manual.pdf pdf/phantomnet-manual.pdf \ - pdf/emulab-manual.pdf + pdf/emulab-manual.pdf pdf/powder-manual.pdf apt: $(SOURCES) -mkdir apt-manual/ @@ -48,6 +49,13 @@ phantomnet: $(SOURCES) cp -r $(GENI_LIB_DIR)/docs/build/html phantomnet-manual/geni-lib scribble --htmls ++style phantomnet-manual.css ++arg --pnet ++arg --geni-lib-dir ++arg $(GENI_LIB_DIR) phantomnet-manual.scrbl +powder: $(SOURCES) + -mkdir powder-manual/ + cd $(GENI_LIB_DIR)/docs && $(MAKE) html + -rm -rf powder-manual/geni-lib/ + cp -r $(GENI_LIB_DIR)/docs/build/html powder-manual/geni-lib + scribble --htmls ++style powder-manual.css ++arg --powder ++arg --geni-lib-dir ++arg $(GENI_LIB_DIR) powder-manual.scrbl + emulab: $(SOURCES) -mkdir emulab-manual/ cd $(GENI_LIB_DIR)/docs && $(MAKE) html @@ -64,12 +72,15 @@ pdf/cloudlab-manual.pdf: $(SOURCES) pdf/phantomnet-manual.pdf: $(SOURCES) scribble --dest pdf/ --pdf ++arg --pnet ++arg --pdf phantomnet-manual.scrbl +pdf/powder-manual.pdf: $(SOURCES) + scribble --dest pdf/ --pdf ++arg --powder ++arg --pdf powder-manual.scrbl + 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 emulab all each clean install-live install-cloudlab install-phantomnet install-emulab install-all update-examples +.PHONY: apt cloudlab phantomnet powder emulab all each clean install-live install-cloudlab install-phantomnet install-powder install-emulab install-all update-examples PROFILE_EXAMPLES=$(wildcard code-samples/profile/*/*.py) update-examples: @@ -81,6 +92,7 @@ clean: -rm -rf $(TOPLEVEL)/ -rm -rf cloudlab-manual/ -rm -rf phantomnet-manual/ + -rm -rf powder-manual/ -rm -rf emulab-manual/ -rm -rf pdf/* -rm *.bak @@ -90,7 +102,7 @@ clean: -rm *.out -rm *.png -install-all: install-live install-cloudlab install-phantomnet install-emulab +install-all: install-live install-cloudlab install-phantomnet install-powder install-emulab install-live: apt -rsync -v -az -e ssh --delete apt-manual/ $(INSTALL_LIVE) @@ -101,5 +113,8 @@ install-cloudlab: cloudlab-ga install-phantomnet: phantomnet -rsync -v -az -e ssh --delete phantomnet-manual/ $(INSTALL_PNET) +install-powder: powder + -rsync -v -az -e ssh --delete powder-manual/ $(INSTALL_POWDER) + install-emulab: emulab -rsync -v -az -e ssh --delete emulab-manual/ $(INSTALL_ELAB) diff --git a/defs.rkt b/defs.rkt index b1326aa454f89272fa6aa22a5e093cc9d9a4a3ac..1a99558eb682f10c1596942889554a9fe4cfdbe7 100644 --- a/defs.rkt +++ b/defs.rkt @@ -27,6 +27,7 @@ ["--apt" "Compile manual for Apt" (tb-mode 'apt)] ["--clab" "Compile manual for CloudLab" (tb-mode 'clab)] ["--pnet" "Compile manual for PhantomNet" (tb-mode 'pnet)] + ["--powder" "Compile manual for Powder" (tb-mode 'powder)] ["--elab" "Compile manual for Emulab" (tb-mode 'elab)] #:once-each ["--pdf" "Compile PDF version of the manual" (doc-mode 'pdf)] @@ -37,6 +38,7 @@ (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 (powder?) (if (equal? (tb-mode) 'powder) #t #f)) (define (elab?) (if (equal? (tb-mode) 'elab) #t #f)) (define main-style @@ -47,18 +49,20 @@ (make-css-addition "highlight-default.css")))) -(define (apt-vs-clab #:apt [apt-version (list)] #:clab [clab-version (list)] #:pnet [pnet-version (list)] #:elab [elab-version (list)]) +(define (apt-vs-clab #:apt [apt-version (list)] #:clab [clab-version (list)] #:pnet [pnet-version (list)] #:powder [powder-version (list)] #:elab [elab-version (list)]) (case (tb-mode) ('apt apt-version) ('clab clab-version) ('pnet pnet-version) + ('powder powder-version) ('elab elab-version))) -(define (apt-vs-clab* #:apt [apt-version ""] #:clab [clab-version ""] #:pnet [pnet-version ""] #:elab [elab-version ""]) +(define (apt-vs-clab* #:apt [apt-version ""] #:clab [clab-version ""] #:pnet [pnet-version ""] #:powder [powder-version ""] #:elab [elab-version ""]) (decode-flow (list (case (tb-mode) ('apt apt-version) ('clab clab-version) ('pnet pnet-version) + ('powder powder-version) ('elab elab-version))))) (define (apt-only . stuff) @@ -70,14 +74,21 @@ (define (pnet-only . stuff) (apt-vs-clab #:pnet stuff)) +(define (powder-only . stuff) + (apt-vs-clab #:powder stuff)) + (define (elab-only . stuff) (apt-vs-clab #:elab stuff)) +(define (wireless-only . stuff) + (apt-vs-clab #:pnet stuff #:powder stuff)) + (define apt-base-url (case (tb-mode) ('apt "https://www.aptlab.net/") ('clab "https://www.cloudlab.us/") ('pnet "https://www.phantomnet.org/") + ('powder "https://www.powderwireless.net/") ('elab "https://www.emulab.net/portal/"))) (define apt-doc-url @@ -85,6 +96,7 @@ ('apt "http://docs.aptlab.net/") ('clab "http://docs.cloudlab.us/") ('pnet "http://docs.phantomnet.org/") + ('powder "http://docs.powderwireless.net/") ('elab "http://docs.emulab.net/"))) (define forum-url @@ -92,12 +104,14 @@ ('apt "https://groups.google.com/forum/#!forum/apt-users") ('clab "https://groups.google.com/forum/#!forum/cloudlab-users") ('pnet "https://groups.google.com/forum/#!forum/phantomnet-users") + ('powder "https://groups.google.com/forum/#!forum/phantomnet-users") ('elab "https://groups.google.com/forum/#!forum/emulab-users"))) (define tb (lambda () (case (tb-mode) ('apt "Apt") ('clab "CloudLab") ('pnet "PhantomNet") + ('powder "Powder") ('elab "Emulab")))) ; We want the 'version' to be the date of the most recent commit @@ -129,6 +143,7 @@ (let* ([aptpath (string-append "screenshots/apt/" path)] [clabpath (string-append "screenshots/clab/" path)] [pnetpath (string-append "screenshots/pnet/" path)] + [powderpath (string-append "screenshots/powder/" path)] [elabpath (string-append "screenshots/elab/" path)] [fullpath (case (tb-mode) ('apt aptpath) @@ -140,6 +155,10 @@ (if (file-exists? pnetpath) pnetpath (cdr (cons (displayln (string-append "WARNING: PhantomNet missing screenshot " path)) aptpath)))) + ('powder + (if (file-exists? powderpath) + powderpath + (cdr (cons (displayln (string-append "WARNING: Powder missing screenshot " path)) aptpath)))) ('elab (if (file-exists? elabpath) elabpath diff --git a/geni-lib.scrbl b/geni-lib.scrbl index 6a957dba45d42313095ddcde612ae2ab29df978b..b56d092268032d84eb92b436ebb211a6a671ead0 100644 --- a/geni-lib.scrbl +++ b/geni-lib.scrbl @@ -179,7 +179,7 @@ In each case, an @geni-lib["rspec.pg.IPv4Address" 'id] object is obtained from t constructor (the parameters are the address and the netmask, respectively), and then added to the corresponding interface. -@pnet-only{ +@wireless-only{ @section[#:tag "geni-lib-openepc"]{OpenEPC extensions} @(geni-lib) includes convenience functions to assist constructing diff --git a/powder-manual.css b/powder-manual.css new file mode 100644 index 0000000000000000000000000000000000000000..9deb981c0a6fab384686eca454d85ed040401660 --- /dev/null +++ b/powder-manual.css @@ -0,0 +1,63 @@ +/* + * Overrides some of Scribble's default stying to match PhantomNet's colors + */ + +@import url(http://fonts.googleapis.com/css?family=Roboto+Slab:300,400,700); +@import url(http://fonts.googleapis.com/css?family=Roboto:400,400italic,700,700italic,300,300italic); + +.navsettop, .navsetbottom, .tocset { + background-color: #c00; + 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; +} diff --git a/powder-manual.scrbl b/powder-manual.scrbl new file mode 100644 index 0000000000000000000000000000000000000000..70500536439e0fe80f1a8f6b1ec49ba98b8b072f --- /dev/null +++ b/powder-manual.scrbl @@ -0,0 +1,41 @@ +#lang scribble/manual +@(require racket/date) +@(require "defs.rkt") + +@title[#:version apt-version + #:date (date->string (current-date))]{The POWDER Manual} + +@author[ + "Jacobus (Kobus) Van der Merwe" "Robert Ricci" "Leigh Stoller" "Kirk Webb" "Jon Duerig" "Gary Wong" "Keith Downie" "Mike Hibler" "Eric Eide" +] + +@;{ +@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 "http://docs.powderwiresless.net/manual.pdf" "PDF")))] +} + +Powder is a facility for experimenting on the future of wireless +networking in a city-scale "living laboratory" environment. + +Powder is run by the University of Utah in partnership with Salt Lake +City and the Utah Education and Telehealth Network. + +The Powder facility is built on top of +@hyperlink["http://www.emulab.net/"]{Emulab} and is run by the +@hyperlink["http://www.flux.utah.edu"]{Flux Research Group}, part of the +@hyperlink["http://www.cs.utah.edu/"]{School of Computing} at the +@hyperlink["http://www.utah.edu/"]{University of Utah}. + +@table-of-contents[] + +@include-section["getting-started.scrbl"] +@include-section["users.scrbl"] +@include-section["repeatable-research.scrbl"] +@include-section["creating-profiles.scrbl"] +@include-section["basic-concepts.scrbl"] +@include-section["geni-lib.scrbl"] +@include-section["advanced-topics.scrbl"] +@include-section["hardware.scrbl"] +@include-section["planned.scrbl"] +@include-section["getting-help.scrbl"]