<!ーー 2015/03/23追記 ーー>
Firefoxアドオンの署名に関してAMOを介して署名するという方法を取るという変更がアナウンスされているので、近日中にこの記事で紹介している方法で署名したものをインストール出来なくなることが予見されます。詳しくは より安全なアドオン体験を提供するため、拡張機能に署名を導入します | Mozilla Developer Street (modest) などMozillaや開発コミュニティから発信されている方法で確認をするようにして下さい
<!ーー 追記ここまで ――>
Firefox拡張を作る環境として、 Add-on SDKっていうのがある。
これは過去にJetpack SDKとして開発されていた環境で、数年前に触ったことがあったのだけど、最近見たらコマンドラインツールとかも含めたかなりまともな開発環境になっていて、JSで大体なんでも書けるようだったので、先日作ったChrome拡張を移植して公開することにした。
移植やAdd-on SDK開発関連の話は別の機会に書くことにして、その中でも特に大変だったFirefox拡張の公開についてメモがてら書いておきます。
Firefox拡張の公開方法
まずFirefox拡張の公開方法は大きく分けて3種類あります。
- AMO(https://addons.mozilla.org)で公開する
- 自前のHTTPSサーバで配布する
- 自前のHTTPサーバで配布する
AMOで公開する
AMOはMozilla公式のアドオンホスティングサイトで、ここに登録するとバージョンアップ時に勝手にアップデートとかもしてくれるし、アドオン検索とかでも発見出来るので便利。あと、面倒なサーバの設定とかも必要ない。
ただ、Mozillaによるレビューとかがあるので、ユーザーに提供するまでに時間がかかる。
また、今回の拡張はKULASISでしか動かないので、レビューなどが通ると思わなかったので見送りました。
自前のHTTPSサーバで配布する
後述する方法でXPIインストーラとアップデートマニフェストを生成アップロードすれば、すぐにアドオンの配信と自動アップデートが提供できる。
ただ、正当なSSL証明書が必要。
この方法も正当なSSL証明書がある環境を用意出来なかったので断念。
自前のHTTPサーバで配布する
インストールマニフェストとアップデートマニフェストに電子署名を施したり色々すれば配布&自動アップデートが提供できる。
というわけで今回はこの方法でFirefox拡張を配布することにしたので、以下に手順を記しておきます。
ちなみに電子署名はMcCoyで付与するのですが、やり方はBorn Geek » Automatic Firefox Extension Updatesが詳しかったので、これを見ながらやりました。
以下のコマンド例などはkulasis-happy-backgroundで行う際のコマンドを掲載しておくので、良しなに読み替えたりしてご利用ください。
McCoyをインストールする。
McCoyはここからダウンロードできます。
McCoyはインストールマニフェストやアップデートマニフェストに署名を加えてくれるGUIツールです。
McCoyを初めて起動すると,マスターパスワードの入力を求められます。McCoy起動後,「Create」ボタンをクリックすると,「Create a New Key」ダイアログが表示されます。ここに適用な名前(例えば「test」)を入力すると,新しい公開鍵・秘密鍵のペアが生成されます(図1)。一度生成した公開鍵・秘密鍵のペアは,今後もずっと同じものを使い続ける必要があります。したがって,公開鍵・秘密鍵のペア生成の手順は,一度だけ実施すればかまいません。また,作成した公開鍵・秘密鍵のペアを,他の拡張機能に対して使いまわしても問題ありません。
via 第8回 電子署名済みアップデートマニフェストを用いた拡張機能の配布:Firefox 3ではじめる拡張機能開発|gihyo.jp … 技術評論社
XPIを生成する
cfx xpi
コマンドにオプションで--update-url
と--update-link
を付けると自動でaddon-name.update.rdf
が生成されます。
コマンドはこんな感じで叩く。
cfx xpi --update-url=https://pastalablog.s3.zmx.jp/kulasis_happy_bg/kulasis-happy-background.update.rdf --update-link=https://pastalablog.s3.zmx.jp/kulasis_happy_bg/kulasis-happy-background.xpi
これらのオプションはhttps
をURLに指定しないと、エラーが出るので、とりあえずここはhttps
で書いておくと良いです。
インストールマニフェストにキーを書き込む
XPIインストーラの実体はzipなので、適当に unzip
コマンドを使って解凍する。
unzip kulasis-happy-background.xpi -d ./xpi/
これでxpiディレクトリに展開されて、その中にある xpi/install.rdf
がインストールマニフェストです。
これを編集していきます。
updateURLを修正
さっきコマンドの都合でhttps
でURLを指定したので、それをhttp
に変更する。
before
<em:updateURL> https://pastalablog.s3.zmx.jp/kulasis_happy_bg/kulasis-happy-background.update.rdf </em:updateURL>
after
<em:updateURL> http://pastalablog.s3.zmx.jp/kulasis_happy_bg/kulasis-happy-background.update.rdf </em:updateURL>
updateKeyを書き込む
McCoy上でのinstall
を押すとファイル選択画面が開くので、 install.rdf
を選んで開くとupdateKeyが書き込まれます。
XPIに戻す
これでインストールマニフェストに書き込む作業は完了なので、XPIインストーラに戻します。
zip
コマンドで圧縮すればOKです。
自分はxpi
ディレクトリで以下のコマンドを叩いてます。
zip -r ../kulasis-happy-background.xpi ./*
update.rdfを修正する
updateURLを修正
install.rdf
と同様にさっきコマンドの都合でhttps
でURLを指定したので、それをhttp
に変更する。
before
<em:updateURL> https://pastalablog.s3.zmx.jp/kulasis_happy_bg/kulasis-happy-background.xpi </em:updateURL>
after
<em:updateURL> http://pastalablog.s3.zmx.jp/kulasis_happy_bg/kulasis-happy-background.xpi </em:updateURL>
XPIのハッシュ値を書き込む
sha1とかsha256とかでハッシュ化する。
自分はPHPでこんな感じにしてる。
php -r "echo sha1_file('./kulasis-happy-background.xpi');"
出力がb057f680cd163e2b38e05c9a479a7a1fbc4e15e0
とかって出てくるので、これを*.update.rdf
に書き込む。
<em:updateHash> sha1:b057f680cd163e2b38e05c9a479a7a1fbc4e15e0 </em:updateHash>
電子署名を書き込む
McCoy上でSign
を選んで、*.update.rdf
を選んで開くと、アップデートマニフェストが整形されて、Signatureが書き込まれる。
次にMcCoy上でVerify
を押すと署名完了です。
サーバにアップロード
最初に指定したURLになるようにそれぞれのファイルをサーバ上に配置します。
以降、バージョンアップごとに*.update.rdf
を更新することでFirefoxのアドオン自動アップデートを利用することが出来ます。