Agenda: install-maddash.htm

File install-maddash.htm, 48.9 KB (added by Brian Candler, 6 years ago)
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5  <meta http-equiv="Content-Style-Type" content="text/css" />
6  <meta name="generator" content="pandoc" />
7  <meta name="author" content="Brian Candler, Network Startup Resource Center" />
8  <title>Install standalone maddash</title>
9  <style type="text/css">code{white-space: pre;}</style>
10  <link href="data:text/css,%2F%2A%0A%20%20%20%20Buttondown%0A%20%20%20%20A%20Markdown%2FMultiMarkdown%2FPandoc%20HTML%20output%20CSS%20stylesheet%0A%20%20%20%20Author%3A%20Ryan%20Gray%0A%20%20%20%20Date%3A%2015%20Feb%202011%0A%20%20%20%20Revised%3A%2021%20Feb%202012%0A%20%20%20%0A%20%20%20%20General%20style%20is%20clean%2C%20with%20minimal%20re%2Ddefinition%20of%20the%20defaults%20or%20%0A%20%20%20%20overrides%20of%20user%20font%20settings%2E%20The%20body%20text%20and%20header%20styles%20are%20%0A%20%20%20%20left%20alone%20except%20title%2C%20author%20and%20date%20classes%20are%20centered%2E%20A%20Pandoc%20TOC%20%0A%20%20%20%20is%20not%20printed%2C%20URLs%20are%20printed%20after%20hyperlinks%20in%20parentheses%2E%20%0A%20%20%20%20Block%20quotes%20are%20italicized%2E%20Tables%20are%20lightly%20styled%20with%20lines%20above%20%0A%20%20%20%20and%20below%20the%20table%20and%20below%20the%20header%20with%20a%20boldface%20header%2E%20Code%20%0A%20%20%20%20blocks%20are%20line%20wrapped%2E%20%0A%20%0A%20%20%20%20All%20elements%20that%20Pandoc%20and%20MultiMarkdown%20use%20should%20be%20listed%20here%2C%20even%20%0A%20%20%20%20if%20the%20style%20is%20empty%20so%20you%20can%20easily%20add%20styling%20to%20anything%2E%0A%20%20%20%20%0A%20%20%20%20There%20are%20some%20elements%20in%20here%20for%20HTML5%20output%20of%20Pandoc%2C%20but%20I%20have%20not%20%0A%20%20%20%20gotten%20around%20to%20testing%20that%20yet%2E%0A%2A%2F%0A%20%0A%2F%2A%20NOTES%3A%0A%20%0A%20%20%20%20Stuff%20tried%20and%20failed%3A%0A%20%20%20%20%0A%20%20%20%20It%20seems%20that%20specifying%20font%2Dfamily%3Aserif%20in%20Safari%20will%20always%20use%20%0A%20%20%20%20Times%20New%20Roman%20rather%20than%20the%20user%27s%20preferences%20setting%2E%0A%20%20%20%20%0A%20%20%20%20Making%20the%20font%20size%20different%20or%20a%20fixed%20value%20for%20print%20in%20case%20the%20screen%20%0A%20%20%20%20font%20size%20is%20making%20the%20print%20font%20too%20big%3A%20Making%20font%2Dsize%20different%20for%20%0A%20%20%20%20print%20than%20for%20screen%20causes%20horizontal%20lines%20to%20disappear%20in%20math%20when%20using%20%0A%20%20%20%20MathJax%20under%20Safari%2E%0A%2A%2F%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Front%20Matter%20%2D%2D%2D%2D%20%2A%2F%0A%20%0A%2F%2A%20Pandoc%20header%20DIV%2E%20Contains%20%2Etitle%2C%20%2Eauthor%20and%20%2Edate%2E%20Comes%20before%20div%23TOC%2E%20%0A%20%20%20Only%20appears%20if%20one%20of%20those%20three%20are%20in%20the%20document%2E%0A%2A%2F%0A%20%0Adiv%23header%2C%20header%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Put%20border%20on%20bottom%2E%20Separates%20it%20from%20TOC%20or%20body%20that%20comes%20after%20it%2E%20%2A%2F%0A%20%20%20%20border%2Dbottom%3A%201px%20solid%20%23aaa%3B%0A%20%20%20%20margin%2Dbottom%3A%200%2E5em%3B%0A%20%20%20%20%7D%0A%20%0A%2Etitle%20%2F%2A%20Pandoc%20title%20header%20%28h1%2Etitle%29%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20text%2Dalign%3A%20center%3B%0A%20%20%20%20%7D%0A%20%0A%2Eauthor%2C%20%2Edate%20%2F%2A%20Pandoc%20author%28s%29%20and%20date%20headers%20%28h2%2Eauthor%20and%20h3%2Edate%29%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20text%2Dalign%3A%20center%3B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20Pandoc%20table%20of%20contents%20DIV%20when%20using%20the%20%2D%2Dtoc%20option%2E%0A%20%20%20NOTE%3A%20this%20doesn%27t%20support%20Pandoc%27s%20%2D%2Did%2Dprefix%20option%20for%20%23TOC%20and%20%23header%2E%20%0A%20%20%20Probably%20would%20need%20to%20use%20div%5Bid%24%3D%27TOC%27%5D%20and%20div%5Bid%24%3D%27header%27%5D%20as%20selectors%2E%0A%2A%2F%0A%20%0Adiv%23TOC%2C%20nav%23TOC%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Put%20border%20on%20bottom%20to%20separate%20it%20from%20body%2E%20%2A%2F%0A%20%20%20%20border%2Dbottom%3A%201px%20solid%20%23aaa%3B%0A%20%20%20%20margin%2Dbottom%3A%200%2E5em%3B%0A%20%20%20%20%7D%0A%20%0A%40media%20print%0A%20%20%20%20%7B%0A%20%20%20%20div%23TOC%2C%20nav%23TOC%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20Don%27t%20display%20TOC%20in%20print%20%2A%2F%0A%20%20%20%20%20%20%20%20display%3A%20none%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Headers%20and%20sections%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Ah1%2C%20h2%2C%20h3%2C%20h4%2C%20h5%2C%20h6%0A%7B%0A%20%20%20%20font%2Dfamily%3A%20%22Helvetica%20Neue%22%2C%20Helvetica%2C%20%22Liberation%20Sans%22%2C%20Calibri%2C%20Arial%2C%20sans%2Dserif%3B%20%2F%2A%20Sans%2Dserif%20headers%20%2A%2F%0A%20%0A%20%20%20%20%2F%2A%20font%2Dfamily%3A%20%22Liberation%20Serif%22%2C%20%22Georgia%22%2C%20%22Times%20New%20Roman%22%2C%20serif%3B%20%2F%2A%20Serif%20headers%20%2A%2F%0A%20%0A%20%20%20%20page%2Dbreak%2Dafter%3A%20avoid%3B%20%2F%2A%20Firefox%2C%20Chrome%2C%20and%20Safari%20do%20not%20support%20the%20property%20value%20%22avoid%22%20%2A%2F%0A%7D%0A%20%0A%2F%2A%20Pandoc%20with%20%2D%2Dsection%2Ddivs%20option%20%2A%2F%0A%20%0Adiv%20div%2C%20section%20section%20%2F%2A%20Nested%20sections%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20margin%2Dleft%3A%202em%3B%20%2F%2A%20This%20will%20increasingly%20indent%20nested%20header%20sections%20%2A%2F%0A%20%20%20%20%7D%0A%20%0Ap%20%7B%7D%0A%20%0Ablockquote%0A%20%20%20%20%7B%20%0A%20%20%20%20font%2Dstyle%3A%20italic%3B%0A%20%20%20%20%7D%0A%20%0Ali%20%2F%2A%20All%20list%20items%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Ali%20%3E%20p%20%2F%2A%20Loosely%20spaced%20list%20item%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20margin%2Dtop%3A%201em%3B%20%2F%2A%20IE%3A%20lack%20of%20space%20above%20a%20%3Cli%3E%20when%20the%20item%20is%20inside%20a%20%3Cp%3E%20%2A%2F%0A%20%20%20%20%7D%0A%20%0Aul%20%2F%2A%20Whole%20unordered%20list%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Aul%20li%20%2F%2A%20Unordered%20list%20item%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Aol%20%2F%2A%20Whole%20ordered%20list%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Aol%20li%20%2F%2A%20Ordered%20list%20item%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Ahr%20%7B%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Some%20span%20elements%20%2D%2D%2D%20%2A%2F%0A%20%0Asub%20%2F%2A%20Subscripts%2E%20Pandoc%3A%20H%7E2%7EO%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Asup%20%2F%2A%20Superscripts%2E%20Pandoc%3A%20The%202%5End%5E%20try%2E%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%20%20%20%0Aem%20%2F%2A%20Emphasis%2E%20Markdown%3A%20%2Aemphasis%2A%20or%20%5Femphasis%5F%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%20%20%20%0Aem%20%3E%20em%20%2F%2A%20Emphasis%20within%20emphasis%3A%20%2AThis%20is%20all%20%2Aemphasized%2A%20except%20that%2A%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20font%2Dstyle%3A%20normal%3B%0A%20%20%20%20%7D%0A%20%0Astrong%20%2F%2A%20Markdown%20%2A%2Astrong%2A%2A%20or%20%5F%5Fstrong%5F%5F%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Links%20%28anchors%29%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Aa%20%2F%2A%20All%20links%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Keep%20links%20clean%2E%20On%20screen%2C%20they%20are%20colored%3B%20in%20print%2C%20they%20do%20nothing%20anyway%2E%20%2A%2F%0A%20%20%20%20text%2Ddecoration%3A%20none%3B%0A%20%20%20%20%7D%0A%20%0A%40media%20screen%0A%20%20%20%20%7B%0A%20%20%20%20a%3Ahover%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20On%20hover%2C%20we%20indicate%20a%20bit%20more%20that%20it%20is%20a%20link%2E%20%2A%2F%0A%20%20%20%20%20%20%20%20text%2Ddecoration%3A%20underline%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%0A%40media%20print%0A%20%20%20%20%7B%0A%20%20%20%20a%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20In%20print%2C%20a%20colored%20link%20is%20useless%2C%20so%20un%2Dstyle%20it%2E%20%2A%2F%0A%20%20%20%20%20%20%20%20color%3A%20black%3B%0A%20%20%20%20%20%20%20%20background%3A%20transparent%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20a%5Bhref%5E%3D%22http%3A%2F%2F%22%5D%3Aafter%2C%20a%5Bhref%5E%3D%22https%3A%2F%2F%22%5D%3Aafter%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20However%2C%20links%20that%20go%20somewhere%20else%2C%20might%20be%20useful%20to%20the%20reader%2C%0A%20%20%20%20%20%20%20%20%20%20%20so%20for%20http%20and%20https%20links%2C%20print%20the%20URL%20after%20what%20was%20the%20link%20%0A%20%20%20%20%20%20%20%20%20%20%20text%20in%20parens%0A%20%20%20%20%20%20%20%20%2A%2F%0A%20%20%20%20%20%20%20%20content%3A%20%22%20%28%22%20attr%28href%29%20%22%29%20%22%3B%0A%20%20%20%20%20%20%20%20font%2Dsize%3A%2090%25%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Images%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Aimg%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Let%20it%20be%20inline%20left%2Fright%20where%20it%20wants%20to%20be%2C%20but%20verticality%20make%20%0A%20%20%20%20%20%20%20it%20in%20the%20middle%20to%20look%20nicer%2C%20but%20opinions%20differ%2C%20and%20if%20in%20a%20multi%2Dline%20%0A%20%20%20%20%20%20%20paragraph%2C%20it%20might%20not%20be%20so%20great%2E%20%0A%20%20%20%20%2A%2F%0A%20%20%20%20vertical%2Dalign%3A%20middle%3B%0A%20%20%20%20%7D%0A%20%0Adiv%2Efigure%20%2F%2A%20Pandoc%20figure%2Dstyle%20image%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Center%20the%20image%20and%20caption%20%2A%2F%0A%20%20%20%20margin%2Dleft%3A%20auto%3B%0A%20%20%20%20margin%2Dright%3A%20auto%3B%0A%20%20%20%20text%2Dalign%3A%20center%3B%0A%20%20%20%20font%2Dstyle%3A%20italic%3B%0A%20%20%20%20%7D%0A%20%0Ap%2Ecaption%20%2F%2A%20Pandoc%20figure%2Dstyle%20caption%20within%20div%2Efigure%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Inherits%20div%2Efigure%20props%20by%20default%20%2A%2F%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Code%20blocks%20and%20spans%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Apre%2C%20code%20%0A%20%20%20%20%7B%0A%20%20%20%20background%2Dcolor%3A%20%23fdf7ee%3B%0A%20%20%20%20%2F%2A%20BEGIN%20word%20wrap%20%2A%2F%0A%20%20%20%20%2F%2A%20Need%20all%20the%20following%20to%20word%20wrap%20instead%20of%20scroll%20box%20%2A%2F%0A%20%20%20%20%2F%2A%20This%20will%20override%20the%20overflow%3Aauto%20if%20present%20%2A%2F%0A%20%20%20%20white%2Dspace%3A%20pre%2Dwrap%3B%20%2F%2A%20css%2D3%20%2A%2F%0A%20%20%20%20white%2Dspace%3A%20%2Dmoz%2Dpre%2Dwrap%20%21important%3B%20%2F%2A%20Mozilla%2C%20since%201999%20%2A%2F%0A%20%20%20%20white%2Dspace%3A%20%2Dpre%2Dwrap%3B%20%2F%2A%20Opera%204%2D6%20%2A%2F%0A%20%20%20%20white%2Dspace%3A%20%2Do%2Dpre%2Dwrap%3B%20%2F%2A%20Opera%207%20%2A%2F%0A%20%20%20%20word%2Dwrap%3A%20break%2Dword%3B%20%2F%2A%20Internet%20Explorer%205%2E5%2B%20%2A%2F%0A%20%20%20%20%2F%2A%20END%20word%20wrap%20%2A%2F%0A%20%20%20%20%7D%0A%20%0Apre%20%2F%2A%20Code%20blocks%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Distinguish%20pre%20blocks%20from%20other%20text%20by%20more%20than%20the%20font%20with%20a%20background%20tint%2E%20%2A%2F%0A%20%20%20%20padding%3A%200%2E5em%3B%20%2F%2A%20Since%20we%20have%20a%20background%20color%20%2A%2F%0A%20%20%20%20border%2Dradius%3A%205px%3B%20%2F%2A%20Softens%20it%20%2A%2F%0A%20%20%20%20%2F%2A%20Give%20it%20a%20some%20definition%20%2A%2F%0A%20%20%20%20border%3A%201px%20solid%20%23aaa%3B%0A%20%20%20%20%2F%2A%20Set%20it%20off%20left%20and%20right%2C%20seems%20to%20look%20a%20bit%20nicer%20when%20we%20have%20a%20background%20%2A%2F%0A%20%20%20%20margin%2Dleft%3A%20%200%2E5em%3B%0A%20%20%20%20margin%2Dright%3A%200%2E5em%3B%0A%20%20%20%20%7D%0A%20%0A%40media%20screen%0A%20%20%20%20%7B%0A%20%20%20%20pre%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20On%20screen%2C%20use%20an%20auto%20scroll%20box%20for%20long%20lines%2C%20unless%20word%2Dwrap%20is%20enabled%20%2A%2F%0A%20%20%20%20%20%20%20%20white%2Dspace%3A%20pre%3B%0A%20%20%20%20%20%20%20%20overflow%3A%20auto%3B%0A%20%20%20%20%20%20%20%20%2F%2A%20Dotted%20looks%20better%20on%20screen%20and%20solid%20seems%20to%20print%20better%2E%20%2A%2F%0A%20%20%20%20%20%20%20%20border%3A%201px%20dotted%20%23777%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%0Acode%20%2F%2A%20All%20inline%20code%20spans%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Ap%20%3E%20code%2C%20li%20%3E%20code%20%2F%2A%20Code%20spans%20in%20paragraphs%20and%20tight%20lists%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Pad%20a%20little%20from%20adjacent%20text%20%2A%2F%0A%20%20%20%20padding%2Dleft%3A%20%202px%3B%0A%20%20%20%20padding%2Dright%3A%202px%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0Ali%20%3E%20p%20code%20%2F%2A%20Code%20span%20in%20a%20loose%20list%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20We%20have%20room%20for%20some%20more%20background%20color%20above%20and%20below%20%2A%2F%0A%20%20%20%20padding%3A%202px%3B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Math%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Aspan%2Emath%20%2F%2A%20Pandoc%20inline%20math%20default%20and%20%2D%2Djsmath%20inline%20math%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Tried%20font%2Dstyle%3Aitalic%20here%2C%20and%20it%20messed%20up%20MathJax%20rendering%20in%20some%20browsers%2E%20Maybe%20don%27t%20mess%20with%20at%20all%2E%20%2A%2F%0A%20%20%20%20%7D%0A%20%20%20%20%0Adiv%2Emath%20%2F%2A%20Pandoc%20%2D%2Djsmath%20display%20math%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%20%20%20%0Aspan%2ELaTeX%20%2F%2A%20Pandoc%20%2D%2Dlatexmathml%20math%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%20%0A%20%0Aeq%20%2F%2A%20Pandoc%20%2D%2Dgladtex%20math%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%20%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Tables%20%2D%2D%2D%2D%20%2A%2F%0A%20%0A%2F%2A%20%20A%20clean%20textbook%2Dlike%20style%20with%20horizontal%20lines%20above%20and%20below%20and%20under%20%0A%20%20%20%20the%20header%2E%20Rows%20highlight%20on%20hover%20to%20help%20scanning%20the%20table%20on%20screen%2E%0A%2A%2F%0A%20%0Atable%0A%20%20%20%20%7B%0A%20%20%20%20border%2Dcollapse%3A%20collapse%3B%0A%20%20%20%20border%2Dspacing%3A%200%3B%20%2F%2A%20IE%206%20%2A%2F%0A%20%0A%20%20%20%20border%2Dbottom%3A%202pt%20solid%20%23000%3B%0A%20%20%20%20border%2Dtop%3A%202pt%20solid%20%23000%3B%20%2F%2A%20The%20caption%20on%20top%20will%20not%20have%20a%20bottom%2Dborder%20%2A%2F%0A%20%0A%20%20%20%20%2F%2A%20Center%20%2A%2F%0A%20%20%20%20margin%2Dleft%3A%20auto%3B%0A%20%20%20%20margin%2Dright%3A%20auto%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0Athead%20%2F%2A%20Entire%20table%20header%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20border%2Dbottom%3A%201pt%20solid%20%23000%3B%0A%20%20%20%20background%2Dcolor%3A%20%23eee%3B%20%2F%2A%20Does%20this%20BG%20print%20well%3F%20%2A%2F%0A%20%20%20%20%7D%0A%20%0Atr%2Eheader%20%2F%2A%20Each%20header%20row%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%20%0A%20%0Atbody%20%2F%2A%20Entire%20table%20%20body%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20Table%20body%20rows%20%2A%2F%0A%20%0Atr%20%20%7B%0A%20%20%20%20%7D%0Atr%2Eodd%3Ahover%2C%20tr%2Eeven%3Ahover%20%2F%2A%20Use%20%2Eodd%20and%20%2Eeven%20classes%20to%20avoid%20styling%20rows%20in%20other%20tables%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20background%2Dcolor%3A%20%23eee%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0A%2F%2A%20Odd%20and%20even%20rows%20%2A%2F%0Atr%2Eodd%20%7B%7D%0Atr%2Eeven%20%7B%7D%0A%20%0Atd%2C%20th%20%2F%2A%20Table%20cells%20and%20table%20header%20cells%20%2A%2F%0A%20%20%20%20%7B%20%0A%20%20%20%20vertical%2Dalign%3A%20top%3B%20%2F%2A%20Word%20%2A%2F%0A%20%20%20%20vertical%2Dalign%3A%20baseline%3B%20%2F%2A%20Others%20%2A%2F%0A%20%20%20%20padding%2Dleft%3A%20%20%200%2E5em%3B%0A%20%20%20%20padding%2Dright%3A%20%200%2E5em%3B%0A%20%20%20%20padding%2Dtop%3A%20%20%20%200%2E2em%3B%0A%20%20%20%20padding%2Dbottom%3A%200%2E2em%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0A%2F%2A%20Removes%20padding%20on%20left%20and%20right%20of%20table%20for%20a%20tight%20look%2E%20Good%20if%20thead%20has%20no%20background%20color%2A%2F%0A%2F%2A%0Atr%20td%3Alast%2Dchild%2C%20tr%20th%3Alast%2Dchild%0A%20%20%20%20%7B%0A%20%20%20%20padding%2Dright%3A%200%3B%0A%20%20%20%20%7D%0Atr%20td%3Afirst%2Dchild%2C%20tr%20th%3Afirst%2Dchild%20%0A%20%20%20%20%7B%0A%20%20%20%20padding%2Dleft%3A%200%3B%0A%20%20%20%20%7D%0A%2A%2F%0A%20%0Ath%20%2F%2A%20Table%20header%20cells%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20font%2Dweight%3A%20bold%3B%20%0A%20%20%20%20%7D%0A%20%0Atfoot%20%2F%2A%20Table%20footer%20%28what%20appears%20here%20if%20caption%20is%20on%20top%3F%29%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Acaption%20%2F%2A%20This%20is%20for%20a%20table%20caption%20tag%2C%20not%20the%20p%2Ecaption%20Pandoc%20uses%20in%20a%20div%2Efigure%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20caption%2Dside%3A%20top%3B%0A%20%20%20%20border%3A%20none%3B%0A%20%20%20%20font%2Dsize%3A%200%2E9em%3B%0A%20%20%20%20font%2Dstyle%3A%20italic%3B%0A%20%20%20%20text%2Dalign%3A%20center%3B%0A%20%20%20%20margin%2Dbottom%3A%200%2E3em%3B%20%2F%2A%20Good%20for%20when%20on%20top%20%2A%2F%0A%20%20%20%20padding%2Dbottom%3A%200%2E2em%3B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Definition%20lists%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Adl%20%2F%2A%20The%20whole%20list%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20border%2Dtop%3A%202pt%20solid%20black%3B%0A%20%20%20%20padding%2Dtop%3A%200%2E5em%3B%0A%20%20%20%20border%2Dbottom%3A%202pt%20solid%20black%3B%0A%20%20%20%20%7D%0A%20%0Adt%20%2F%2A%20Definition%20term%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20font%2Dweight%3A%20bold%3B%0A%20%20%20%20%7D%0A%20%0Add%2Bdt%20%2F%2A%202nd%20or%20greater%20term%20in%20the%20list%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20border%2Dtop%3A%201pt%20solid%20black%3B%0A%20%20%20%20padding%2Dtop%3A%200%2E5em%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0Add%20%2F%2A%20A%20definition%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20margin%2Dbottom%3A%200%2E5em%3B%0A%20%20%20%20%7D%0A%20%0Add%2Bdd%20%2F%2A%202nd%20or%20greater%20definition%20of%20a%20term%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20border%2Dtop%3A%201px%20solid%20black%3B%20%2F%2A%20To%20separate%20multiple%20definitions%20%2A%2F%0A%20%20%20%20%7D%0A%20%20%20%20%0A%2F%2A%20%2D%2D%2D%2D%20Footnotes%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Aa%2Efootnote%2C%20a%2EfootnoteRef%20%7B%20%2F%2A%20Pandoc%2C%20MultiMarkdown%20footnote%20links%20%2A%2F%0A%20%20%20%20font%2Dsize%3A%20small%3B%20%0A%20%20%20%20vertical%2Dalign%3A%20text%2Dtop%3B%0A%7D%0A%20%0Aa%5Bhref%5E%3D%22%23fnref%22%5D%2C%20a%2Ereversefootnote%20%2F%2A%20Pandoc%2C%20MultiMarkdown%2C%20%3F%3F%20footnote%20back%20links%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0A%40media%20print%0A%20%20%20%20%7B%0A%20%20%20%20a%5Bhref%5E%3D%22%23fnref%22%5D%2C%20a%2Ereversefootnote%20%2F%2A%20Pandoc%2C%20MultiMarkdown%20%2A%2F%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20Don%27t%20display%20these%20at%20all%20in%20print%20since%20the%20arrow%20is%20only%20something%20to%20click%20on%20%2A%2F%0A%20%20%20%20%20%20%20%20display%3A%20none%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%0Adiv%2Efootnotes%20%2F%2A%20Pandoc%20footnotes%20div%20at%20end%20of%20the%20document%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%20%20%20%0Adiv%2Efootnotes%20li%5Bid%5E%3D%22fn%22%5D%20%2F%2A%20A%20footnote%20item%20within%20that%20div%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20You%20can%20class%20stuff%20as%20%22noprint%22%20to%20not%20print%2E%20%0A%20%20%20Useful%20since%20you%20can%27t%20set%20this%20media%20conditional%20inside%20an%20HTML%20element%27s%20%0A%20%20%20style%20attribute%20%28I%20think%29%2C%20and%20you%20don%27t%20want%20to%20make%20another%20stylesheet%20that%20%0A%20%20%20imports%20this%20one%20and%20adds%20a%20class%20just%20to%20do%20this%2E%0A%2A%2F%0A%20%0A%40media%20print%0A%20%20%20%20%7B%0A%20%20%20%20%2Enoprint%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20display%3Anone%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A" rel="stylesheet" type="text/css" />
11</head>
12<body>
13<div id="header">
14<h1 class="title">Install standalone maddash</h1>
15<h2 class="author">Brian Candler, Network Startup Resource Center</h2>
16<h3 class="date">Last Update 20 Sep 2015</h3>
17</div>
18<div id="TOC">
19<ul>
20<li><a href="#install-standalone-maddash"><span class="toc-section-number">1</span> Install standalone maddash</a><ul>
21<li><a href="#install-centos"><span class="toc-section-number">1.1</span> Install CentOS</a></li>
22<li><a href="#disable-selinux"><span class="toc-section-number">1.2</span> Disable SELinux</a></li>
23<li><a href="#enable-repositories"><span class="toc-section-number">1.3</span> Enable repositories</a></li>
24<li><a href="#install-maddash"><span class="toc-section-number">1.4</span> Install maddash</a></li>
25<li><a href="#open-firewall"><span class="toc-section-number">1.5</span> Open firewall</a></li>
26</ul></li>
27<li><a href="#configuration---full-mesh"><span class="toc-section-number">2</span> Configuration - full mesh</a><ul>
28<li><a href="#create-configuration-file"><span class="toc-section-number">2.1</span> Create configuration file</a></li>
29<li><a href="#build-and-publish-configuration"><span class="toc-section-number">2.2</span> Build and publish configuration</a></li>
30<li><a href="#configure-maddash-to-consume-the-configuration"><span class="toc-section-number">2.3</span> Configure maddash to consume the configuration</a></li>
31</ul></li>
32<li><a href="#test-and-troubleshooting"><span class="toc-section-number">3</span> Test and troubleshooting</a><ul>
33<li><a href="#continuous-spinner"><span class="toc-section-number">3.1</span> Continuous spinner</a></li>
34<li><a href="#no-dashboard-selected"><span class="toc-section-number">3.2</span> No dashboard selected</a></li>
35</ul></li>
36<li><a href="#configure-perfsonar-nodes"><span class="toc-section-number">4</span> Configure perfsonar nodes</a></li>
37<li><a href="#configuration---disjoint-mesh"><span class="toc-section-number">5</span> Configuration - disjoint mesh</a><ul>
38<li><a href="#update-configuration"><span class="toc-section-number">5.1</span> Update configuration</a></li>
39<li><a href="#redeploy-configuration"><span class="toc-section-number">5.2</span> Redeploy configuration</a></li>
40</ul></li>
41<li><a href="#optional-additional-tweaking-of-maddash-server"><span class="toc-section-number">6</span> Optional: additional tweaking of maddash server</a><ul>
42<li><a href="#auto-start"><span class="toc-section-number">6.1</span> Auto-start</a></li>
43<li><a href="#redirect"><span class="toc-section-number">6.2</span> Redirect</a></li>
44<li><a href="#change-thresholds"><span class="toc-section-number">6.3</span> Change thresholds</a></li>
45<li><a href="#admin-password-for-maddash"><span class="toc-section-number">6.4</span> Admin password for maddash</a></li>
46</ul></li>
47</ul>
48</div>
49<h1 id="install-standalone-maddash"><a href="#install-standalone-maddash"><span class="header-section-number">1</span> Install standalone maddash</a></h1>
50<p>This document shows the steps to install a standalone maddash server, for example on a VM.</p>
51<p>NOTE: all the commands must be run as the &quot;root&quot; user.</p>
52<blockquote>
53<p>Additional information can be found via <a href="http://software.es.net/maddash/">http://software.es.net/maddash/</a></p>
54</blockquote>
55<h2 id="install-centos"><a href="#install-centos"><span class="header-section-number">1.1</span> Install CentOS</a></h2>
56<p>Install a vanilla CentOS 6.x minimal. Suggested parameters: 1G RAM, 8G disk.</p>
57<p>If possible, configure it with a meaningful hostname and put that in the DNS.</p>
58<p>Bring it up to date:</p>
59<pre><code>yum update</code></pre>
60<h2 id="disable-selinux"><a href="#disable-selinux"><span class="header-section-number">1.2</span> Disable SELinux</a></h2>
61<p>Currently, maddash does not work properly with SELinux (there are problems proxying to port 8881, and possibly others). So for now, disable SELinux:</p>
62<pre><code>vi /etc/selinux/config
63...
64SELINUX=permissive
65...</code></pre>
66<p>and either reboot, or run this:</p>
67<pre><code>echo &quot;0&quot; &gt;/selinux/enforce</code></pre>
68<h2 id="enable-repositories"><a href="#enable-repositories"><span class="header-section-number">1.3</span> Enable repositories</a></h2>
69<p>We need the Internet2 and EPEL repositories for pulling maddash and its dependencies.</p>
70<pre><code>yum install wget
71wget http://software.internet2.edu/rpms/el6/x86_64/RPMS.main/Internet2-repo-0.4-2.noarch.rpm
72wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
73yum localinstall Internet2-repo-0.4-2.noarch.rpm epel-release-6-8.noarch.rpm
74yum clean all</code></pre>
75<h2 id="install-maddash"><a href="#install-maddash"><span class="header-section-number">1.4</span> Install maddash</a></h2>
76<pre><code>yum install maddash</code></pre>
77<p>This will install a large number of dependencies, including apache (httpd)</p>
78<h2 id="open-firewall"><a href="#open-firewall"><span class="header-section-number">1.5</span> Open firewall</a></h2>
79<p>At this point, you should be able to access the webserver at <a href="http://x.x.x.x/">http://x.x.x.x/</a>. If not, you probably need to open the firewall to allow http/https traffic.</p>
80<p>If you normally use <code>system-config-firewall-tui</code> then use that, otherwise just edit the config directly and add two lines after the <code>--dport 22</code> rule:</p>
81<pre><code>vi /etc/sysconfig/iptables
82...
83-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
84-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
85...</code></pre>
86<p>Then:</p>
87<pre><code>/etc/init.d/iptables restart</code></pre>
88<p>(Repeat for ip6tables if you are also running IPv6)</p>
89<h1 id="configuration---full-mesh"><a href="#configuration---full-mesh"><span class="header-section-number">2</span> Configuration - full mesh</a></h1>
90<p>A central configuration file can be used to build both the maddash config and to configure the remote personar collector nodes. If you don't already have one, you need to create one now. This file can be created in whatever directory you like with whatever name you like - e.g. <code>sample.conf</code></p>
91<p>To start with we will configure a &quot;full mesh&quot;, which means that every node tests to every other node. It requires you to have administrative control to all the nodes, so you can configure them to be part of the mesh.</p>
92<h2 id="create-configuration-file"><a href="#create-configuration-file"><span class="header-section-number">2.1</span> Create configuration file</a></h2>
93<p>Create your configuration file (e.g. <code>sample.conf</code>) with the following contents and then edit it to make sense for your environment. Replace the hostnames e.g. <code>pop1.sample.example</code> with the hostnames of the nodes in your mesh.</p>
94<pre><code>description Sample Mesh Config
95
96&lt;administrator&gt;
97  name       Sample NOC
98  email      noc@sample.example
99&lt;/administrator&gt;
100
101&lt;organization&gt;
102    description     Sample
103
104    &lt;site&gt;
105        &lt;host&gt;
106              description POP1
107              address pop1.sample.example
108              &lt;measurement_archive&gt;
109                  type        perfsonarbuoy/bwctl
110                  read_url    http://pop1.sample.example/esmond/perfsonar/archive
111                  write_url   http://pop1.sample.example/esmond/perfsonar/archive
112              &lt;/measurement_archive&gt;
113              &lt;measurement_archive&gt;
114                  type        traceroute
115                  read_url    http://pop1.sample.example/esmond/perfsonar/archive
116                  write_url   http://pop1.sample.example/esmond/perfsonar/archive
117              &lt;/measurement_archive&gt;
118              &lt;measurement_archive&gt;
119                  type        perfsonarbuoy/owamp
120                  read_url    http://pop1.sample.example/esmond/perfsonar/archive
121                  write_url   http://pop1.sample.example/esmond/perfsonar/archive
122              &lt;/measurement_archive&gt;
123        &lt;/host&gt;
124    &lt;/site&gt;
125
126    &lt;site&gt;
127        &lt;host&gt;
128              description POP2
129              address pop2.sample.example
130              &lt;measurement_archive&gt;
131                  type        perfsonarbuoy/bwctl
132                  read_url    http://pop2.sample.example/esmond/perfsonar/archive
133                  write_url   http://pop2.sample.example/esmond/perfsonar/archive
134              &lt;/measurement_archive&gt;
135              &lt;measurement_archive&gt;
136                  type        traceroute
137                  read_url    http://pop2.sample.example/esmond/perfsonar/archive
138                  write_url   http://pop2.sample.example/esmond/perfsonar/archive
139              &lt;/measurement_archive&gt;
140              &lt;measurement_archive&gt;
141                  type        perfsonarbuoy/owamp
142                  read_url    http://pop2.sample.example/esmond/perfsonar/archive
143                  write_url   http://pop2.sample.example/esmond/perfsonar/archive
144              &lt;/measurement_archive&gt;
145        &lt;/host&gt;
146    &lt;/site&gt;
147
148    &lt;site&gt;
149        &lt;host&gt;
150              description POP3
151              address pop3.sample.example
152              &lt;measurement_archive&gt;
153                  type        perfsonarbuoy/bwctl
154                  read_url    http://pop3.sample.example/esmond/perfsonar/archive
155                  write_url   http://pop3.sample.example/esmond/perfsonar/archive
156              &lt;/measurement_archive&gt;
157              &lt;measurement_archive&gt;
158                  type        traceroute
159                  read_url    http://pop3.sample.example/esmond/perfsonar/archive
160                  write_url   http://pop3.sample.example/esmond/perfsonar/archive
161              &lt;/measurement_archive&gt;
162              &lt;measurement_archive&gt;
163                  type        perfsonarbuoy/owamp
164                  read_url    http://pop3.sample.example/esmond/perfsonar/archive
165                  write_url   http://pop3.sample.example/esmond/perfsonar/archive
166              &lt;/measurement_archive&gt;
167        &lt;/host&gt;
168    &lt;/site&gt;
169&lt;/organization&gt;
170
171&lt;test_spec bwctl_test&gt;
172  type              perfsonarbuoy/bwctl  # Perform a bwctl test (i.e. achievable bandwidth)
173  tool              bwctl/iperf3         # Use 'iperf' to do the bandwidh test
174  protocol          tcp                  # Run a TCP bandwidth test
175  interval          21600                # Run the test every 6 hours
176  duration          20                   # Perform a 20 second test
177  force_bidirectional 1                  # do bidirectional test
178  random_start_percentage 10             # randomize start time
179  omit_interval     5                    # ignore first few seconds of test
180&lt;/test_spec&gt;
181
182&lt;test_spec owamp_test&gt;
183  type              perfsonarbuoy/owamp  # Perform a constant low-bandwidth OWAMP test
184  packet_interval   0.1                  # Send 10 packets every second (i.e. pause 0.1 seconds between each packet)
185  loss_threshold    10                   # Wait no more than 10 seconds for a response
186  session_count     10800                # Refresh the test every half hour (once every 18000 packets)
187  sample_count      600                  # Send results back every 60 seconds (once every 600 packets)
188  packet_padding    0                    # The size of the packets (not including the IP/UDP headers)
189  bucket_width      0.0001               # The granularity of the measurements
190  force_bidirectional 1                  # do bidirectional test
191&lt;/test_spec&gt;
192
193&lt;group core_group&gt;
194    type       mesh
195
196    member     pop1.sample.example
197    member     pop2.sample.example
198    member     pop3.sample.example
199&lt;/group&gt;
200
201&lt;test&gt;
202  description       Core Throughput Testing
203  group             core_group
204  test_spec         bwctl_test
205&lt;/test&gt;
206
207&lt;test&gt;
208  description       Core OWAMP Testing
209  group             core_group
210  test_spec         owamp_test
211&lt;/test&gt;</code></pre>
212<p>What you have done is:</p>
213<ul>
214<li>Define some hosts</li>
215<li>Define some test settings</li>
216<li>Define a group containing your hosts</li>
217<li>State which tests you want to run between the hosts in that group</li>
218</ul>
219<p>For a much bigger example see the <a href="https://github.com/esnet/esnet-perfsonar-mesh/tree/master/conf">ESNet configuration</a> which generates the <a href="http://ps-dashboard.es.net/">ESNet dashboard</a></p>
220<blockquote>
221<p>Note: &quot;force_bidirectional&quot; means that every host runs tests both ways. For example, host A runs and stores tests from A to B and B to A; host B will also run and store tests from B to A and A to B. This means every test is run twice. If you set this to zero it will halve the amount of test traffic. However host A's database will only store the measurements from A to B, and host B's database will only store the measurements from B to A.</p>
222</blockquote>
223<h2 id="build-and-publish-configuration"><a href="#build-and-publish-configuration"><span class="header-section-number">2.2</span> Build and publish configuration</a></h2>
224<p>This can be published at whatever URL you like - using the webserver on the maddash server itself is the easiest approach.</p>
225<p>First install the tool to convert the config to JSON format:</p>
226<pre><code>yum install perl-perfSONAR_PS-MeshConfig-JSONBuilder</code></pre>
227<p>Run this tool, putting the results in a directory which your webserver will serve:</p>
228<pre><code>/opt/perfsonar_ps/mesh_config/bin/build_json -o /var/www/html/sample.json sample.conf</code></pre>
229<p>Now check that the JSON you have created is visible at your chosen URL, e.g. <a href="http://x.x.x.x/sample.json">http://x.x.x.x/sample.json</a></p>
230<blockquote>
231<p>More details at <a href="http://docs.perfsonar.net/multi_server_config.html">http://docs.perfsonar.net/multi_server_config.html</a></p>
232</blockquote>
233<h2 id="configure-maddash-to-consume-the-configuration"><a href="#configure-maddash-to-consume-the-configuration"><span class="header-section-number">2.3</span> Configure maddash to consume the configuration</a></h2>
234<p>Still on your maddash server:</p>
235<pre><code>yum install perl-perfSONAR_PS-MeshConfig-GUIAgent</code></pre>
236<p>Edit <code>/opt/perfsonar_ps/mesh_config/etc/gui_agent_configuration.conf</code> to tell it where to find the JSON file you have published:</p>
237<pre><code>&lt;mesh&gt;
238    ...
239    configuration_url             http://x.x.x.x/sample.json
240    ...
241&lt;/mesh&gt;
242...
243restart_services    0
244...
245use_toolkit         0</code></pre>
246<p><strong>NOTE</strong> Since we are running on a host without the pS toolkit, it is essential to change <code>use_toolkit</code> and <code>restart_services</code> as shown.</p>
247<p>Some additional work is required for maddash running standalone. Install an extra cron file:</p>
248<pre><code>cp /opt/perfsonar_ps/mesh_config/doc/cron-restart_gui_services /etc/cron.d/cron-restart_gui_services</code></pre>
249<p>Also edit the existing mesh_config_gui_agent cron job:</p>
250<pre><code>vi /etc/cron.d/cron-mesh_config_gui_agent
251...
252change it so that it runs as &quot;root&quot; instead of &quot;perfsonar&quot;</code></pre>
253<p>Before we regenerate the configuration, we need to remove the existing configuration (since the old dashboards are merged with the new ones).</p>
254<pre><code>cd /etc/maddash/maddash-server/
255mv maddash.yaml maddash.yaml.orig</code></pre>
256<p>Create a new <code>maddash.yaml</code> with just the following contents:</p>
257<pre><code># Set the directory where the database will be stored
258database: /var/lib/maddash/
259##
260# Set the host where the REST server listens
261serverHost: &quot;localhost&quot;
262##
263# Activate http and set the port where it listens
264http:
265    port: 8881</code></pre>
266<p>Finally we can generate the configuration:</p>
267<pre><code>/opt/perfsonar_ps/mesh_config/bin/generate_gui_configuration
268/etc/init.d/maddash-server restart</code></pre>
269<blockquote>
270<p>More details at <a href="http://software.es.net/maddash/mesh_config.html">http://software.es.net/maddash/mesh_config.html</a></p>
271</blockquote>
272<h1 id="test-and-troubleshooting"><a href="#test-and-troubleshooting"><span class="header-section-number">3</span> Test and troubleshooting</a></h1>
273<p>At this point you should be able to go to <a href="http://x.x.x.x/maddash-webui/">http://x.x.x.x/maddash-webui/</a></p>
274<p>There won't be any useful data to display until you have perfsonar nodes running, but you should see the grid with grey boxes for unknown data.</p>
275<h2 id="continuous-spinner"><a href="#continuous-spinner"><span class="header-section-number">3.1</span> Continuous spinner</a></h2>
276<p>If the page contains a &quot;spinner&quot; indefinitely, it may be that Apache has <a href="https://github.com/esnet/maddash/issues/21">disabled proxying to the Java backend</a> because it was down for a short time. Check for the following error:</p>
277<pre><code>tail /var/log/httpd/error_log
278...
279[Tue Sep 08 16:38:35 2015] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8881 (localhost) fa
280[Tue Sep 08 16:38:35 2015] [error] ap_proxy_connect_backend disabling worker for (localhost)
281[Tue Sep 08 16:38:35 2015] [error] proxy: HTTP: disabled connection for (localhost)
282[Tue Sep 08 16:39:24 2015] [error] proxy: HTTP: disabled connection for (localhost)
283[Tue Sep 08 16:39:24 2015] [error] proxy: HTTP: disabled connection for (localhost)</code></pre>
284<p>The quick solution is just to restart apache:</p>
285<pre><code>/etc/init.d/httpd restart</code></pre>
286<p>However this does not stop the problem recurring. To do this, edit <code>/etc/httpd/conf.d/apache-maddash.conf</code> and add <code>status=+i</code> to the end of the ProxyPass line, like this:</p>
287<pre><code>    ProxyPass /maddash http://localhost:8881/maddash status=+i</code></pre>
288<p>and then restart Apache.</p>
289<blockquote>
290<p>To debug other errors where the page does not load, it can be helpful to go to your browser's Javascript Console and look for error messages there. In Chrome this is <code>View &gt; Developer &gt; Javascript Console</code></p>
291</blockquote>
292<h2 id="no-dashboard-selected"><a href="#no-dashboard-selected"><span class="header-section-number">3.2</span> No dashboard selected</a></h2>
293<p>If the page is empty apart from menu bar, click on &quot;Dashboards&quot; and select the first dashboard.</p>
294<p>You can make this dashboard selected automatically by editing <code>/opt/maddash/maddash-webui/etc/config.json</code> and setting the default dashboard to match the name of your dashboard:</p>
295<pre><code>...
296    &quot;defaultDashboard&quot;: &quot;Sample Mesh Config&quot;,
297...</code></pre>
298<h1 id="configure-perfsonar-nodes"><a href="#configure-perfsonar-nodes"><span class="header-section-number">4</span> Configure perfsonar nodes</a></h1>
299<p>The perfsonar nodes can now be configured to read the published maddash configuration.</p>
300<p>On each node, install the package:</p>
301<pre><code>yum install perl-perfSONAR_PS-MeshConfig-Agent</code></pre>
302<p>Edit <code>/opt/perfsonar_ps/mesh_config/etc/agent_configuration.conf</code> and change the configuration URL:</p>
303<pre><code>&lt;mesh&gt;
304    ...
305    configuration_url             http://x.x.x.x/sample.json
306    ...
307&lt;/mesh&gt;</code></pre>
308<p>Run this command to pick up the configuration:</p>
309<pre><code>sudo -u perfsonar /opt/perfsonar_ps/mesh_config/bin/generate_configuration</code></pre>
310<p>It will be refreshed nightly from cron in any case.</p>
311<p>Your dashboard should start to be populated with test data. Also if you go to the web interface of your perfsonar nodes and click &quot;Configure Tests&quot; you should see the tests which the mesh configuration has added.</p>
312<blockquote>
313<p>More details at <a href="http://docs.perfsonar.net/multi_agent_config.html">http://docs.perfsonar.net/multi_agent_config.html</a></p>
314</blockquote>
315<h1 id="configuration---disjoint-mesh"><a href="#configuration---disjoint-mesh"><span class="header-section-number">5</span> Configuration - disjoint mesh</a></h1>
316<p>We will now extend the dashboard to include a second grid with tests from the hosts we control to some remote hosts which we do not control. These remote hosts or &quot;beacons&quot; respond to bwctl and owamp tests which we request, but they do not consume our mesh configuration and do not store any of the results in their database.</p>
317<blockquote>
318<p>Please remember to ask permission from the operator of any node which you would like to run regular testing to. You can find the contact details by looking for &quot;Administrator Email&quot; in their node's perfsonar web interface.</p>
319</blockquote>
320<h2 id="update-configuration"><a href="#update-configuration"><span class="header-section-number">5.1</span> Update configuration</a></h2>
321<p>Edit your mesh configuration and <em>add</em> the following sections - don't remove or change anything you already have.</p>
322<pre><code>&lt;organization&gt;
323    description ESnet
324    &lt;site&gt;
325        &lt;host&gt;
326              description London
327              address lond-pt1.es.net
328              no_agent 1
329        &lt;/host&gt;
330        &lt;host&gt;
331              description London
332              address lond-owamp.es.net
333              no_agent 1
334        &lt;/host&gt;
335    &lt;/site&gt;
336    &lt;site&gt;
337        &lt;host&gt;
338              description Amsterdam
339              address amst-pt1.es.net
340              no_agent 1
341        &lt;/host&gt;
342        &lt;host&gt;
343              description Amsterdam
344              address amst-owamp.es.net
345              no_agent 1
346        &lt;/host&gt;
347    &lt;/site&gt;
348&lt;organization&gt;
349
350&lt;organization&gt;
351    description University of Oregon
352    &lt;site&gt;
353        &lt;host&gt;
354              description University of Oregon
355              address perfsonar.uoregon.edu
356              no_agent 1
357        &lt;/host&gt;
358    &lt;/site&gt;
359&lt;/organization&gt;</code></pre>
360<p>The flag <code>no_agent 1</code> means that this node isn't reading our mesh configuration, it's just a passive endpoint.</p>
361<p>Now add some more test specifications. Again, this is in addition to the tests you have already defined. We are making new test specifications so that you can tweak the settings separately to those for your internal mesh.</p>
362<pre><code>&lt;test_spec bwctl_test_external&gt;
363  type              perfsonarbuoy/bwctl  # Perform a bwctl test (i.e. achievable bandwidth)
364  tool              bwctl/iperf3         # Use 'iperf' to do the bandwidh test
365  protocol          tcp                  # Run a TCP bandwidth test
366  interval          28800                # Run the test every 8 hours
367  duration          20                   # Perform a 20 second test
368  force_bidirectional 1                  # do bidirectional test
369  random_start_percentage 10             # randomize start time
370  omit_interval     5                    # ignore first few seconds of test
371&lt;/test_spec&gt;
372
373&lt;test_spec owamp_test_external&gt;
374  type              perfsonarbuoy/owamp  # Perform a constant low-bandwidth OWAMP test
375  packet_interval   0.1                  # Send 10 packets every second (i.e. pause 0.1 seconds between each packet)
376  loss_threshold    10                   # Wait no more than 10 seconds for a response
377  session_count     10800                # Refresh the test every half hour (once every 18000 packets)
378  sample_count      600                  # Send results back every 60 seconds (once every 600 packets)
379  packet_padding    0                    # The size of the packets (not including the IP/UDP headers)
380  bucket_width      0.0001               # The granularity of the measurements
381  force_bidirectional 1                  # do bidirectional test
382&lt;/test_spec&gt;</code></pre>
383<p>Note that we must use <code>force_bidirectional 1</code>, since only our hosts will be running these tests, and we want them to be run both ways.</p>
384<p>Now add groups to define the tests. A &quot;disjoint&quot; group runs tests from the a_members to the b_members and vice versa, but not from <code>a_member</code> to <code>a_member</code> or <code>b_member</code> to <code>b_member</code>.</p>
385<pre><code>&lt;group core_to_external_group_bwctl&gt;
386    type       disjoint
387
388    a_member   lond-pt1.es.net
389    a_member   amst-pt1.es.net
390    a_member   perfsonar.uoregon.edu
391
392    b_member   pop1.sample.example
393    b_member   pop2.sample.example
394    b_member   pop3.sample.example
395&lt;/group&gt;
396
397&lt;group core_to_external_group_owamp&gt;
398    type       disjoint
399
400    a_member   lond-owamp.es.net
401    a_member   amst-owamp.es.net
402    a_member   perfsonar.uoregon.edu
403
404    b_member   pop1.sample.example
405    b_member   pop2.sample.example
406    b_member   pop3.sample.example
407&lt;/group&gt;</code></pre>
408<p>In the dashboard, the a_members will be displayed down the left side of the grid, and the b_members will be displayed along the top of the grid.</p>
409<p>Note that we have defined two groups, one for bwctl and one for owamp tests; this is because ESNet provides <a href="http://docs.perfsonar.net/manage_dual_xface.html">different test endpoints</a> for throughput and latency tests.</p>
410<p>Finally, link the groups to the test specifications</p>
411<pre><code>&lt;test&gt;
412  description       Core to External Throughput Testing
413  group             core_to_external_group_bwctl
414  test_spec         bwctl_test_external
415&lt;/test&gt;
416
417&lt;test&gt;
418  description       Core to External OWAMP Testing
419  group             core_to_external_group_owamp
420  test_spec         owamp_test_external
421&lt;/test&gt;</code></pre>
422<h2 id="redeploy-configuration"><a href="#redeploy-configuration"><span class="header-section-number">5.2</span> Redeploy configuration</a></h2>
423<p>Now you will need to repeat some of the steps you did before.</p>
424<ul>
425<li><p>On the maddash server: Build and publish configuration</p>
426<pre><code>/opt/perfsonar_ps/mesh_config/bin/build_json -o /var/www/html/sample.json sample.conf</code></pre></li>
427<li><p>On the maddash server: Consume the configuration</p>
428<pre><code>/opt/perfsonar_ps/mesh_config/bin/generate_gui_configuration
429/etc/init.d/maddash-server restart</code></pre></li>
430<li><p>On the perfsonar nodes:</p>
431<pre><code>sudo -u perfsonar /opt/perfsonar_ps/mesh_config/bin/generate_configuration</code></pre>
432<p>(Otherwise you have to wait until they pick it up overnight)</p></li>
433</ul>
434<p>Go to your maddash server webpage and check that the new grid is visible. Go to your perfsonar node web interfaces, click &quot;Configure Tests&quot; and check that they are configured with the new tests.</p>
435<h1 id="optional-additional-tweaking-of-maddash-server"><a href="#optional-additional-tweaking-of-maddash-server"><span class="header-section-number">6</span> Optional: additional tweaking of maddash server</a></h1>
436<h2 id="auto-start"><a href="#auto-start"><span class="header-section-number">6.1</span> Auto-start</a></h2>
437<p>Check that the maddash-server and httpd services are configured to come up on server start:</p>
438<pre><code>chkconfig --list</code></pre>
439<p>If not, then configure them so they do, e.g.</p>
440<pre><code>chkconfig --add httpd 2345 on</code></pre>
441<h2 id="redirect"><a href="#redirect"><span class="header-section-number">6.2</span> Redirect</a></h2>
442<p>If this is a dedicated server, then it's friendly to have a redirect from the front page. Create <code>/var/www/html/index.html</code> containing:</p>
443<pre><code>&lt;html&gt;
444&lt;head&gt;
445&lt;meta http-equiv=&quot;refresh&quot; content=&quot;0; url=http://x.x.x.x/maddash-webui/&quot;&gt;
446&lt;/head&gt;
447&lt;body&gt;
448Redirecting &lt;a href=&quot;http://x.x.x.x/maddash-webui/&quot;&gt;here&lt;/a&gt;...
449&lt;/body&gt;
450&lt;/html&gt;</code></pre>
451<h2 id="change-thresholds"><a href="#change-thresholds"><span class="header-section-number">6.3</span> Change thresholds</a></h2>
452<p>You can change the thresholds at which warnings (yellow) or errors (red) are displayed.</p>
453<p>Edit <code>/opt/perfsonar_ps/mesh_config/etc/gui_agent_configuration.conf</code> and look for these settings:</p>
454<pre><code>        acceptable_loss_rate     0
455        critical_loss_rate       0.01
456...
457        acceptable_throughput    900
458        critical_throughput      500</code></pre>
459<p>Edit as required. Then rebuild the <code>maddash.yaml</code> configuration:</p>
460<pre><code>/opt/perfsonar_ps/mesh_config/bin/generate_gui_configuration
461/etc/init.d/maddash-server restart</code></pre>
462<p>Notice also these settings for the bwctl (throughput) tests:</p>
463<pre><code>        check_interval           28800
464        check_time_range         86400</code></pre>
465<p>This means that <code>check_throughput.pl</code> is run every 8 hours, and it averages the throughput results over the last 24 hours. This means you're looking at an average throughput, not the results of the most recent test.</p>
466<p>The corresponding parameters for owamp are 30 minutes and 15 minutes, so it responds much more quickly to changes in packet loss.</p>
467<h2 id="admin-password-for-maddash"><a href="#admin-password-for-maddash"><span class="header-section-number">6.4</span> Admin password for maddash</a></h2>
468<p>Maddash also has a <a href="http://software.es.net/maddash/admin_ui.html">settings/admin page</a> which can be used to mark hosts as down for maintenance, and force immediate re-tests.</p>
469<p>To enable this, you need to create a username and password - none is set by default, and it does not have to be the same as your perfsonar UI username/passwords.</p>
470<p>The following command will create a user called &quot;admin&quot; and prompt you for the password:</p>
471<pre><code>htpasswd /etc/maddash/maddash-webui/admin-users admin</code></pre>
472<p>Once this is done, go to the dashboard, click on <code>Settings &gt; Server Settings...</code> and you will be prompted for this username and password.</p>
473<p>Should you wish to remove a user from the password file, you can either edit the file directly, or use this command:</p>
474<pre><code>htpasswd /etc/maddash/maddash-webui/admin-users -D admin</code></pre>
475</body>
476</html>