Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
The OpenXT synchronizers

![Block diagram of the OpenXT Synchonizer](diagrams/Syncstruct.png)

Synchronizer XT enables sysadmins and IT professionals to securely and
easily manage a large number of XenClient laptops and the Windows VMs
that run on them.

This contains the client part of the OpenXT synchronizer. The code here (mainly
sync_client/client.py) is a python program that runs in a low privilege service VM,
makes an HTTPS to a synchronizer web server which tells it what VMs it should be running.
client.py then compares this to the current state of the machine, downloads disks, configures
and starts VM as appropriate.

Note that client.py is a short running process which maintains no state. It runs once
to completion and then exits. Normally client.py is started by launcher.py which handles
getting the configuring information for client.py and running it regularly, and handling exits.

## Dependencies

sync-client requires:

* a synchronizer server to get target state and VHDs from (see https://github.com/openxt/sync-server/). In
turn the synchronizer server will require:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably shouldn't cite what synchronizer requires on the server side. That should be in sync-server which is already referenced here

** sync-database, a schema and stored procedures
** sync-cli, commnad line tools to access that database
** sync-wui, an optional web user interface for administrators
* icbinn (https://github.com/openxt/icbinn) to provide specific filesystem access to dom0 to write VHD files
* Python 2, (http://python.org)
* dbus-python (https://pypi.python.org/pypi/pydbus/0.2)

Normally sync-client is built as part of an OpenXT build via the recipe (OpenEmbedded makefile) at:

https://github.com/OpenXT/xenclient-oe/blob/master/recipes-openxt/xenclient/sync-client_git.bb

## Getting help

Start at:

http://www.openxt.org/

for details of reaching the OpenXT community.


## Authors

This document was written by Dickon Reed, dickon@cantab.net, 20th
February 2015.

The OpenXT synchronizer was written by a wider team, who may wish to add
themselves to this README file.

179 changes: 179 additions & 0 deletions diagrams/Syncstruct.dia
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<meta charset="UTF-8" />
<title>File:Syncstruct.dia - XenClient</title>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta name="generator" content="MediaWiki 1.23.3" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch_desc.php" title="XenClient (en)" />
<link rel="EditURI" type="application/rsd+xml" href="http://wiki.cam.xci-test.com/api.php?action=rsd" />
<link rel="alternate" type="application/atom+xml" title="XenClient Atom feed" href="/index.php?title=Special:RecentChanges&amp;feed=atom" />
<link rel="stylesheet" href="http://wiki.cam.xci-test.com/load.php?debug=false&amp;lang=en&amp;modules=ext.visualEditor.viewPageTarget.noscript%7Cmediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.skinning.interface%7Cmediawiki.ui.button%7Cskins.monobook.styles&amp;only=styles&amp;skin=monobook&amp;*" />
<!--[if IE 6]><link rel="stylesheet" href="/skins/monobook/IE60Fixes.css?303" media="screen" /><![endif]-->
<!--[if IE 7]><link rel="stylesheet" href="/skins/monobook/IE70Fixes.css?303" media="screen" /><![endif]--><meta name="ResourceLoaderDynamicStyles" content="" />
<link rel="stylesheet" href="http://wiki.cam.xci-test.com/load.php?debug=false&amp;lang=en&amp;modules=site&amp;only=styles&amp;skin=monobook&amp;*" />
<style>a:lang(ar),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}
/* cache key: wikidb:resourceloader:filter:minify-css:7:b36fd1c042133c9c9b60260f7c29b237 */</style>
<script src="http://wiki.cam.xci-test.com/load.php?debug=false&amp;lang=en&amp;modules=startup&amp;only=scripts&amp;skin=monobook&amp;*"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"File","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":6,"wgPageName":"File:Syncstruct.dia","wgTitle":"Syncstruct.dia","wgCurRevisionId":4564,"wgRevisionId":4564,"wgArticleId":321,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"File:Syncstruct.dia","wgIsProbablyEditable":false,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgRestrictionUpload":[],"wgVisualEditor":{"isPageWatched":false,"magnifyClipIconURL":"/skins/common/images/magnify-clip.png","pageLanguageCode":"en","pageLanguageDir":"ltr","svgMaxSize":2048}});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function($,jQuery){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"editfont":"default","editondblclick":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":1,"extendwatchlist":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nickname":"","norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"rcdays":7,"rclimit":50,"rows":25,"showhiddencats":0,"shownumberswatching":1,"showtoolbar":1,"skin":"monobook","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":1,"watchdefault":1,"watchdeletion":0,"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,
"useeditwarning":1,"prefershttps":1,"visualeditor-enable":1,"visualeditor-enable-experimental":0,"visualeditor-betatempdisable":0,"language":"en","variant-gan":"gan","variant-iu":"iu","variant-kk":"kk","variant-ku":"ku","variant-shi":"shi","variant-sr":"sr","variant-tg":"tg","variant-uz":"uz","variant-zh":"zh","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"variant":"en"});},{},{});mw.loader.implement("user.tokens",function($,jQuery){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});},{},{});
/* cache key: wikidb:resourceloader:filter:minify-js:7:fe59e018522293342af3473987427bd6 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax","ext.visualEditor.viewPageTarget.init"]);
}</script>
<script src="/extensions/UmlCanvas/Canvas2D.standalone.min.js" type="text/javascript"></script><script src="/extensions/UmlCanvas/UmlCanvas.shared.min.js" type="text/javascript"></script><link href="/extensions/UmlCanvas/UmlCanvas.css" rel="stylesheet" type="text/css" /></head>
<body class="mediawiki ltr sitedir-ltr ns-6 ns-subject page-File_Syncstruct_dia skin-monobook action-view">
<div id="globalWrapper">
<div id="column-content"><div id="content" class="mw-body-primary" role="main">
<a id="top"></a>

<h1 id="firstHeading" class="firstHeading" lang="en"><span dir="auto">File:Syncstruct.dia</span></h1>
<div id="bodyContent" class="mw-body">
<div id="siteSub">From XenClient</div>
<div id="contentSub"></div>
<div id="jump-to-nav" class="mw-jump">Jump to: <a href="#column-one">navigation</a>, <a href="#searchInput">search</a></div>

<!-- start content -->
<div id="mw-content-text"><ul id="filetoc"><li><a href="#file">File</a></li>
<li><a href="#filehistory">File history</a></li>
<li><a href="#filelinks">File usage</a></li></ul><div class="fullMedia"><span class="dangerousLink"><a href="/images/1/1a/Syncstruct.dia" class="internal" title="Syncstruct.dia">Syncstruct.dia</a></span> &#8206;<span class="fileInfo">(file size: 4 KB, MIME type: application/x-gzip)</span></div>
<div class="mediaWarning"><strong>Warning:</strong> This file type may contain malicious code.
By executing it, your system may be compromised.</div>
<div id="mw-imagepage-content" lang="en" dir="ltr" class="mw-content-ltr"><p>dia source
</p>
<!--
NewPP limit report
CPU time usage: 0.000 seconds
Real time usage: 0.001 seconds
Preprocessor visited node count: 1/1000000
Preprocessor generated node count: 4/1000000
Post‐expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
Highest expansion depth: 1/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key wikidb:pcache:idhash:321-0!*!*!*!*!*!* and timestamp 20150220164157 and revision id 4564
-->
</div><h2 id="filehistory">File history</h2>
<div id="mw-imagepage-section-filehistory">
<p>Click on a date/time to view the file as it appeared at that time.
</p>
<table class="wikitable filehistory">
<tr><td></td><th>Date/Time</th><th>Dimensions</th><th>User</th><th>Comment</th></tr>
<tr><td>current</td><td class='filehistory-selected' style='white-space: nowrap;'><a href="/images/1/1a/Syncstruct.dia">17:10, 11 April 2012</a></td><td> <span style="white-space: nowrap;">(4 KB)</span></td><td><a href="/index.php?title=User:Dickonr&amp;action=edit&amp;redlink=1" class="new mw-userlink" title="User:Dickonr (page does not exist)">Dickonr</a> <span style="white-space: nowrap;"> <span class="mw-usertoollinks">(<a href="/index.php?title=User_talk:Dickonr&amp;action=edit&amp;redlink=1" class="new" title="User talk:Dickonr (page does not exist)">Talk</a> | <a href="/index.php/Special:Contributions/Dickonr" title="Special:Contributions/Dickonr">contribs</a>)</span></span></td><td dir="ltr"></td></tr>
<tr><td></td><td style='white-space: nowrap;'><a href="/images/archive/1/1a/20120411171057%21Syncstruct.dia">14:26, 17 January 2012</a></td><td> <span style="white-space: nowrap;">(4 KB)</span></td><td><a href="/index.php?title=User:Apeace&amp;action=edit&amp;redlink=1" class="new mw-userlink" title="User:Apeace (page does not exist)">Apeace</a> <span style="white-space: nowrap;"> <span class="mw-usertoollinks">(<a href="/index.php?title=User_talk:Apeace&amp;action=edit&amp;redlink=1" class="new" title="User talk:Apeace (page does not exist)">Talk</a> | <a href="/index.php/Special:Contributions/Apeace" title="Special:Contributions/Apeace">contribs</a>)</span></span></td><td dir="ltr">Minor changes; change BED to Python.</td></tr>
<tr><td></td><td style='white-space: nowrap;'><a href="/images/archive/1/1a/20120117142602%21Syncstruct.dia">16:44, 11 January 2012</a></td><td> <span style="white-space: nowrap;">(4 KB)</span></td><td><a href="/index.php?title=User:Dickonr&amp;action=edit&amp;redlink=1" class="new mw-userlink" title="User:Dickonr (page does not exist)">Dickonr</a> <span style="white-space: nowrap;"> <span class="mw-usertoollinks">(<a href="/index.php?title=User_talk:Dickonr&amp;action=edit&amp;redlink=1" class="new" title="User talk:Dickonr (page does not exist)">Talk</a> | <a href="/index.php/Special:Contributions/Dickonr" title="Special:Contributions/Dickonr">contribs</a>)</span></span></td><td dir="ltr">change language for sync-client </td></tr>
<tr><td></td><td style='white-space: nowrap;'><a href="/images/archive/1/1a/20120111164404%21Syncstruct.dia">16:06, 10 January 2012</a></td><td> <span style="white-space: nowrap;">(4 KB)</span></td><td><a href="/index.php?title=User:Dickonr&amp;action=edit&amp;redlink=1" class="new mw-userlink" title="User:Dickonr (page does not exist)">Dickonr</a> <span style="white-space: nowrap;"> <span class="mw-usertoollinks">(<a href="/index.php?title=User_talk:Dickonr&amp;action=edit&amp;redlink=1" class="new" title="User talk:Dickonr (page does not exist)">Talk</a> | <a href="/index.php/Special:Contributions/Dickonr" title="Special:Contributions/Dickonr">contribs</a>)</span></span></td><td dir="ltr">relabel database </td></tr>
<tr><td></td><td style='white-space: nowrap;'><a href="/images/archive/1/1a/20120110160626%21Syncstruct.dia">14:34, 10 January 2012</a></td><td> <span style="white-space: nowrap;">(4 KB)</span></td><td><a href="/index.php?title=User:Dickonr&amp;action=edit&amp;redlink=1" class="new mw-userlink" title="User:Dickonr (page does not exist)">Dickonr</a> <span style="white-space: nowrap;"> <span class="mw-usertoollinks">(<a href="/index.php?title=User_talk:Dickonr&amp;action=edit&amp;redlink=1" class="new" title="User talk:Dickonr (page does not exist)">Talk</a> | <a href="/index.php/Special:Contributions/Dickonr" title="Special:Contributions/Dickonr">contribs</a>)</span></span></td><td dir="ltr"></td></tr>
<tr><td></td><td style='white-space: nowrap;'><a href="/images/archive/1/1a/20120110143401%21Syncstruct.dia">14:27, 10 January 2012</a></td><td> <span style="white-space: nowrap;">(4 KB)</span></td><td><a href="/index.php?title=User:Dickonr&amp;action=edit&amp;redlink=1" class="new mw-userlink" title="User:Dickonr (page does not exist)">Dickonr</a> <span style="white-space: nowrap;"> <span class="mw-usertoollinks">(<a href="/index.php?title=User_talk:Dickonr&amp;action=edit&amp;redlink=1" class="new" title="User talk:Dickonr (page does not exist)">Talk</a> | <a href="/index.php/Special:Contributions/Dickonr" title="Special:Contributions/Dickonr">contribs</a>)</span></span></td><td dir="ltr">dia source</td></tr>
</table>

</div>
<ul>
<li id="mw-imagepage-upload-disallowed">You cannot overwrite this file.</li>
</ul>
<h2 id="filelinks">File usage</h2>
<div id='mw-imagepage-section-linkstoimage'>
<p>The following page links to this file:
</p><ul class="mw-imagepage-linkstoimage">
<li class="mw-imagepage-linkstoimage-ns0"><a href="/index.php/Synchronizer_XT_Overview" title="Synchronizer XT Overview">Synchronizer XT Overview</a></li>
</ul>
</div>
</div><div class="printfooter">
Retrieved from "<a href="http://wiki.cam.xci-test.com/index.php?title=File:Syncstruct.dia&amp;oldid=4564">http://wiki.cam.xci-test.com/index.php?title=File:Syncstruct.dia&amp;oldid=4564</a>"</div>
<div id='catlinks' class='catlinks catlinks-allhidden'></div> <!-- end content -->
<div class="visualClear"></div>
</div>
</div></div>
<div id="column-one">
<h2>Navigation menu</h2>
<div id="p-cactions" class="portlet" role="navigation">
<h3>Views</h3>
<div class="pBody">
<ul>
<li id="ca-nstab-image" class="selected"><a href="/index.php/File:Syncstruct.dia" title="View the file page [c]" accesskey="c">File</a></li>
<li id="ca-talk" class="new"><a href="/index.php?title=File_talk:Syncstruct.dia&amp;action=edit&amp;redlink=1" title="Discussion about the content page [t]" accesskey="t">Discussion</a></li>
<li id="ca-viewsource"><a href="/index.php?title=File:Syncstruct.dia&amp;action=edit" title="This page is protected.&#10;You can view its source [e]" accesskey="e">View source</a></li>
<li id="ca-history"><a href="/index.php?title=File:Syncstruct.dia&amp;action=history" rel="archives" title="Past revisions of this page [h]" accesskey="h">History</a></li>
</ul>
</div>
</div>
<div class="portlet" id="p-personal" role="navigation">
<h3>Personal tools</h3>
<div class="pBody">
<ul>
<li id="pt-login"><a href="/index.php?title=Special:UserLogin&amp;returnto=File%3ASyncstruct.dia" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o">Log in</a></li>
</ul>
</div>
</div>
<div class="portlet" id="p-logo" role="banner">
<a href="/index.php/Main_Page" style="background-image: url(http://www.cam.xci-test.com/xc_dist/xen_logo.gif);" title="Visit the main page"></a>
</div>
<div class="generated-sidebar portlet" id="p-navigation" role="navigation">
<h3>Navigation</h3>
<div class='pBody'>
<ul>
<li id="n-mainpage-description"><a href="/index.php/Main_Page" title="Visit the main page [z]" accesskey="z">Main page</a></li>
<li id="n-recentchanges"><a href="/index.php/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li>
<li id="n-randompage"><a href="/index.php/Special:Random" title="Load a random page [x]" accesskey="x">Random page</a></li>
<li id="n-help"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents" title="The place to find out">Help</a></li>
</ul>
</div>
</div>
<div id="p-search" class="portlet" role="search">
<h3><label for="searchInput">Search</label></h3>
<div id="searchBody" class="pBody">
<form action="/index.php" id="searchform">
<input type='hidden' name="title" value="Special:Search"/>
<input type="search" name="search" placeholder="Search" title="Search XenClient [f]" accesskey="f" id="searchInput" />
<input type="submit" name="go" value="Go" title="Go to a page with this exact name if exists" id="searchGoButton" class="searchButton" />&#160;
<input type="submit" name="fulltext" value="Search" title="Search the pages for this text" id="mw-searchButton" class="searchButton" />
</form>

</div>
</div>
<div class="portlet" id="p-tb" role="navigation">
<h3>Tools</h3>
<div class="pBody">
<ul>
<li id="t-whatlinkshere"><a href="/index.php/Special:WhatLinksHere/File:Syncstruct.dia" title="A list of all wiki pages that link here [j]" accesskey="j">What links here</a></li>
<li id="t-recentchangeslinked"><a href="/index.php/Special:RecentChangesLinked/File:Syncstruct.dia" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li>
<li id="t-specialpages"><a href="/index.php/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q">Special pages</a></li>
<li id="t-print"><a href="/index.php?title=File:Syncstruct.dia&amp;printable=yes" rel="alternate" title="Printable version of this page [p]" accesskey="p">Printable version</a></li>
<li id="t-permalink"><a href="/index.php?title=File:Syncstruct.dia&amp;oldid=4564" title="Permanent link to this revision of the page">Permanent link</a></li>
<li id="t-info"><a href="/index.php?title=File:Syncstruct.dia&amp;action=info">Page information</a></li>
<li id="t-pdf">
<a href="/index.php?title=Special:PdfPrint&amp;page=File:Syncstruct.dia">Print as PDF</a></li> </ul>
</div>
</div>
</div><!-- end of the left (by default at least) column -->
<div class="visualClear"></div>
<div id="footer" role="contentinfo">
<div id="f-poweredbyico">
<a href="//www.mediawiki.org/"><img src="/skins/common/images/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" width="88" height="31" /></a>
</div>
<ul id="f-list">
<li id="lastmod"> This page was last modified on 11 April 2012, at 17:10.</li>
<li id="viewcount">This page has been accessed 353 times.</li>
<li id="privacy"><a href="/index.php/XenClient:Privacy_policy" title="XenClient:Privacy policy">Privacy policy</a></li>
<li id="about"><a href="/index.php/XenClient:About" title="XenClient:About">About XenClient</a></li>
<li id="disclaimer"><a href="/index.php/XenClient:General_disclaimer" title="XenClient:General disclaimer">Disclaimers</a></li>
</ul>
</div>
</div>
<script>/*<![CDATA[*/window.jQuery && jQuery.ready();/*]]>*/</script><script>if(window.mw){
mw.loader.state({"site":"loading","user":"ready","user.groups":"ready"});
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.hidpi","mediawiki.page.ready","mediawiki.searchSuggest"],null,true);
}</script>
<script src="http://wiki.cam.xci-test.com/load.php?debug=false&amp;lang=en&amp;modules=site&amp;only=scripts&amp;skin=monobook&amp;*"></script>
<script>if(window.mw){
mw.config.set({"wgBackendResponseTime":274});
}</script></body></html>
Binary file added diagrams/Syncstruct.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.