アドオンのナイトリービルドのようなものを置くようにした宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。2012リリースにまつわる諸々の作業が面倒くさくて、about:newtabには機能ができてすぐ対応したのに、リリースしてなかったせいで今頃「about:newtabを空のタブとして認識してくれないんだが」系の「不具合報告」が届くようになってきていて、他にも障害報告に対して「それmasterのHEADではもう直ってます」な場合が時々あって、あと時々「ナイトリービルドを提供してくれ」っていう声も見かけてはいたので、ちょっと頑張って/xul/xpi/nightly/でそれっぽい物を提供するようにしてみた。毎日定期的にリポジトリの変更をpullして、変更があったらXPIを作りなおしてアップロードする、ということを自動的にやってみてます。中身はmasterブランチのHEADをそのままパッケージングしただけの物で、typoで動かなくなってるような場合でもそのままアップロードしてしまうから、常用はお勧めしないでおきます。(とはいえ、この状態は僕自身の環境に極めて近いので、僕が常用しているアドオンについては、僕が不具合に遭遇し次第すぐに直すとは思いますが......)自動アップデートについては、リリース版とは別にこのナイトリービルド専用のupdate.rdfを提供するようにしてます。やってるかというと、自宅にあるUbuntuマシン(NASも兼ねていて24時間動きっぱなしの自宅サーバ)上でcronjobを動かしているだけ。1点だけ工夫が必要だったのは、update.rdfに署名するという部分。update.rdfのデジタル署名にはMcCoyを使うんだけど、これだとcronjobとして自動実行させるのには都合が悪いので、MDNのページで紹介されてたMX-Toolsというのを使うようにした。アドオンのリポジトリはgitで管理している。gitリポジトリには、パスワード無しの秘密鍵でSSH接続できる。手元にリポジトリをパスワード無しでcloneしている(GitHubなら、httpsのURLを使ってcloneした場合がこれにあたる)。すべてのリポジトリを、1つのディレクトリ(ベースディレクトリ)の中に、プロジェクト名と同じ名前のサブディレクトリでcloneしてある。WWWサーバにはパスワード無しの秘密鍵でSSH接続できる。RDFファイルの署名用にOpenSSLの鍵ペアを作成してある。keyfile.pub作成された秘密鍵・公開鍵はどちらもベースディレクトリ直下に置いてある。特定の1つのアドオンについて「masterのHEADをpullして、変更があったらXPIにして、update.rdfを作って、アップロードする」というスクリプトは、試行錯誤の結果、こんな感じになった。指定するため、ディレクトリのフルパスを最初に得ておく。ファイルの置き場所等はオプションで得る事にする。変更が無くても強制的にアップロードする指定。keyfile.pem等を置いているディレクトリのパス。リポジトリをcloneした先のディレクトリ。SSH接続に使う秘密鍵のパス。sedのオプションの違いを吸収しておく。pullした時のメッセージを見て、変更があったかどうかを調べる。ナイトリービルド用として、install.rdfを書き換える。バージョン番号の末尾に今日の日付を付ける。古いupdate.rdfが残っていたら消す。update.rdfの参照先と、公開鍵を書き換える。自動生成されたバージョン番号は、後で使うので控えておく。ビルドした後、リポジトリの内容を元に戻しておく。警告が出ないようにする。ユニークなダウンロード用URLにする。公開先のディレクトリを作っておく。XPIをアップロードする。XPIからupdate.rdfを自動生成し、それもアップロードする。0uhuraを使うには、依存パッケージを入れておく必要がある。cpan(色々セットアップ。基本的には全部YesでOKだと思う。Convert::ASN1アドオン1つだけでテストしてみた。-aこれでうまく動くことを確認できたので、複数リポジトリを全部処理するスクリプトを作って、そちらをcronで走らせるようにした。受け付けるようにしてる。仮想マシンでも何でもいいけど、Linuxな環境があると自動化がはかどるな......と思いました(手前味噌)。2012年11月26日追記:スクリプトにミスがあってinstall.rdfに埋め込む公開鍵が置き換わっていなかったので修正した。atの末尾に2018年6月21日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。「noda」なら、「2012-11-24_nightly.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。