FireFox 3 (FF3) で自作の拡張機能(アドオン)がインストール&更新できなくなった、そんなとき

今日公開されたFireFox3をインストールしたところ、これまで使えていた自作の拡張機能(アドオン)が使えなくなった、そんなとき。

FireFox3になって拡張機能(アドオン)の安全性をチェックする仕組みが厳しくなったためです。
基本的な 対処方法はこちらのページに詳しく書かれています。

こちらで紹介されている方法で、当然できると思うのですが、必須であるMcCoyというプログラムが、コマンドラインに対応していないのがどうにも気に入りません。

拡張機能(アドオン)のバージョンアップのたびにGUIを立ち上げなければいけないこと、バージョンアップ作業をするマシンと拡張機能(アドオン)を配布しているサーバとでファイルをやりとりしなければいけないこと、この2つの操作が煩雑になってしまうと、今後更新が面倒になるのが目に見えるようです。

いろいろと調べて試行錯誤を行って、リモートからコマンドラインで簡単に拡張機能(アドオン)を配布できるようにしました。

結論からいうと、次のような作業を行いました。

まず、FireFox3にインストール可能な拡張機能(アドオン)の作成方法です。

  1. McCoyをダウンロードする(普段使っているWindowsマシン)
  2. McCoyを使って鍵を作成する(Windowsマシンで行った)
    パスワードは設定しないこと(これは別のプログラムから使えるようにするためです)。
  3. 拡張機能(アドオン)のinstall.rdfに公開鍵を登録する
    <em:updateKey>公開鍵</em:updateKey>

このinstall.rdfを含むxpiファイルを作成すれば、FireFox3にインストールできるようになります。

次に、 FireFox3で更新可能な拡張機能(アドオン)の作成方法です。

  1. McCoyを使って作成した鍵データ(key3.db)を、拡張機能を配布するマシンにコピーする(Debian Etch)
    例えば、key3.dbはC:\Documents and Settings\ユーザ名\Application Data\Mozilla\McCoy\Profiles\謎の文字列.default\ にあります
    key3.dbを、例えば、~/.mozilla/mccoy/謎の文字列.default/ にコピーします
  2. spockをダウンロードする。spockを展開する
    wget http://repo.hyperstruct.net/spock/spock.tar.gz
    tar zxvf spock.tar.gz
  3. spockに必要なパッケージを入れる。
    debian etchの場合
    aptitude install libxml libxml-ruby libxslt libxslt-ruby
    aptitude install libnss3-0d libnss3-dev libnspr4-0d libnspr4-dev
  4. spockにパッチをあてる
    パッチをあてていないと、xpiファイルのハッシュを計算できません(*)。
    適用例
    wget http://repo.hyperstruct.net/spock/spock.tar.gz
    tar zxvf spock.tar.gz
    cd spock
    wget http://unicus.jp/pub/spock.debian-etch.patch
    patch < spock.debian-etch.patch
  5. あとは実際にやってみましょう!
    利用例
    ./spock [署名なしのupdate.rdf]\
    -i urn:mozilla:extension:[拡張機能の名前]\
    -d ~/.mozilla/mccoy/[謎の文字列].default/\
    -f [xpiファイル] > [署名済みのupdate.rdf]

ぼくのところではこうして作った更新用のRDFファイルでFireFox3から更新できました。

ちなみに、 xpiファイルのハッシュを計算するところでこんなエラーが出ます。

そのまま実行すると、
./spock:62: uninitialized constant Digest::SHA256 (NameError)

require ‘digest’ を require ‘digest/sha2′ に書き換えてから実行すると、
./spock:62: undefined method `file’ for Digest::SHA256:Class (NoMethodError)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>