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 | <title>Installing Ganeti Manager (ganetimgr)</title> |
---|
8 | <style type="text/css">code{white-space: pre;}</style> |
---|
9 | <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" /> |
---|
10 | </head> |
---|
11 | <body> |
---|
12 | <div id="header"> |
---|
13 | <h1 class="title">Installing Ganeti Manager (ganetimgr)</h1> |
---|
14 | </div> |
---|
15 | <div id="TOC"> |
---|
16 | <ul> |
---|
17 | <li><a href="#install-ganeti-manager-ganetimgr"><span class="toc-section-number">1</span> Install Ganeti Manager (ganetimgr)</a><ul> |
---|
18 | <li><a href="#run-this-as-root"><span class="toc-section-number">1.1</span> Run this as root</a></li> |
---|
19 | <li><a href="#install-required-packages"><span class="toc-section-number">1.2</span> Install required packages</a></li> |
---|
20 | <li><a href="#enable-beanstalkd"><span class="toc-section-number">1.3</span> Enable beanstalkd</a></li> |
---|
21 | <li><a href="#create-database"><span class="toc-section-number">1.4</span> Create database</a></li> |
---|
22 | <li><a href="#check-out-the-current-version-of-ganetimgr"><span class="toc-section-number">1.5</span> Check out the current version of Ganetimgr</a><ul> |
---|
23 | <li><a href="#copy-the-default-settings-for-ganetimgr-end-edit-them"><span class="toc-section-number">1.5.1</span> Copy the default settings for ganetimgr end edit them</a></li> |
---|
24 | </ul></li> |
---|
25 | <li><a href="#populate-the-database"><span class="toc-section-number">1.6</span> Populate the database</a></li> |
---|
26 | <li><a href="#create-the-admin-interface-page"><span class="toc-section-number">1.7</span> Create the admin interface page</a></li> |
---|
27 | <li><a href="#start-the-watcher-process"><span class="toc-section-number">1.8</span> Start the watcher process</a></li> |
---|
28 | <li><a href="#create-a-configuration-for-gunicorn"><span class="toc-section-number">1.9</span> Create a configuration for gunicorn</a></li> |
---|
29 | <li><a href="#restart-gunicorn"><span class="toc-section-number">1.10</span> Restart gunicorn</a></li> |
---|
30 | <li><a href="#create-an-nginx-configuration"><span class="toc-section-number">1.11</span> Create an Nginx configuration</a></li> |
---|
31 | <li><a href="#vnc-proxy"><span class="toc-section-number">1.12</span> VNC proxy</a></li> |
---|
32 | </ul></li> |
---|
33 | <li><a href="#create-rapi-user"><span class="toc-section-number">2</span> Create RAPI user</a></li> |
---|
34 | <li><a href="#navigate-to-the-ganetimgr-web-interface."><span class="toc-section-number">3</span> Navigate to the ganetimgr web interface.</a></li> |
---|
35 | <li><a href="#additional-notes"><span class="toc-section-number">4</span> Additional notes</a><ul> |
---|
36 | <li><a href="#whats-missing"><span class="toc-section-number">4.1</span> What's missing ?</a></li> |
---|
37 | <li><a href="#why-we-had-to-install-vncauthproxy-from-a-pip-package"><span class="toc-section-number">4.2</span> Why we had to install VNCAuthProxy from a pip package:</a></li> |
---|
38 | <li><a href="#issues-with-vnc-consoles-and-using-etchosts-on-ganetimgr"><span class="toc-section-number">4.3</span> Issues with VNC consoles and using <code>/etc/hosts</code> on ganetimgr</a></li> |
---|
39 | </ul></li> |
---|
40 | </ul> |
---|
41 | </div> |
---|
42 | <!-- NOTE: This document has had a number of updates to match latest |
---|
43 | ganetimgr installation instructions, but has not been fully tested --> |
---|
44 | |
---|
45 | <h1 id="install-ganeti-manager-ganetimgr"><a href="#install-ganeti-manager-ganetimgr"><span class="header-section-number">1</span> Install Ganeti Manager (ganetimgr)</a></h1> |
---|
46 | <p>Note: This is partly based on the instructions at <a href="https://ganetimgr.readthedocs.org/en/stable/install.html">https://ganetimgr.readthedocs.org/en/stable/install.html</a> with some modifications.</p> |
---|
47 | <h2 id="run-this-as-root"><a href="#run-this-as-root"><span class="header-section-number">1.1</span> Run this as root</a></h2> |
---|
48 | <p>Most of the commands below will require root access, so we'll start by going to the root user (use su or sudo)</p> |
---|
49 | <pre><code>$ sudo -s |
---|
50 | Password: |
---|
51 | |
---|
52 | #</code></pre> |
---|
53 | <h2 id="install-required-packages"><a href="#install-required-packages"><span class="header-section-number">1.2</span> Install required packages</a></h2> |
---|
54 | <pre><code># apt-get install git nginx mysql-server gunicorn python-gevent \ |
---|
55 | redis-server beanstalkd</code></pre> |
---|
56 | <p>When prompted for a password for the mysql root user, pick one and remember it. Continue to install further packages:</p> |
---|
57 | <pre><code># apt-get install python-mysqldb python-django python-redis \ |
---|
58 | python-django-south python-django-registration python-paramiko \ |
---|
59 | python-simplejson python-daemon python-setproctitle python-pycurl \ |
---|
60 | python-recaptcha python-ipaddr python-bs4 python-requests \ |
---|
61 | python-markdown |
---|
62 | # apt-get install python-memcache memcached</code></pre> |
---|
63 | <h2 id="enable-beanstalkd"><a href="#enable-beanstalkd"><span class="header-section-number">1.3</span> Enable beanstalkd</a></h2> |
---|
64 | <p>Edit <code>/etc/default/beanstalkd</code> and uncomment the following line:</p> |
---|
65 | <pre><code>START=yes</code></pre> |
---|
66 | <p>Save and exit the file, then run</p> |
---|
67 | <pre><code># service beanstalkd start</code></pre> |
---|
68 | <h2 id="create-database"><a href="#create-database"><span class="header-section-number">1.4</span> Create database</a></h2> |
---|
69 | <pre><code># mysql -u root -p |
---|
70 | Enter password: <mysql root passwork picked earlier here> |
---|
71 | |
---|
72 | mysql> CREATE DATABASE ganetimgr CHARACTER SET utf8; |
---|
73 | mysql> CREATE USER 'ganetimgr'@'localhost' IDENTIFIED BY '<PICK_A_PASSWORD_FOR_GANETIMGR_DB_USER>'; |
---|
74 | mysql> GRANT ALL PRIVILEGES ON ganetimgr.* TO 'ganetimgr'; |
---|
75 | mysql> flush privileges; |
---|
76 | mysql> exit</code></pre> |
---|
77 | <p>Test that the database created works</p> |
---|
78 | <pre><code># mysql -u ganetimgr -p ganetimgr |
---|
79 | Enter password: <password_for_ganetimgr_db_user> |
---|
80 | |
---|
81 | mysql> exit</code></pre> |
---|
82 | <h2 id="check-out-the-current-version-of-ganetimgr"><a href="#check-out-the-current-version-of-ganetimgr"><span class="header-section-number">1.5</span> Check out the current version of Ganetimgr</a></h2> |
---|
83 | <pre><code># mkdir /srv/www |
---|
84 | # mkdir /var/log/ganetimgr |
---|
85 | # cd /srv/www |
---|
86 | # git clone https://code.grnet.gr/git/ganetimgr |
---|
87 | # cd ganetimgr |
---|
88 | # pip install -r requirements.txt</code></pre> |
---|
89 | <p>(Note: at the time of version the 'stable' branch of ganetimgr did not include the <code>requirements.txt</code> file, so this is using the 'master' branch)</p> |
---|
90 | <h3 id="copy-the-default-settings-for-ganetimgr-end-edit-them"><a href="#copy-the-default-settings-for-ganetimgr-end-edit-them"><span class="header-section-number">1.5.1</span> Copy the default settings for ganetimgr end edit them</a></h3> |
---|
91 | <pre><code># cd ganetimgr |
---|
92 | # cp settings.py.dist settings.py |
---|
93 | # cp urls.py.dist urls.py</code></pre> |
---|
94 | <pre><code># editor settings.py</code></pre> |
---|
95 | <p>The following changes will need to be made</p> |
---|
96 | <p>Find the section:</p> |
---|
97 | <pre><code>ADMINS = ( |
---|
98 | # ('Your Name', 'your_email@domain.com'), |
---|
99 | )</code></pre> |
---|
100 | <p>Change the line above, adding and entry for the main admin user, for example:</p> |
---|
101 | <pre><code>('admin','your@email.address'),</code></pre> |
---|
102 | <p>Next, find the line:</p> |
---|
103 | <pre><code>'ENGINE' : 'django.db.backends.',</code></pre> |
---|
104 | <p>And change it to:</p> |
---|
105 | <pre><code>'ENGINE' : 'django.db.backends.mysql'</code></pre> |
---|
106 | <p>This tells the Django application framework that we'll be using MySQL as a backend.</p> |
---|
107 | <p>Next, set the NAME, USER and PASSWORD to those of the database you created earlier:</p> |
---|
108 | <pre><code>'NAME' : 'ganetimgr', # Or path to database file if using sqlite3. |
---|
109 | 'USER' : 'ganetimgr # Not used with sqlite3. |
---|
110 | 'PASSWORD' : '<PASSWORD_PICKED_EARLIER>', # Not used with sqlite3.</code></pre> |
---|
111 | <p>Set TIME_ZONE to your location, for instance:</p> |
---|
112 | <pre><code>TIME_ZONE = 'Africa/Nairobi'</code></pre> |
---|
113 | <p>Next, find the section:</p> |
---|
114 | <pre><code>SECRET_KEY = <CHANGE_ME></code></pre> |
---|
115 | <p>And change it to a random string, for example:</p> |
---|
116 | <pre><code>SECRET_KEY = 'wlj84oaliehgzi48ol9qo3ijhesrbykjdzn,.38h,u4gbrg'</code></pre> |
---|
117 | <p>Please, don't copy the above key! Generate your own!</p> |
---|
118 | <p>Next, find <code>SERVER_EMAIL</code> and <code>DEFAULT_FROM_EMAIL</code> and set them accordingly, for example:</p> |
---|
119 | <pre><code>SERVER_EMAIL = "no-reply@ganetimgrX.virt.nsrc.org" |
---|
120 | DEFAULT_FROM_EMAIL = "no-reply@ganetimgrX.virt.nsrc.org"</code></pre> |
---|
121 | <p>Comment out <code>COLLECTD_URL</code>:</p> |
---|
122 | <pre><code>#COLLECTD_URL = "http://stats.example.com"</code></pre> |
---|
123 | <p>Find the section concerning the websockets console and change it as follows:</p> |
---|
124 | <pre><code>WEBSOCK_VNC_ENABLED = True |
---|
125 | NOVNC_PROXY = "ganetimgrX.virt.nsrc.org:8888" |
---|
126 | NOVNC_USE_TLS = False</code></pre> |
---|
127 | <p>(since we have no valid certificate)</p> |
---|
128 | <p>Optionally, find the BRANDING section and update it with the information for your organization.</p> |
---|
129 | <p>You could update the file <code>/srv/www/ganetimgr/static/branding/logo.png</code> if you want to change the default organization logo in the Ganeti Manager interface.</p> |
---|
130 | <h2 id="populate-the-database"><a href="#populate-the-database"><span class="header-section-number">1.6</span> Populate the database</a></h2> |
---|
131 | <p>Next it's time to get the database populated and create a user.</p> |
---|
132 | <pre><code># cd /srv/www/ganetimgr |
---|
133 | # python manage.py syncdb --noinput</code></pre> |
---|
134 | <p>If everything goes well some output about tables being created will scroll past, and end with:</p> |
---|
135 | <pre><code>Not synced (use migrations): |
---|
136 | ... |
---|
137 | (use ./manage.py migrate to migrate these)</code></pre> |
---|
138 | <p>This is normal - you now need to run:</p> |
---|
139 | <pre><code># python manage.py migrate</code></pre> |
---|
140 | <p>Enter "yes" if asked to delete stale content.</p> |
---|
141 | <p>Again, some output will flash by. It should end with:</p> |
---|
142 | <pre><code>... |
---|
143 | - Loading initial data for oauth2_provider. |
---|
144 | Installed 0 object(s) from 0 fixture(s)</code></pre> |
---|
145 | <p>Now, let's create a superuser:</p> |
---|
146 | <pre><code># python manage.py createsuperuser</code></pre> |
---|
147 | <p>Here, we'll create an <code>admin</code> user, so at the question:</p> |
---|
148 | <pre><code>Username (leave blank to use 'root'):</code></pre> |
---|
149 | <p>Enter <code>admin</code></p> |
---|
150 | <p>Next, you'll be prompted for an email address. Here, you can enter your email address, although for testing it might be better to start by using the mail address of the local user, <code>root@ganetimgrX.virt.nsrc.org</code>.</p> |
---|
151 | <p>Finally, you'll be asked to provide a password. Don't use something too easy to guess when deploying this in production!</p> |
---|
152 | <p>If all goes well, you'll see:</p> |
---|
153 | <pre><code>Superuser created successfully.</code></pre> |
---|
154 | <h2 id="create-the-admin-interface-page"><a href="#create-the-admin-interface-page"><span class="header-section-number">1.7</span> Create the admin interface page</a></h2> |
---|
155 | <p>The next command creates the pages that will be displayed in the administrative interface:</p> |
---|
156 | <pre><code># cd /srv/www/ganetimgr |
---|
157 | # python manage.py collectstatic</code></pre> |
---|
158 | <p>You will be prompted:</p> |
---|
159 | <pre><code>This will overwrite existing files! |
---|
160 | Are you sure you want to do this? |
---|
161 | |
---|
162 | Type 'yes' to continue, or 'no' to cancel:</code></pre> |
---|
163 | <p>Answer <code>yes</code> and press <code><enter></code>.</p> |
---|
164 | <h2 id="start-the-watcher-process"><a href="#start-the-watcher-process"><span class="header-section-number">1.8</span> Start the watcher process</a></h2> |
---|
165 | <p>This is responsible for tracking the state of jobs (tasks)</p> |
---|
166 | <pre><code># ./watcher.py</code></pre> |
---|
167 | <p>Note: we'll have to remember to have <code>watcher.py</code> automatically be started a boot time.</p> |
---|
168 | <h2 id="create-a-configuration-for-gunicorn"><a href="#create-a-configuration-for-gunicorn"><span class="header-section-number">1.9</span> Create a configuration for gunicorn</a></h2> |
---|
169 | <p><code>gunicorn</code> is a python web server, which will run the Ganeti Manager application.</p> |
---|
170 | <p>Create the configuration by editing the file <code>/etc/gunicorn.d/ganetimgr</code>, and copy paste the lines below:</p> |
---|
171 | <pre><code>CONFIG = { |
---|
172 | 'mode': 'django', |
---|
173 | 'working_dir': '/srv/www/ganetimgr', |
---|
174 | 'user': 'www-data', |
---|
175 | 'group': 'www-data', |
---|
176 | 'args': ( |
---|
177 | '--bind=127.0.0.1:8088', |
---|
178 | '--workers=2', |
---|
179 | '--worker-class=egg:gunicorn#gevent', |
---|
180 | '--timeout=30', |
---|
181 | '--log-file=/var/log/ganetimgr/ganetimgr.log', |
---|
182 | ), |
---|
183 | }</code></pre> |
---|
184 | <h2 id="restart-gunicorn"><a href="#restart-gunicorn"><span class="header-section-number">1.10</span> Restart gunicorn</a></h2> |
---|
185 | <pre><code># service gunicorn restart</code></pre> |
---|
186 | <h2 id="create-an-nginx-configuration"><a href="#create-an-nginx-configuration"><span class="header-section-number">1.11</span> Create an Nginx configuration</a></h2> |
---|
187 | <p>Nginx, the web server, runs as the "front-end" for <code>gunicorn</code>.</p> |
---|
188 | <p>Here's a minimal configuration get the web interface up and running:</p> |
---|
189 | <p>Edit the file <code>/etc/nginx/sites-enabled/default</code>, erasing ALL THE LINES IN THE FILE, and copy the following lines into it:</p> |
---|
190 | <pre><code>server { |
---|
191 | server_name ganetimgrX.virt.nsrc.org; |
---|
192 | |
---|
193 | location / { |
---|
194 | proxy_pass http://127.0.0.1:8088; |
---|
195 | } |
---|
196 | |
---|
197 | location /static { |
---|
198 | root /srv/www/ganetimgr; |
---|
199 | } |
---|
200 | }</code></pre> |
---|
201 | <p>Test the configuration:</p> |
---|
202 | <pre><code># service nginx configtest</code></pre> |
---|
203 | <p>And if all is well, proceed to restart nginx:</p> |
---|
204 | <pre><code># service nginx restart</code></pre> |
---|
205 | <h2 id="vnc-proxy"><a href="#vnc-proxy"><span class="header-section-number">1.12</span> VNC proxy</a></h2> |
---|
206 | <p>We can now install the VNC Auth Proxy that will allow for browser-based VNC consoles!</p> |
---|
207 | <pre><code># apt-get install python-dev |
---|
208 | # pip install six --upgrade |
---|
209 | # pip install service_identity |
---|
210 | # pip install VNCAuthProxy</code></pre> |
---|
211 | <p>And start it:</p> |
---|
212 | <pre><code># twistd --pidfile=/tmp/proxy.pid -n vncap -c tcp:8888:interface=0.0.0.0 &</code></pre> |
---|
213 | <p>(Note: this needs to be done at server startup too)</p> |
---|
214 | <h1 id="create-rapi-user"><a href="#create-rapi-user"><span class="header-section-number">2</span> Create RAPI user</a></h1> |
---|
215 | <p>We now need to create a user on the Ganeti cluster nodes, that will allow Ganeti Manager to control the cluster.</p> |
---|
216 | <p>Pick a random string (for example, generate it with):</p> |
---|
217 | <pre><code>head -c18 /dev/urandom | base64</code></pre> |
---|
218 | <p>... and run it through the following command:</p> |
---|
219 | <pre><code>echo -n 'ganetimgr_api_user:Ganeti Remote API:random_string' | openssl md5</code></pre> |
---|
220 | <p>Note that random string should probably not contain ':'.</p> |
---|
221 | <p>Here's a sample output, which is a hashed password:</p> |
---|
222 | <pre><code>b20990f88c544cea982645e99b08d8c8</code></pre> |
---|
223 | <p>The final authentication / authorization line will look like this:</p> |
---|
224 | <pre><code>ganetimgr_api_user {HA1}b20990f88c544cea982645e99b08d8c8 write</code></pre> |
---|
225 | <p>... where <code>write</code> indicates that this user <code>ganetimgr_api_user</code> has write access to the cluster (i.e: can modify/create/delete instances!)</p> |
---|
226 | <p>Now, on the master node (NOT ON THE GANETIMGR MACHINE!), create the following file (as root):</p> |
---|
227 | <pre><code># editor /var/lib/ganeti/rapi/users</code></pre> |
---|
228 | <p>... and copy the authentication/authorization line, with the correct hashed password.</p> |
---|
229 | <p>Once you've done this, distribute this file to the other nodes in the cluster with the following command:</p> |
---|
230 | <pre><code># gnt-cluster copyfile /var/lib/ganeti/rapi/users</code></pre> |
---|
231 | <blockquote> |
---|
232 | <p>Note: In Debian Jessie onwards, remote access for RAPI is disabled by default. To check for this, look in <code>/etc/default/ganeti</code>. If the flags for the RAPI daemon include <code>-b 127.0.0.1</code> then remove that part and then restart ganeti.</p> |
---|
233 | </blockquote> |
---|
234 | <p>That's it! We are now ready to test the front-end!</p> |
---|
235 | <h1 id="navigate-to-the-ganetimgr-web-interface."><a href="#navigate-to-the-ganetimgr-web-interface."><span class="header-section-number">3</span> Navigate to the ganetimgr web interface.</a></h1> |
---|
236 | <p>Open <code>http://ganetimgrX.virt.nsrc.org/</code> in your browser.</p> |
---|
237 | <p>You should be presented with the login screen.</p> |
---|
238 | <p>Login with the <code>admin</code> user and password you created earlier.</p> |
---|
239 | <p>Now, click on <code>Admin</code> in the bottom of the left menu. If your browser window isn't wide enough, you'll only see a small "Gears" icon. Click on that.</p> |
---|
240 | <p>Click on <code>Add</code> next to <code>Clusters</code> under the <code>Ganeti</code> section.</p> |
---|
241 | <p>For hostname, enter the hostname (it must be in the DNS!) of the cluster, i.e.: <code>gntX.virt.nsrc.org</code>.</p> |
---|
242 | <p>For the "Slug", you can put "nsrc" for instance. It's best to avoid '-' in the cluster name, it seems.</p> |
---|
243 | <p>For username, use the <code>ganetimgr_api_user</code> specified earlier.</p> |
---|
244 | <p>For password, you use the randomly generated password (NOT the hashed version!) created earlier.</p> |
---|
245 | <p>Leave default disk template to <code>plain</code>.</p> |
---|
246 | <p>Now it's time to navigate back to the mainpage:</p> |
---|
247 | <pre><code>`http://ganetimgrX.virt.nsrc.org`</code></pre> |
---|
248 | <h1 id="additional-notes"><a href="#additional-notes"><span class="header-section-number">4</span> Additional notes</a></h1> |
---|
249 | <h2 id="whats-missing"><a href="#whats-missing"><span class="header-section-number">4.1</span> What's missing ?</a></h2> |
---|
250 | <ul> |
---|
251 | <li>start script for watcher.py</li> |
---|
252 | <li>upstart or systemd script for twistd (twistd --pidfile=/tmp/proxy.pid -n vncap -c tcp:8888:interface=0.0.0.0)</li> |
---|
253 | <li>Secure direct access to the VNC consoles via ACLs or using a VNC password on the nodes/cluster</li> |
---|
254 | <li>set OPERATING_SYSTEMS_URLS and SNF_OPERATING_SYSTEMS_URLS appropriately (point to local cache of images)</li> |
---|
255 | </ul> |
---|
256 | <h2 id="why-we-had-to-install-vncauthproxy-from-a-pip-package"><a href="#why-we-had-to-install-vncauthproxy-from-a-pip-package"><span class="header-section-number">4.2</span> Why we had to install VNCAuthProxy from a pip package:</a></h2> |
---|
257 | <p>The VNCAuthProxy binary package is missing the vncap module (not being built):</p> |
---|
258 | <ul> |
---|
259 | <li>https://code.osuosl.org/issues/16227</li> |
---|
260 | </ul> |
---|
261 | <h2 id="issues-with-vnc-consoles-and-using-etchosts-on-ganetimgr"><a href="#issues-with-vnc-consoles-and-using-etchosts-on-ganetimgr"><span class="header-section-number">4.3</span> Issues with VNC consoles and using <code>/etc/hosts</code> on ganetimgr</a></h2> |
---|
262 | <p>We have the cluster node names and the ganetimgr host names in <code>/etc/hosts</code> as vncauthproxy uses gevent and greenlets for the event loop and connection handling / forwarding. gevent (<1.0beta) uses libevent2 and its async DNS resolver, and libevent2-dns doesn't read <code>/etc/hosts</code>.</p> |
---|
263 | <ul> |
---|
264 | <li>https://groups.google.com/forum/?fromgroups=#!topic/gevent/xhYajAbofW0</li> |
---|
265 | <li>https://groups.google.com/forum/#!topic/synnefo/5DJLzhg4rvI</li> |
---|
266 | <li>https://groups.google.com/forum/#!msg/synnefo/bKuy4pajqvw/sV-KjDRefEIJ</li> |
---|
267 | </ul> |
---|
268 | </body> |
---|
269 | </html> |
---|