How to setup a mozilla extension update server

I've shared in the previous post a command line version of Mccoy. Here is a new tutorial on how to use it!


$ cd /one/of/your/htdocs/dir
$ wget
$ tar zxvf mccoy.tar.gz
$ wget
$ tar zxvf mccoy-test.tar.gz
$ cd mccoy-test/
$ ls
update.xml  workdir  xpis

Setup your XPI with valid update information

Create a new key in Mccoy
mccoy-test $ cd workdir/
workdir $ ls
chrome  chrome.manifest  install.rdf
workdir $ ../../mccoy -createKey myextensionkey
Creating key with name : myextensionkey
Public key : MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbV+ZGXs658dOm/+4YtT+VzT5JWzMFYiQ8155fnMkOJCina2yDEBq8Lvi5qF5SyoMDkqaYeO51LR+B4p1g7oWmBW9HbOz3eA9lD/AHUR1SHiJAX7RQq8v9sPSkYta+LyVrCMFgpTmhOWPUXOnwalmL7syGkXyjxHqHCYz+s3d22QIDAQAB
The key has been successfully created!
Remember the name of your key (if you forgot the name, you can later execute mccoy -listKeys)
Inject the public key in your extension
workdir $ ./mccoy -installKey install.rdf -key myextensionkey
Public key inserted!
This will set the updateKey attribute with the public key. (you can later retrieve the public key with mccoy -publicKey myextension)
Set the updateURL attribute of the install.rdf with the URL of the update.xml file located in mccoy-test/update.xml
workdir $ vi update.rdf
Build the first xpi
$ zip -r ../xpis/mccoy-test-0.1.xpi .

»» now install this XPI! This sample extension will just display an alert with message "Mccoy 0.1!"

Create a new version of your extension

Alter the sample extension alert message with something new
workdir $ vi chrome/content/firefoxOverlay.xul
Update the version number with 0.2
workdir $ vi install.rdf
Build the new xpi
workdir $ zip -r ../xpis/mccoy-test-0.2.xpi .
Update the update xml file
workdir $ cd ..
mccoy-test $ vi update.xml
### change version with 0.2
### change updatelink with mccoy-test-0.2.xpi
### change updatehash with result of sha1sum xpis/mccoy-test-0.2.xpi
Sign the update file with mccoy
mccoy-test $ ../mccoy/mccoy -signRDF update.xml -key myextensionkey
Sign < update.xml > with key < myextensionkey >
Sign addon :
File signed!
This will set the signature attribute with computed with your private key.

»» You can now force the update in your firefox, relaunch it and voilà!

Some tips for debugging

Enable this two about:config entries in order to get some message in JS console about update process :
extensions.logging.enabled = true
javascript.options.showInConsole = true