<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ddurst</id>
	<title>MozillaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ddurst"/>
	<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/Special:Contributions/Ddurst"/>
	<updated>2026-08-20T11:07:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Sync&amp;diff=1257866</id>
		<title>Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Sync&amp;diff=1257866"/>
		<updated>2026-07-01T18:54:15Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: added link to A-S sync overview&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sync is a storage service and set of client engines that allow clients to share information via a Mozilla Account. This data is stored on Mozilla’s storage server and is end-to-end encrypted; it is encrypted before it leaves the client and cannot be decrypted by Mozilla on the server side. This page should help you find any other information about Sync that users want or need.&lt;br /&gt;
&lt;br /&gt;
=== For general users ===&lt;br /&gt;
* Sync at a high level: https://www.mozilla.org/firefox/features/sync/&lt;br /&gt;
* SUMO article on Sync with more details and examples: https://support.mozilla.org/kb/sync&lt;br /&gt;
* How to choose what Firefox information to sync: https://support.mozilla.org/kb/how-do-i-choose-what-information-sync-firefox&lt;br /&gt;
&lt;br /&gt;
=== For more technical users ===&lt;br /&gt;
* Technical details on how Sync works and protects your privacy (2018): https://hacks.mozilla.org/2018/11/firefox-sync-privacy/&lt;br /&gt;
* Overview of Sync: https://mozilla.github.io/application-services/book/design/sync-overview.html&lt;br /&gt;
* Sync architecture diagrams: https://mozilla.github.io/application-services/book/design/components-strategy.html#high-level-firefox-sync-interactions&lt;br /&gt;
* Information on scoped keys involved in Sync and Mozilla Accounts: https://mozilla.github.io/ecosystem-platform/explanation/scoped-keys&lt;br /&gt;
* How devices register: https://mozilla.github.io/ecosystem-platform/relying-parties/how-tos/device-registration&lt;br /&gt;
* Sync system docs:&lt;br /&gt;
** [https://firefox-source-docs.mozilla.org/services/sync/index.html Firefox’s Sync integration] (Firefox source docs)&lt;br /&gt;
** [https://mozilla-services.github.io/syncstorage-rs/ Syncstorage-rs server] (mozilla-services.github.io docs)&lt;br /&gt;
** [https://mozilla-services.github.io/syncstorage-rs/tokenserver/tokenserver.html Token server] (mozilla-services.github.io docs)&lt;br /&gt;
** [https://mozilla.github.io/ecosystem-platform/api Mozilla Accounts API docs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more information on the system architecture of Sync, you can read the historical contents of [[CloudServices/Sync|this wiki]].&lt;br /&gt;
&lt;br /&gt;
=== Found a bug? ===&lt;br /&gt;
Learn where to [[CloudServices/Sync#Report_Bugs|file bugs]].&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Sync&amp;diff=1257865</id>
		<title>Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Sync&amp;diff=1257865"/>
		<updated>2026-07-01T15:31:30Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: add link to CloudServices/Sync&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sync is a storage service and set of client engines that allow clients to share information via a Mozilla Account. This data is stored on Mozilla’s storage server and is end-to-end encrypted; it is encrypted before it leaves the client and cannot be decrypted by Mozilla on the server side. This page should help you find any other information about Sync that users want or need.&lt;br /&gt;
&lt;br /&gt;
=== For general users ===&lt;br /&gt;
* Sync at a high level: https://www.mozilla.org/firefox/features/sync/&lt;br /&gt;
* SUMO article on Sync with more details and examples: https://support.mozilla.org/kb/sync&lt;br /&gt;
* How to choose what Firefox information to sync: https://support.mozilla.org/kb/how-do-i-choose-what-information-sync-firefox&lt;br /&gt;
&lt;br /&gt;
=== For more technical users ===&lt;br /&gt;
* Technical details on how Sync works and protects your privacy (2018): https://hacks.mozilla.org/2018/11/firefox-sync-privacy/&lt;br /&gt;
* Sync architecture diagrams: https://mozilla.github.io/application-services/book/design/components-strategy.html#high-level-firefox-sync-interactions&lt;br /&gt;
* Information on scoped keys involved in Sync and Mozilla Accounts: https://mozilla.github.io/ecosystem-platform/explanation/scoped-keys&lt;br /&gt;
* How devices register: https://mozilla.github.io/ecosystem-platform/relying-parties/how-tos/device-registration&lt;br /&gt;
* Sync system docs:&lt;br /&gt;
** [https://firefox-source-docs.mozilla.org/services/sync/index.html Firefox’s Sync integration] (Firefox source docs)&lt;br /&gt;
** [https://mozilla-services.github.io/syncstorage-rs/ Syncstorage-rs server] (mozilla-services.github.io docs)&lt;br /&gt;
** [https://mozilla-services.github.io/syncstorage-rs/tokenserver/tokenserver.html Token server] (mozilla-services.github.io docs)&lt;br /&gt;
** [https://mozilla.github.io/ecosystem-platform/api Mozilla Accounts API docs]&lt;br /&gt;
&lt;br /&gt;
For more information on the system architecture of Sync, you can read the historical contents of [[CloudServices/Sync|this wiki]].&lt;br /&gt;
&lt;br /&gt;
=== Found a bug? ===&lt;br /&gt;
Learn where to [[CloudServices/Sync#Report_Bugs|file bugs]].&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Sync&amp;diff=1257864</id>
		<title>Sync</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Sync&amp;diff=1257864"/>
		<updated>2026-07-01T15:23:38Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: created, removed redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sync is a storage service and set of client engines that allow clients to share information via a Mozilla Account. This data is stored on Mozilla’s storage server and is end-to-end encrypted; it is encrypted before it leaves the client and cannot be decrypted by Mozilla on the server side. This page should help you find any other information about Sync that users want or need.&lt;br /&gt;
&lt;br /&gt;
=== For general users ===&lt;br /&gt;
* Sync at a high level: https://www.mozilla.org/firefox/features/sync/&lt;br /&gt;
* SUMO article on Sync with more details and examples: https://support.mozilla.org/kb/sync&lt;br /&gt;
* How to choose what Firefox information to sync: https://support.mozilla.org/kb/how-do-i-choose-what-information-sync-firefox&lt;br /&gt;
&lt;br /&gt;
=== For more technical users ===&lt;br /&gt;
* Technical details on how Sync works and protects your privacy (2018): https://hacks.mozilla.org/2018/11/firefox-sync-privacy/&lt;br /&gt;
* Sync architecture diagrams: https://mozilla.github.io/application-services/book/design/components-strategy.html#high-level-firefox-sync-interactions&lt;br /&gt;
* Information on scoped keys involved in Sync and Mozilla Accounts: https://mozilla.github.io/ecosystem-platform/explanation/scoped-keys&lt;br /&gt;
* How devices register: https://mozilla.github.io/ecosystem-platform/relying-parties/how-tos/device-registration&lt;br /&gt;
* Sync system docs:&lt;br /&gt;
** [https://firefox-source-docs.mozilla.org/services/sync/index.html Firefox’s Sync integration] (Firefox source docs)&lt;br /&gt;
** [https://mozilla-services.github.io/syncstorage-rs/ Syncstorage-rs server] (mozilla-services.github.io docs)&lt;br /&gt;
** [https://mozilla-services.github.io/syncstorage-rs/tokenserver/tokenserver.html Token server] (mozilla-services.github.io docs)&lt;br /&gt;
** [https://mozilla.github.io/ecosystem-platform/api Mozilla Accounts API docs]&lt;br /&gt;
&lt;br /&gt;
=== Found a bug? ===&lt;br /&gt;
Learn where to [[CloudServices/Sync#Report_Bugs|file bugs]].&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Getting_Started&amp;diff=1257844</id>
		<title>Services/Sync/Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Getting_Started&amp;diff=1257844"/>
		<updated>2026-06-29T19:30:25Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: replaced Source Code section links with direct paths to searchfox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hacking =&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
Once you have a copy of the Mozilla source tree (read below for how to obtain a copy), you can find the core Sync source code in https://searchfox.org/firefox-main/source/services/sync&lt;br /&gt;
&lt;br /&gt;
This is just the core JavaScript APIs and logic. Additional Sync code for integration with Firefox lives in https://searchfox.org/firefox-main/source/browser/base/content&lt;br /&gt;
&lt;br /&gt;
Look for files with &#039;&#039;sync&#039;&#039; in their name. Files here define the integration between Firefox and Sync. This includes all the Sync UI.&lt;br /&gt;
&lt;br /&gt;
Additionally, Firefox Accounts specific code lives in https://searchfox.org/firefox-main/source/services/fxaccounts&lt;br /&gt;
&lt;br /&gt;
== Debugging Sync ==&lt;br /&gt;
&lt;br /&gt;
If you are debugging Sync in your browser, the first thing you want to do is crank up the logging. In about:config, set the following preferences:&lt;br /&gt;
&lt;br /&gt;
 # Enable logging to Error Console&lt;br /&gt;
 services.sync.log.appender.console Trace&lt;br /&gt;
&lt;br /&gt;
 # Enable logging to STDOUT&lt;br /&gt;
 services.sync.log.appender.dump Trace&lt;br /&gt;
&lt;br /&gt;
 # Log full sync logs on sync success (typically they are only saved on failure)&lt;br /&gt;
 services.sync.log.appender.file.logOnSuccess true&lt;br /&gt;
&lt;br /&gt;
 # Enable trace logging for engines&lt;br /&gt;
 services.sync.log.logger.engine Trace&lt;br /&gt;
 &lt;br /&gt;
 # (optional) Enable trace logging for all of sync (this is very verbose and will include all request bodies)&lt;br /&gt;
 services.sync.log.logger Trace&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve updated those settings, restart Firefox for them to take effect.&lt;br /&gt;
&lt;br /&gt;
If you are logging to STDOUT, you may want to set the environment variable &#039;&#039;MOZ_QUIET&#039;&#039; to silence a lot of spew from other parts of Firefox:&lt;br /&gt;
&lt;br /&gt;
 export MOZ_QUIET=1&lt;br /&gt;
&lt;br /&gt;
You can view full sync logs by opening &#039;&#039;&#039;about:sync-log&#039;&#039;&#039; in Firefox. Read more about [[Firefox Sync extended logging]] for fetching successful sync event logfiles.&lt;br /&gt;
&lt;br /&gt;
== Building Sync ==&lt;br /&gt;
&lt;br /&gt;
You probably should build using an artifact build, as described [https://firefox-source-docs.mozilla.org/contributing/contribution_quickref.html#bootstrap-a-copy-of-the-firefox-source-code here].&lt;br /&gt;
&lt;br /&gt;
After setting this up, you&#039;ll do `mach build` to perform a build, `mach run` to run Firefox, and `mach xpcshell-test /services/sync/tests/unit` to run the sync unit test suite. There&#039;s also a separate end-to-end test suite, TPS, which is documented [https://firefox-source-docs.mozilla.org/testing/tps/index.html here]. (For most changes it&#039;s sufficient that you run the unit tests.)&lt;br /&gt;
&lt;br /&gt;
Depending on your OS, most changes will not require a rebuild to take effect, only restarting and rerunning via `mach run`.&lt;br /&gt;
&lt;br /&gt;
= Using Bugzilla =&lt;br /&gt;
&lt;br /&gt;
Every code change starts out as a bug in [https://bugzilla.mozilla.org Bugzilla] where the general approach can be discussed. The bug should eventually be assigned to somebody who will upload one or more patches for review. Code can only be reviewed by module owners and their peers; see [[Services/Process/Code_Review|code review policy]] for more information. If the review has been granted and all review comments have been addressed, the patches may be checked into [https://github.com/mozilla-firefox/firefox mozilla-central].&lt;br /&gt;
&lt;br /&gt;
You probably also want to get up to speed on [http://bugzilla.mozilla.org Bugzilla] if you&#039;re not already.&lt;br /&gt;
* A good start is to go watch [http://vimeo.com/9205730 Jonath&#039;s &amp;quot;Bugzilla for Humans&amp;quot; video].&lt;br /&gt;
* Sync bugs are found in different places depending on which part of the system they affect. For the service side (syncstorage or tokenserver), bugs will be in [https://github.com/mozilla-services/syncstorage-rs|GitHub]. For the client side, you can find a list of components [CloudServices/Sync#Report_Bugs here].&lt;br /&gt;
* Don&#039;t forget to add a Bugzilla ID shortcut string to your Bugzilla [https://bugzilla.mozilla.org/userprefs.cgi?tab=account account preferences]. The current standard practice is to append &amp;quot;&amp;lt;whitespace&amp;gt;[:irc_nick]&amp;quot; to your Real Name field.&lt;br /&gt;
* You also want to watch the components relevant to your work so you automatically get emails for all bug changes in those components. The expected components where bugs will be filed are listed on [[CloudServices/Sync#Report_Bugs]].&lt;br /&gt;
* A useful Firefox add-on that makes life in Bugzilla a bit easier is [https://addons.mozilla.org/en-US/firefox/addon/bugzillajs/ Bugzilla Tweaks]. Highly recommended!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= Using Mercurial =&lt;br /&gt;
&lt;br /&gt;
Note: This section may be outdated.&lt;br /&gt;
&lt;br /&gt;
Mozilla&#039;s development process is very much patch driven. [https://developer.mozilla.org/En/Developer_Guide/Source_Code Mozilla uses Mercurial] (as well as git for some projects) as the version control system. [https://developer.mozilla.org/en/Mercurial_queues Mercurial Patch Queues], although a bit awkward to use at times, fit this process rather well. It is recommended you familiarize yourself with them and use them.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Marco Bonardo has some [http://blog.bonardo.net/2010/06/22/so-youre-about-to-use-checkin-needed general purpose tips] for Mozilla developers on how to format patches before uploading them to Bugzilla.&lt;br /&gt;
&lt;br /&gt;
Essentially it is recommended you put the following in your ~/.hgrc:&lt;br /&gt;
&lt;br /&gt;
  [ui]&lt;br /&gt;
  username = Your Name &amp;lt;you@mozilla.com&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  [extensions]&lt;br /&gt;
  hgext.mq = &lt;br /&gt;
  &lt;br /&gt;
  [diff]&lt;br /&gt;
  git = 1&lt;br /&gt;
  unified = 8&lt;br /&gt;
  &lt;br /&gt;
  [defaults]&lt;br /&gt;
  diff = -pU8&lt;br /&gt;
  qdiff = -pU8&lt;br /&gt;
  qnew = -U&lt;br /&gt;
  qseries = -sv&lt;br /&gt;
&lt;br /&gt;
If you find yourself mixing up `hg qpush` (push a patch onto your queue) and `hg push` (irreversibly push your changes out into the world) try adding this:&lt;br /&gt;
&lt;br /&gt;
  [hooks]&lt;br /&gt;
  preoutgoing.confirm = read -p &#039;Are you sure you want to push to remote? (y/n): &#039;; echo $REPLY | grep -q &#039;y&#039;&lt;br /&gt;
&lt;br /&gt;
(Note from philikon: I consider this hook pretty much useless. Mercurial will warn and abort if you&#039;re trying to with patches applied. So if you have any applied patches, it&#039;s very hard to accidentally push them. If you don&#039;t have applied patches, you&#039;re most likely not to have anything the remote repo doesn&#039;t have either.)&lt;br /&gt;
&lt;br /&gt;
Also, useful path definitions:&lt;br /&gt;
&lt;br /&gt;
  [paths]&lt;br /&gt;
  try = ssh://hg.mozilla.org/try/&lt;br /&gt;
  places = ssh://hg.mozilla.org/projects/places/&lt;br /&gt;
  mc = ssh://hg.mozilla.org/mozilla-central/&lt;br /&gt;
&lt;br /&gt;
== Landing patches ==&lt;br /&gt;
&lt;br /&gt;
You have items in a patch queue that you&#039;d like to push to m-c. Here&#039;s the thorough set of steps to follow to get them into the tree (assuming you have commit access, of course). It&#039;s recommended that you use autoland via mozreview, or flag bugs as having checkin-needed instead. &lt;br /&gt;
&lt;br /&gt;
=== Make sure mozilla-central is open and green ===&lt;br /&gt;
&lt;br /&gt;
Check [https://treeherder.mozilla.org treeherder].&lt;br /&gt;
&lt;br /&gt;
=== Make sure your tree is up to date ===&lt;br /&gt;
&lt;br /&gt;
  hg qpop --all&lt;br /&gt;
  hg pull -u&lt;br /&gt;
&lt;br /&gt;
===  Make sure that all the patches have a proper commit message ===&lt;br /&gt;
&lt;br /&gt;
For simple bugs, the format is&lt;br /&gt;
&lt;br /&gt;
  Bug NNNNNN - Bug Summary here. r=your_reviewers_IRC_nickname&lt;br /&gt;
&lt;br /&gt;
For bugs with several parts, you can do&lt;br /&gt;
&lt;br /&gt;
  Bug NNNNNN - Bug Summary here. r=your_reviewers_IRC_nickname&lt;br /&gt;
  `&lt;br /&gt;
  Part X: Frobnicate the majiggaberator&lt;br /&gt;
&lt;br /&gt;
Or simply&lt;br /&gt;
&lt;br /&gt;
  Bug NNNNNN - Part X: Frobnicate the majiggaberator. r=your_reviewers_IRC_nickname&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;tt&amp;gt;hg qser -sv&amp;lt;/tt&amp;gt; (omit the &amp;lt;tt&amp;gt;-sv&amp;lt;/tt&amp;gt; if you&#039;re using the config above). The output will look something like&lt;br /&gt;
&lt;br /&gt;
  0 U favicons-1a: Bug 675996 - Part 1: extend moz_favicons with GUID to support Sync. r=mak&lt;br /&gt;
  1 U favicons-1b: Bug 675996 - Part 2: adjust Places migration tests to expect current version, not v11; tests for GUIDs in favicons. r=mak&lt;br /&gt;
&lt;br /&gt;
If they don&#039;t, &amp;lt;tt&amp;gt;hg qpush&amp;lt;/tt&amp;gt; each one and edit the summary with &amp;lt;tt&amp;gt;hg qref -e&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ensure that the only patches you have applied are the ones you want to push ===&lt;br /&gt;
&lt;br /&gt;
… and that they&#039;re the ones that were reviewed. You can reorder patches by &amp;lt;tt&amp;gt;hg qpop --all&amp;lt;/tt&amp;gt; then &amp;lt;tt&amp;gt;hg qpush --move $patchname&amp;lt;/tt&amp;gt;, or by manually reordering .hg/patches/series. &#039;&#039;Only edit the series file when all patches have been popped.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Applied patches are indicated by an &#039;A&#039; in the 2nd column of qseries. Unapplied are &#039;U&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Run tests ===&lt;br /&gt;
&lt;br /&gt;
Now is a great time to run tests, because this is the state in which mozilla-central will be after you push. If you apply a &amp;lt;tt&amp;gt;tests&amp;lt;/tt&amp;gt; patch to re-enable disabled tests, &#039;&#039;make sure you pop it when you&#039;re done&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Finish the applied patches ===&lt;br /&gt;
&lt;br /&gt;
  hg qfinish --applied&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Verify what you&#039;re going to upload ===&lt;br /&gt;
  hg out&lt;br /&gt;
&lt;br /&gt;
If the command shows anything other than the patches you&#039;re expecting (or they&#039;re wrong in some way), &#039;&#039;stop&#039;&#039; and ask for help.&lt;br /&gt;
&lt;br /&gt;
=== Push! ===&lt;br /&gt;
&lt;br /&gt;
If all is good, push:&lt;br /&gt;
&lt;br /&gt;
  hg push&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Using Git =&lt;br /&gt;
&lt;br /&gt;
Various projects exist as Git repositories.&lt;br /&gt;
&lt;br /&gt;
== Configuring Git ==&lt;br /&gt;
&lt;br /&gt;
If this is your first time using Git, you&#039;ll need for perform some one-time configuration:&lt;br /&gt;
&lt;br /&gt;
 # Configure your global name and email. These will be used for commit info.&lt;br /&gt;
 $ git config --global user.name &amp;quot;John Doe&amp;quot;&lt;br /&gt;
 $ git config --global user.email &amp;quot;johndoe@mozilla.com&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Enable color output for all commands&lt;br /&gt;
 $ git config --global color.branch auto&lt;br /&gt;
 $ git config --global color.diff auto&lt;br /&gt;
 $ git config --global color.grep auto&lt;br /&gt;
 $ git config --global color.interactive auto&lt;br /&gt;
 $ git config --global color.status auto&lt;br /&gt;
 $ git config --global color.ui auto&lt;br /&gt;
 &lt;br /&gt;
 # Highlight whitespace&lt;br /&gt;
 $ git config --global core.whitespace &amp;quot;trailing-space,space-before-tab,tab-in-indent&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Define your editor for commits, other tools&lt;br /&gt;
 $ git config --global core.editor vim&lt;br /&gt;
&lt;br /&gt;
If you find you have a slow git prompt, you may find the instructions [https://gist.github.com/thomcc/4c23eeed3b248394bffa0bff04f5c00b here] beneficial as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= Repositories =&lt;br /&gt;
&lt;br /&gt;
Getting a checkout of a large Mercurial repository can be a pain if you&#039;re remote. Nobody wants to wait 6 hours while Python drools on its shoes. The answer is &#039;&#039;&#039;bundles&#039;&#039;&#039;. [https://developer.mozilla.org/en/Mozilla_Source_Code_%28Mercurial%29 Follow the directions]. More information on bundles is available [https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Source_Code/Mercurial/Bundles here].&lt;br /&gt;
&lt;br /&gt;
== mozilla-central ==&lt;br /&gt;
&lt;br /&gt;
mozilla-central is the repository for Firefox.&lt;br /&gt;
&lt;br /&gt;
== Try server ==&lt;br /&gt;
&lt;br /&gt;
To push to try, teave your changes as applied mq patches. Then run:&lt;br /&gt;
&lt;br /&gt;
  hg push -f ssh://hg.mozilla.org/try/&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can push to try using `mach try`, which works for both `git` and `hg` users (assuming git users are using git cinnabar), and is recommended for both.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Testing =&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en/Writing_xpcshell-based_unit_tests Writing xpcshell-based unit testing]. &lt;br /&gt;
* Sync tests are located at [https://searchfox.org/mozilla-central/source/services/sync/tests/unit/ /services/sync/tests/unit]&lt;br /&gt;
* [https://firefox-source-docs.mozilla.org/testing/tps/index.html TPS tests]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= Collaboration =&lt;br /&gt;
&lt;br /&gt;
== IRC ==&lt;br /&gt;
&lt;br /&gt;
Being a geographically distributed group, we tend to hang out on IRC. One thing you may wish to consider is running an [http://quadpoint.org/articles/irssi irssi client in a screen] session on a shell host. Here&#039;s a truncated config file you can use to connect:&lt;br /&gt;
&lt;br /&gt;
 servers = (&lt;br /&gt;
  {&lt;br /&gt;
    address = &amp;quot;irc.mozilla.org&amp;quot;;&lt;br /&gt;
    chatnet = &amp;quot;mozilla&amp;quot;;&lt;br /&gt;
    port = &amp;quot;6697&amp;quot;;&lt;br /&gt;
    autoconnect = &amp;quot;yes&amp;quot;;&lt;br /&gt;
    use_ssl = &amp;quot;yes&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
  };&lt;br /&gt;
 chatnets = { type = &amp;quot;IRC&amp;quot;; }; &lt;br /&gt;
 &lt;br /&gt;
 channels = { &lt;br /&gt;
  {&lt;br /&gt;
    comment = &amp;quot;Public channel for Sync&amp;quot;;&lt;br /&gt;
    name = &amp;quot;#sync&amp;quot;;&lt;br /&gt;
    chatnet = &amp;quot;mozilla&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   {&lt;br /&gt;
    comment = &amp;quot;Public channel for FxA&amp;quot;;&lt;br /&gt;
    name = &amp;quot;#fxa&amp;quot;;&lt;br /&gt;
    chatnet = &amp;quot;mozilla&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Miscellany =&lt;br /&gt;
&lt;br /&gt;
* You also want to grab a [http://nightly.mozilla.org/ Nightly] build of Firefox. Everybody in the company should be running a nightly build: it&#039;s a great way to find bugs before the code goes out to the general public. If you want to run against different profiles (which is useful for development), you will be interested in [https://developer.mozilla.org/en/Command_Line_Options two extra command flags]: &amp;quot;-P and --no-remote&amp;quot; &lt;br /&gt;
** -P forces the Profile Picker (You probably want to have more than one.)&lt;br /&gt;
** --no-remote allows multiple versions to run on one machine at the same time.&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=CloudServices/Sync/FxSync/FaviconSync&amp;diff=1257784</id>
		<title>CloudServices/Sync/FxSync/FaviconSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=CloudServices/Sync/FxSync/FaviconSync&amp;diff=1257784"/>
		<updated>2026-06-26T20:37:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: updated indicator of bugs at the top&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bugs =&lt;br /&gt;
&lt;br /&gt;
* The (old and current) tracking bug: {{bug|428378}} (open)&lt;br /&gt;
* Initial Sync engine implementation: {{bug|675299}} (closed)&lt;br /&gt;
* Places changes: {{bug|674238}} (closed)&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
* Sync favicons for history and bookmarks&lt;br /&gt;
* Don&#039;t sync history favicons if only bookmark sync is enabled (viceversa not as problematic)&lt;br /&gt;
&lt;br /&gt;
= Coordination =&lt;br /&gt;
&lt;br /&gt;
Important to sync up with the [https://wiki.mozilla.org/Places:Plan Places plan], which involves some schema alterations. mak is keen to reduce space overhead, which will likely see timestamps drop to int32, eliminate or render numeric MIME type values, and store large icons outside of the DB. It would also be nice to unify expiration timestamps and lastModified in the proposed favicon store.&lt;br /&gt;
&lt;br /&gt;
API work should be done in mozIAsyncFavicons, not nsIFaviconService. It&#039;s experimental, which means we have more leeway to make changes, and of course it&#039;s asynchronous.&lt;br /&gt;
&lt;br /&gt;
= Proposal =&lt;br /&gt;
&lt;br /&gt;
== Firefox (places.sqlite) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
moz_places&lt;br /&gt;
  id&lt;br /&gt;
  guid&lt;br /&gt;
  url&lt;br /&gt;
  favicon_id  -------&amp;amp;gt; foreign key to moz_favicons.id&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
moz_historyvisits&lt;br /&gt;
  id&lt;br /&gt;
  place_id  ------&amp;amp;gt; foreign key to moz_places.id&lt;br /&gt;
  visit_date&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
moz_bookmarks&lt;br /&gt;
  id&lt;br /&gt;
  guid&lt;br /&gt;
  type&lt;br /&gt;
  fk ------&amp;amp;gt; foreign key to moz_places.id&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
moz_favicons&lt;br /&gt;
  id&lt;br /&gt;
  url&lt;br /&gt;
  data&lt;br /&gt;
  mime_type&lt;br /&gt;
  expiration&lt;br /&gt;
  guid (NEW)&lt;br /&gt;
  lastmodified (NEW? Integrate with expiration?)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sync ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bookmarks&lt;br /&gt;
  id (a.k.a. GUID)&lt;br /&gt;
  bmkUri&lt;br /&gt;
  ...&lt;br /&gt;
  faviconGUID (NEW)&lt;br /&gt;
&lt;br /&gt;
history&lt;br /&gt;
  id (a.k.a. GUID)&lt;br /&gt;
  histUri&lt;br /&gt;
  title&lt;br /&gt;
  visits&lt;br /&gt;
  faviconGUID (NEW)&lt;br /&gt;
&lt;br /&gt;
favicons (NEW)&lt;br /&gt;
  id (a.k.a. GUID)&lt;br /&gt;
  url&lt;br /&gt;
  data&lt;br /&gt;
  mime_type&lt;br /&gt;
  expiration?&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Implementation  ==&lt;br /&gt;
&lt;br /&gt;
*Implement &amp;lt;code&amp;gt;favicons&amp;lt;/code&amp;gt; engine with above data schema. &lt;br /&gt;
*Add &amp;lt;code&amp;gt;faviconGUID&amp;lt;/code&amp;gt; property to bookmarks and history engines, it&#039;s synced as follows:&lt;br /&gt;
&lt;br /&gt;
#Find favicon based on &amp;lt;code&amp;gt;faviconGUID&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;a. it exists. Go to 3.&amp;lt;br&amp;gt;b. it doesn&#039;t exist. Go to 2. &lt;br /&gt;
#Create empty favicon entry with &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;guid&amp;lt;/code&amp;gt;. &lt;br /&gt;
#Refer to favicon id in the &amp;lt;code&amp;gt;moz_places&amp;lt;/code&amp;gt; entry.&lt;br /&gt;
&lt;br /&gt;
=== More detailed plan ===&lt;br /&gt;
&lt;br /&gt;
I propose a staged implementation, given dependencies on Places changes. Something a little like this:&lt;br /&gt;
&lt;br /&gt;
# Extend bookmarks and history engines to track faviconURI. We do this instead of GUID as a trivial proof of concept, rather than waiting around.&lt;br /&gt;
# Implement favicon engine to sync favicons keyed by URI.&lt;br /&gt;
# Implement observers for nsINavHistoryObserver::onPageChanged/nsINavHistoryObserver::ATTRIBUTE_FAVICON to track bookmark/history changes on favicon alteration, and also poke the favicon tracker to ensure that changed favicons get synced up.&lt;br /&gt;
# Implement GUIDs for favicons, in line with the Places plan.&lt;br /&gt;
# Rejig favicon and other engines to use the GUID instead of the URI. This will, of course, be a breaking change (and we don&#039;t want to use URIs in production for privacy reasons), so this will be the first point at which this can be a user-facing feature.&lt;br /&gt;
# Reimplement bookmarks and favicons engines using async repository API.&lt;br /&gt;
# Switch to using mozIAsyncFavicons instead of nsIFaviconService.&lt;br /&gt;
&lt;br /&gt;
== Questions/Observations ==&lt;br /&gt;
&lt;br /&gt;
*Is a blank entry in moz_favicons (cf. step 2 above) ok? &lt;br /&gt;
*How should we model the expiration (if at all)? &lt;br /&gt;
*How to access favicon data? Raw SQL r+w? Extend mozIAsyncHistory? &lt;br /&gt;
** mozIAsyncFavicons. This API is ours to chop up and extend, with appropriate judgment.&lt;br /&gt;
*How can we be notified when a new favicon is added or an existing one is changed?&lt;br /&gt;
** Observers. See above.&lt;br /&gt;
* How do we tie into or interact with Places&#039; favicon expiration events?&lt;br /&gt;
* It would seem to make sense to sync favicons before bookmarks, so as to have favicons present in the DB before they are linked to their bookmark record. We should also take care to keep toolbar/menu icons very much in the working set: synced first, and generally given priority. UX über alles!&lt;br /&gt;
** I disagree with that. It would be more useful to see people&#039;s bookmark toolbar/menu etc. populated with entries and then add the favicons quickly thereafter... Favicons could probably take considerably more time to sync than bookmarks... But as you say, that&#039;s something for UX to decide. --philikon&lt;br /&gt;
* Can this scheme easily be extended to work for things like site thumbnails?&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync1_5/FxASyncPairing&amp;diff=1257783</id>
		<title>Services/Sync1 5/FxASyncPairing</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync1_5/FxASyncPairing&amp;diff=1257783"/>
		<updated>2026-06-26T20:34:59Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: added throw to https://mozilla.github.io/ecosystem-platform and obsoleted content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a historical record that led to [https://mozilla.github.io/ecosystem-platform/relying-parties/tutorials/pairing Mozilla Accounts Pairing authentication].&lt;br /&gt;
&lt;br /&gt;
{{ OBSOLETE_CONTENT }}&lt;br /&gt;
&lt;br /&gt;
== Planning ==&lt;br /&gt;
&lt;br /&gt;
The initial target for this project is to produce &#039;&#039;&#039;a demo of pairing two devices using a full-strength key during new account setup&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This is so that:&lt;br /&gt;
&lt;br /&gt;
* we have flows to test with users&lt;br /&gt;
* we have a better idea of what needs to happen from an engineering point of view&lt;br /&gt;
* we can confirm that our approach can be implemented&lt;br /&gt;
&lt;br /&gt;
It will not:&lt;br /&gt;
&lt;br /&gt;
* be deployed to production&lt;br /&gt;
* be merged into the real repos&lt;br /&gt;
* provide the security / privacy guarantees of the final product&lt;br /&gt;
&lt;br /&gt;
=== Other planning resources ===&lt;br /&gt;
&lt;br /&gt;
* [https://etherpad.mozilla.org/NQHw02pTGv Per-component task breakdown for the real implementation]&lt;br /&gt;
&lt;br /&gt;
== User stories / audience ==&lt;br /&gt;
&lt;br /&gt;
Here are the reasons why users want pairing:&lt;br /&gt;
&lt;br /&gt;
# As an enthusiast, I think that pairing is cool. After a simple ceremony, my things magically get copied from one device to the other.&lt;br /&gt;
# As a forgetful user, I want to sync my things without having to type a password.&lt;br /&gt;
# As a user, I am fed up with all of these companies requiring me to create accounts with them. I just want to sync my devices, I don&#039;t want a Firefox Account.&lt;br /&gt;
# &#039;&#039;&#039;As a user of Marketplace, I need to type my FxA password often on multiple devices and so my password may not be strong enough to protect my Sync data, which is a lot more personal than my purchase history.&#039;&#039;&#039;&lt;br /&gt;
# As a privacy wizard, I only want to store my data on Mozilla&#039;s servers if it&#039;s encrypted using a full-strength key and doesn&#039;t require trusting any intermediate servers, even if it means jumping through a few hoops.&lt;br /&gt;
&lt;br /&gt;
The first two would likely involve big changes in how Firefox Accounts currently works and the assumptions it makes. A larger discussion needs to happen before we could prototype a solution for these stories. The last story would only address the needs of a small percentage of our users and so in the interest of increasing security for a large percentage of Firefox users, &#039;&#039;&#039;we will consider #4 to be our target audience&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Out of scope ==&lt;br /&gt;
&lt;br /&gt;
Some of the following things are interesting but currently out of scope:&lt;br /&gt;
&lt;br /&gt;
* removing the need for a password in Firefox Accounts&lt;br /&gt;
* allowing unverified emails in FxA&lt;br /&gt;
* recovery of Sync data if one loses all devices and forgets password (i.e. &#039;&#039;class A&#039;&#039; data)&lt;br /&gt;
* escrow of full strength keys to protect against device loss and improper backup practices (e.g. trusted third party or social escrow)&lt;br /&gt;
* mitigating the delivery of tampered code to the browser (i.e validating the content server payload or moving it to the client)&lt;br /&gt;
* migrating existing Sync 1.1 users onto Sync 1.5 + pairing&lt;br /&gt;
&lt;br /&gt;
== Pairing mechanisms ==&lt;br /&gt;
&lt;br /&gt;
Here are the 4 key exchange mechanisms that have been considered to copy the full-strength key (required by the user story we selected) from the device that generated it to another:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;0-bit pairing&#039;&#039;&#039;: Once a user has logged into their Firefox account on both devices, the class-B keys are used to authenticate a key-agreement protocol. The old device must ask the user for approval, then the full-strength key is pushed to the new device.&lt;br /&gt;
* &#039;&#039;&#039;Manual key entry&#039;&#039;&#039;: Users can view or download the key on one device and either type it back onto the second device or import it from a file.&lt;br /&gt;
* &#039;&#039;&#039;[[Services/KeyExchange|J-PAKE]]&#039;&#039;&#039;: This is the pairing mechanism that was used in [[Services/Sync|Sync 1.1]]. Pairing is initiated on the first device which displays an ephemeral code. That code must be entered on the second device. No need to type in an email address, all that&#039;s needed on the second device is the code.&lt;br /&gt;
* &#039;&#039;&#039;Barcode&#039;&#039;&#039;: A way to exchange data from a device to a mobile phone equipped with a camera. There is no need to type anything since the barcode (most likely a 2D barcode or QR code) includes everything needed.&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth&#039;&#039;&#039;: Sending the Sync key to another device over [https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API Bluetooth]. This potentially involves enabling Bluetooth devices, making them discoverable and doing Bluetooth pairing before transfering the key.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a comparison of these mechanisms:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pairing mechanism !! Desktop-to-Desktop [1] !! Desktop-to-Mobile !! Desktop-to-Laptop !! Mobile-to-Desktop !! Mobile-to-Mobile !! Mobile-to-Laptop !! Laptop-to-Desktop !! Laptop-to-Mobile !! Laptop-to-Laptop !! Fully kC compliant !! Fully backed up [6]&lt;br /&gt;
|-&lt;br /&gt;
| Current FxA Sync || yes || yes || yes || yes || yes || yes || yes || yes || yes || no || yes [7]&lt;br /&gt;
|-&lt;br /&gt;
| 0-bit pairing || no || yes || yes || yes || yes || yes || yes || yes || yes || meh [4] || no&lt;br /&gt;
|-&lt;br /&gt;
| Manual key entry || yes || meh [2] || yes || meh [3] || meh [2] || meh [3] || yes || meh [2] || yes || yes || yes&lt;br /&gt;
|-&lt;br /&gt;
| J-PAKE || no || yes || yes || yes || yes || yes || yes || yes || yes || yes || no&lt;br /&gt;
|-&lt;br /&gt;
| Barcode || no || YES! || meh [5] || no || YES! || meh [5] || no || YES! || meh [5] || yes || no&lt;br /&gt;
|-&lt;br /&gt;
| Bluetooth || no || meh [8] || meh [8] || meh [8] || yes || yes || meh [8] || yes || yes || yes [9] || no&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
# requires time shifting since devices may not be in physical proximity&lt;br /&gt;
# typing on mobile is not fun&lt;br /&gt;
# securely copying files out of a mobile is hard&lt;br /&gt;
# using the &amp;quot;kB channel&amp;quot; to copy kC reduces the strength of the key&lt;br /&gt;
# using a laptop camera to scan a QR code is hard&lt;br /&gt;
# user can recover their data after losing all devices&lt;br /&gt;
# users lose their data if they forget their password &amp;amp; lose all devices&lt;br /&gt;
# desktop computers frequently don&#039;t have Bluetooth or have it disabled&lt;br /&gt;
# we&#039;re assuming that the Bluetooth channel is confidential and authenticated&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to cover all different types of pairing and to simplify the most common pairing case (desktop/laptop to mobile), &#039;&#039;&#039;we propose implementing: J-PAKE, manual key entry and barcodes.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== User flows ==&lt;br /&gt;
&lt;br /&gt;
The following diagram shows all of the proposed pairing mechanisms:&lt;br /&gt;
&lt;br /&gt;
[[File:Fxa-sync--full-strength key pairing.png|900px]]&lt;br /&gt;
&lt;br /&gt;
which excludes the [[Media:Fxa-sync--0-bit pairing.png|0-bit pairing mechanism]].&lt;br /&gt;
&lt;br /&gt;
This diagram expands on what &#039;&#039;opening the Sync settings on the second device&#039;&#039; would look like:&lt;br /&gt;
&lt;br /&gt;
[[File:Sync_settings_on_second_device.png|900px]]&lt;br /&gt;
&lt;br /&gt;
This is how all of the different pairing possibilities would work in practice:&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! !! Desktop !! Laptop [1] !! Mobile [2] || &#039;&#039;no 2nd device&#039;&#039; [3]&lt;br /&gt;
|-&lt;br /&gt;
! Desktop || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device_pairing-Desktop-to-Desktop.png|250px|Desktop-to-Desktop]] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device_pairing-Desktop-to-Laptop.png|300px|Desktop-to-Laptop]] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device_pairing-Desktop-to-Mobile.png|200px|Desktop-to-Mobile]] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device pairing-Desktop-only.png|200px|Desktop-only]]&lt;br /&gt;
|-&lt;br /&gt;
! Laptop [4] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device_pairing-Laptop-to-Desktop.png|300px|Laptop-to-Desktop]] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device_pairing-Laptop-to-Laptop.png|300px|Laptop-to-Laptop]] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device_pairing-Laptop-to-Mobile.png|200px|Laptop-to-Mobile]] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device pairing-Laptop-only.png|200px|Laptop-only]]&lt;br /&gt;
|-&lt;br /&gt;
! Mobile [4] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device_pairing-Mobile-to-Desktop.png|250px|Mobile-to-Desktop]] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device_pairing-Mobile-to-Laptop.png|250px|Mobile-to-Laptop]] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device_pairing-Mobile-to-Mobile.png|200px|Mobile-to-Mobile]] [5] || style=&amp;quot;background-color: #FFFFFF;&amp;quot; | [[File:Device pairing-Mobile-only.png|150px|Mobile-only]] [6]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
# also includes tablets without a camera&lt;br /&gt;
# also includes tablets with a camera&lt;br /&gt;
# this is not pairing, it&#039;s just a backup&lt;br /&gt;
# also includes tablets&lt;br /&gt;
# scanning the QR code displayed on a phone screen can be hard (reflections, changes in screen orientation, etc.) so J-PAKE might be better in this case&lt;br /&gt;
# it is unclear how users will get the backup out of the phone since copying or printing files securely is not a solved problem on mobile&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TODO ===&lt;br /&gt;
&lt;br /&gt;
We need to think about these flows, though they may not be part of the first prototype:&lt;br /&gt;
&lt;br /&gt;
* migrating an existing Sync 1.5 account from password-derived key (&#039;&#039;class B&#039;&#039;) to full-strength key (&#039;&#039;class C&#039;&#039;)&lt;br /&gt;
* pairing with a third device&lt;br /&gt;
* email notifications sent to confirm that new devices are paired&lt;br /&gt;
* warnings shown when switching from a password-derived key to a full-strength key&lt;br /&gt;
* warnings shown when users setup Sync with a single device and a full-strength key&lt;br /&gt;
&lt;br /&gt;
== UX ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Top 5 Pairing Pros===&lt;br /&gt;
# No more typing long passwords&lt;br /&gt;
# Mobile users short passwords no longer an issue&lt;br /&gt;
# &amp;quot;Set it and forget it&amp;quot;: no more repeated entries&lt;br /&gt;
# Anshin - the feeling of security: Users _feel_ like Mozilla protects their information and thus feel more comfortable using our (awesome) service&lt;br /&gt;
# Pairing increases the security of the data (failure point is no longer a low entropy, user created key&lt;br /&gt;
# Resetting your password doesn&#039;t render previous data inaccessible&lt;br /&gt;
&lt;br /&gt;
===Top 5 Pairing Cons===&lt;br /&gt;
# Pairing is hard to understand - users might do it wrong (e.g pairing when they only have 1 device)&lt;br /&gt;
# Pairing is hard to understand - it&#039;s cognitively taxing: a minute spent on pairing is more taxing than a minute on Reddit&lt;br /&gt;
# Knowing when in the flow to introduce pairing is problematic&lt;br /&gt;
# Users may be frustrated at why the need a PW if there is pairing&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/grinder_tests/technical_documentation&amp;diff=1257782</id>
		<title>QA/Sync/Test Plan/grinder tests/technical documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/grinder_tests/technical_documentation&amp;diff=1257782"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/grinder tests/technical documentation to Services/Sync/Server/Archived/QA/Sync/Test Plan/grinder tests/technical documentation: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Test Plan/grinder tests/technical documentation]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/grinder_tests/technical_documentation&amp;diff=1257781</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Test Plan/grinder tests/technical documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/grinder_tests/technical_documentation&amp;diff=1257781"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/grinder tests/technical documentation to Services/Sync/Server/Archived/QA/Sync/Test Plan/grinder tests/technical documentation: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Testing Technologies ===&lt;br /&gt;
* Grinder&lt;br /&gt;
** This will be the main test harness. We will write scripts against it using jython and use its built in tools in order to distribute the tests to multiple load generators&lt;br /&gt;
** Advantages&lt;br /&gt;
*** Distributed (We can use multiple machines to hit a server)&lt;br /&gt;
*** Performant (No overhead of booting firefox)&lt;br /&gt;
*** Built with HTTP based testing in mind (ideal for REST services including SYNC and beyond)&lt;br /&gt;
* MongoDB&lt;br /&gt;
** A database with a REST api will be used for data verification. A percentage of requests will get stored in a Mongo database in effort to make sure that our data is accurate at all loads&lt;br /&gt;
** Advantages&lt;br /&gt;
*** Heavy - it is built to handle many reads/writes per second. Hopefully we won&#039;t be load testing MongoDB.&lt;br /&gt;
*** REST api we can perform the same steps to communicate with sync as we can to communicate with the database&lt;br /&gt;
&lt;br /&gt;
=== Current Architecture ===&lt;br /&gt;
* load-auth.services&lt;br /&gt;
** Current load Target&lt;br /&gt;
** No Captcha&lt;br /&gt;
** No mechanism for creating users&lt;br /&gt;
* client[4-9].scl2.svc&lt;br /&gt;
** Runs grinder load generater&lt;br /&gt;
** Has jython installed&lt;br /&gt;
** Direct access to load-auth.services&lt;br /&gt;
* Console Controller (any linux/windows computer connected to MPT)&lt;br /&gt;
** Controls test execution&lt;br /&gt;
** Has created a reverse ssh tunnel into the above grinder client so that the clients can see the grinder console&lt;br /&gt;
&lt;br /&gt;
See the following link for a graphical picture of how grinder systems are setup: [http://grinder.sourceforge.net/g3/getting-started.html#The+Grinder+processes| The Grinder Processes]&lt;br /&gt;
n.b. In terms of grinder lingo client[4-9].scl2.svc are agents with multiple workers each.&lt;br /&gt;
&lt;br /&gt;
=== Scripts ===&lt;br /&gt;
* Two Modes&lt;br /&gt;
** Console mode (dispatched console)&lt;br /&gt;
** Command line (single run, for testing)&lt;br /&gt;
* Libraries&lt;br /&gt;
** Grinder 3&lt;br /&gt;
** Jython 2.5.2 (this is important, older versions won&#039;t work properly)&lt;br /&gt;
** Jyson 1.01 (json parser written in java for jython - only works on jython 2.5+)&lt;br /&gt;
&lt;br /&gt;
n.b. In terms of grinder lingo client[4-9].scl2.svc are agents with multiple workers each.&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/grinder_tests&amp;diff=1257780</id>
		<title>QA/Sync/Test Plan/grinder tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/grinder_tests&amp;diff=1257780"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/grinder tests to Services/Sync/Server/Archived/QA/Sync/Test Plan/grinder tests: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Test Plan/grinder tests]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/grinder_tests&amp;diff=1257779</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Test Plan/grinder tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/grinder_tests&amp;diff=1257779"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/grinder tests to Services/Sync/Server/Archived/QA/Sync/Test Plan/grinder tests: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; NOTE: This site is deprecated since we now have Funkload tests for Sync, AITC, and TokenServer.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
We would like to have a test framework that tests the sync servers for load and functionality. For this, we will use Grinder in order to mimic the action of many firefox clients simultaneously.&lt;br /&gt;
&lt;br /&gt;
;We are trying to accomplish the following goals:&lt;br /&gt;
*Create a continuous baseline testing framework (tied to Jenkins)&lt;br /&gt;
*Be able to answer questions about current and future growth. &lt;br /&gt;
** How can our app fail now?&lt;br /&gt;
** What types of services can we support in the future?&lt;br /&gt;
&lt;br /&gt;
== Test Cases ==&lt;br /&gt;
=== Questions Addressed By This System ===&lt;br /&gt;
;Load Testing&lt;br /&gt;
*How does the app fail under high load conditions? How does it fail?&lt;br /&gt;
**From a large data input?&lt;br /&gt;
**From a lot of connections? &lt;br /&gt;
*Which functions and potential use cases create a particularly high amount of load?&lt;br /&gt;
**High amounts of registration? (and corresponding initial sync?)&lt;br /&gt;
**Lots of empty requests? (as generated by instant sync?) &lt;br /&gt;
*Are any functions effected sooner by high load? (I.E. Are there any unexpected bottlenecks?)&lt;br /&gt;
*How do these services scale to&lt;br /&gt;
** More Features&lt;br /&gt;
** More Users&lt;br /&gt;
&lt;br /&gt;
;Regression Testing&lt;br /&gt;
* Baseline tests on a sandboxed environemnt&lt;br /&gt;
** Did the code we just checked in have bugs that effect performance?&lt;br /&gt;
* Large scale weekly testing&lt;br /&gt;
** Are we confident this new release will work will in production?&lt;br /&gt;
&lt;br /&gt;
=== Test scripts ===&lt;br /&gt;
The objective of these scripts is to match our use of the sync api as closely as possible to that of the firefox client. The [https://wiki.mozilla.org/Services/Sync/Server/API/Storage/1.1 Sync API] is a fairly general storage solution - the behavior of the firefox client needs to be mimicked. A client object has been created as a mechanism to mimick the actions of a firefox client in grinder. The following functions are used to manipulate the test client to preform tasks a server normally recieves.&lt;br /&gt;
* Create User&lt;br /&gt;
* Add Data - these functions simulate a user creating data&lt;br /&gt;
** Tabs&lt;br /&gt;
*** Tabs are a whole different system - they aren&#039;t stored in memory&lt;br /&gt;
** Bookmarks&lt;br /&gt;
** History&lt;br /&gt;
** Preferences&lt;br /&gt;
** Passwords&lt;br /&gt;
* Delete Data&lt;br /&gt;
* Sync - These functions simulate the client going to the sync server and performing the sync routine&lt;br /&gt;
** Standard Sync&lt;br /&gt;
** Mobile Sync (Takes data in chunks of 50, processes them, and then asks for more)&lt;br /&gt;
* Reset Sync Command (Clears DB and creates new records)&lt;br /&gt;
** Change sync key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
New functions can be added as new services are rolled out. A lot of potential use cases will be able to be simulated by this system. For example a dupes test could be run by syncing the same data multiple times with serperate client objects.&lt;br /&gt;
&lt;br /&gt;
=== Script use patterns ===&lt;br /&gt;
We currently have the ability to go through the logs and see how the sync server is being used. We can generate a profile based on this and do load testing that way. In addition, we can add scenarios that model other use cases. For example:&lt;br /&gt;
* A period with above normal registrations&lt;br /&gt;
* A period with high amounts of data payload&lt;br /&gt;
* Lots of small requests (what instant sync would give us)&lt;br /&gt;
A config file or some time of user interface will be required so that we can &amp;quot;turn knobs&amp;quot; to simulate different scenarios. The possibility to test different scenarios is limitless. One of the main uses for this down the road could be to test the potential impact of new services as they are developed.&lt;br /&gt;
&lt;br /&gt;
== Technologies ==&lt;br /&gt;
=== Testing Technologies ===&lt;br /&gt;
* Grinder&lt;br /&gt;
** This will be the main test harness. We will write scripts against it using jython and use its built in tools in order to distribute the tests to multiple load generators&lt;br /&gt;
** Advantages&lt;br /&gt;
*** Distributed (We can use multiple machines to hit a server)&lt;br /&gt;
*** Performant (No overhead of booting firefox)&lt;br /&gt;
*** Built with HTTP based testing in mind (ideal for REST services including SYNC and beyond)&lt;br /&gt;
* MongoDB&lt;br /&gt;
** A database with a REST api will be used for data verification. A percentage of requests will get stored in a Mongo database in effort to make sure that our data is accurate at all loads&lt;br /&gt;
** Advantages&lt;br /&gt;
*** Heavy - it is built to handle many reads/writes per second. Hopefully we won&#039;t be load testing MongoDB.&lt;br /&gt;
*** REST api we can perform the same steps to communicate with sync as we can to communicate with the database&lt;br /&gt;
&lt;br /&gt;
=== Important features of the sync system ===&lt;br /&gt;
* Load Balancer - Zeus&lt;br /&gt;
** Will protect us from connection overrun&lt;br /&gt;
** Questions about how it responds under high load condition and how firefox responds to that&lt;br /&gt;
** Extremely scalable (will likely never be a bottle neck)&lt;br /&gt;
* Back end application&lt;br /&gt;
** Currently in PHP, will be migrated to python&lt;br /&gt;
** Questions about through put of data&lt;br /&gt;
* Database Server&lt;br /&gt;
** Currently has a large cache (this means we need a lot of tests before we are truly in a production type environment)&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/Test_Level_Summaries&amp;diff=1257778</id>
		<title>QA/Sync/Test Plan/Test Level Summaries</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/Test_Level_Summaries&amp;diff=1257778"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/Test Level Summaries to Services/Sync/Server/Archived/QA/Sync/Test Plan/Test Level Summaries: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Test Plan/Test Level Summaries]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/Test_Level_Summaries&amp;diff=1257777</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Test Plan/Test Level Summaries</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/Test_Level_Summaries&amp;diff=1257777"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/Test Level Summaries to Services/Sync/Server/Archived/QA/Sync/Test Plan/Test Level Summaries: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
Call out manual tests run for each level of Sync release train testing. Not intended to define test case steps to reproduce.&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
Tests run for Sync as it is built into Firefox&lt;br /&gt;
== Smoketests ==&lt;br /&gt;
definition: This set of tests is run to ensure the most basic and essential sync features work correctly&lt;br /&gt;
* ensure setup of a new account through the wizard works correctly&lt;br /&gt;
* ensure sync of each data type engine completes successfully&lt;br /&gt;
* ensure deactivate this account works correctly&lt;br /&gt;
&lt;br /&gt;
== Smoketests plus ==&lt;br /&gt;
definition: This is the above smoketests plus any tests related to bug fixes.  ie. if bookmarks sync was touched, run all of the bookmarks sync basic functional tests.&lt;br /&gt;
&lt;br /&gt;
== Basic Functional Tests ==&lt;br /&gt;
definition: This set of tests is run to ensure every sync feature works correctly. It is of greater depth and breadth than the smoketests.&lt;br /&gt;
* smoketests&lt;br /&gt;
* ensure adding and removing data for each engine syncs correctly&lt;br /&gt;
* ensure Fx UI pieces (Sync Icon, Tools Menu Item, Discoverability, etc) work correctly&lt;br /&gt;
* ensure about:sync-tabs (Tabs From Other Computers) page works correctly&lt;br /&gt;
* ensure each section of Sync Preferences (Options) works correctly&lt;br /&gt;
* ensure about:sync-log works correctly&lt;br /&gt;
&lt;br /&gt;
= Servers =&lt;br /&gt;
Since several different servers are involved, when referring to the lists below, keep in mind the server type under test.&lt;br /&gt;
&lt;br /&gt;
== Smoketests ==&lt;br /&gt;
definition: ensure the most basic and essential server features work correctly&lt;br /&gt;
* create a new sync account ((s)reg)&lt;br /&gt;
* add a client to existing account via the easy setup path. (pake)&lt;br /&gt;
* add a client to existing account via the reg path (don&#039;t have the other device with me). ((s)reg)&lt;br /&gt;
* delete an account (a.p. and (s)reg)&lt;br /&gt;
&lt;br /&gt;
== Smoketests plus ==&lt;br /&gt;
definition: This is the above smoketests plus any tests related to bug fixes.  ie. if easy setup was touched, run all of the easy setup basic functional tests.&lt;br /&gt;
&lt;br /&gt;
== Basic Functional Tests ==&lt;br /&gt;
This set of tests is run to ensure every server feature works correctly. It is of greater depth and breadth than the smoketests.&lt;br /&gt;
* smoketests&lt;br /&gt;
* ensure all Manage Account items in Sync Preferences (options) work correctly (a.p. and (s)reg)&lt;br /&gt;
* Log in to and ensure all items of Account Portal (https://account.services.mozilla.com/) work correctly (a.p.)&lt;br /&gt;
* ensure timeout or cancel out of easy setup works correctly (pake)&lt;br /&gt;
* ensure failure paths in setup wizard work correctly. ie.  Forgotten Password.  ((s)reg)&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/1.7&amp;diff=1257776</id>
		<title>QA/Sync/Test Plan/1.7</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/1.7&amp;diff=1257776"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/1.7 to Services/Sync/Server/Archived/QA/Sync/Test Plan/1.7: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Test Plan/1.7]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/1.7&amp;diff=1257775</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Test Plan/1.7</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/1.7&amp;diff=1257775"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/1.7 to Services/Sync/Server/Archived/QA/Sync/Test Plan/1.7: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;1.7 Sync Test Plan&lt;br /&gt;
&lt;br /&gt;
= Overview  =&lt;br /&gt;
&lt;br /&gt;
A point release of of Firefox Sync Extension. Primarily polish and performance release to get the add-on right up to snuff with Fx developments. Will also disable itself when on Fx with built in sync.&lt;br /&gt;
&lt;br /&gt;
== Builds  ==&lt;br /&gt;
&lt;br /&gt;
*[https://addons.mozilla.org/en-US/firefox/addon/10868 Released Version via AMO] - When pushed live.&lt;br /&gt;
*[https://ftp.mozilla.org/pub/mozilla.org/labs/weave/development/1.7.x/ development version of the extension]&lt;br /&gt;
&lt;br /&gt;
= Testing strategy  =&lt;br /&gt;
&lt;br /&gt;
*Verification, where possible, of noted bugs (delta to 1.6.3) - tracy: &lt;br /&gt;
** {{bug|637777}} &#039;&#039;verified&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 1.7 ==&lt;br /&gt;
*Run Fx Sync [https://litmus.mozilla.org/run_tests.cgi?test_run_id=83 Litmus smoketests] cross platform: &lt;br /&gt;
**Win 7: 3.5.16 + sync 1.7 - tracy - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Win XP: 3.6.13 + sync 1.7 - tracy - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Linux: 3.5.16 + sync 1.7 - tracy - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Mac: 3.6.13 + sync 1.7 - tracy - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Fennec: 4.0b4 + sync 1.7 - tchung/AaronMT - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Litmus testing notes: &lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
*Upgrade testing: &lt;br /&gt;
**Win 7: 3.5.16 + sync 1.5.1 -&amp;amp;gt; sync 1.7 - tracy  - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Linux: 3.5.16 + sync 1.6.3 -&amp;amp;gt; sync 1.7 - tracy  - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Mac: 3.6.13 + sync 1.6.3 -&amp;amp;gt; sync 1.7 - tracy  - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Fennec: 4.0b4 + sync 1.6.3 -&amp;amp;gt; sync 1.7 - tchung/AaronMT - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Major Update testing &lt;br /&gt;
**Win XP: 3.6.13 + sync 1.7 -&amp;amp;gt; Fx4rc1 - tracy - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Linux: 3.5.16 + sync 1.7 -&amp;amp;gt; Fx4rc1 - tracy - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Mac: 3.6.13 + sync 1.7 -&amp;amp;gt; Fx4rc1 - tracy - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
** revert back for each to ensure add-on becomes re-enabled. - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Upgrade testing notes: &lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
*Locale testing (install and quick spotcheck) &lt;br /&gt;
**Win 7: de - tracy  - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Linux: es-ES - tracy  - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Mac: ja-JP - tracy - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Locale testing notes: &lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
* Builds to QA: 3/8/2011&lt;br /&gt;
* QA sign-off: 3/9/2011&lt;br /&gt;
* Release: 3/9/2011&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/1.6.3&amp;diff=1257774</id>
		<title>QA/Sync/Test Plan/1.6.3</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/1.6.3&amp;diff=1257774"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/1.6.3 to Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6.3: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6.3]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/1.6.3&amp;diff=1257773</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6.3</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/1.6.3&amp;diff=1257773"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/1.6.3 to Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6.3: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;1.6.3 Sync Test Plan&lt;br /&gt;
&lt;br /&gt;
= Overview  =&lt;br /&gt;
&lt;br /&gt;
A point release of of Firefox Sync Extension. Primarily Places and performance related fixes.&lt;br /&gt;
&lt;br /&gt;
== Builds  ==&lt;br /&gt;
&lt;br /&gt;
*[https://addons.mozilla.org/en-US/firefox/addon/10868 Released Version via AMO] - When pushed live.&lt;br /&gt;
*[https://ftp.mozilla.org/pub/mozilla.org/labs/weave/development/1.6.x/weave-1.6.3-dev.xpi development version of the extension]&lt;br /&gt;
&lt;br /&gt;
= Testing strategy  =&lt;br /&gt;
&lt;br /&gt;
*Verification, where possible, of noted bugs (delta to 1.6.2) - tracy: &lt;br /&gt;
**{{Bug|627490}} - Bookmark sync: don&#039;t cache places IDs - &#039;&#039;&#039;qa-&#039;&#039;&#039; &lt;br /&gt;
**{{Bug|626796}} - Bookmark sync: restore from backup should trigger reupload - &#039;&#039;&#039;verified&#039;&#039;&#039; &lt;br /&gt;
**{{Bug|627497}} - Bookmark sync in Firefox 3.5/3.6: copied items need to get their own GUIDs - &#039;&#039;&#039;reopened&#039;&#039;&#039; &lt;br /&gt;
**{{Bug|610501}} - Places smart bookmarks are mishandled by Sync - &#039;&#039;&#039;verified&#039;&#039;&#039; &lt;br /&gt;
**{{Bug|609380}} - Password sync: don&#039;t add apply records with both a httpRealm and formSubmitURL or null/empty passwords &lt;br /&gt;
**{{Bug|620593}} - Username should allow leading and trailing whitespace &#039;&#039;&#039;verified&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 1.6.3-rel ==&lt;br /&gt;
*Run Fx Sync [https://litmus.mozilla.org/run_tests.cgi?test_run_id=83 Litmus smoketests] cross platform: &lt;br /&gt;
**Win XP: 3.6.13 + sync 1.6.3 - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039;  &lt;br /&gt;
**Linux: 3.5.16 + sync 1.6.3 - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Mac: 3.6.13 + sync 1.6.3 - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Litmus testing notes: &lt;br /&gt;
*** {{bug|627166}} - captcha dialog in some locales doesn&#039;t show Next button &#039;&#039;&#039;fix in 609160 was applied Fx trunk code not the extension&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 1.6.3b2 ==&lt;br /&gt;
*Run Fx Sync [https://litmus.mozilla.org/run_tests.cgi?test_run_id=83 Litmus smoketests] cross platform: &lt;br /&gt;
**Win 7: 3.5.16 + sync 1.6.3 - tracy &#039;&#039;&#039;Fail&#039;&#039;&#039; - &#039;&#039;with noted bug&#039;&#039;&lt;br /&gt;
**Win XP: 3.6.13 + sync 1.6.3 - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Linux: 3.5.16 + sync 1.6.3 - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Mac: 3.6.13 + sync 1.6.3 - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Fennec: 4.0b4 + sync 1.6.3 - aaron &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Litmus testing notes: &lt;br /&gt;
***{{bug|631361}} - Sync failing with: bookmarks failed: NS_ERROR_ILLEGAL_VALUE JS  &#039;&#039;(this was since mark WFM -unable to reproduce)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Upgrade testing: &lt;br /&gt;
**Win 7: 3.5.16 + sync 1.6.2 -&amp;amp;gt; sync 1.6.3 - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Win XP: 3.6.13 + sync 1.5.1 -&amp;amp;gt; sync 1.6.3 - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Linux: 3.5.16 + sync 1.5.1 -&amp;amp;gt; sync 1.6.3 - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Mac: 3.6.13 + sync 1.6.2 -&amp;amp;gt; sync 1.6.3 - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Fennec: 4.0b4 + sync 1.6.2 -&amp;amp;gt; sync 1.6.3 - aaron &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**Upgrade testing notes: &lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
*Locale testing (install and quick Smoketest) &lt;br /&gt;
**Win 7: de - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Win XP: fr - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; - &#039;&#039;with noted bug&#039;&#039;&lt;br /&gt;
**Linux: es-ES - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
**Mac: ja-JP - tracy &#039;&#039;&#039;Pass&#039;&#039;&#039; - &#039;&#039;with noted bug&#039;&#039;&lt;br /&gt;
**Locale testing notes: &lt;br /&gt;
*** {{bug|627166}} - captcha dialog in some locales doesn&#039;t show Next button&lt;br /&gt;
&lt;br /&gt;
= Schedule =&lt;br /&gt;
* Builds to QA: 2011-02-03&lt;br /&gt;
* QA sign-off: morning of 2011-02-04&lt;br /&gt;
* Release: 2011-02-04&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/1.6.2&amp;diff=1257772</id>
		<title>QA/Sync/Test Plan/1.6.2</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/1.6.2&amp;diff=1257772"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/1.6.2 to Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6.2: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6.2]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/1.6.2&amp;diff=1257771</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6.2</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/1.6.2&amp;diff=1257771"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/1.6.2 to Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6.2: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;1.6.2 Sync Test Plan&lt;br /&gt;
&lt;br /&gt;
= Overview  =&lt;br /&gt;
&lt;br /&gt;
A point release of of Firefox Sync Extension. Primarily Places and performance related fixes.&lt;br /&gt;
&lt;br /&gt;
== Builds  ==&lt;br /&gt;
&lt;br /&gt;
*[https://addons.mozilla.org/en-US/firefox/addon/10868 Released Version via AMO] - When pushed live.&lt;br /&gt;
*[https://ftp.mozilla.org/pub/mozilla.org/labs/weave/development/1.6.x/weave-1.6.2-dev.xpi development version of the extension]&lt;br /&gt;
&lt;br /&gt;
= Testing strategy =&lt;br /&gt;
&lt;br /&gt;
* Verification of noted bugs - tracy:&lt;br /&gt;
**{{Bug|621594}} - History sync: failure when title is null (verified)&lt;br /&gt;
**{{Bug|621489}} - Make sure to call _orderChildren even if _processIncoming fails (pending)&lt;br /&gt;
**{{Bug|597400}} - Form engine: item is undefined (verified)&lt;br /&gt;
**{{Bug|619162}} - meta.payload is undefined in WeaveSvc__remoteSetup&lt;br /&gt;
**{{Bug|623375}} - History sync: failure on javascript: URLs (verified)&lt;br /&gt;
**{{Bug|623418}} - Bookmark sync: don&#039;t record children in annotation (verified)&lt;br /&gt;
**{{Bug|618403}} - Orphan reparenting too aggressive, can lead to double bookmarks on storage version upgrade. (verified)&lt;br /&gt;
**{{Bug|623742}} - Addon UI: Add a device link goes to the wrong SUMO article (verified)&lt;br /&gt;
&lt;br /&gt;
* Run Fx Sync [https://litmus.mozilla.org/run_tests.cgi?test_run_id=83 Litmus BFT&#039;s] cross platform:&lt;br /&gt;
** Win 7: 3.6.13 + sync 1.6.2 - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;  &lt;br /&gt;
** Win XP: 3.5.16 + sync 1.6.2 - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;&lt;br /&gt;
** Linux: 3.6.13 + sync 1.6.2 - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;&lt;br /&gt;
** Mac: 3.6.13 + sync 1.6,2 - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;&lt;br /&gt;
** Fennec: 1.1 + sync 1.6.2 - tchung &#039;&#039;&#039;(PASS)&#039;&#039;&#039;&lt;br /&gt;
** Fennec: 4.0b3 + sync 1.6.2 (on desktop) - tchung &#039;&#039;&#039;(PASS)&#039;&#039;&#039;&lt;br /&gt;
** Litmus testing notes:&lt;br /&gt;
*** &lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
* Upgrade testing:&lt;br /&gt;
** Win 7: 3.6.13 + sync 1.6.1 -&amp;gt; sync 1.6.2 - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;&lt;br /&gt;
** Win XP: 3.5.16 + sync 1.5.1 -&amp;gt; sync 1.6.2 - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;&lt;br /&gt;
** Linux: 3.6.13 + sync 1.5.1 -&amp;gt; sync 1.6.2 - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;&lt;br /&gt;
** Mac: 3.6.13 + sync 1.6.1 -&amp;gt; sync 1.6.2 - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;&lt;br /&gt;
** Fennec: 1.1 + sync 1.6.1 -&amp;gt; sync 1.6.2 - tchung &#039;&#039;&#039;(PASS)&#039;&#039;&#039;&lt;br /&gt;
** Upgrade testing notes:&lt;br /&gt;
*** &lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
* Locale testing (install and quick Smoketest)&lt;br /&gt;
** Win 7: de - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;&lt;br /&gt;
** Win XP: fr - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;&lt;br /&gt;
** Linux: es-ES - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039;&lt;br /&gt;
** Mac: ja-JP - tracy &#039;&#039;&#039;(Pass)&#039;&#039;&#039; - with noted bug&lt;br /&gt;
** Fennec: zh-CH - tchung &#039;&#039;&#039;(n/a)&#039;&#039;&#039;&lt;br /&gt;
** Locale testing notes:&lt;br /&gt;
*** {{bug|627166}} - captcha dialog in ja-JP doesn&#039;t show Next button&lt;br /&gt;
***&lt;br /&gt;
&lt;br /&gt;
= Schedule  =&lt;br /&gt;
* Builds to QA: 2011-01-18&lt;br /&gt;
* QA sign-off: morning of 2011-01-20&lt;br /&gt;
* Release: 2011-01-20&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/1.6&amp;diff=1257770</id>
		<title>QA/Sync/Test Plan/1.6</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan/1.6&amp;diff=1257770"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/1.6 to Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/1.6&amp;diff=1257769</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan/1.6&amp;diff=1257769"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan/1.6 to Services/Sync/Server/Archived/QA/Sync/Test Plan/1.6: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;1.6 Sync Test Plan&lt;br /&gt;
&lt;br /&gt;
= Overview  =&lt;br /&gt;
&lt;br /&gt;
This release of Sync is on a critical path with Firefox 4, Fennec and Home.  Two major areas of concern are simplified crypto and JPAKE.  The former requiring a storage version bump. The later making a significant change in account setup and adding additional clients to use that account. We want to ensure both the new and old methods work and interact without disruption.&lt;br /&gt;
&lt;br /&gt;
== Builds  ==&lt;br /&gt;
&lt;br /&gt;
*[https://addons.mozilla.org/en-US/firefox/addon/10868 Released Version via AMO] &lt;br /&gt;
*[https://ftp.mozilla.org/pub/mozilla.org/labs/weave/development/1.6.x/ beta versions of the extension]&lt;br /&gt;
*[http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/ latest minefield beta8pre builds]&lt;br /&gt;
* [https://ftp.mozilla.org/pub/mozilla.org/labs/weave/development/1.6.x/weave-1.6-dev.xpi Sync 1.6 release]&lt;br /&gt;
&lt;br /&gt;
= Quick Testplan for 1.6 release =&lt;br /&gt;
* [https://ftp.mozilla.org/pub/mozilla.org/labs/weave/development/1.6.x/weave-1.6-dev.xpi Sync 1.6 release] Extension&lt;br /&gt;
** Please file bugs in Mozilla Services::Sync with whiteboard &amp;quot;[sync1.6]&amp;quot;&lt;br /&gt;
** The Easy Setup UI screen is &#039;&#039;&#039;not&#039;&#039;&#039; in the extension.  Please use Fallback setup method.&lt;br /&gt;
* Run [https://litmus.mozilla.org/run_tests.cgi?test_run_id=83 Sync Litmus tests] on different platforms:&lt;br /&gt;
** Win 7: 3.6.13 + sync 1.6 &#039;&#039;&#039;tchung (PASS)&#039;&#039;&#039; &lt;br /&gt;
** Win 7: 4.0b7 + sync 1.6 &#039;&#039;&#039;tchung (PASS)&#039;&#039;&#039; &lt;br /&gt;
** Fennec: 1.1 + sync 1.6 &#039;&#039;&#039;tchung&#039;&#039;&#039; (PASS)&#039;&#039;&#039;&lt;br /&gt;
** Win XP: 3.5.16 + sync 1.6 &#039;&#039;&#039;tchung (PASS)&#039;&#039;&#039;&lt;br /&gt;
** Linux: 3.6.13 + sync 1.6 &#039;&#039;&#039;juanb (Pass)&#039;&#039;&#039;&lt;br /&gt;
** Mac: 3.6.13 + sync 1.6 &#039;&#039;&#039;juanb (Pass)&#039;&#039;&#039;&lt;br /&gt;
** Mac: 4.0b7 + sync 1.6 &#039;&#039;&#039;juanb (Pass)&#039;&#039;&#039;&lt;br /&gt;
*** At some point I saw this in the console, when having only tabs checkbox selected. It only happened on initial sync: Error: win.gFxWeaveGlue is undefined Source File: chrome://weave/content/firefox/tabs.js Line: 14&lt;br /&gt;
* Update tests,&lt;br /&gt;
** Win 7: 3.6.13 + sync 1.5.1 -&amp;gt; sync 1.6 &#039;&#039;&#039;tchung (PASS)&#039;&#039;&#039;&lt;br /&gt;
** Win 7: 4.0b7 (should get an error to [https://services.mozilla.com/update/ update to beta 8]) &#039;&#039;&#039;tchung (PASS)&#039;&#039;&#039;&lt;br /&gt;
** Fennec: 1.1 + sync 1.5.1 -&amp;gt; sync 1.6 &#039;&#039;&#039;tchung&#039;&#039;&#039; (PASS)&#039;&#039;&#039;&lt;br /&gt;
** Win XP: 3.5.16 + sync 1.5.1 -&amp;gt; sync 1.6 &#039;&#039;&#039;tchung (PASS)&#039;&#039;&#039;&lt;br /&gt;
** Linux: 3.6.13 + sync 1.5.1 -&amp;gt; sync 1.6 &#039;&#039;&#039;juanb (Pass)&#039;&#039;&#039;&lt;br /&gt;
** Mac: 3.6.13 + sync 1.5.1 -&amp;gt; sync 1.6 &#039;&#039;&#039;juanb (Pass)&#039;&#039;&#039;&lt;br /&gt;
** Mac: 4.0b7 (should get an error to [https://services.mozilla.com/update/ update to beta 8]) &#039;&#039;&#039;juanb (Pass)&#039;&#039;&#039;&lt;br /&gt;
* Notes/Bugs&lt;br /&gt;
** (tchung) results&lt;br /&gt;
*** Confirmed {{Bug|548819}} Weave utils.js produces error after syncing when trying to call onBeginUpdateBatch and onEndUpdateBatch&lt;br /&gt;
*** Filed {{Bug|620593}} Username should allow leading and trailing whitespace&lt;br /&gt;
*** Filed {{Bug|620591}} Exception thrown when updating to sync 1.6 on Fx3.5.16/Fx3.6.13&lt;br /&gt;
&lt;br /&gt;
= Test Strategy  =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Pass&#039;&#039;&#039; - Server testing.  (tracy, ops) &lt;br /&gt;
** passed QA against stage, but issues revealed in production. &lt;br /&gt;
* &#039;&#039;&#039;Desktop testing complete, waiting on Mobile&#039;&#039;&#039; - With the help of the Waverly team, we&#039;ll want to ensure the critical upgrade paths (due to crypto version bump) and JPAKE account setups work properly.  This testing will be tracked on [https://spreadsheets.google.com/ccc?key=0AocUyLHteCtSdHNyLUVpUWpHdDlvWklwYmVaa2JMVXc&amp;amp;hl=en&amp;amp;authkey=CJHPjucM#gid=0 this spreadsheet]&amp;lt;br&amp;gt; (Waverly, tracy and tony)&lt;br /&gt;
** [https://bugzilla.mozilla.org/show_bug.cgi?id=618042	Bug 618042] - Sync Key change fails - FIXED in 1.6b3					&lt;br /&gt;
** [https://bugzilla.mozilla.org/show_bug.cgi?id=618336	Bug 618336] - &#039;&#039;&#039;Crummy experience adding latest storage version client to an existing storage version 3 client&#039;&#039;&#039; &#039;&#039;we&#039;ve made support aware of this one&#039;&#039;&lt;br /&gt;
** [https://bugzilla.mozilla.org/show_bug.cgi?id=618068	Bug 618068] - Cipher finalize failed on startup			&lt;br /&gt;
* &#039;&#039;&#039;In progress&#039;&#039;&#039; - Bug fix verifications (tracy) &lt;br /&gt;
* &#039;&#039;&#039;Desktop testing complete, waiting on Mobile&#039;&#039;&#039; Run cross platform the funtional bfts (with particular focus on Bookmarks sync) for Fennec, Home, Firefox, and extension&lt;br /&gt;
** Fx4 (tracy)&lt;br /&gt;
*** Windows &#039;&#039;&#039; Pass&#039;&#039;&#039; - I believe the captcha bug may be machine dependent. (couldn&#039;t repro on lab Win 7 machine)&lt;br /&gt;
*** Mac - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
*** Linux - &#039;&#039;&#039;Pass&#039;&#039;&#039; &lt;br /&gt;
** 1.6 extension on 3.5/6 (tracy)&lt;br /&gt;
*** Windows &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
*** Mac - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
*** Linux - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
** Fennec (tony)&lt;br /&gt;
*** Fennec 1.1 (maemo) - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
*** Fennec 4.0b3 (android) - &#039;&#039;&#039;Pass&#039;&#039;&#039;&lt;br /&gt;
**** tests apply only with a desktop build+sync 1.6 for jpake setup &lt;br /&gt;
** Home (tony)&lt;br /&gt;
*** tests apply only with a desktop build+sync 1.6 for jpake setup &lt;br /&gt;
*** [https://wiki.mozilla.org/QA/Weave_Test_Plan/FirefoxHome/1.1_testplan test plan here]&lt;br /&gt;
** Bugs of note:&lt;br /&gt;
*** [https://bugzilla.mozilla.org/show_bug.cgi?id=564296  Bug 564296] - Form data deletes don&#039;t sync&lt;br /&gt;
*** [https://bugzilla.mozilla.org/show_bug.cgi?id=596399 Bug 564296] - Text input field not visible in captcha dialog.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Pass&#039;&#039;&#039; - Ensure functionality of pages at Mozilla Services websites (eg. https://services.mozilla.com/) (tracy)&lt;br /&gt;
* &#039;&#039;&#039;Pass with untranslated strings&#039;&#039;&#039; l10n spot checks against a few tier 1 locales. (tracy) - &lt;br /&gt;
** not sure that these are actually expected to be complete.  es-ES looked fine, however, de wasn&#039;t completely translated.  [https://bugzilla.mozilla.org/show_bug.cgi?id=619796 bug 619796] - Connect portion of Sync Setup dialogs are untranslated&lt;br /&gt;
* unit tests on crossweave?&lt;br /&gt;
* Accessibility? (marco)&lt;br /&gt;
* host a sync testday after beta launches (not during all-hands, possibly 12/22) (tracy)&lt;br /&gt;
&lt;br /&gt;
= Schedule Scoping  =&lt;br /&gt;
&lt;br /&gt;
* Targeting for release 2010-12-?? (when beta8 release for built-in and Extension)&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan&amp;diff=1257768</id>
		<title>QA/Sync/Test Plan</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Test_Plan&amp;diff=1257768"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan to Services/Sync/Server/Archived/QA/Sync/Test Plan: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Test Plan]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan&amp;diff=1257767</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Test Plan</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Test_Plan&amp;diff=1257767"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Test Plan to Services/Sync/Server/Archived/QA/Sync/Test Plan: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview  =&lt;br /&gt;
Outline Quality Assurance plan to adapt to structured development cycles for [https://wiki.mozilla.org/Services/Process/MergingBetweenBranches Sync client] and [https://wiki.mozilla.org/Services/Process/ServerReleaseProcess Sync Servers].&lt;br /&gt;
Both parts of Sync have moved to a weekly cycle of fixes and pushes.  This plan shows how QA will handle those weekly trains.&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
== Weekly client pushes of s-c to m-c ==&lt;br /&gt;
Sync client fixes are made on the services-central branch.  Once per week, on Monday, those fixes will be handed off to QA for testing. Unless specifically required by dev/ops, testing of client fixes should occur against the stable production servers.&lt;br /&gt;
&lt;br /&gt;
=== Testing strategy ===&lt;br /&gt;
* Verify fixes per bug STR&#039;s&lt;br /&gt;
* Run the set of manual [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Smoketests_plus smoketests plus] cross platforms to ensure basic Sync functionality has not regressed due to the new fixes.&lt;br /&gt;
* Against the Wednesday m-c (Nightly) build, re-verify fixes and run [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Smoketests smoketests] and [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Basic_Functional_Tests Basic Functional Test groups] related to current fixes to ensure no merge issues regressed Sync on Nightly channel&lt;br /&gt;
&lt;br /&gt;
=== Schedule ===&lt;br /&gt;
* Builds to QA: Monday&lt;br /&gt;
* QA sign-off: EOD Tuesday&lt;br /&gt;
* s-c push to m-c: Tuesday EOD&lt;br /&gt;
* QA sign-off of m-c: Wednesday EOD&lt;br /&gt;
&lt;br /&gt;
== Channel progression ==&lt;br /&gt;
Being a built into Firefox service, Sync will follow along with FxN&lt;br /&gt;
&lt;br /&gt;
=== Schedule ===&lt;br /&gt;
The schedule follows the FxN schedule through the channel progression of releases.&lt;br /&gt;
&lt;br /&gt;
=== Testing strategy ===&lt;br /&gt;
* Nightly - See the s-c to m-c push plan above.&lt;br /&gt;
* Aurora - Run Sync [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Basic_Functional_Tests Basic Functional Tests] one week prior the channel merge.&lt;br /&gt;
** note: handle specific direct landing to Aurora on a case by case basis. &lt;br /&gt;
* Beta - Run Sync [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Smoketests smoketests] post build.&lt;br /&gt;
* Release &lt;br /&gt;
** Run Sync [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Smoketests smoketests] on release candidate builds.&lt;br /&gt;
** Upgrade testing when available&lt;br /&gt;
** Major Update testing when available&lt;br /&gt;
** Locale testing - install and quick spot check a few Tier1 locales&lt;br /&gt;
&lt;br /&gt;
= Servers =&lt;br /&gt;
Sync server fixes are made on the staging server(s). Once per week, on Wednesday, those fixes will be handed off to QA for testing.  Testing for Sync server, registration server, PAKE server and Account Portal can be required for any or all of them depending on fixes going in that week.  Note: per the release process docs, Crossweave and load testing will be performed by Server Ops as necessary. Testing approach to each piece is outlined below.&lt;br /&gt;
&lt;br /&gt;
== Sync server ==&lt;br /&gt;
* Staging server is https://stage-auth.services.mozilla.com/&lt;br /&gt;
* Verify fixes per bug STR&#039;s&lt;br /&gt;
* Run the set of manual [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Smoketests_plus_2 smoketest plus] cross platforms to ensure basic Sync functionality has not regressed due to the new fixes.&lt;br /&gt;
&lt;br /&gt;
== Registration Servers ==&lt;br /&gt;
* Staging server is https://stage-auth.services.mozilla.com/&lt;br /&gt;
* Verify fixes per bug STR&#039;s&lt;br /&gt;
* Run the set of manual [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Smoketests_plus_2 smoketests plus] cross platforms to ensure basic account registration functionality has not regressed due to the new fixes.&lt;br /&gt;
&lt;br /&gt;
== PAKE Server ==&lt;br /&gt;
* Update about:config (restart required) services.sync.jpake.serverURL to https://stage-setup.services.mozilla.com/&lt;br /&gt;
* Verify fixes per bug STR&#039;s&lt;br /&gt;
* Run manual easy setup [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Smoketests_plus_2 smoketests plus] across devices to ensure functionality has not regressed due to the new fixes.&lt;br /&gt;
&lt;br /&gt;
== Account Portal ==&lt;br /&gt;
* Stage Account Portal is https://stage-account.services.mozilla.com/&lt;br /&gt;
* Verify fixes per bug STR&#039;s&lt;br /&gt;
* Run the set of manual [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Smoketests_plus_2 smoketest plus] to ensure account management functionality has not regressed due to the new fixes. &lt;br /&gt;
&lt;br /&gt;
=== Schedule ===&lt;br /&gt;
* Builds to QA: Wednesday&lt;br /&gt;
* QA sign-off: EOD Friday&lt;br /&gt;
* Push from stage to production will happen during the maintenance window on Mondays, 3-5pm Pacific time.  (QA to be on hand for live spot checks to help verify the push was a success)&lt;br /&gt;
&lt;br /&gt;
== Load Testing ==&lt;br /&gt;
* Working with ops team to improve grinder tests to better mimic real world conditions&lt;br /&gt;
* Detailed testing strategies and processes can be found here:[https://wiki.mozilla.org/QA/Sync/Test_Plan/grinder_tests Grinder Tests]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_Ubuntu&amp;diff=1257766</id>
		<title>QA/Sync/Sync Server Install Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_Ubuntu&amp;diff=1257766"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install Ubuntu to Services/Sync/Server/Archived/QA/Sync/Sync Server Install Ubuntu: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Sync Server Install Ubuntu]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_Ubuntu&amp;diff=1257765</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Sync Server Install Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_Ubuntu&amp;diff=1257765"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install Ubuntu to Services/Sync/Server/Archived/QA/Sync/Sync Server Install Ubuntu: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Note: This site has been deprecated. See the following links:&lt;br /&gt;
 https://wiki.mozilla.org/QA/Sync/Sync_Server_Install_On_Ubuntu_10_04&lt;br /&gt;
 https://wiki.mozilla.org/QA/Sync/Sync_Server_Install_On_Ubuntu_11_04&lt;br /&gt;
 https://wiki.mozilla.org/QA/Sync/Sync_Server_Install_On_Ubuntu_11_10&lt;br /&gt;
&lt;br /&gt;
= Notes for Installing Sync Server on Ubuntu 10.04 or 10.10 64bit with Python 2.6.5 =&lt;br /&gt;
REF: http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
&lt;br /&gt;
== General Notes ==&lt;br /&gt;
* The &amp;quot;Building the server&amp;quot; steps can be repeated for each new build you want to test.&lt;br /&gt;
* Once it is running, you can point to it for your own Sync server.&lt;br /&gt;
&lt;br /&gt;
* It is highly recommended that Python 2.6.6 be installed before proceeding with the Sync install.&lt;br /&gt;
* Python 2.7 appears to be compatible, but the pre-packaged installer assumes 2.6.6.&lt;br /&gt;
* Also, it is highly recommended that the developer tools are installed after installing Python 2.6.6.&lt;br /&gt;
&lt;br /&gt;
== Installing the Developer Tools ==&lt;br /&gt;
To get a full development environment on the box, do the following:&lt;br /&gt;
 $ curl -O http://python-distribute.org/distribute_setup.py&lt;br /&gt;
 $ sudo python2.6 distribute_setup.py&lt;br /&gt;
 $ sudo easy_install-2.6 MoPyTools&lt;br /&gt;
&lt;br /&gt;
== Keeping the build logs ==&lt;br /&gt;
Run the &amp;quot;make build&amp;quot; step as follows:&lt;br /&gt;
 $ make build 1&amp;gt; buildlog.log 2&amp;gt; builderr.err&lt;br /&gt;
&lt;br /&gt;
== Using Sqlite3 ==&lt;br /&gt;
If sqlite3 is to be used, the server-full/etc/sync.conf file must be edited to change the default location of the temp.db file. The default location is in /tmp, which will get wiped at each system boot/restart.&lt;br /&gt;
&lt;br /&gt;
== Installing Sync Server, FireFox, and MySQL ==&lt;br /&gt;
* Required packages&lt;br /&gt;
** Python, python-dev, python-virtualenv&lt;br /&gt;
** sqlite3 or mysql&lt;br /&gt;
** mercurial&lt;br /&gt;
&lt;br /&gt;
* Run the following to make sure everything is installed:&lt;br /&gt;
 $sudo apt-get install python-dev mercurial sqlite3 python-virtualenv&lt;br /&gt;
&lt;br /&gt;
* Verify the package installs and versions&lt;br /&gt;
 $ which sqlite3&lt;br /&gt;
 $ sqlite3 --version&lt;br /&gt;
 $ which hg&lt;br /&gt;
 $ hg --version&lt;br /&gt;
 $ which python&lt;br /&gt;
 $ python -V&lt;br /&gt;
&lt;br /&gt;
* Install FireFox 5.01&lt;br /&gt;
By default Ubuntu comes with FireFox 3.6.18 (or similar). In order to use Sync Server, FireFox 5 should be installed. The following steps are probably overkill, but they do get FireFox installed&lt;br /&gt;
 $ sudo add-apt-repository ppa:ubuntu-mozilla-security/ppa&lt;br /&gt;
 $ sudo add-apt-repository ppa:mozillateam/firefox-stable&lt;br /&gt;
 $ sudo apt-get update&lt;br /&gt;
 $ sudo apt-get upgrade&lt;br /&gt;
 $ which firefox&lt;br /&gt;
&lt;br /&gt;
* Clone and Build the Sync Server&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ hg clone https://hg.mozilla.org/services/server-full&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
== Start the Sync Server ==&lt;br /&gt;
* Run the following command (see the wiki page) for more information&lt;br /&gt;
 $ cd $home/server-full&lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
 or&lt;br /&gt;
 $ nohup bin/paster serve development.ini 1&amp;gt;&amp;gt; syncserver.log 2&amp;gt;&amp;gt;syncserver.log &amp;amp;&lt;br /&gt;
 While running, the Sync Server messages/events will print to STDOUT and STDERR.&lt;br /&gt;
 This command will run the server outside of any login session and save STDOUT and STDERR to a log file.&lt;br /&gt;
&lt;br /&gt;
* If the Server is running correctly, you should see something like this&lt;br /&gt;
 Starting server in PID 3568.&lt;br /&gt;
 serving on 0.0.0.0:5000 view at http://127.0.0.1:5000&lt;br /&gt;
&lt;br /&gt;
== Installing and Using MySQL Server ==&lt;br /&gt;
Run the following commands to install and configure the necessary packages&lt;br /&gt;
 $ sudo apt-get install mysql-server&lt;br /&gt;
 root pwd: set the password for root&lt;br /&gt;
 $ sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&lt;br /&gt;
* Now install mysql-python&lt;br /&gt;
 $bin/easy_install Mysql-Python&lt;br /&gt;
&lt;br /&gt;
* Enter MySQL to set up a database for the Sync Server&lt;br /&gt;
 $ mysql -u root -p&lt;br /&gt;
 (enter the root password set above)&lt;br /&gt;
 mysql&amp;gt; CREATE DATABASE syncdb;&lt;br /&gt;
 mysql&amp;gt; \quit&lt;br /&gt;
&lt;br /&gt;
* Edit the sync.conf file to use MySQL instead of sqlite3&lt;br /&gt;
 $ cd server-full/etc&lt;br /&gt;
 $ vi or vim or emacs sync.conf&lt;br /&gt;
 Change both sqluri entries&lt;br /&gt;
 sqluri = mysql://user:password@server/database&lt;br /&gt;
 where &amp;quot;user&amp;quot; is the current user on this install&lt;br /&gt;
 &amp;quot;password&amp;quot; is the mysql password for this user&lt;br /&gt;
 &amp;quot;server&amp;quot; is just localhost&lt;br /&gt;
 &amp;quot;database&amp;quot; is a default or new database for use with the Sync server&lt;br /&gt;
&lt;br /&gt;
== Start the Sync Server ==&lt;br /&gt;
* Run the following command (see the wiki page) for more information&lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
 $ nohup bin/paster serve development.ini 1&amp;gt;&amp;gt; syncserver.log 2&amp;gt;&amp;gt;syncserver.log &amp;amp;&lt;br /&gt;
 While running, the Sync Server messages/events will print to STDOUT and STDERR.&lt;br /&gt;
 This command will run the server outside of any login session and save STDOUT and STDERR to a log file.&lt;br /&gt;
&lt;br /&gt;
* If the Server is running correctly, you should see something like this&lt;br /&gt;
 Starting server in PID 3568.&lt;br /&gt;
 serving on 0.0.0.0:5000 view at http://127.0.0.1:5000&lt;br /&gt;
&lt;br /&gt;
= Restarting MySQL after System Restart =&lt;br /&gt;
* Possible lines for autostarting MySQL server on boot&lt;br /&gt;
 $ sudo /etc/init.d/mysqld start ## use restart after update&lt;br /&gt;
 ## OR ##&lt;br /&gt;
 $ sudo service mysqld start ## use restart after update&lt;br /&gt;
 $ sudo chkconfig --levels 235 mysqld on&lt;br /&gt;
&lt;br /&gt;
= Rebuilding and Deploying the Sync Server =&lt;br /&gt;
* Kill the Sync Server process&lt;br /&gt;
 $ kill -9 &amp;lt;PID&amp;gt;&lt;br /&gt;
(Leave MySQL running)&lt;br /&gt;
* Save the Sync Server directory and its contents&lt;br /&gt;
(this in case you want to keep various snapshots)&lt;br /&gt;
 $ mv server-full server-full-&amp;lt;DATE&amp;gt;&lt;br /&gt;
(example: mv server-full server-full-08012011)&lt;br /&gt;
* Repeat the build and deploy steps from above&lt;br /&gt;
* Make the necessary changes in the server-full/etc/sync.conf file:&lt;br /&gt;
* Change the sqluri entries&lt;br /&gt;
* Restart the server using the &amp;quot;nohup&amp;quot; command from above&lt;br /&gt;
* Test the service to verify everything is running correctly&lt;br /&gt;
&lt;br /&gt;
For more advanced configurations, including web server support, please see the following documentation: &lt;br /&gt;
* http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
For a more technical overview of Sync Server and an introduction to Mozilla Services, please see the following documentation: &lt;br /&gt;
* http://docs.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_On_Ubuntu_11_10&amp;diff=1257764</id>
		<title>QA/Sync/Sync Server Install On Ubuntu 11 10</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_On_Ubuntu_11_10&amp;diff=1257764"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install On Ubuntu 11 10 to Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 11 10: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 11 10]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_On_Ubuntu_11_10&amp;diff=1257763</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 11 10</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_On_Ubuntu_11_10&amp;diff=1257763"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install On Ubuntu 11 10 to Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 11 10: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing Sync Server on Ubuntu 11.10 64-Bit ==&lt;br /&gt;
&lt;br /&gt;
=== ISO Source ===&lt;br /&gt;
* http://releases.ubuntu.com/&lt;br /&gt;
* Example: http://releases.ubuntu.com/oneiric/ubuntu-11.10-desktop-amd64.iso&lt;br /&gt;
&lt;br /&gt;
=== Using Python 2.7 ===&lt;br /&gt;
* The default version of Python on Ubuntu 11.10 is 2.7.x&lt;br /&gt;
* Sync Server assumes a python version of 2.6.6, but newer versions can be used for testing purposes.&lt;br /&gt;
* If you want to install a local copy of Python 2.6.6 to match the Sync Server requirements, you can follow these basic steps:&lt;br /&gt;
 Install Python 2.6.6 in a local or public directory&lt;br /&gt;
 Create a symbolic link from /usr/bin/python2.6 to the bin/python2.6 file in the local install folder&lt;br /&gt;
 Example:&lt;br /&gt;
 /usr/bin/python2.6 -&amp;gt; /home/mozilla/python2.6.6/bin/python2.6&lt;br /&gt;
 Install the python virtualenv for 2.6.6&lt;br /&gt;
 Create a symbolic link from /usr/bin/virtualenv-2.6 to the bin/virtualenv file in the install folder&lt;br /&gt;
 Example:&lt;br /&gt;
 /usr/bin/virtualenv-2.6 -&amp;gt; /home/mozilla/python2.6.6/bin/virtualenv&lt;br /&gt;
&lt;br /&gt;
=== Pre-Installed Packages ===&lt;br /&gt;
The following applications should already be installed on Ubuntu 11.10:&lt;br /&gt;
* FireFox&lt;br /&gt;
* Python&lt;br /&gt;
* make&lt;br /&gt;
* gcc&lt;br /&gt;
&lt;br /&gt;
 $ firefox -V&lt;br /&gt;
 Mozilla Firefox 5.0&lt;br /&gt;
&lt;br /&gt;
 $ python -V&lt;br /&gt;
 Python 2.7.1+&lt;br /&gt;
&lt;br /&gt;
 $ which make&lt;br /&gt;
 /usr/bin/make&lt;br /&gt;
&lt;br /&gt;
 $ make --version&lt;br /&gt;
 GNU Make 3.81&lt;br /&gt;
 Copyright (C) 2006  Free Software Foundation, Inc.&lt;br /&gt;
 This is free software; see the source for copying conditions.&lt;br /&gt;
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
 This program built for x86_64-pc-linux-gnu&lt;br /&gt;
 &lt;br /&gt;
 $ which gcc&lt;br /&gt;
 /usr/bin/gcc&lt;br /&gt;
 &lt;br /&gt;
 $ gcc --version&lt;br /&gt;
 gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1&lt;br /&gt;
 Copyright (C) 2011 Free Software Foundation, Inc.&lt;br /&gt;
 This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&lt;br /&gt;
=== Required Packages ===&lt;br /&gt;
The following packages are required before installing Sync Server:&lt;br /&gt;
* Mecurial&lt;br /&gt;
* Sqlite3&lt;br /&gt;
* make&lt;br /&gt;
* gcc&lt;br /&gt;
&lt;br /&gt;
The following packages are optional, but highly recommended:&lt;br /&gt;
* MySQL-Server&lt;br /&gt;
 $ which hg; hg --version&lt;br /&gt;
 $ which sqlite3; sqlite3 --version&lt;br /&gt;
 $ which mysql; mysql --version&lt;br /&gt;
&lt;br /&gt;
=== Install Python Tools and Developer Tools ===&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ which python&lt;br /&gt;
 /usr/bin/python&lt;br /&gt;
 $ python -V&lt;br /&gt;
 Python 2.7.1+&lt;br /&gt;
&lt;br /&gt;
* So, you need to install the Python Tools, Developer Tools, and the virtualenv for 2.7&lt;br /&gt;
 $ sudo apt-get install python-dev python-virtualenv&lt;br /&gt;
&lt;br /&gt;
* And, then the rest of the Python Tools:&lt;br /&gt;
 $ sudo apt-get install curl&lt;br /&gt;
 $ curl -O http://python-distribute.org/distribute_setup.py&lt;br /&gt;
 $ sudo python distribute_setup.py&lt;br /&gt;
 $ sudo easy_install-2.7 MoPyTools&lt;br /&gt;
&lt;br /&gt;
=== Install Mercurial and Sqlite3 ===&lt;br /&gt;
* The sqlite3 install is good for quick testing the Sync Server.&lt;br /&gt;
&lt;br /&gt;
 $ which hg; hg --version&lt;br /&gt;
 /usr/bin/hg&lt;br /&gt;
 Mercurial Distributed SCM (version 1.9.1)&lt;br /&gt;
 (see http://mercurial.selenic.com for more information)&lt;br /&gt;
 Copyright (C) 2005-2011 Matt Mackall and others&lt;br /&gt;
 This is free software; see the source for copying conditions. There is NO&lt;br /&gt;
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
 &lt;br /&gt;
 $ which sqlite3; sqlite3 --version&lt;br /&gt;
 /usr/bin/sqlite3&lt;br /&gt;
 $ sqlite3 --version&lt;br /&gt;
 3.7.7 2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2&lt;br /&gt;
&lt;br /&gt;
=== Install MySQL-Server and the Client Library ===&lt;br /&gt;
* Install MySQL-Server and/or Client if you will not be using sqlite3&lt;br /&gt;
* Note: The client library install may actually be an optional step.&lt;br /&gt;
 $ sudo apt-get install mysql-server&lt;br /&gt;
 Note: installer should ask for a root password for MySQL-Server&lt;br /&gt;
 &lt;br /&gt;
 $ which mysql; mysql --version&lt;br /&gt;
 /usr/bin/mysql&lt;br /&gt;
 mysql  Ver 14.14 Distrib 5.1.61, for debian-linux-gnu (x86_64) using readline 6.2&lt;br /&gt;
 &lt;br /&gt;
 $ ps aux | grep sql&lt;br /&gt;
 mysql    15793  0.1  4.8 170304 24252 ?        Ssl  16:43   0:00 /usr/sbin/mysqld&lt;br /&gt;
&lt;br /&gt;
* And now the (optional) client library:&lt;br /&gt;
 $ sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&lt;br /&gt;
=== Clone and Build the Sync Server ===&lt;br /&gt;
* Clone and build the Sync Server in your home directory, or in some other directory if it will be used by others:&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ hg clone https://hg.mozilla.org/services/server-full&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Finally, install MySQL-Python (harmless install if you using sqlite3):&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ bin/easy_install Mysql-Python&lt;br /&gt;
&lt;br /&gt;
=== Configure the Sync Server for sqlite3 ===&lt;br /&gt;
* Configure server-full/etc/sync.conf to use sqlite3 for quick testing.&lt;br /&gt;
 Change the default db file and directory in the sync.conf file:&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ vi etc/sync.conf&lt;br /&gt;
 Change the following two lines:&lt;br /&gt;
 From: sqluri = sqlite:////tmp/test.db&lt;br /&gt;
 To: sqluri = sqlite:////home/&amp;lt;YOUR HOME&amp;gt;/sync.db&lt;br /&gt;
 (or to some other directory outside of /tmp)&lt;br /&gt;
&lt;br /&gt;
=== Start and Verify the Sync Server ===&lt;br /&gt;
* Open a terminal and start up the Sync Server (from the server-full directory)&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
&lt;br /&gt;
* Verify the server is up and running:&lt;br /&gt;
 Starting server in PID &amp;lt;SOME PID&amp;gt;.&lt;br /&gt;
 serving on 0.0.0.0:5000 view at http://127.0.0.1:5000&lt;br /&gt;
&lt;br /&gt;
* Open a second terminal and check the Sync Server host using curl:&lt;br /&gt;
 $ curl http://127.0.0.1:5000&lt;br /&gt;
 This should return a 404 error if it is working correctly&lt;br /&gt;
 (the 404 Not Found error will be within some html returned to STDOUT/STDERR)&lt;br /&gt;
 Alternatively:&lt;br /&gt;
 $ curl http://127.0.0.1:5000 &amp;gt; check.html&lt;br /&gt;
&lt;br /&gt;
* From the first terminal you should see some server activity from this curl call, for example:&lt;br /&gt;
 2012-04-17 17:31:17,643 INFO  [syncserver] 127.0.0.1 - - [17/Apr/2012:17:31:17 -0700] &amp;quot;GET / HTTP/1.1&amp;quot; 404 154 &amp;quot;-&amp;quot; &amp;quot;curl/7.21.6 (x86_64-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3&amp;quot;&lt;br /&gt;
 127.0.0.1 - - [17/Apr/2012:17:31:17 -0700] &amp;quot;GET / HTTP/1.1&amp;quot; 404 154 &amp;quot;-&amp;quot; &amp;quot;curl/7.21.6 (x86_64-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Check the Sync Server host using HTTP:&lt;br /&gt;
 From an open browser:&lt;br /&gt;
 http://127.0.0.1:5000/user/1.0/a&lt;br /&gt;
 This should return a &#039;0&#039; to the browser if it is working correctly&lt;br /&gt;
&lt;br /&gt;
* Again, you should see some server activity as a result of the http call:&lt;br /&gt;
 2012-04-17 17:34:22,467 INFO  [syncserver] 127.0.0.1 - - [17/Apr/2012:17:34:22 -0700] &amp;quot;GET /user/1.0/a HTTP/1.1&amp;quot; 200 1 &amp;quot;-&amp;quot; &amp;quot;Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0&amp;quot;&lt;br /&gt;
 127.0.0.1 - - [17/Apr/2012:17:34:22 -0700] &amp;quot;GET /user/1.0/a HTTP/1.1&amp;quot; 200 1 &amp;quot;-&amp;quot; &amp;quot;Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Stop the Sync Server:&lt;br /&gt;
 From the first terminal window:&lt;br /&gt;
 Ctrl-C&lt;br /&gt;
&lt;br /&gt;
=== Configure MySQL and the sync.conf file ===&lt;br /&gt;
* You can optionally use MySQL instead of sqlite3.&lt;br /&gt;
* Configure MySQL with a root password and add a test sync DB:&lt;br /&gt;
 $ mysql -u root -p&lt;br /&gt;
&lt;br /&gt;
* If your MySQL install does not already have a root password, do the following:&lt;br /&gt;
 mysql&amp;gt; UPDATE mysql.user set Password=PASSWORD(&#039;myrootpwd&#039;) WHERE User=&#039;root&#039;;&lt;br /&gt;
 mysql&amp;gt; FLUSH PRIVILEGES&lt;br /&gt;
&lt;br /&gt;
* Now set up a sync db for testing:&lt;br /&gt;
 mysql&amp;gt; CREATE DATABASE syncdb;&lt;br /&gt;
 mysql&amp;gt; \quit&lt;br /&gt;
&lt;br /&gt;
* Configure server-full/etc/sync.conf to use MySQL for testing:&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ vi etc/sync.conf&lt;br /&gt;
 Change the following two lines:&lt;br /&gt;
 From: sqluri = sqlite:////&amp;lt;YOUR DIR&amp;gt;/sync.db&lt;br /&gt;
 To: sqluri = mysql://root:&amp;lt;ROOT PWD&amp;gt;@localhost/&amp;lt;DB NAME&amp;gt;&lt;br /&gt;
 Example for root password of &amp;quot;myrootpwd&amp;quot; and sync DB on localhost (from above steps):&lt;br /&gt;
 sqluri = mysql://root:myrootpwd@localhost/syncdb&lt;br /&gt;
&lt;br /&gt;
* Restart the Sync Server:&lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
&lt;br /&gt;
* Notes: If you want to run the Sync Server outside of any login session, you can try the following:&lt;br /&gt;
 $ nohup bin/paster server development.ini &amp;amp;&lt;br /&gt;
&lt;br /&gt;
== Running the Sync 1.1 Tests ==&lt;br /&gt;
* Once the build is complete, you can run the test as follows.&lt;br /&gt;
* Note: the server does not need to be running.&lt;br /&gt;
* Note: this works for sqlite3 and mysql configurations.&lt;br /&gt;
 $ make test&lt;br /&gt;
&lt;br /&gt;
* If everything runs as expected, you should see the following:&lt;br /&gt;
 bin/nosetests -s --with-xunit deps/server-core/services/tests&lt;br /&gt;
 deps/server-reg/syncreg/tests deps/server-storage/syncstorage/tests&lt;br /&gt;
 ............................................................etc.......&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Ran 177 tests in 33.031s&lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
* The tests are located in the following directories:&lt;br /&gt;
** server-full/deps/*/*/tests&lt;br /&gt;
* Note: Remember to cleanup after the test by deleted some db files in /tmp&lt;br /&gt;
 rm /tmp/sync.db /tmp/tests*.db&lt;br /&gt;
&lt;br /&gt;
== Re-building and Re-deploying the Sync Server ==&lt;br /&gt;
* To re-build and re-deploy the sync server, you can try these steps:&lt;br /&gt;
 Kill the Sync Server process&lt;br /&gt;
 $ kill -9 &amp;lt;Sync Server PID&amp;gt;&lt;br /&gt;
 (Leave MySQL running if you are using it)&lt;br /&gt;
 Save the Sync Server directory and its contents&lt;br /&gt;
 (this in case you want to keep various snapshots)&lt;br /&gt;
 $ cd ..&lt;br /&gt;
 (one level up from server-full directory)&lt;br /&gt;
 $ mv server-full server-full-&amp;lt;DATE&amp;gt;&lt;br /&gt;
 (example: mv server-full server-full-08012011)&lt;br /&gt;
 Repeat the build and deploy steps from above&lt;br /&gt;
 Make the necessary changes in the server-full/etc/sync.conf file:&lt;br /&gt;
 Change the sqluri entries&lt;br /&gt;
 Restart the server&lt;br /&gt;
&lt;br /&gt;
== Redeploying a Live Server ==&lt;br /&gt;
* The following steps can be used to redeploy a live sync server&lt;br /&gt;
 $ cd /path/to/server-full&lt;br /&gt;
 $ hg pull -uv&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ apachectl graceful&lt;br /&gt;
&lt;br /&gt;
* This should be sufficient, as &amp;quot;make build&amp;quot; will pull and update the repositories underneath the &amp;quot;deps&amp;quot; directory.&lt;br /&gt;
* There is also a &amp;quot;make update&amp;quot; target which will update only the dependent repositories, without rebuilding any of the third-party dependencies from PyPi.&lt;br /&gt;
* Also note that the Makefile will build the production channel by default, meaning this will not update you to the very latest checked-in changes but rather to the latest tags.  If instead you want to deploy the very latest code, then use this line instead:&lt;br /&gt;
 $ make build CHANNEL=dev&lt;br /&gt;
&lt;br /&gt;
* NOTE: More specific redeployment ideas can be found on this great site:&lt;br /&gt;
** http://www.wenks.ch/fabian/mozilla-custom-sync-server/#Updating%20the%20Sync%20Server&lt;br /&gt;
&lt;br /&gt;
== Using your Sync Server as a FireFox Sync Custom Host ==&lt;br /&gt;
* You can use your own Sync server as a custom host for FireFox Sync:&lt;br /&gt;
 Start up your Sync Server (see instructions above)&lt;br /&gt;
 Open the FireFox browser&lt;br /&gt;
 Select Tools &amp;gt; Set Up Sync &amp;gt; Create a New Account&lt;br /&gt;
 Fill in the necessary information for Login and Password&lt;br /&gt;
 For the Server field, select Custom Host and type in the following&lt;br /&gt;
 http://127.0.0.1:5000/&lt;br /&gt;
 (make sure to include the trailing &amp;quot;/&amp;quot; character)&lt;br /&gt;
 Click Next&lt;br /&gt;
* You should now be set up to sync using your custom host.&lt;br /&gt;
* Checking the terminal where you started the host, you should see sync messages similar to the following:&lt;br /&gt;
 2012-04-17 17:55:14,433 INFO  [syncserver] 127.0.0.1 - - [17/Apr/2012:17:55:14 -0700] &amp;quot;GET /user/1.0/a HTTP/1.1&amp;quot; 200 1 &amp;quot;-&amp;quot; &amp;quot;Firefox/11.0 FxSync/1.14.0.20120310010316.desktop&amp;quot;&lt;br /&gt;
 127.0.0.1 - - [17/Apr/2012:17:55:14 -0700] &amp;quot;GET /user/1.0/a HTTP/1.1&amp;quot; 200 1 &amp;quot;-&amp;quot; &amp;quot;Firefox/11.0 FxSync/1.14.0.20120310010316.desktop&amp;quot;&lt;br /&gt;
 2012-04-17 17:55:14,439 INFO  [syncserver] 127.0.0.1 - - [17/Apr/2012:17:55:14 -0700] &amp;quot;GET /user/1.0/&amp;lt;YOUR USER ID&amp;gt; HTTP/1.1&amp;quot; 200 1 &amp;quot;-&amp;quot; &amp;quot;Firefox/11.0 FxSync/1.14.0.20120310010316.desktop&amp;quot;&lt;br /&gt;
 127.0.0.1 - - [17/Apr/2012:17:55:14 -0700] &amp;quot;GET /user/1.0/&amp;lt;YOUR USER ID&amp;gt; HTTP/1.1&amp;quot; 200 1 &amp;quot;-&amp;quot; &amp;quot;Firefox/11.0 FxSync/1.14.0.20120310010316.desktop&amp;quot;&lt;br /&gt;
 2012-04-17 17:55:14,446 INFO  [syncserver] 127.0.0.1 - - [17/Apr/2012:17:55:14 -0700] &amp;quot;GET /misc/1.0/captcha_html HTTP/1.1&amp;quot; 404 175 &amp;quot;-&amp;quot; &amp;quot;Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0&amp;quot;&lt;br /&gt;
 127.0.0.1 - - [17/Apr/2012:17:55:14 -0700] &amp;quot;GET /misc/1.0/captcha_html HTTP/1.1&amp;quot; 404 175 &amp;quot;-&amp;quot; &amp;quot;Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0&amp;quot;&lt;br /&gt;
 2012-04-17 17:55:20,472 WARNI [syncserver] Unicode response returned from: syncreg.controllers.user - create_user&lt;br /&gt;
 Unicode response returned from: syncreg.controllers.user - create_user&lt;br /&gt;
 ...etc...&lt;br /&gt;
&lt;br /&gt;
* Extra credit: if you run your sync server behind a web service, it will be publicly available to other devices for some true syncing...&lt;br /&gt;
&lt;br /&gt;
== For more information ==&lt;br /&gt;
* For more advanced configurations, including web server support, please see the following documentation: http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
&lt;br /&gt;
* And another good site for installing/configuring sync server: http://www.wenks.ch/fabian/mozilla-custom-sync-server/&lt;br /&gt;
&lt;br /&gt;
* For a more technical overview of Sync Server and an introduction to Mozilla Services, please see the following documentation: http://docs.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_On_Ubuntu_11_04&amp;diff=1257762</id>
		<title>QA/Sync/Sync Server Install On Ubuntu 11 04</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_On_Ubuntu_11_04&amp;diff=1257762"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install On Ubuntu 11 04 to Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 11 04: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 11 04]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_On_Ubuntu_11_04&amp;diff=1257761</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 11 04</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_On_Ubuntu_11_04&amp;diff=1257761"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install On Ubuntu 11 04 to Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 11 04: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Installing Sync Server on Ubuntu 11.04 64-Bit =&lt;br /&gt;
&lt;br /&gt;
== ISO Source ==&lt;br /&gt;
http://releases.ubuntu.com/&lt;br /&gt;
&lt;br /&gt;
Example: http://releases.ubuntu.com/natty/ubuntu-11.04-desktop-amd64.iso&lt;br /&gt;
&lt;br /&gt;
== Using Python 2.7 ==&lt;br /&gt;
The default version of Python on Ubuntu 11.04 is 2.7.1+&lt;br /&gt;
&lt;br /&gt;
Sync Server assumes a python version of 2.6.6, but newer versions can be used for testing purposes.&lt;br /&gt;
&lt;br /&gt;
If you want to install a local copy of Python 2.6.6 to match the Sync Server requirements, you can follow these basic steps:&lt;br /&gt;
&lt;br /&gt;
# Install Python 2.6.6 in a local or public directory&lt;br /&gt;
# Create a symbolic link from /usr/bin/python2.6 to the bin/python2.6 file in the local install folder&lt;br /&gt;
 Example:&lt;br /&gt;
 /usr/bin/python2.6 -&amp;gt; /home/mozilla/python2.6.6/bin/python2.6&lt;br /&gt;
# Install the python virtualenv for 2.6.6&lt;br /&gt;
# Create a symbolic link from /usr/bin/virtualenv-2.6 to the bin/virtualenv file in the install folder&lt;br /&gt;
 Example:&lt;br /&gt;
 /usr/bin/virtualenv-2.6 -&amp;gt; /home/mozilla/python2.6.6/bin/virtualenv&lt;br /&gt;
&lt;br /&gt;
== Pre-Installed Packages ==&lt;br /&gt;
The following applications should already be installed on Ubuntu 11.04:&lt;br /&gt;
* FireFox&lt;br /&gt;
* Python&lt;br /&gt;
* make&lt;br /&gt;
* gcc&lt;br /&gt;
&lt;br /&gt;
 $ firefox -V&lt;br /&gt;
 Mozilla Firefox 5.0&lt;br /&gt;
 $ python -V&lt;br /&gt;
 Python 2.7.1+&lt;br /&gt;
 $ which make&lt;br /&gt;
 /usr/bin/make&lt;br /&gt;
 $ make --version&lt;br /&gt;
 GNU Make 3.81&lt;br /&gt;
 Copyright (C) 2006  Free Software Foundation, Inc.&lt;br /&gt;
 This is free software; see the source for copying conditions.&lt;br /&gt;
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
 This program built for x86_64-pc-linux-gnu&lt;br /&gt;
 $ which gcc&lt;br /&gt;
 /usr/bin/gcc&lt;br /&gt;
 $ gcc --version&lt;br /&gt;
 gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2&lt;br /&gt;
 Copyright (C) 2010 Free Software Foundation, Inc.&lt;br /&gt;
 This is free software; see the source for copying conditions.  There is NO&lt;br /&gt;
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&lt;br /&gt;
== Required Packages ==&lt;br /&gt;
The following packages are required before installing Sync Server:&lt;br /&gt;
* Mecurial&lt;br /&gt;
* Sqlite3&lt;br /&gt;
* make&lt;br /&gt;
* gcc&lt;br /&gt;
&lt;br /&gt;
The following packages are optional, but highly recommended:&lt;br /&gt;
* MySQL-Server&lt;br /&gt;
&lt;br /&gt;
 $ which hg&lt;br /&gt;
 $ which sqlite3&lt;br /&gt;
 $ which mysql&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu11_04BeforeSnapshot.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install Python Tools and Developer Tools ==&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ which python&lt;br /&gt;
 /usr/bin/python&lt;br /&gt;
 $ python -V&lt;br /&gt;
 Python 2.7.1+&lt;br /&gt;
&lt;br /&gt;
So, you need to install the Python Tools, Developer Tools, and the virtualenv for 2.7&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install python-dev python-virtualenv&lt;br /&gt;
&lt;br /&gt;
And, then the rest of the Python Tools:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install curl&lt;br /&gt;
 $ curl -O http://python-distribute.org/distribute_setup.py&lt;br /&gt;
 $ sudo python distribute_setup.py&lt;br /&gt;
 $ sudo easy_install-2.7 MoPyTools&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu11_04Output1.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install Mercurial and Sqlite3 ==&lt;br /&gt;
The sqlite3 install is good for quick testing the Sync Server.&lt;br /&gt;
&lt;br /&gt;
 $ which hg&lt;br /&gt;
 /usr/bin/hg&lt;br /&gt;
 $ hg --version&lt;br /&gt;
 Mercurial Distributed SCM (version 1.7.5)&lt;br /&gt;
 (see http://mercurial.selenic.com for more information)&lt;br /&gt;
 Copyright (C) 2005-2010 Matt Mackall and others&lt;br /&gt;
 This is free software; see the source for copying conditions.&lt;br /&gt;
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
 $ which sqlite3&lt;br /&gt;
 /usr/bin/sqlite3&lt;br /&gt;
 $ sqlite3 --version&lt;br /&gt;
 3.7.4&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu11_04Output2.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install MySQL-Server and the Client Library ==&lt;br /&gt;
&lt;br /&gt;
The client library install may actually be an optional step.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install mysql-server&lt;br /&gt;
 Note: installer should ask for a root password for MySQL-Server&lt;br /&gt;
 $ which mysql&lt;br /&gt;
 /usr/bin/mysql&lt;br /&gt;
 $ mysql --version&lt;br /&gt;
 mysql  Ver 14.14 Distrib 5.1.54, for debian-linux-gnu (x86_64) using readline 6.2&lt;br /&gt;
 $ ps aux | grep sql&lt;br /&gt;
 mysql    15793  0.1  4.8 170304 24252 ?        Ssl  16:43   0:00 /usr/sbin/mysqld&lt;br /&gt;
 mozroot  15890  0.0  0.2  13124  1048 pts/0    S+   16:45   0:00 grep --color=auto sql&lt;br /&gt;
&lt;br /&gt;
And now the (optional) client library:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu11_04Output3.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clone and Build the Sync Server ==&lt;br /&gt;
Clone and build the Sync Server in your home directory, or in some other directory if it will be used by others:&lt;br /&gt;
&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ hg clone https://hg.mozilla.org/services/server-full&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu11_04ServerInstall1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Finally, install MySQL-Python:&lt;br /&gt;
&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ bin/easy_install Mysql-Python&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu11_104MySqlPython.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configure the Sync Server for sqlite3 ==&lt;br /&gt;
Configure server-full/etc/sync.conf to use sqlite3 for quick testing.&lt;br /&gt;
&lt;br /&gt;
 Change the default db file and directory in the sync.conf file:&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ vi etc/sync.conf&lt;br /&gt;
 Change the following two lines:&lt;br /&gt;
 From: sqluri = sqlite:////tmp/test.db&lt;br /&gt;
 To: sqluri = sqlite:////home/&amp;lt;YOUR HOME&amp;gt;/sync.db&lt;br /&gt;
 (or to some other directory outside of /tmp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Start and Verify the Sync Server ==&lt;br /&gt;
Start up the Sync Server (from the server-full directory)&lt;br /&gt;
&lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
&lt;br /&gt;
Verify the server is up and running:&lt;br /&gt;
 Starting server in PID &amp;lt;SOME PID&amp;gt;.&lt;br /&gt;
 serving on 0.0.0.0:5000 view at http://127.0.0.1:5000&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu11_04ServerStartup.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the Sync Server host using curl:&lt;br /&gt;
&lt;br /&gt;
 Open a new terminal window:&lt;br /&gt;
 $ curl http://127.0.0.1:5000&lt;br /&gt;
 This should return a 404 error if it is working correctly&lt;br /&gt;
 (the 404 Not Found error will be within some html returned to STDOUT/STDERR)&lt;br /&gt;
 Alternatively:&lt;br /&gt;
 $ curl http://127.0.0.1:5000 &amp;gt; check.html&lt;br /&gt;
&lt;br /&gt;
Check the Sync Server host using HTTP:&lt;br /&gt;
&lt;br /&gt;
 From an open browser:&lt;br /&gt;
 http://127.0.0.1:5000/user/1.0/a&lt;br /&gt;
 This should return a &#039;0&#039; if it is working correctly&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu11_04ServerTest.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Both of these should generate Sync Server INFO messages to STDOUT/STDERR (from the terminal running Sync Server).&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu11_04ServerINFOMessages.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Stop the Sync Server:&lt;br /&gt;
 From the first terminal window:&lt;br /&gt;
 Ctrl-C&lt;br /&gt;
&lt;br /&gt;
== Configure MySQL and the sync.conf file ==&lt;br /&gt;
Configure MySQL with a root password and add a test sync DB:&lt;br /&gt;
 $ mysql -u root -p&lt;br /&gt;
&lt;br /&gt;
If your MySQL install does not already have a root password, do the following:&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; UPDATE mysql.user set Password=PASSWORD(&#039;mozroot&#039;) WHERE User=&#039;root&#039;;&lt;br /&gt;
 mysql&amp;gt; FLUSH PRIVILEGES&lt;br /&gt;
&lt;br /&gt;
Now set up a sync db for testing:&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; CREATE DATABASE syncdb;&lt;br /&gt;
 mysql&amp;gt; \quit&lt;br /&gt;
&lt;br /&gt;
Configure server-full/etc/sync.conf to use MySQL for testing:&lt;br /&gt;
&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ vi etc/sync.conf&lt;br /&gt;
 Change the following two lines:&lt;br /&gt;
 From: sqluri = sqlite:////&amp;lt;YOUR DIR&amp;gt;/sync.db&lt;br /&gt;
 To: sqluri = mysql://root:&amp;lt;ROOT PWD&amp;gt;@localhost/&amp;lt;DB NAME&amp;gt;&lt;br /&gt;
 Example for root password of &amp;quot;mozroot&amp;quot; and sync DB on localhaost (from above steps):&lt;br /&gt;
 sqluri = mysql://root:mozroot@localhost/syncdb&lt;br /&gt;
&lt;br /&gt;
Restart the Sync Server:&lt;br /&gt;
&lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
&lt;br /&gt;
Notes: If you want to run the Sync Server outside of any login session, you can try the following:&lt;br /&gt;
&lt;br /&gt;
 $ nohup bin/paster server development.ini &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Running the Sync 1.1 Tests =&lt;br /&gt;
* Once the build is complete, you can run the test as follows&lt;br /&gt;
 $ make test&lt;br /&gt;
* If everything runs as expected, you should see the following:&lt;br /&gt;
 bin/nosetests -s --with-xunit deps/server-core/services/tests&lt;br /&gt;
 deps/server-reg/syncreg/tests deps/server-storage/syncstorage/tests&lt;br /&gt;
 ............................................................etc.......&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Ran 177 tests in 33.031s&lt;br /&gt;
 OK&lt;br /&gt;
* The tests are located in the following directories:&lt;br /&gt;
** server-full/deps/*/*/tests&lt;br /&gt;
* Note: Remember to cleanup after the test by deleted some db files in /tmp&lt;br /&gt;
 rm /tmp/sync.db /tmp/tests*.db&lt;br /&gt;
&lt;br /&gt;
= Re-building and Re-deploying the Sync Server =&lt;br /&gt;
To re-build and re-deploy the sync server, you can try these steps:&lt;br /&gt;
&lt;br /&gt;
 Kill the Sync Server process&lt;br /&gt;
 $ kill -9 &amp;lt;Sync Server PID&amp;gt;&lt;br /&gt;
 (Leave MySQL running)&lt;br /&gt;
 Save the Sync Server directory and its contents&lt;br /&gt;
 (this in case you want to keep various snapshots)&lt;br /&gt;
 $ cd ..&lt;br /&gt;
 (one level up from server-full directory)&lt;br /&gt;
 $ mv server-full server-full-&amp;lt;DATE&amp;gt;&lt;br /&gt;
 (example: mv server-full server-full-08012011&lt;br /&gt;
 Repeat the build and deploy steps from above&lt;br /&gt;
 Make the necessary changes in the server-full/etc/sync.conf file:&lt;br /&gt;
 Change the sqluri entries&lt;br /&gt;
 Restart the server&lt;br /&gt;
&lt;br /&gt;
= Redeploying a Live Server =&lt;br /&gt;
* The following steps can be used to redeploy a live sync server&lt;br /&gt;
 $ cd /path/to/server-full&lt;br /&gt;
 $ hg pull -uv&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ apachectl graceful&lt;br /&gt;
&lt;br /&gt;
* This should be sufficient, as &amp;quot;make build&amp;quot; will pull and update the repositories underneath the &amp;quot;deps&amp;quot; directory.&lt;br /&gt;
* There is also a &amp;quot;make update&amp;quot; target which will update only the dependent repositories, without rebuilding any of the third-party dependencies from PyPi.&lt;br /&gt;
* Also note that the Makefile will build the production channel by default, meaning this will not update you to the very latest checked-in changes but rather to the latest tags.  If instead you want to deploy the very latest code, then use this line instead:&lt;br /&gt;
 $ make build CHANNEL=dev&lt;br /&gt;
&lt;br /&gt;
* NOTE: More specific redeployment ideas can be found on this great site:&lt;br /&gt;
** http://www.wenks.ch/fabian/mozilla-custom-sync-server/#Updating%20the%20Sync%20Server&lt;br /&gt;
&lt;br /&gt;
= For more information =&lt;br /&gt;
For more advanced configurations, including web server support, please see the following documentation: http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
&lt;br /&gt;
For a more technical overview of Sync Server and an introduction to Mozilla Services, please see the following documentation: http://docs.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_On_Ubuntu_10_04&amp;diff=1257760</id>
		<title>QA/Sync/Sync Server Install On Ubuntu 10 04</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_On_Ubuntu_10_04&amp;diff=1257760"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install On Ubuntu 10 04 to Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 10 04: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 10 04]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_On_Ubuntu_10_04&amp;diff=1257759</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 10 04</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_On_Ubuntu_10_04&amp;diff=1257759"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install On Ubuntu 10 04 to Services/Sync/Server/Archived/QA/Sync/Sync Server Install On Ubuntu 10 04: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Installing Sync Server on Ubuntu 10.10 64-bit= &lt;br /&gt;
&lt;br /&gt;
== ISO Source ==&lt;br /&gt;
http://releases.ubuntu.com/&lt;br /&gt;
&lt;br /&gt;
Example: http://releases.ubuntu.com/10.10/ubuntu-10.10-desktop-amd64.iso&lt;br /&gt;
&lt;br /&gt;
== Pre-Installed Packages ==&lt;br /&gt;
The following applications should already be installed on Ubuntu 10.04 and 10.10:&lt;br /&gt;
&lt;br /&gt;
 $ firefox -V&lt;br /&gt;
 Mozilla Firefox 3.6.18, Copyright (c) 1998 - 2011 mozilla.org&lt;br /&gt;
 (So, this will need to be upgraded or manually installed to FireFox 5)&lt;br /&gt;
 $ python -V&lt;br /&gt;
 Python 2.6.6&lt;br /&gt;
&lt;br /&gt;
== Required Packages ==&lt;br /&gt;
The following packages are required before installing Sync Server:&lt;br /&gt;
* Mecurial&lt;br /&gt;
* Sqlite3&lt;br /&gt;
* make&lt;br /&gt;
* gcc&lt;br /&gt;
&lt;br /&gt;
The following packages are optional, but highly recommended:&lt;br /&gt;
* MySQL-Server&lt;br /&gt;
&lt;br /&gt;
 $ which hg&lt;br /&gt;
 $ which sqlite3&lt;br /&gt;
 $ which mysql&lt;br /&gt;
&lt;br /&gt;
 $ which make&lt;br /&gt;
 /usr/bin/make&lt;br /&gt;
 $ make --version&lt;br /&gt;
 GNU Make 3.81&lt;br /&gt;
 Copyright (C) 2006  Free Software Foundation, Inc.&lt;br /&gt;
 This is free software; see the source for copying conditions.&lt;br /&gt;
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
 This program built for x86_64-pc-linux-gnu&lt;br /&gt;
&lt;br /&gt;
 $ which gcc&lt;br /&gt;
 /usr/bin/gcc&lt;br /&gt;
 $ gcc --version&lt;br /&gt;
 gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5&lt;br /&gt;
 Copyright (C) 2010 Free Software Foundation, Inc.&lt;br /&gt;
 This is free software; see the source for copying conditions.&lt;br /&gt;
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10BeforeSnapshot.jpg]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Initial/Required Installations ==&lt;br /&gt;
Upgrade to or manually install FireFox 5.01&lt;br /&gt;
 Pulling the build from the Mozilla public releases site:&lt;br /&gt;
 http://releases.mozilla.org/pub/mozilla.org/firefox/releases/5.0.1/linux-x86_64/en-US/firefox-5.0.1.tar.bz2&lt;br /&gt;
 Install FireFox to your home directory or other public directory if you are not the only user...&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ wget http://releases.mozilla.org/pub/mozilla.org/firefox/releases/5.0.1/linux-x86_64/en-US/firefox-5.0.1.tar.bz2&lt;br /&gt;
 $ tar xvjf firefox-5.0.1.tar.bz2&lt;br /&gt;
 $ cd firefox&lt;br /&gt;
 $ which firefox&lt;br /&gt;
 Compare that to &lt;br /&gt;
 $ which ./firefox&lt;br /&gt;
 $ firefox -V&lt;br /&gt;
 Compare that to the following:&lt;br /&gt;
 $ ./firefox -V&lt;br /&gt;
&lt;br /&gt;
So, the recommendation is to either run FireFox 5 from its own directory, or add this directory to the front of your PATH.&lt;br /&gt;
&lt;br /&gt;
Now, run firefox from this folder and verify it starts and the version is correct.&lt;br /&gt;
 $ ./firefox&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10FireFoxInstall1.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10FireFoxInstall2.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10FireFoxInstall3.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Install Python Tools and Developer Tools ==&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ which python&lt;br /&gt;
 /usr/bin/python&lt;br /&gt;
 $ python -V&lt;br /&gt;
 Python 2.6.6&lt;br /&gt;
&lt;br /&gt;
So, you need to install the Python Tools, Developer Tools, and the virtualenv for 2.6.6.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install python-dev python-virtualenv&lt;br /&gt;
&lt;br /&gt;
And, then the rest of the Python Tools:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install curl&lt;br /&gt;
 $ curl -O http://python-distribute.org/distribute_setup.py&lt;br /&gt;
 $ sudo python2.6 distribute_setup.py&lt;br /&gt;
 $ sudo easy_install-2.6 MoPyTools&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10Output1.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install Mercurial and Sqlite3 ==&lt;br /&gt;
The sqlite3 install is good for quick testing the Sync Server.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install mercurial sqlite3&lt;br /&gt;
 $ which hg&lt;br /&gt;
 /usr/bin/hg&lt;br /&gt;
 $ hg --version&lt;br /&gt;
 Mercurial Distributed SCM (version 1.6.3)&lt;br /&gt;
 Copyright (C) 2005-2010 Matt Mackall &amp;lt;mpm@selenic.com&amp;gt; and others&lt;br /&gt;
 This is free software; see the source for copying conditions.&lt;br /&gt;
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
 $ which sqlite3&lt;br /&gt;
 /usr/bin/sqlite3&lt;br /&gt;
 $ sqlite3 --version&lt;br /&gt;
 3.7.2&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10Output2.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install MySQL-Server and the Client Library ==&lt;br /&gt;
The client library install may actually be an optional step.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install mysql-server&lt;br /&gt;
 $ which mysql&lt;br /&gt;
 /usr/bin/mysql&lt;br /&gt;
 $ mysql --version&lt;br /&gt;
 mysql  Ver 14.14 Distrib 5.1.49, for debian-linux-gnu (x86_64) using readline 6.1&lt;br /&gt;
 $ ps aux | grep sql&lt;br /&gt;
 mysql     4234  0.2  4.7 188292 24196 ?        Ssl  21:01   0:00 /usr/sbin/mysqld&lt;br /&gt;
 mozroot   4323  0.0  0.1   8952   876 pts/0    S+   21:02   0:00 grep --color=auto sql&lt;br /&gt;
&lt;br /&gt;
And now the (optional) client library:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libmysqlclient-dev&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10Output3.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clone and Build the Sync Server ==&lt;br /&gt;
Clone and build the Sync Server in your home directory, or in some other directory if it will be used by others:&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ hg clone https://hg.mozilla.org/services/server-full&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10ServerInstall1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, install MySQL-Python&lt;br /&gt;
&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ bin/easy_install Mysql-Python&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10MySqlPython.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configure the Sync Server for sqlite3 ==&lt;br /&gt;
Configure server-full/etc/sync.conf to use sqlite3 for quick testing.&lt;br /&gt;
&lt;br /&gt;
 Change the default db file and directory in the sync.conf file:&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ vi etc/sync.conf&lt;br /&gt;
 Change the following two lines:&lt;br /&gt;
 From: sqluri = sqlite:////tmp/test.db&lt;br /&gt;
 To: sqluri = sqlite:////home/&amp;lt;YOUR HOME&amp;gt;/sync.db&lt;br /&gt;
 (or to some other directory outside of /tmp)&lt;br /&gt;
&lt;br /&gt;
== Start and Verify the Sync Server ==&lt;br /&gt;
Start up the Sync Server (from the server-full directory)&lt;br /&gt;
&lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
&lt;br /&gt;
Verify the server is up and running:&lt;br /&gt;
 Starting server in PID &amp;lt;SOME PID&amp;gt;.&lt;br /&gt;
 serving on 0.0.0.0:5000 view at http://127.0.0.1:5000&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10ServerStartup.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the Sync Server host using curl:&lt;br /&gt;
&lt;br /&gt;
 Open a new terminal window:&lt;br /&gt;
 $ curl http://127.0.0.1:5000&lt;br /&gt;
 This should return a 404 error if it is working correctly&lt;br /&gt;
 (the 404 Not Found error will be within some html returned to STDOUT/STDERR)&lt;br /&gt;
 Alternatively:&lt;br /&gt;
 $ curl http://127.0.0.1:5000 &amp;gt; check.html&lt;br /&gt;
&lt;br /&gt;
Check the Sync Server host using HTTP:&lt;br /&gt;
&lt;br /&gt;
 From an open browser:&lt;br /&gt;
 http://127.0.0.1:5000/user/1.0/a&lt;br /&gt;
 This should return a &#039;0&#039; if it is working correctly&lt;br /&gt;
&lt;br /&gt;
Both of these should generate Sync Server INFO messages to STDOUT/STDERR (from the terminal running Sync Server).&lt;br /&gt;
&lt;br /&gt;
[[Media:Ubuntu10_10ServerINFOMessages.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Stop the Sync Server:&lt;br /&gt;
 From the first terminal window:&lt;br /&gt;
 type ctrl-c&lt;br /&gt;
&lt;br /&gt;
== Configure MySQL and the sync.conf file ==&lt;br /&gt;
Configure MySQL with a root password and add a test sync DB:&lt;br /&gt;
 $ mysql -u root -p&lt;br /&gt;
&lt;br /&gt;
If your MySQL install does not already have a root password, do the following:&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; UPDATE mysql.user set Password=PASSWORD(&#039;mozroot&#039;) WHERE User=&#039;root&#039;;&lt;br /&gt;
 mysql&amp;gt; FLUSH PRIVILEGES&lt;br /&gt;
&lt;br /&gt;
Now set up a sync db for testing:&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; CREATE DATABASE syncdb;&lt;br /&gt;
 mysql&amp;gt; \quit&lt;br /&gt;
&lt;br /&gt;
Configure server-full/etc/sync.conf to use MySQL for testing:&lt;br /&gt;
&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ vi etc/sync.conf&lt;br /&gt;
 Change the following two lines:&lt;br /&gt;
 From: sqluri = sqlite:////&amp;lt;YOUR DIR&amp;gt;/sync.db&lt;br /&gt;
 To: sqluri = mysql://root:&amp;lt;ROOT PWD&amp;gt;@localhost/&amp;lt;DB NAME&amp;gt;&lt;br /&gt;
 Example for root password of &amp;quot;mozroot&amp;quot; and sync DB on localhaost (from above steps):&lt;br /&gt;
 sqluri = mysql://root:mozroot@localhost/syncdb&lt;br /&gt;
&lt;br /&gt;
Restart the Sync Server:&lt;br /&gt;
&lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
&lt;br /&gt;
Notes: If you want to run the Sync Server outside of any login session, you can try the following:&lt;br /&gt;
&lt;br /&gt;
 $ nohup bin/paster server development.ini &amp;amp;&lt;br /&gt;
&lt;br /&gt;
= Running the Sync 1.1 Tests =&lt;br /&gt;
* Once the build is complete, you can run the test as follows&lt;br /&gt;
 $ make test&lt;br /&gt;
* If everything runs as expected, you should see the following:&lt;br /&gt;
 bin/nosetests -s --with-xunit deps/server-core/services/tests&lt;br /&gt;
 deps/server-reg/syncreg/tests deps/server-storage/syncstorage/tests&lt;br /&gt;
 ............................................................etc.......&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Ran 177 tests in 33.031s&lt;br /&gt;
 OK&lt;br /&gt;
* The tests are located in the following directories:&lt;br /&gt;
** server-full/deps/*/*/tests&lt;br /&gt;
* Note: Remember to cleanup after the test by deleted some db files in /tmp&lt;br /&gt;
 rm /tmp/sync.db /tmp/tests*.db&lt;br /&gt;
&lt;br /&gt;
= Re-building and Re-deploying the Sync Server =&lt;br /&gt;
To re-build and re-deploy the sync server, you can try these steps:&lt;br /&gt;
&lt;br /&gt;
 Kill the Sync Server process&lt;br /&gt;
 $ kill -9 &amp;lt;Sync Server PID&amp;gt;&lt;br /&gt;
 (Leave MySQL running)&lt;br /&gt;
 Save the Sync Server directory and its contents&lt;br /&gt;
 (this in case you want to keep various snapshots)&lt;br /&gt;
 $ cd ..&lt;br /&gt;
 (one level up from server-full directory)&lt;br /&gt;
 $ mv server-full server-full-&amp;lt;DATE&amp;gt;&lt;br /&gt;
 (example: mv server-full server-full-08012011&lt;br /&gt;
 Repeat the build and deploy steps from above&lt;br /&gt;
 Make the necessary changes in the server-full/etc/sync.conf file:&lt;br /&gt;
 Change the sqluri entries&lt;br /&gt;
 Restart the server&lt;br /&gt;
&lt;br /&gt;
= Redeploying a Live Server =&lt;br /&gt;
* The following steps can be used to redeploy a live sync server&lt;br /&gt;
 $ cd /path/to/server-full&lt;br /&gt;
 $ hg pull -uv&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ apachectl graceful&lt;br /&gt;
&lt;br /&gt;
* This should be sufficient, as &amp;quot;make build&amp;quot; will pull and update the repositories underneath the &amp;quot;deps&amp;quot; directory.&lt;br /&gt;
* There is also a &amp;quot;make update&amp;quot; target which will update only the dependent repositories, without rebuilding any of the third-party dependencies from PyPi.&lt;br /&gt;
* Also note that the Makefile will build the production channel by default, meaning this will not update you to the very latest checked-in changes but rather to the latest tags.  If instead you want to deploy the very latest code, then use this line instead:&lt;br /&gt;
 $ make build CHANNEL=dev&lt;br /&gt;
&lt;br /&gt;
* NOTE: More specific redeployment ideas can be found on this great site:&lt;br /&gt;
** http://www.wenks.ch/fabian/mozilla-custom-sync-server/#Updating%20the%20Sync%20Server&lt;br /&gt;
&lt;br /&gt;
= For more information =&lt;br /&gt;
For more advanced configurations, including web server support, please see the following documentation: http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
&lt;br /&gt;
For a more technical overview of Sync Server and an introduction to Mozilla Services, please see the following documentation: http://docs.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_Fedora&amp;diff=1257758</id>
		<title>QA/Sync/Sync Server Install Fedora</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_Fedora&amp;diff=1257758"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install Fedora to Services/Sync/Server/Archived/QA/Sync/Sync Server Install Fedora: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Sync Server Install Fedora]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_Fedora&amp;diff=1257757</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Sync Server Install Fedora</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_Fedora&amp;diff=1257757"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install Fedora to Services/Sync/Server/Archived/QA/Sync/Sync Server Install Fedora: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Notes for Installing Sync Server on Fedora 15 =&lt;br /&gt;
REF: http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
&lt;br /&gt;
== General Notes ==&lt;br /&gt;
* The &amp;quot;Building the server&amp;quot; steps can be repeated for each new build you want to test.&lt;br /&gt;
* Once it is running, you can point to it for your own Sync server.&lt;br /&gt;
&lt;br /&gt;
* It is highly recommended that Python 2.6.6 be installed before proceeding with the Sync install.&lt;br /&gt;
* Python 2.7 appears to be compatible, but the pre-packaged installer assumes 2.6.6.&lt;br /&gt;
* Also, it is highly recommended that the developer tools are installed after installing Python 2.6.6.&lt;br /&gt;
&lt;br /&gt;
== Installing the Developer Tools ==&lt;br /&gt;
To get a full development environment on the box, do the following:&lt;br /&gt;
 $ curl -O http://python-distribute.org/distribute_setup.py&lt;br /&gt;
 $ sudo python2.6 distribute_setup.py&lt;br /&gt;
 $ sudo easy_install-2.6 MoPyTools&lt;br /&gt;
&lt;br /&gt;
== Keeping the build logs ==&lt;br /&gt;
Run the &amp;quot;make build&amp;quot; step as follows:&lt;br /&gt;
 $ make build 1&amp;gt; buildlog.log 2&amp;gt; builderr.err&lt;br /&gt;
&lt;br /&gt;
== Using Sqlite3 ==&lt;br /&gt;
If sqlite3 is to be used, the server-full/etc/sync.conf file must be edited to change the default location of the temp.db file. The default location is in /tmp, which will get wiped at each system boot/restart.&lt;br /&gt;
&lt;br /&gt;
== Installing Sync Server ==&lt;br /&gt;
Assuming the prerequisites have been met, following the clone, build, and make steps from the link above.&lt;br /&gt;
&lt;br /&gt;
== Configuring Sync Server to use MySQL ==&lt;br /&gt;
The Sync Server can be re-configured to use MySQL instead of Sqlite3.&lt;br /&gt;
&lt;br /&gt;
* Install MySQL&lt;br /&gt;
 $ sudo yum install mysql, mysql-devel, mysql-server&lt;br /&gt;
Note: mysql-python will also have to be installed since Fedora 15 does not pre-install this package.&lt;br /&gt;
 $ cd server_full&lt;br /&gt;
 $ bin/easy_install MySQL-Python&lt;br /&gt;
&lt;br /&gt;
* Start MySQL&lt;br /&gt;
 $ sudo /etc/init.d/mysqld start&lt;br /&gt;
 (will ask for the root password, if set)&lt;br /&gt;
 will show something like the following:&lt;br /&gt;
 Server version: 5.5.13 MySQL Community Server (GPL)&lt;br /&gt;
 or&lt;br /&gt;
 mysql  Ver 14.14 Distrib 5.5.14, for Linux (i686) using readline 5.1&lt;br /&gt;
&lt;br /&gt;
* Run the following to enter mysql:&lt;br /&gt;
 $ mysql -u root -p&lt;br /&gt;
 There may be no password yet (in which case the password field is blank)&lt;br /&gt;
&lt;br /&gt;
* If there is no password, run following to create one&lt;br /&gt;
 mysql&amp;gt; UPDATE mysql.user set Password=PASSWORD(&#039;mozroot&#039;) WHERE User=&#039;root&#039;;&lt;br /&gt;
 mysql&amp;gt; FLUSH PRIVILEGES&lt;br /&gt;
 then&lt;br /&gt;
 mysql&amp;gt; \quit&lt;br /&gt;
&lt;br /&gt;
* While in mysql, create a database for use with SyncServer&lt;br /&gt;
 mysql&amp;gt; CREATE DATABASE syncdb;&lt;br /&gt;
 mysql&amp;gt; \quit&lt;br /&gt;
&lt;br /&gt;
* Change two lines in the server-full/etc/sync.conf file&lt;br /&gt;
 Original:&lt;br /&gt;
 sqluri = sqlite:////tmp/test.db&lt;br /&gt;
 Updated:&lt;br /&gt;
 sqluri = mysql://user:password@server/database&lt;br /&gt;
 where &amp;quot;user&amp;quot; is the current user on this install&lt;br /&gt;
 &amp;quot;password&amp;quot; is the mysql password for this user&lt;br /&gt;
 &amp;quot;server&amp;quot; is just localhost&lt;br /&gt;
 &amp;quot;database&amp;quot; is a default or new database for use with the Sync server&lt;br /&gt;
&lt;br /&gt;
== Start the Sync Server ==&lt;br /&gt;
* Run the following command (see the wiki page) for more information&lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
 or&lt;br /&gt;
 $ nohup bin/paster serve development.ini 1&amp;gt;&amp;gt; syncserver.log 2&amp;gt;&amp;gt;syncserver.log &amp;amp;&lt;br /&gt;
 While running, the Sync Server messages/events will print to STDOUT and STDERR.&lt;br /&gt;
 This command will run the server outside of any login session and save STDOUT and STDERR to a log file.&lt;br /&gt;
&lt;br /&gt;
* If the Server is running correctly, you should see something like this&lt;br /&gt;
 Starting server in PID 3568.&lt;br /&gt;
 serving on 0.0.0.0:5000 view at http://127.0.0.1:5000&lt;br /&gt;
&lt;br /&gt;
= Running the Sync 1.1 Tests =&lt;br /&gt;
* Once the build is complete, you can run the test as follows&lt;br /&gt;
 $ make test&lt;br /&gt;
* If everything runs as expected, you should see the following:&lt;br /&gt;
 bin/nosetests -s --with-xunit deps/server-core/services/tests&lt;br /&gt;
 deps/server-reg/syncreg/tests deps/server-storage/syncstorage/tests&lt;br /&gt;
 ............................................................etc.......&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Ran 177 tests in 33.031s&lt;br /&gt;
 OK&lt;br /&gt;
* The tests are located in the following directories:&lt;br /&gt;
** server-full/deps/*/*/tests&lt;br /&gt;
* Note: Remember to cleanup after the test by deleted some db files in /tmp&lt;br /&gt;
 rm /tmp/sync.db /tmp/tests*.db&lt;br /&gt;
&lt;br /&gt;
= Restarting MySQL after System Restart =&lt;br /&gt;
* Possible lines for autostarting MySQL server on boot&lt;br /&gt;
 $ sudo /etc/init.d/mysqld start ## use restart after update&lt;br /&gt;
 ## OR ##&lt;br /&gt;
 $ sudo service mysqld start ## use restart after update&lt;br /&gt;
 $ sudo chkconfig --levels 235 mysqld on&lt;br /&gt;
&lt;br /&gt;
= Rebuilding and Deploying the Sync Server =&lt;br /&gt;
* Kill the Sync Server process&lt;br /&gt;
 $ kill -9 &amp;lt;PID&amp;gt;&lt;br /&gt;
(Leave MySQL running)&lt;br /&gt;
* Save the Sync Server directory and its contents&lt;br /&gt;
(this in case you want to keep various snapshots)&lt;br /&gt;
 $ mv server-full server-full-&amp;lt;DATE&amp;gt;&lt;br /&gt;
(example: mv server-full server-full-08012011)&lt;br /&gt;
* Repeat the build and deploy steps from above&lt;br /&gt;
* Make the necessary changes in the server-full/etc/sync.conf file:&lt;br /&gt;
* Change the sqluri entries&lt;br /&gt;
* Restart the server using the &amp;quot;nohup&amp;quot; command from above&lt;br /&gt;
* Test the service to verify everything is running correctly&lt;br /&gt;
&lt;br /&gt;
= Redeploying a Live Server =&lt;br /&gt;
* The following steps can be used to redeploy a live sync server&lt;br /&gt;
 $ cd /path/to/server-full&lt;br /&gt;
 $ hg pull -uv&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ apachectl graceful&lt;br /&gt;
&lt;br /&gt;
* This should be sufficient, as &amp;quot;make build&amp;quot; will pull and update the repositories underneath the &amp;quot;deps&amp;quot; directory.&lt;br /&gt;
* There is also a &amp;quot;make update&amp;quot; target which will update only the dependent repositories, without rebuilding any of the third-party dependencies from PyPi.&lt;br /&gt;
* Also note that the Makefile will build the production channel by default, meaning this will not update you to the very latest checked-in changes but rather to the latest tags.  If instead you want to deploy the very latest code, then use this line instead:&lt;br /&gt;
 $ make build CHANNEL=dev&lt;br /&gt;
&lt;br /&gt;
* NOTE: More specific redeployment ideas can be found on this great site:&lt;br /&gt;
** http://www.wenks.ch/fabian/mozilla-custom-sync-server/#Updating%20the%20Sync%20Server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more advanced configurations, including web server support, please see the following documentation: &lt;br /&gt;
* http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
For a more technical overview of Sync Server and an introduction to Mozilla Services, please see the following documentation: &lt;br /&gt;
* http://docs.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_EL6&amp;diff=1257756</id>
		<title>QA/Sync/Sync Server Install EL6</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_EL6&amp;diff=1257756"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install EL6 to Services/Sync/Server/Archived/QA/Sync/Sync Server Install EL6: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Sync Server Install EL6]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_EL6&amp;diff=1257755</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Sync Server Install EL6</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_EL6&amp;diff=1257755"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install EL6 to Services/Sync/Server/Archived/QA/Sync/Sync Server Install EL6: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Notes for installing Sync Server on Red Hat Enterprise Linux 6 for 64-Bit systems =&lt;br /&gt;
REF: http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
&lt;br /&gt;
== General Notes ==&lt;br /&gt;
* The &amp;quot;Building the server&amp;quot; steps can be repeated for each new build you want to test.&lt;br /&gt;
* Once it is running, you can point to it for your own Sync server.&lt;br /&gt;
&lt;br /&gt;
* It is highly recommended that Python 2.6.6 be installed before proceeding with the Sync install.&lt;br /&gt;
* Python 2.7 appears to be compatible, but the pre-packaged installer assumes 2.6.6.&lt;br /&gt;
* Also, it is highly recommended that the developer tools are installed after installing Python 2.6.6.&lt;br /&gt;
&lt;br /&gt;
== Installing the Developer Tools ==&lt;br /&gt;
To get a full development environment on the box, do the following:&lt;br /&gt;
 $ curl -O http://python-distribute.org/distribute_setup.py&lt;br /&gt;
 $ sudo python2.6 distribute_setup.py&lt;br /&gt;
 $ sudo easy_install-2.6 MoPyTools&lt;br /&gt;
&lt;br /&gt;
== Keeping the build logs ==&lt;br /&gt;
Run the &amp;quot;make build&amp;quot; step as follows:&lt;br /&gt;
 $ make build 1&amp;gt; buildlog.log 2&amp;gt; builderr.err&lt;br /&gt;
&lt;br /&gt;
== Using Sqlite3 ==&lt;br /&gt;
If sqlite3 is to be used, the server-full/etc/sync.conf file must be edited to change the default location of the temp.db file. The default location is in /tmp, which will get wiped at each system boot/restart.&lt;br /&gt;
&lt;br /&gt;
== Installing Sync Server ==&lt;br /&gt;
Assuming kernel version similar to the following 2.6.32-131.6.1.el6.x86_64 ... x86_64 x86_64 x86_64 GNU/Linux&lt;br /&gt;
&lt;br /&gt;
== Pre-Installed Packages ==&lt;br /&gt;
The following packages were already installed by OPs on the sync6 VM:&lt;br /&gt;
* Python 2.6.6&lt;br /&gt;
* Sqlite3 3.6.20&lt;br /&gt;
&lt;br /&gt;
== Required Packages ==&lt;br /&gt;
The following packages need to be installed. This should be a one-off, unless updates/upgrades are needed by the Sync Server code:&lt;br /&gt;
* Mercurial&lt;br /&gt;
* MySQL Server, Devel, etc.&lt;br /&gt;
* Make&lt;br /&gt;
* Virtualenv&lt;br /&gt;
* SetupTools&lt;br /&gt;
* Python virtualenv&lt;br /&gt;
* Python devel&lt;br /&gt;
* Gcc&lt;br /&gt;
&lt;br /&gt;
== Installations ==&lt;br /&gt;
* Install Mercurial 1.4&lt;br /&gt;
 $ sudo yum install mercurial&lt;br /&gt;
* Verify the installation:&lt;br /&gt;
 $ hg --version&lt;br /&gt;
&lt;br /&gt;
* Install MySQL Server 14.14&lt;br /&gt;
 $ sudo yum install mysql-server&lt;br /&gt;
* Verify the installation:&lt;br /&gt;
 $ mysql --version&lt;br /&gt;
&lt;br /&gt;
* Install Gnu Make 3.81&lt;br /&gt;
 $ sudo yum install make&lt;br /&gt;
* Verify the installation:&lt;br /&gt;
 $ make -v&lt;br /&gt;
&lt;br /&gt;
Note: For the more manual installation steps, using /usr/local/src as a working directory, although this can be any location you choose.&lt;br /&gt;
&lt;br /&gt;
* Install SetupTools&lt;br /&gt;
 $ cd /usr/local/src&lt;br /&gt;
 $ sudo wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz&lt;br /&gt;
 $ sudo tar xzfv setuptools-0.6c11.tar.gz&lt;br /&gt;
 $ cd setuptools-0.6c11&lt;br /&gt;
 $ sudo python2.6 setup.py install&lt;br /&gt;
&lt;br /&gt;
* Install Python virtualenv-1.6.4:&lt;br /&gt;
 $ cd /usr/local/src&lt;br /&gt;
 $ sudo wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.6.4.tar.gz&lt;br /&gt;
 $ sudo tar xvfz virtualenv-1.6.4.tar.gz&lt;br /&gt;
 $ cd virtualenv-1.6.4&lt;br /&gt;
 $ sudo python2.6 setup.py install&lt;br /&gt;
&lt;br /&gt;
* Install Python Devel for Python 2.6.6&lt;br /&gt;
 $ sudo yum install python-devel-2.6.6-20.el6.x86_64&lt;br /&gt;
&lt;br /&gt;
* Install GCC, which is required for MySQL-Python&lt;br /&gt;
 $ cd /usr/local/src&lt;br /&gt;
 $ sudo yum install gcc&lt;br /&gt;
* Verify the installation:&lt;br /&gt;
 $ which gcc&lt;br /&gt;
 returns the following&lt;br /&gt;
 /usr/bin/gcc&lt;br /&gt;
 $ gcc --version&lt;br /&gt;
 returns the following&lt;br /&gt;
 gcc (GCC) 4.4.5 20110214 (Red Hat 4.4.5-6)&lt;br /&gt;
&lt;br /&gt;
* Start up MySQL&lt;br /&gt;
 sudo /etc/init.d/mysqld start&lt;br /&gt;
&lt;br /&gt;
* Configure MySQL with a password and a test DB for Sync.&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
 There may be no password (or a &amp;quot;blank&amp;quot; password)&lt;br /&gt;
&lt;br /&gt;
* Two commands seems to work to change the password:&lt;br /&gt;
 mysql&amp;gt; UPDATE mysql.user set Password=PASSWORD(&#039;mozroot&#039;) WHERE User=&#039;root&#039;;&lt;br /&gt;
 mysql&amp;gt; FLUSH PRIVILEGES&lt;br /&gt;
&lt;br /&gt;
* Create a test database for use with SyncServer&lt;br /&gt;
 mysql&amp;gt; CREATE DATABASE syncdb;&lt;br /&gt;
 mysql&amp;gt; \quit&lt;br /&gt;
&lt;br /&gt;
Note: mysql-server install usually prints several lines that show how to do initial setup, so those steps could also be followed instead of the steps listed above.&lt;br /&gt;
&lt;br /&gt;
* Next, clone and build the sync server (installing to an open folder for now: /opt/sync)&lt;br /&gt;
 $ mkdir /opt/sync&lt;br /&gt;
 $ cd /opt/sync&lt;br /&gt;
 $ hg clone https://hg.mozilla.org/services/server-full&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Install mysql-devel (which is a prereq for MySQL-Python)&lt;br /&gt;
 $ sudo yum install mysql-devel&lt;br /&gt;
&lt;br /&gt;
* Install MySQL-Python&lt;br /&gt;
 $ cd /opt/sync/server-full&lt;br /&gt;
 $ bin/easy_install MySQL-Python&lt;br /&gt;
&lt;br /&gt;
* Configure server-full/etc/sync.conf to use MySQL&lt;br /&gt;
 sqluri = mysql://user:password@server/database&lt;br /&gt;
 where &amp;quot;user&amp;quot; is the current user on this install&lt;br /&gt;
 &amp;quot;password&amp;quot; is the mysql password for this user&lt;br /&gt;
 &amp;quot;server&amp;quot; is just localhost&lt;br /&gt;
 &amp;quot;database&amp;quot; is a default or new database for use with the Sync server&lt;br /&gt;
&lt;br /&gt;
= Running the Sync 1.1 Tests =&lt;br /&gt;
* Once the build is complete, you can run the test as follows&lt;br /&gt;
 $ make test&lt;br /&gt;
* If everything runs as expected, you should see the following:&lt;br /&gt;
 bin/nosetests -s --with-xunit deps/server-core/services/tests&lt;br /&gt;
 deps/server-reg/syncreg/tests deps/server-storage/syncstorage/tests&lt;br /&gt;
 ............................................................etc.......&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Ran 177 tests in 33.031s&lt;br /&gt;
 OK&lt;br /&gt;
* The tests are located in the following directories:&lt;br /&gt;
** server-full/deps/*/*/tests&lt;br /&gt;
* Note: Remember to cleanup after the test by deleted some db files in /tmp&lt;br /&gt;
 rm /tmp/sync.db /tmp/tests*.db&lt;br /&gt;
&lt;br /&gt;
= Starting the Sync Server =&lt;br /&gt;
* Run the following command (see the wiki page) for more information &lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
&lt;br /&gt;
* If the Server is running correctly, you should see something like this &lt;br /&gt;
 Starting server in PID 3568.&lt;br /&gt;
 serving on 0.0.0.0:5000 view at http://127.0.0.1:5000&lt;br /&gt;
&lt;br /&gt;
= Rebuilding and Deploying the Sync Server =&lt;br /&gt;
* Kill the Sync Server process&lt;br /&gt;
 $ kill -9 &amp;lt;PID&amp;gt;&lt;br /&gt;
(Leave MySQL running)&lt;br /&gt;
* Save the Sync Server directory and its contents&lt;br /&gt;
(this in case you want to keep various snapshots)&lt;br /&gt;
 $ mv server-full server-full-&amp;lt;DATE&amp;gt;&lt;br /&gt;
(example: mv server-full server-full-08012011)&lt;br /&gt;
* Repeat the build and deploy steps from above&lt;br /&gt;
* Make the necessary changes in the server-full/etc/sync.conf file:&lt;br /&gt;
* Change the sqluri entries&lt;br /&gt;
* Restart the server&lt;br /&gt;
&lt;br /&gt;
= Redeploying a Live Server =&lt;br /&gt;
* The following steps can be used to redeploy a live sync server&lt;br /&gt;
 $ cd /path/to/server-full&lt;br /&gt;
 $ hg pull -uv&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ apachectl graceful&lt;br /&gt;
&lt;br /&gt;
* This should be sufficient, as &amp;quot;make build&amp;quot; will pull and update the repositories underneath the &amp;quot;deps&amp;quot; directory.&lt;br /&gt;
* There is also a &amp;quot;make update&amp;quot; target which will update only the dependent repositories, without rebuilding any of the third-party dependencies from PyPi.&lt;br /&gt;
* Also note that the Makefile will build the production channel by default, meaning this will not update you to the very latest checked-in changes but rather to the latest tags.  If instead you want to deploy the very latest code, then use this line instead:&lt;br /&gt;
 $ make build CHANNEL=dev&lt;br /&gt;
&lt;br /&gt;
* NOTE: More specific redeployment ideas can be found on this great site:&lt;br /&gt;
** http://www.wenks.ch/fabian/mozilla-custom-sync-server/#Updating%20the%20Sync%20Server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more advanced configurations, including web server support, please see the following documentation:&lt;br /&gt;
* http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
For a more technical overview of Sync Server and an introduction to Mozilla Services, please see the following documentation:&lt;br /&gt;
* http://docs.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_CentOS&amp;diff=1257754</id>
		<title>QA/Sync/Sync Server Install CentOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Sync_Server_Install_CentOS&amp;diff=1257754"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install CentOS to Services/Sync/Server/Archived/QA/Sync/Sync Server Install CentOS: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Sync Server Install CentOS]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_CentOS&amp;diff=1257753</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Sync Server Install CentOS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Sync_Server_Install_CentOS&amp;diff=1257753"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Sync Server Install CentOS to Services/Sync/Server/Archived/QA/Sync/Sync Server Install CentOS: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Notes for Installing Sync Server on CentOS 6 =&lt;br /&gt;
REF: http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
&lt;br /&gt;
== General Notes ==&lt;br /&gt;
* The &amp;quot;Building the server&amp;quot; steps can be repeated for each new build you want to test.&lt;br /&gt;
* Once it is running, you can point to it for your own Sync server.&lt;br /&gt;
&lt;br /&gt;
* It is highly recommended that Python 2.6.6 be installed before proceeding with the Sync install.&lt;br /&gt;
* Python 2.7 appears to be compatible, but the pre-packaged installer assumes 2.6.6.&lt;br /&gt;
* Also, it is highly recommended that the developer tools are installed after installing Python 2.6.6.&lt;br /&gt;
&lt;br /&gt;
== Installing the Developer Tools ==&lt;br /&gt;
To get a full development environment on the box, do the following:&lt;br /&gt;
 $ curl -O http://python-distribute.org/distribute_setup.py&lt;br /&gt;
 $ sudo python2.6 distribute_setup.py&lt;br /&gt;
 $ sudo easy_install-2.6 MoPyTools&lt;br /&gt;
&lt;br /&gt;
== Keeping the build logs ==&lt;br /&gt;
Run the &amp;quot;make build&amp;quot; step as follows:&lt;br /&gt;
 $ make build 1&amp;gt; buildlog.log 2&amp;gt; builderr.err&lt;br /&gt;
&lt;br /&gt;
== Using Sqlite3 ==&lt;br /&gt;
If sqlite3 is to be used, the server-full/etc/sync.conf file must be edited to change the default location of the temp.db file. The default location is in /tmp, which will get wiped at each system boot/restart.&lt;br /&gt;
&lt;br /&gt;
== Installing Sync Server ==&lt;br /&gt;
These are the instructions for install Sync Server and FireFox on CentOS 6 64-bit OS&lt;br /&gt;
&lt;br /&gt;
* The following packages will need to be installed:&lt;br /&gt;
** Mecurial&lt;br /&gt;
** sqlite3&lt;br /&gt;
** MySQL (optional - if you do not want to use Sqlite3)&lt;br /&gt;
** Python 2.6.6&lt;br /&gt;
** Python 2.6.6 virtualenv&lt;br /&gt;
** Python 2.6.6 SetupTools&lt;br /&gt;
** Python 2.6.6 Developer Tools&lt;br /&gt;
&lt;br /&gt;
* Verify that sqlite was already installed&lt;br /&gt;
 $ which sqlite3&lt;br /&gt;
 $ sqlite3 --version&lt;br /&gt;
&lt;br /&gt;
* Install the latest version of mercurial&lt;br /&gt;
 $ yum install mercurial&lt;br /&gt;
 $ which hg&lt;br /&gt;
 $ hg --version&lt;br /&gt;
 1.4&lt;br /&gt;
&lt;br /&gt;
* Install the required development tools and libraries&lt;br /&gt;
 $ yum groupinstall &#039;Development Tools&#039; &#039;Development Libraries&#039;&lt;br /&gt;
 $ yum install tk-devel libjpeg-devel mysql-devel python-devel httpd-devel zlib-devel bzip2-devel&lt;br /&gt;
&lt;br /&gt;
* Install Python 2.6.6 in $home (in  case it is needed)&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ sudo wget http://python.org/ftp/python/2.6.6/Python-2.6.6.tgz&lt;br /&gt;
 $ sudo tar xzvf Python-2.6.6.tgz&lt;br /&gt;
&lt;br /&gt;
* Build Python 2.6.6&lt;br /&gt;
 $ cd $home/Python-2.6.6&lt;br /&gt;
 $ sudo ./configure --prefix=/opt/python2.6 --enable-thread --enable-shared --enable-unicode=ucs4&lt;br /&gt;
 $ sudo make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* Now clone and build the Sync Server&lt;br /&gt;
 $ hg clone https://hg.mozilla.org/services/server-full&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Start the Sync Server and verify it works properly&lt;br /&gt;
 $ bin/paster serve development.ini&lt;br /&gt;
 You should see something like this:&lt;br /&gt;
 Starting server in PID 5952.&lt;br /&gt;
 serving on 0.0.0.0:5000 view at http://127.0.0.1:5000&lt;br /&gt;
&lt;br /&gt;
* If the previous step isn&#039;t working, you may find that you need to run &lt;br /&gt;
 $ python setup.py develop&lt;br /&gt;
* from the server-full directory, and then &lt;br /&gt;
 $ make build &lt;br /&gt;
* and run &lt;br /&gt;
 $ python setup.py develop &lt;br /&gt;
* in each of the three directories contained within the server-full/deps/ :  server-core, server-reg, and server-storage.  These seem to be services that the Sync Server relies on.&lt;br /&gt;
&lt;br /&gt;
* Stop the server to continue the installations (if needed)&lt;br /&gt;
 ctrl-c&lt;br /&gt;
&lt;br /&gt;
* Install MySQL &lt;br /&gt;
MySQL, mysql-devel, and libmysqlclient-dev should already be installed on CentOS 6&lt;br /&gt;
 $ which mysql&lt;br /&gt;
 $ mysql --version&lt;br /&gt;
If need, you can just run the following:&lt;br /&gt;
 $ yum install mysql-server, mysql-devel, and libmysqlclient-dev (or similar)&lt;br /&gt;
&lt;br /&gt;
* Install MySQL-Python&lt;br /&gt;
Run the following:&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ cd server-full&lt;br /&gt;
 $ bin/easy_install Mysql-Python&lt;br /&gt;
&lt;br /&gt;
* Verify mysql-server is running or start it up&lt;br /&gt;
 $ sudo /etc/init.d/mysqld start&lt;br /&gt;
&lt;br /&gt;
* Set the MySQL root/user password:&lt;br /&gt;
 $ /usr/bin/mysqladmin -u root password &#039;new-password&#039;&lt;br /&gt;
 $ /usr/bin/mysqladmin -u root -h localhost.localdomain password &#039;new-password&#039;&lt;br /&gt;
 where &#039;new-password&#039; is the password you have chosen for &#039;root&#039;&lt;br /&gt;
&lt;br /&gt;
* Ran the following to enter mysql:&lt;br /&gt;
 $ mysql -u root -p&lt;br /&gt;
 (password should be &#039;new-password&#039; above)&lt;br /&gt;
&lt;br /&gt;
* Create a database for use with SyncServer&lt;br /&gt;
 mysql&amp;gt; CREATE DATABASE syncdb;&lt;br /&gt;
 mysql&amp;gt;\quit&lt;br /&gt;
&lt;br /&gt;
* Edit the server-full/etc/sync.conf file to use mysql instead of sqlite3&lt;br /&gt;
 sqluri = mysql://user:password@server/database&lt;br /&gt;
 where &amp;quot;user&amp;quot; is the current user on this install&lt;br /&gt;
 &amp;quot;password&amp;quot; is the mysql password for this user&lt;br /&gt;
 &amp;quot;server&amp;quot; is just localhost&lt;br /&gt;
 &amp;quot;database&amp;quot; is a default or new database for use with the Sync server&lt;br /&gt;
&lt;br /&gt;
* Start the Sync Server and verify it works properly&lt;br /&gt;
 $ bin/paster serve deployment.ini&lt;br /&gt;
 You should see something like this:&lt;br /&gt;
 Starting server in PID 5952.&lt;br /&gt;
 serving on 0.0.0.0:5000 view at http://127.0.0.1:5000&lt;br /&gt;
&lt;br /&gt;
= Running the Sync 1.1 Tests =&lt;br /&gt;
* Once the build is complete, you can run the test as follows&lt;br /&gt;
 $ make test&lt;br /&gt;
* If everything runs as expected, you should see the following:&lt;br /&gt;
 bin/nosetests -s --with-xunit deps/server-core/services/tests&lt;br /&gt;
 deps/server-reg/syncreg/tests deps/server-storage/syncstorage/tests&lt;br /&gt;
 ............................................................etc.......&lt;br /&gt;
 ----------------------------------------------------------------------&lt;br /&gt;
 Ran 177 tests in 33.031s&lt;br /&gt;
 OK&lt;br /&gt;
* The tests are located in the following directories:&lt;br /&gt;
** server-full/deps/*/*/tests&lt;br /&gt;
* Note: Remember to cleanup after the test by deleted some db files in /tmp&lt;br /&gt;
 rm /tmp/sync.db /tmp/tests*.db&lt;br /&gt;
&lt;br /&gt;
= Restarting MySQL after system boot/restart =&lt;br /&gt;
If needed, one of the following sets of steps can be followed&lt;br /&gt;
 sudo /etc/init.d/mysqld start ## use restart after update&lt;br /&gt;
 ## OR ##&lt;br /&gt;
 sudo service mysqld start ## use restart after update&lt;br /&gt;
 sudo chkconfig --levels 235 mysqld on&lt;br /&gt;
&lt;br /&gt;
= Downloading and Installing FireFox 5 =&lt;br /&gt;
By default CentOS 6 comes with FireFox 3.6. In order to use Sync Server, you should have FireFox 5.&lt;br /&gt;
 $ cd $home&lt;br /&gt;
 $ wget http://releases.mozilla.org/pub/mozilla.org/firefox/releases/5.0.1/linux-x86_64/en-US/firefox-5.0.1.tar.bz2&lt;br /&gt;
 $ tar xvjf firefox-5.0.1.tar.bz2&lt;br /&gt;
 $ cd firefox&lt;br /&gt;
 $ ./firefox&lt;br /&gt;
 Verify that FireFox runs properly and is version 5.01 or newer&lt;br /&gt;
&lt;br /&gt;
= Rebuilding and Deploying the Sync Server =&lt;br /&gt;
* Kill the Sync Server process&lt;br /&gt;
 $ kill -9 &amp;lt;PID&amp;gt;&lt;br /&gt;
(Leave MySQL running)&lt;br /&gt;
* Save the Sync Server directory and its contents&lt;br /&gt;
(this in case you want to keep various snapshots)&lt;br /&gt;
 $ mv server-full server-full-&amp;lt;DATE&amp;gt;&lt;br /&gt;
(example: mv server-full server-full-08012011)&lt;br /&gt;
* Repeat the build and deploy steps from above&lt;br /&gt;
* Make the necessary changes in the server-full/etc/sync.conf file:&lt;br /&gt;
* Change the sqluri entries&lt;br /&gt;
* Restart the server using the &amp;quot;nohup&amp;quot; command from above&lt;br /&gt;
* Test the service to verify everything is running correctly&lt;br /&gt;
&lt;br /&gt;
= Redeploying a Live Server =&lt;br /&gt;
* The following steps can be used to redeploy a live sync server&lt;br /&gt;
 $ cd /path/to/server-full&lt;br /&gt;
 $ hg pull -uv&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ apachectl graceful&lt;br /&gt;
&lt;br /&gt;
* This should be sufficient, as &amp;quot;make build&amp;quot; will pull and update the repositories underneath the &amp;quot;deps&amp;quot; directory.&lt;br /&gt;
* There is also a &amp;quot;make update&amp;quot; target which will update only the dependent repositories, without rebuilding any of the third-party dependencies from PyPi.&lt;br /&gt;
* Also note that the Makefile will build the production channel by default, meaning this will not update you to the very latest checked-in changes but rather to the latest tags.  If instead you want to deploy the very latest code, then use this line instead:&lt;br /&gt;
 $ make build CHANNEL=dev&lt;br /&gt;
&lt;br /&gt;
* NOTE: More specific redeployment ideas can be found on this great site:&lt;br /&gt;
** http://www.wenks.ch/fabian/mozilla-custom-sync-server/#Updating%20the%20Sync%20Server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more advanced configurations, including web server support, please see the following documentation: &lt;br /&gt;
* http://docs.services.mozilla.com/howtos/run-sync.html&lt;br /&gt;
For a more technical overview of Sync Server and an introduction to Mozilla Services, please see the following documentation: &lt;br /&gt;
* http://docs.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back To ==&amp;gt; [[QA/Browser_Technologies/Services | Mozilla BT Services]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Native_Android_Test_Plan&amp;diff=1257752</id>
		<title>QA/Sync/Native Android Test Plan</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Native_Android_Test_Plan&amp;diff=1257752"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Native Android Test Plan to Services/Sync/Server/Archived/QA/Sync/Native Android Test Plan: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Native Android Test Plan]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Native_Android_Test_Plan&amp;diff=1257751</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Native Android Test Plan</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Native_Android_Test_Plan&amp;diff=1257751"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Native Android Test Plan to Services/Sync/Server/Archived/QA/Sync/Native Android Test Plan: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Outline of Quality Assurance plan to ensure each phase of Native Android Sync is of highest quality possible.[https://wiki.mozilla.org/Services/NativeSync Native Sync team page] and [].&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
Native Android Sync is a stand alone apk that will be bundled with Fennec.  As such many of its features are tied to the android system. It doesn&#039;t need Fennec to be running to be syncing.&lt;br /&gt;
&lt;br /&gt;
=== Testing strategy ===&lt;br /&gt;
QA will keep up with phased releases of this feature as follows:&lt;br /&gt;
&lt;br /&gt;
* Milestone 1 (Jan, 16, 2012)&lt;br /&gt;
** Ensure full Account Setup and J-PAKE slave are supported&lt;br /&gt;
** Ensure sync across multiple devices for History and Bookmarks&lt;br /&gt;
** L10n support (landed Dec 20th, but we won&#039;t be able to test until localizers do their thing)&lt;br /&gt;
&lt;br /&gt;
* Milestone 2 (Jan 31)&lt;br /&gt;
** Ensure Milestone 1 features have not regressed&lt;br /&gt;
** Ensure Backoff and error handling are fully supported&lt;br /&gt;
** Ensure Passwords across multiple devices (may not make it, currently blocked by Fennec)&lt;br /&gt;
&lt;br /&gt;
* Milestone 3 (Target with first native Fennec release March 30, 2012)&lt;br /&gt;
** Ensure M1 and M2 features have not regressed&lt;br /&gt;
** Verify any polish stability fixes.&lt;br /&gt;
** If ready, ensure BrowserID+Sync is supported.&lt;br /&gt;
&lt;br /&gt;
=== Schedule ===&lt;br /&gt;
* Milestone 1 &lt;br /&gt;
** Builds to QA by Jan 12, 2012&lt;br /&gt;
** Sign-off by Jan. 14, 2012&lt;br /&gt;
* Milestone 2&lt;br /&gt;
** Builds to QA by Jan. 27, 2012&lt;br /&gt;
** Sing-off by Jan. 39, 2012&lt;br /&gt;
* Milestone 3&lt;br /&gt;
** ??&lt;br /&gt;
&lt;br /&gt;
=== notes ===&lt;br /&gt;
* Instant Sync is not supported because the system decides when to sync. &lt;br /&gt;
* This should work with most any android device. Though initially there will be issues with UI on tablets.&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Community/TestPlan/20121015/&amp;diff=1257750</id>
		<title>QA/Sync/Community/TestPlan/20121015/</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Community/TestPlan/20121015/&amp;diff=1257750"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Community/TestPlan/20121015/ to Services/Sync/Server/Archived/QA/Sync/Community/TestPlan/20121015/: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Community/TestPlan/20121015/]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Community/TestPlan/20121015/&amp;diff=1257749</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Community/TestPlan/20121015/</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Community/TestPlan/20121015/&amp;diff=1257749"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Community/TestPlan/20121015/ to Services/Sync/Server/Archived/QA/Sync/Community/TestPlan/20121015/: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Sign off on Services Central development train =&lt;br /&gt;
Please see related [http://blog.mozilla.org/twalker/?p=33 blog post].  We need to sign-off on the [http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/ latest service-central builds] by Monday Oct. 15th.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how you can help:&lt;br /&gt;
&lt;br /&gt;
* Install the latest services-central build from http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/ for your platform(s)&lt;br /&gt;
* Backup your profile(s) or create new ones to test with.&lt;br /&gt;
* If you don&#039;t already have one, create an account at https://moztrap.mozilla.org/ so you can run the test cases under Run Tests &amp;gt; Products : Desktop Firefox &amp;gt; Versions : 19 &amp;gt; Runs Oct. 9-15, 2012 Sync Community Test Run of services-central. (currently there is a bug in Moztrap such that test cases are not displayed in the proper order. So take a moment in the test run to sort out what seems logical; run account setup cases first, then run the sync cases, tab cases and finally the error cases)&lt;br /&gt;
* If you don&#039;t already have one, create an account at https://bugzilla.mozilla.org so you can search for and/or file bugs&lt;br /&gt;
* cc me on any bugs you file or comment in.&lt;br /&gt;
* reach me via email at twalker@mozilla.com or in irc.mozilla.org in #sync&lt;br /&gt;
&lt;br /&gt;
= Important links =&lt;br /&gt;
* [https://bugzilla.mozilla.org bugzilla]&lt;br /&gt;
* [https://moztrap.mozilla.org/ moztrap]&lt;br /&gt;
* services-central builds&lt;br /&gt;
** [http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/services-central-win32/1349741375/ Windows]&lt;br /&gt;
** [http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/services-central-macosx64/1349741375/ Mac]&lt;br /&gt;
** [http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/services-central-linux/1349741375/ Linux]&lt;br /&gt;
&lt;br /&gt;
= fixes on this train =&lt;br /&gt;
Most of these are qa- (which means there isn&#039;t a verifiable set of steps to reproduce the bug). Most of them are refactoring work. If any of these bugs look interesting, feel free to deep dive exploratory test in that area of sync.&lt;br /&gt;
&lt;br /&gt;
{{bug|781946}} - Clean up notifications usage; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|781952}} - Part 1: Refactor engine syncing logic out of service.js; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|781952}} - Part 2: Move cluster management out of service.js; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|781952}} - Part 3: Remove unused Service._updateCluster; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|759130}} - Avoid duplicate accesskey in Sync preferences; r=gps&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|783437}} - Add conditions acceptance to token server client; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|783721}} - Refactor User API service interaction; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Part 1: Don&#039;t rely on Engines singleton in AddonsReconciler; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Part 2: Minimize Engines singleton usage; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Part 3: Don&#039;t expose ErrorHandler as a singleton; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Part 4: Remove unused exports from Weave; change engine loading; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Part 5: Partial removal of Clients singleton; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Park 6: Move StorageCredentialsController to jpakeclient.js; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Part 7: Bind SendCredentialsController to a Service instance; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Part 8: Don&#039;t expose SyncScheduler as a singleton; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Part 9: Refactor engines to not use singletons; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Part 10: Reflect API changes in TPS; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|785225}} - Part 11: Burninate trailing whitespace from tests; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|786489}} - Part 1: Update serverURL and clusterURL through Service; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|786489}} - Part 2: Change username through Identity not prefs; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|787306}} - Fix bitrotted Sync UX code; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|790397}} - set deleted = false for each record stored via PUT or POST.&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|787273}} - Part 1: Remove Records singleton; r=rnewman &amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|787273}} - Part 2: Refactor Resource and Record to not rely on singletons; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|787273}} - Part 3: Don&#039;t rely on Identity in SyncStorageRequest; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|787273}} - Part 4: Refactor Identity to not be a singleton; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|787273}} - Part 5: Remove the CollectionKeys singleton; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|787273}} - Part 6: Remove Weave export from service.js; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|787273}} - Part 7: Expose Status an an instance variable on Service; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|787273}} - Part 8: Make TPS go through main.js for service instance; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|787273}} - Part 9: Adjust frontend code to use main.js; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|792990}} - Properly handle add-ons when resetting Sync; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|792546}} - Part 1: Move rotary engine to a testing-only JS module; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|792546}} - Part 2: Move fake services into testing-only JS module; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|792546}} - Part 3: Move logging functions into standalone module; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|792546}} - Part 4: Move utility functions to testing-only JS module; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|792546}} - Part 5: Clean up excessive imports; r=rnewman&amp;lt;br&amp;gt;&lt;br /&gt;
{{bug|790822}} - Make ensureMillisecondsTimestamp convert to integer. r=gps&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Community/Action_Plan&amp;diff=1257748</id>
		<title>QA/Sync/Community/Action Plan</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Community/Action_Plan&amp;diff=1257748"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Community/Action Plan to Services/Sync/Server/Archived/QA/Sync/Community/Action Plan: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Community/Action Plan]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Community/Action_Plan&amp;diff=1257747</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Community/Action Plan</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Community/Action_Plan&amp;diff=1257747"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Community/Action Plan to Services/Sync/Server/Archived/QA/Sync/Community/Action Plan: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A high level guide on how to contribute to Firefox Sync Quality Assurance. Each level of contribution is generally outlined at [https://wiki.mozilla.org/QA/Sync/Community Sync QA Community].  Read on if you are a Sync user and interested in becoming at least a Casual Contributor if not an Active or Core Contributor.  &lt;br /&gt;
&lt;br /&gt;
= What is there to do? =&lt;br /&gt;
There is prolific growth in and production from the Mozilla Development Community. Mozilla QA needs your help to keep up with that growth and production. Firefox Sync QA is one area where you can make an impact. What follows are ways to take action and make an impact at each of the higher levels of the Sync QA Community.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;note: each item will eventually link to detailed instructions for that action item. If you are interested in something that isn&#039;t linked to details, please hunt me down and I&#039;ll make it priority to complete&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.mozilla.org/QA/Sync/Community#Casual_Contributor Casual Contributor] ==&lt;br /&gt;
The easiest ways to contribute to the Firefox Sync Community are to take a few moments to do one or more of the following. &lt;br /&gt;
&lt;br /&gt;
* Always submit any Firefox crash reports, especially if they happen around a Sync.&lt;br /&gt;
** What is [https://developer.mozilla.org/en-US/docs/Crash_reporting Crash Reporting]?&lt;br /&gt;
** By submitting crash data, our analyst will identify trends and get a workable bug on file for the developers to fix.&lt;br /&gt;
* Share your thoughts on Sync at [http://input.mozilla.org/en-US/feedback input.mozilla.org]. Understanding what our users enjoy using or not helps Mozilla make their products better.&lt;br /&gt;
* Look up or file a support ticket on an issue you have with Sync at [http://support.mozilla.org/en-US/home SUMO].  By observing how support issues are trending, Mozilla can identify top issues and correct them in our products or services.&lt;br /&gt;
&lt;br /&gt;
Yes, it is that easy! Nothing too complicated or time consuming. Just take a moment to get involved.&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.mozilla.org/QA/Sync/Community#Active_Contributor Active Contributor] ==&lt;br /&gt;
Make a bigger impact by taking part directly with the regular flow of Sync QA.  Below are some of the many ways to get involved.&lt;br /&gt;
&lt;br /&gt;
* Get comfortable installing and using Firefox Sync on [http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/ Firefox builds] across all Channels; Nightly, Aurora, Beta and Release for Desktop and Mobile.&lt;br /&gt;
* Become skilled at working in bugzilla&lt;br /&gt;
** Triage Sync components UNCONFIRMED bugs&lt;br /&gt;
** Work through Sync QAWANTED lists&lt;br /&gt;
** Take part in Sync bug priority triage meetings&lt;br /&gt;
* Participate in sign-off activities for weekly release QA cycles for Desktop and Mobile Firefox to ensure Sync is ready to ship in Fx Betas.&lt;br /&gt;
* Participate in sign-off activities for weekly Sync client QA cycles of services-central development to ensure new  fixes and features are fine to merge to Nightly&lt;br /&gt;
* Write manual test cases for MozTrap.&lt;br /&gt;
* Get involved with test case automation through the A-team.&lt;br /&gt;
* Participate in Sync Test Days.&lt;br /&gt;
* Respond to new contributor inquiries&lt;br /&gt;
* Partner with other contributors&lt;br /&gt;
&lt;br /&gt;
The time and effort here is elevated quite a bit.  Your contribution in time can be any where from 2 to 20 hours, or more, per week.&lt;br /&gt;
&lt;br /&gt;
== [https://wiki.mozilla.org/QA/Sync/Community#Core_Contributor Core Contributor] ==&lt;br /&gt;
In addition to being an Active Contributor, a Core Contributor will organize, guide and teach others how to be great  Active Community members.&lt;br /&gt;
&lt;br /&gt;
* Mentor new contributors&lt;br /&gt;
* Write and maintain Sync test plans&lt;br /&gt;
* Monitor and drive bugzilla work&lt;br /&gt;
* Organize and facilitate Sync Test Days.&lt;br /&gt;
* Responsible for final Sync client sign-offs&lt;br /&gt;
* Determine and drive test case writing needs.&lt;br /&gt;
&lt;br /&gt;
A core Contributor can expect to put 20 - 40 hours per week towards Sync QA. This work is often, but not exclusively, done by Mozilla employees.&lt;br /&gt;
&lt;br /&gt;
= What&#039;s Next? =&lt;br /&gt;
Becoming a Casual Contributor is fairly self explanatory. However, if you want get more deeply involved in Firefox Sync QA by becoming an Active Contributor, you&#039;ll need some guidance from a Core Contributor to get you going.&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Community&amp;diff=1257746</id>
		<title>QA/Sync/Community</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Community&amp;diff=1257746"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Community to Services/Sync/Server/Archived/QA/Sync/Community: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Community]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Community&amp;diff=1257745</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Community</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Community&amp;diff=1257745"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Community to Services/Sync/Server/Archived/QA/Sync/Community: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An overview of the Firefox Sync Quality Assurance Community based on the larger [https://wiki.mozilla.org/Community Mozilla Community].   &lt;br /&gt;
&lt;br /&gt;
= Who Is In The Sync QA Community =&lt;br /&gt;
==Core Contributor==&lt;br /&gt;
&lt;br /&gt;
A core contributor is someone who has a leadership position in Firefox Sync Quality Assurance.&lt;br /&gt;
&lt;br /&gt;
* Examples: Desktop Sync QA lead, Mobile Sync QA lead, Sync Server QA lead, Sync QA community mentor&lt;br /&gt;
&lt;br /&gt;
* Goal size: 4 - 6 people &lt;br /&gt;
&lt;br /&gt;
* Mission impact: Core contributors make major impacts on Firefox Sync Quality Assurance through their contributions of time, skill and leadership.&lt;br /&gt;
&lt;br /&gt;
==Active Contributor==&lt;br /&gt;
&lt;br /&gt;
An active contributor is someone who has volunteered substantial time performing Firefox Sync Quality Assurance   activities that involves interactions with others within the last 12 months.&lt;br /&gt;
&lt;br /&gt;
* Examples: Active participation in Sync Test Days, someone who files bugs against Sync on Nightly builds, someone who does regular bugzilla work in Sync components, someone who helps with QA in Sync release cycles, etc.&lt;br /&gt;
&lt;br /&gt;
* Goal size: 15 - 20 people&lt;br /&gt;
&lt;br /&gt;
* Mission impact: Active contributors directly support Firefox Sync Quality Assurance through their contributions of time and skill and provide the Sync Team with the ability to move forward with a wide range projects.&lt;br /&gt;
&lt;br /&gt;
==Casual Contributor==&lt;br /&gt;
&lt;br /&gt;
A casual contributor is someone who has volunteered small amounts of time in an activity.&lt;br /&gt;
&lt;br /&gt;
* Examples: Someone who has submitted feedback for Sync on input.mozilla.org, someone who filed a report about Sync on SUMO, someone who has submitted a Sync related crash report&lt;br /&gt;
&lt;br /&gt;
* Estimated size: Tens of thousands of people&lt;br /&gt;
&lt;br /&gt;
* Mission impact: In aggregate, casual contributors create real value for the improvement of Sync, spreading the word, providing decision-informing data and more.&lt;br /&gt;
&lt;br /&gt;
==Supporter==&lt;br /&gt;
&lt;br /&gt;
A supporter is someone who has shown an interest in Sync without having made a substantial contribution back to the community yet. &lt;br /&gt;
&lt;br /&gt;
* Examples: Someone who has researched how to turn on full sync logging, someone who has read some of our QA wiki pages.&lt;br /&gt;
&lt;br /&gt;
* Estimated size: Thousands of people?&lt;br /&gt;
&lt;br /&gt;
* Mission impact: Supporters advance the mission just like users, but they&#039;ve taken the additional step to start educating themselves about Mozilla and by definition they are aware of some ways to get more involved.&lt;br /&gt;
&lt;br /&gt;
==User==&lt;br /&gt;
&lt;br /&gt;
A user is someone who uses Firefox Sync products but may not be aware of Mozilla&#039;s mission or that there are volunteer opportunities they could get involved with.&lt;br /&gt;
&lt;br /&gt;
* Example: Someone who uses Firefox Sync to improve their Mobile browsing experience&lt;br /&gt;
&lt;br /&gt;
* Estimated size: Millions of people&lt;br /&gt;
&lt;br /&gt;
* Mission impact: Users help advance our mission indirectly, although the people using our products may not be aware of how they are helping or that there even is a mission.&lt;br /&gt;
&lt;br /&gt;
= Where Do you Fit In? =&lt;br /&gt;
If you&#039;re already a  Firefox Sync user, the fact you are reading this has already moved you up a level from User to Supporter.  If you&#039;d like to learn more about how to get involved with the Sync Quality Assurance Community see the [https://wiki.mozilla.org/QA/Sync/Community/Action_Plan Sync QA Community Action Plan].&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Client/Sync_Timers&amp;diff=1257744</id>
		<title>QA/Sync/Client/Sync Timers</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Client/Sync_Timers&amp;diff=1257744"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Client/Sync Timers to Services/Sync/Server/Archived/QA/Sync/Client/Sync Timers: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Client/Sync Timers]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Client/Sync_Timers&amp;diff=1257743</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Client/Sync Timers</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Client/Sync_Timers&amp;diff=1257743"/>
		<updated>2026-06-26T20:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Client/Sync Timers to Services/Sync/Server/Archived/QA/Sync/Client/Sync Timers: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Purpose =&lt;br /&gt;
* A high level light weight document to explain client syncing timers/schedulers&lt;br /&gt;
* This document is not intended as guide for planning or development. It is also not intended to detail programming code.&lt;br /&gt;
* This page is a &#039;Living Document.&#039; It will change. It is intended to reflect functionality of production Sync servers and Sync client on mozilla-central.  As such, it will need to be maintained to keep up with functional changes as they occur. &lt;br /&gt;
	&lt;br /&gt;
=Questions and Comments=&lt;br /&gt;
* Please feel free to add information requests inline (or fill gaps yourself)&lt;br /&gt;
* If you have questions or comments regarding this document, contact:&lt;br /&gt;
  Tracy Walker&lt;br /&gt;
  twalker@mozilla.com&lt;br /&gt;
  irc: tracy&lt;br /&gt;
&lt;br /&gt;
= Instant Sync Triggers =&lt;br /&gt;
== Bookmarks ==&lt;br /&gt;
The following activities will cause a sync to be triggered instantly (100ms after triggering activity is compete)&lt;br /&gt;
* Add a new bookmark&lt;br /&gt;
* Delete a bookmark&lt;br /&gt;
* alter a bookmark&lt;br /&gt;
&lt;br /&gt;
== Passwords ==&lt;br /&gt;
The following activities will cause a sync to be triggered instantly (100ms after triggering activity is compete)&lt;br /&gt;
* Add a new password&lt;br /&gt;
* Delete a password&lt;br /&gt;
* update a password&lt;br /&gt;
&lt;br /&gt;
Notes for instant syncs: &lt;br /&gt;
* Instant syncs will set the next scheduled timer per possible configurations below.&lt;br /&gt;
&lt;br /&gt;
= Sync Client Timers and Schedulers =&lt;br /&gt;
The Sync client has a configuration, found in about:config, that controls &amp;quot;how often&amp;quot; syncs are triggered. Below is that configuration and how it affects Syncs timing behavior.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== services.sync.scheduler.singleDeviceInterval ==&lt;br /&gt;
This config is followed only for sync accounts that have a single device connected.&lt;br /&gt;
* value = 86400 seconds (24 hours)&lt;br /&gt;
* client behavior - next sync will occur in 24 hours&lt;br /&gt;
Notes:&lt;br /&gt;
* Any manual sync resets the 24 hour timer.&lt;br /&gt;
* No instant syncs or active/idle timers are triggered for single device sync account users. &lt;br /&gt;
&lt;br /&gt;
== services.sync.scheduler.immediateInterval ==&lt;br /&gt;
* value = 90 seconds&lt;br /&gt;
* client behavior - Whenever a new item is synced to a client (from the cloud/other client), the next sync will occur in 90 seconds. &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
== services.sync.scheduler.activeInterval ==&lt;br /&gt;
* value = 600 seconds (10 minutes)&lt;br /&gt;
* value may be edited to a custom value of choice&lt;br /&gt;
&lt;br /&gt;
== services.sync.syncInterval ==&lt;br /&gt;
* value = 600 seconds (10 minutes)&lt;br /&gt;
* client behavior - If the user is active (meaning user is browsing, but not triggering instant syncs or crossing score threshold), then next sync will occur in 10 minutes &lt;br /&gt;
&lt;br /&gt;
== services.sync.syncThreshold ==&lt;br /&gt;
*&lt;br /&gt;
*&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== services.sync.scheduler.idleTime ==&lt;br /&gt;
* value = 300 seconds (5 minutes)&lt;br /&gt;
* client behavior - if the user is not active with the client for 5 minutes, sync starts the idleInterval timer.&lt;br /&gt;
&lt;br /&gt;
== services.sync.scheduler.idleInterval ==&lt;br /&gt;
* value = 3600 seconds (1 hour)&lt;br /&gt;
* client behavior - if the user becomes idle, as in above idleTime, the next sync occurs in one hour from time of becoming idle. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Returning from idle will trigger an instant sync.&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/Client/Codes_and_Headers&amp;diff=1257742</id>
		<title>QA/Sync/Client/Codes and Headers</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/Client/Codes_and_Headers&amp;diff=1257742"/>
		<updated>2026-06-26T20:27:41Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Client/Codes and Headers to Services/Sync/Server/Archived/QA/Sync/Client/Codes and Headers: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/Client/Codes and Headers]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Client/Codes_and_Headers&amp;diff=1257741</id>
		<title>Services/Sync/Server/Archived/QA/Sync/Client/Codes and Headers</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/Client/Codes_and_Headers&amp;diff=1257741"/>
		<updated>2026-06-26T20:27:41Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/Client/Codes and Headers to Services/Sync/Server/Archived/QA/Sync/Client/Codes and Headers: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Purpose =&lt;br /&gt;
* A high level light weight document to explain client reaction to the various server headers and status codes&lt;br /&gt;
* This document is not intended as guide for planning or development. It is also not intended to detail programming code.&lt;br /&gt;
* This page is a &#039;Living Document.&#039; It will change. It is intended to reflect functionality of production Sync servers and Sync client on mozilla-central.  As such, it will need to be maintained to keep up with functional changes as they occur. &lt;br /&gt;
	&lt;br /&gt;
=Questions and Comments=&lt;br /&gt;
* Please feel free to add information requests inline (or fill gaps yourself)&lt;br /&gt;
* If you have questions or comments regarding this document, contact:&lt;br /&gt;
  Tracy Walker&lt;br /&gt;
  twalker@mozilla.com&lt;br /&gt;
  irc: tracy&lt;br /&gt;
&lt;br /&gt;
= Headers and status codes =&lt;br /&gt;
The servers send headers and/or status codes in conditional response to various Sync client requests. The Sync client responds to those codes in a variety of ways depending on its state.&lt;br /&gt;
* Headers - http://docs.services.mozilla.com/storage/apis-1.1.html#headers&lt;br /&gt;
* HTTP status codes - http://docs.services.mozilla.com/storage/apis-1.1.html#http-status-codes&lt;br /&gt;
	&lt;br /&gt;
= Client response to server communications =&lt;br /&gt;
== All 200 codes ==&lt;br /&gt;
Indicates success in processing a request.  Sync should proceed normally.&lt;br /&gt;
&lt;br /&gt;
== 401 code == &lt;br /&gt;
Indicates username or password are invalid on this node. There are two possible sources and client reaction to them&lt;br /&gt;
* If the user&#039;s node has change, the current sync should abort and retry against the new node. This should be silent to the user.&lt;br /&gt;
* If the node hasn’t changed, the user’s password was changed.  The client should present the error bar indicating the need for the user to update their password on that client.  Preferences button takes the user to appropriate update password link.&lt;br /&gt;
== 404 code == &lt;br /&gt;
Indicates a resource could not be found.  &lt;br /&gt;
* &#039;&#039;How should the client react? (rnewman?)&#039;&#039;&lt;br /&gt;
== All other 4XX codes ==&lt;br /&gt;
Will abort sync immediately. Error bar will be presented.  User is on their own to resolve the problem.  Note: this is a place where Syncorro could be immensely helpful.&lt;br /&gt;
&lt;br /&gt;
== 503 code ==&lt;br /&gt;
Indicates server under maintenance.  99.9% of errors sent to the client are 503&#039;s. &lt;br /&gt;
=== Client Scenarios for handling 503 + Retry-After ===&lt;br /&gt;
* 1) When a &amp;quot;Sync Now&amp;quot; is performed by the user and a 503 + Retry-After is received.&lt;br /&gt;
** The sync will fail&lt;br /&gt;
** The client will present the error bar indicating the server is under maintenance and will try again later.&lt;br /&gt;
* 2) When an instant sync or a scheduled sync is triggered and a 503 + Retry-After is received.&lt;br /&gt;
** The sync will fail&lt;br /&gt;
** The client will not present an error bar&lt;br /&gt;
* In both cases:		&lt;br /&gt;
** Logs will indicate a fuzzed syncInterval &lt;br /&gt;
** about:config services.sync.nextSync will be set to current time + syncInterval&lt;br /&gt;
** No previously scheduled syncs will occur&lt;br /&gt;
** No instant sync actions will trigger a sync during the back-off interval&lt;br /&gt;
** Another Sync will be tried again at the set nextSync time&lt;br /&gt;
** Subsequent failures and retries will be handled as above until a successful sync occurs or&lt;br /&gt;
** If a successful sync does not occur within 7 days, an error bar will be presented.&lt;br /&gt;
== Retry-After ==&lt;br /&gt;
The Retry-After header is used so that older clients (pre Fx10) will obey the back-off request. The response header sends a time (usually 300-900 seconds). This is the minimum time the client must wait until the next sync attempt.  However, the client checks on its own state and calculates a &amp;quot;fuzzed&amp;quot; next sync interval that is always at least what the server requests. In most cases, the back off length of time will be notably longer.&lt;br /&gt;
&lt;br /&gt;
== X-Weave-Backoff ==&lt;br /&gt;
This request will only be respected by Fx10 or newer. The response header sends a time (usually 300-900 seconds). This is the minimum time the client must wait until the next sync attempt.  However, the client checks on its own state and calculates a &amp;quot;fuzzed&amp;quot; next sync interval that is always at least what the server requests. In most cases, the back off length of time will be notably longer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The client will react to X-Weave-Backoff the same as if it had been sent a 503 + Retry-After noted in the scenarios above.&lt;br /&gt;
&lt;br /&gt;
== X-If-Unmodified-Since ==&lt;br /&gt;
&#039;&#039;client response detail needed&#039;&#039;&lt;br /&gt;
== X-Weave-Alert ==&lt;br /&gt;
&#039;&#039;client response detail needed&#039;&#039;&lt;br /&gt;
== X-Weave-Timestamp ==&lt;br /&gt;
&#039;&#039;client response detail needed&#039;&#039;&lt;br /&gt;
== X-Weave-Records ==&lt;br /&gt;
&#039;&#039;client response detail needed&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=QA/Sync/&amp;diff=1257740</id>
		<title>QA/Sync/</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=QA/Sync/&amp;diff=1257740"/>
		<updated>2026-06-26T20:27:41Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/ to Services/Sync/Server/Archived/QA/Sync/: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Services/Sync/Server/Archived/QA/Sync/]]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/&amp;diff=1257739</id>
		<title>Services/Sync/Server/Archived/QA/Sync/</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Services/Sync/Server/Archived/QA/Sync/&amp;diff=1257739"/>
		<updated>2026-06-26T20:27:41Z</updated>

		<summary type="html">&lt;p&gt;Ddurst: Ddurst moved page QA/Sync/ to Services/Sync/Server/Archived/QA/Sync/: Old content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sync Server Test Documents and Sites ==&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Browser_Technologies/Services/Releases/SyncServer Sync Server Releases wiki]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Test_Plan Sync Client Test Plan]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Test_Plan#Servers Sync Server Test Plan (out of date)]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Test_Plan/grinder_tests Sync Server Grinder tests (out of date)]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Client Sync Client Smoke Tests]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Test_Plan/Test_Level_Summaries#Servers Sync Server Smoke Tests (out of date)]&lt;br /&gt;
&lt;br /&gt;
* [http://docs.services.mozilla.com/howtos/run-sync.html How to install the Sync Server]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Sync_Server_Install_Fedora How to: Sync Server on Fedora]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Sync_Server_Install_CentOS How to: Sync Server on CentOS]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Sync_Server_Install_EL6 How to: Sync Server on RHEL]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Sync_Server_Install_On_Ubuntu_10_04 How to: Sync Server on Ubuntu 10]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Sync_Server_Install_On_Ubuntu_11_04 How to: Sync Server on Ubuntu 11.04]&lt;br /&gt;
* [https://wiki.mozilla.org/QA/Sync/Sync_Server_Install_On_Ubuntu_11_10 How to: Sync Server on Ubuntu 11.10 (this is the most current How To guide)]&lt;/div&gt;</summary>
		<author><name>Ddurst</name></author>
	</entry>
</feed>