_ [debian] pkg-ruby-extras めも

続々々々々々々・mikutter パッケージングから派生した話題で、DebianでのRuby関連パッケージのことはじめの自分なりのめも。 まずたどりついたのは Teams/Ruby - Debian Wiki で、ライブラリのパッケージングをしたいので pkg-ruby-extras team の Teams/Ruby/Packaging - Debian Wiki のほうに移動する。 Joining the pkg-ruby-extras team では、まず Maintainers of the Debian Ruby Extras packages か IRC で声をかけてほしいとあるので ML ログを 2011/1 までさかのぼったけどそれらしいのがなかった。とりあえず pkg-ruby-extras-maintainers と debian-ruby を subscribe。alioth のアカウントは持っているし、pkg-ruby-extras team の join request に詳しく書くことで代用できるかな(ruby-typed-array の ITP やその他 ruby パッケージの作業をしたいと記載)。承認が出るまで Debian/Ruby teams の Wiki を一通り読んでおく。 承認が出たら作業開始。Obtaining the master repository に従って pkg-ruby-extras レポジトリを取得。あれ、少ないな…と思ったらこれで取れるのは設定ファイルだけで、mr というコマンドでごっそり取ってくるようだ。で、実際やってみると、

mr: illegal section "[DEFAULT]" in untrusted /usr/src/deb/pkg-ruby-extras/.mrconfig line 1
(To trust this file, list it in ~/.mrtrust.)

となってしまった。

Add .mrconfig path to ~/.mrtrust

ref. [Known Issues](http://wiki.debian.org/Teams/Ruby/Packaging#Known_Issues)

とあったけど書式がよくわからない。man を見たら、

To configure mr to trust other mrconfig files, list them in ~/.mrtrust. One mrconfig file should be listed per line. Either the full pathname should be listed, or the pathname can start with ~/ to specify a file relative to your home directory.

ref. mr(1)

と書式が書いてあった。

% echo "/usr/src/deb/pkg-ruby-extras/.mrconfig" > ~/.mrtrust

として解決。 Creating a new git repository and pushing an existing package to git.debian.org に従って、これから作業する対象のパッケージを git.debian.org 上で登録する。ローカルマシンに戻り、先程 checkout した pkg-ruby-extras を更新する。作業する対象のパッケージが checkout して出てくるので、その中でパッケージング作業を行う。ただし、

At this point, please do not make any change to the package generated by gem2deb. It is important to track all the changes in git.

ref. [Creating a new git repository and pushing an existing package to git.debian.org](http://wiki.debian.org/Teams/Ruby/Packaging#Creating_a_new_git_repository_and_pushing_an_existing_package_to_git.debian.org)

とあるように、gem2deb で変換した直後のものを最初に push し、

git tag -d debian/0.7-1 # because the package is not ready yet

ref. [Creating a new git repository and pushing an existing package to git.debian.org](http://wiki.debian.org/Teams/Ruby/Packaging#Creating_a_new_git_repository_and_pushing_an_existing_package_to_git.debian.org)

とあるように、git import-dsc –pristine-tar で自動的で振られる tag は削除しておく。この状態で push してから、ようやく変更作業を開始する。変更が終わったら、先程削除した tag を改めて振り直し、push する。 あとの注意点といえば、ITP する際の X-Debbugs-CC に pkg-ruby-extras-maintainers を含めておくくらい?

_ [debian] ruby-typed-array test めも

だいたいは gem2deb がよきにはからってくれるけど、test の部分が特に厄介だと思うので ruby-typed-array でやったときのめも。 typed-array には

% ls -n spec/
合計 16
-rw-r--r-- 1 1000 1000  361 12月 29 16:04 spec_helper.rb
-rw-r--r-- 1 1000 1000 9425 12月 29 16:04 typed-array_spec.rb
%

というディレクトリ/ファイルがあり、どうやらこれは RSpec によるテストケースらしい(RSpec の用語では executable examples と言うらしい)。 ためしに rspec コマンドを叩いてみると、

% /usr/bin/ruby1.8 /usr/bin/rspec
.............................................................................................................................................................

Finished in 0.03744 seconds
156 examples, 0 failures
% /usr/bin/ruby1.9.1 /usr/bin/rspec
.............................................................................................................................................................

Finished in 0.02634 seconds
156 examples, 0 failures
%

のようにパスする。これをパッケージ生成の際に実行するようにしてやればいい。gem2deb は debian/ruby-tests.rb という雛形を準備してくれるので、これに記載する。RSpec の場合は、

require 'rspec/autorun'
require 'typed-array_spec.rb'

のように、rspec/autorun と spec/ ディレクトリ内の *_spec.rb を require すれば、パッケージ生成の際に、

  Entering dh_ruby --install
        :
/usr/bin/ruby1.9.1 -I/usr/lib/ruby/vendor_ruby /usr/lib/ruby/vendor_ruby/gem2deb
/test_runner.rb
.................................................................................
.............................................................................

Finished in 0.02921 seconds
156 examples, 0 failures
/usr/bin/ruby1.8 -I/usr/lib/ruby/vendor_ruby /usr/lib/ruby/vendor_ruby/gem2deb/t
est_runner.rb
.................................................................................
.............................................................................

Finished in 0.03664 seconds
156 examples, 0 failures
  Leaving dh_ruby --install

自動的にテストしてくれる。 RSpec 以外にもテストフレームワークはあるし、dh_ruby(1) によれば debian/ruby-tests.rb ではなく debian/ruby-test-files.yaml や debian/ruby-tests.rake を使う方法など、やりかたはいろいろあるみたい。

_ [debian] ruby-rspec-instafail test めも

→ruby-rspec-instafail を git に登録、test がよくわからない。

ref. [どれ作業してるか判らなくなる](http://d.ma-aya.to/?date=20130103#p02)

とのことなのでちょっと見てみた。

% ls -n spec
合計 12
-rwxr-xr-x 1 1000 1000 1422  1月  4 12:19 instafail_spec.rb
drwxr-xr-x 2 1000 1000 4096  1月  4 12:19 rspec_1
drwxr-xr-x 2 1000 1000 4096  1月  4 12:19 rspec_2
%

これも RSpec 形式のようだけど、ちょっと様子が変。

)% /usr/bin/ruby1.9.1 /usr/bin/rspec 
FFF....

Failures:

  1) RSpec::Instafail RSpec 1.x outputs failures at start of output
        :

のように、なにやら RSpec 1.x を対象としたテストに失敗しているらしい。

% head -5 spec/instafail_spec.rb
describe 'RSpec::Instafail' do
  context "RSpec 1.x" do
    before :all do
      @rspec_result = `cd spec/rspec_1 && bundle exec spec a_test.rb --format RSpec::Instafail`
    end
% cat spec/rspec_1/Gemfile     
source 'http://rubygems.org'
gem 'rspec', '1.3.0'
%

Debian では RSpec は既に 2.x 系なので、context “RSpec 1.x” ブロックは削除するパッチを当てて実行しないでいい気がする。さらに言うと、このパッケージには使われることのないだろう RSpec 1.x 用のファイルも含めなくていい気がする。ただ、RSpec 1.x 用のファイルを含めない場合は修正箇所が結構多くなる。