zt日記

書いているのは Kazuhiro NISHIYAMA a.k.a. ZnZです。
2001|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|
2012|04|05|06|09|

この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。

xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法インストールメモXREA + tDiary + Namazuをどうぞ。


2009年07月02日(Thu)

jaunty から hardy

いろいろカスタマイズしまくっていた状態の Ubuntu から、ある程度クリーンな状態に戻したいと思って、 jaunty (9.04) から hardy (8.04LTS) に戻してみた。

デスクトップ版のインストーラだと余計なことをされそうなので、 netboot でのインストーラを使ってみた。

[ubuntu] 電源の管理

hardy でログインが遅かったので、セッションの自動起動からいろいろ外して見たところ、ログアウトのダイアログが出てくるのが非常に遅くなって、ハイバネートのボタンがなくなっていたので、「電源の管理」を戻してみたらまたすぐに出てくるようになった。


2009年07月03日(Fri)

HTML とかのタイトル取得

最近 IRC でタイトルを取得するボットを作っていて、いろいろなものが見つかっておもしろい。

  • title に lang 属性がついている
  • title タグの「>」の前に改行を含む空白が入っている
  • title に数値文字参照や文字実体参照が入っている
  • ログイン画面にリダイレクトされてしまって残念な思いをする
  • Accept-Encoding をつけていないのに「Content-Encoding: deFLAte」で返してくる
  • Content-Type の charset と meta タグの charset が違う
  • Shift_JIS や euc-jp と書いてあるのに Iconv で変換しようとすると Iconv::IllegalSequence になる
  • Content-Type が「Content-Type: text/html」と「Content-Type: text/html;charset=euc-jp」の2つついていて open-uri で f.content_type が "application/octet-stream" になってしまう

などなど。


2009年07月07日(Tue)

Rails 2.3.2 の active_record_store のバグ調査

Rails を 2.1.2 から 2.3.2 にあげて active_record_store を使うように変更したら、ログインできなくなっていたので調べた。

ログイン操作前後でデータベースの状態を調べてみると、ログイン成功の情報が古いセッション ID の方に入っていて、新しいセッション ID の方は新規セッションになってしまっていた。

config/initializers/session_store.rb で get_session, set_session, find_session などを再定義してどこで呼ばれてるのか調べたりしていったところ、

  • action_controller/session/abstract_store.rb の call がセッション周りのミドルウェアになっている。
  • ActionController::Session::AbstractStore::SessionHash の中の load! の @by.send(:load_session, @env) の処理で AbstractStore#load_session 経由で active_record/session_store.rb の get_session が呼ばれて古い session id のセッションが env[SESSION_RECORD_KEY] などに読み込まれる。
  • @app.call(env) の中で reset_session が呼ばれて env[ENV_SESSION_OPTIONS_KEY][:id] が nil に変わっている。
  • 「sid = options[:id] || generate_sid」で新しい session id ができる。
  • set_session で find_session(sid) せずに、古い session id に対応する env[SESSION_RECORD_KEY] の data を更新して save する。
  • AbstractStore の call の続きの処理で、新しい session id をクッキーにセットする。

という流れで

  • 古い session id のセッション : ログイン成功 (こちらに設定されると session fixation などに悪用される可能性あり)
  • 新しい session id のセッション : 新規セッションなのでログイン前 (ブラウザはこっち)

ということになっていた。

edge rails を確認してみるとすでに修正されていたので、以下のようなモンキーパッチで対処することにした。 get_session_model メソッドの呼び出しになっているところと get_session_model メソッドの定義が 2.3.2 からの変更部分。

# avoid Rails 2.3.2 sessions problem of active record
require "active_record/session_store"
module ActiveRecord #:nodoc:
  class SessionStore #:nodoc:
    private
      def set_session(env, sid, session_data)
        Base.silence do
          record = get_session_model(env, sid)
          record.data = session_data
          return false unless record.save

          session_data = record.data
          if session_data && session_data.respond_to?(:each_value)
            session_data.each_value do |obj|
              obj.clear_association_cache if obj.respond_to?(:clear_association_cache)
            end
          end
        end

        return true
      end

      def get_session_model(env, sid)
        if env[ENV_SESSION_OPTIONS_KEY][:id].nil?
          env[SESSION_RECORD_KEY] = find_session(sid)
        else
          env[SESSION_RECORD_KEY] ||= find_session(sid)
        end
      end
  end
end

関連: https://rails.lighthouseapp.com/projects/8994/tickets/2368-rails-232-sessions-problem


2009年07月08日(Wed)

ruby-block.el で対応が変になることがある

ruby-block.el 0.0.7 で以下のように defined? があると下の end の対応する位置が def ではなく if の行になってしまって不便に思っていたので調べてみた。

def hoge
  if defined?(hoge)
  end
end

defined? をみているところはなさそうだったので、 font-lock-keyword-face をみているところをどうにかすればいいかと思って探してみると、 elsif を特別扱いしているのを見つけたので、そこを ruby-block-keyword-list を使うようにしてみたところ、上記の場合にちゃんと def の行になることが確認できた。

--- ruby-block.el~	2009-07-08 21:04:33.000000000 +0900
+++ ruby-block.el	2009-07-08 21:04:16.000000000 +0900
@@ -205,7 +205,7 @@
                   string (current-word))
           (setq point -1 face "" string "" check nil))
         (when (and (eq face 'font-lock-keyword-face)
-                   (not (string= string "elsif"))
+                   (member string ruby-block-keyword-list)
                    ;; case: STMT if(or unless, while, untill) EXPR
                    (if (member string '("if" "unless" "while" "until"))
                        (let ((col (- point (ruby-block-get-line-start-pos))))

2009年07月17日(Fri)

[rubykaigi2009] 一日目

朝の新幹線で東京へ移動して、会場までの道のり動画 しか確認していなかったので、神保町駅から会場に向かった。

12:30よりちょっと早めについたけど入れた。 今回はスピーカーということで受付で名前を言っただけだったので、なりすましが簡単にできてしまいそうに思えた。

一橋記念講堂の方で、toRuby は途中で自由に抜けても OK というアナウンスがあったので、オープニングまでの間、企画部屋の toRuby をちょっと見学に行っていた。

Opening の後、英語だから toRuby の方に戻ればいいかと思っていたら、git のことについてはある程度知っていたからか、思っていたよりも意外と聞き取れてしまったので、そのまま最後まで聞いてしまった。

休憩の後は、特別会議室(1F) で gotoken さんの話と、前日IRC で Random が追加されたことの影響を受けたということを言っていた mrkn さんの話を聞いた。 席が足りていなかったので、gotoken さんの話の途中でスタッフが椅子を持ってきて席を増やしてくれていた。 後ろの方にいたので、声がマイクにあまり入っていなかった mrkn さんの話は聞こえにくかった。 BDD,ZDD の話も最初の方を聞いていたけど、休憩とメールチェックなどがしたかったので、途中で抜けた。

次は Rack の話も非常に気にはなっていたけど、笹田さんの話を優先して、また特別会議室(1F) にいった。

LT も見て、懇親会に。 いつものように疲れて体調が悪くなっていたので、既に知っている人と挨拶とかがメインだった。 日本Rubyのキーサインパーティー2009にも参加したけど、後の署名などをどうすればいいのかがいまいちよくわかっていない。 全員に色紙を持たされてサインを集めるというのもあって、基本的には求められたらこっちも書いてもらうという作戦にしてみたけど、あんまり集まりそうになかったので、一部の人にはこちらからサインして貰いにいってみた。

夜は早めに寝た。

企画部屋についてはるりまは二日目だと勘違いしてしまっていて、参加できなかった。すいません。


2009年07月18日(Sat)

[rubykaigi2009] 二日目

他の人と一緒の宿だったおかげで寝坊することなく、ちゃんと朝からいけた。

朝は一橋記念講堂(2F)にいた。 るりまはもっと手伝ってくれる人が増えるといいなあ。 るびまはそろそろなかださんに optparse の記事を書いてほしいと思っていたのを思い出したので、後で直接なかださんに言ってみた。

コミュニティアピールはコントっぽいのがおもしろかった。 途中まつもとさんが遅刻などの情報を twitter 経由というか friendfeed 経由で知った。

まつもとさんの話をきいて、stgit が(また)気になったけど、git のブランチを使うのと比べてどういう利点があるのか知りたいと思った。 一日目の github の人が dis っていた Mercurial の MQ 拡張のように覚えることが増えるだけであまり変わらないのなら必要ないかもしれない。

LT。 BigDecimal は非互換らしいと聞いて、使おうと思ったこともなかったので、 Decimal には期待したいと思った。そもそも必要なことがなさそうなので、どっちにしても使わない気もするけど。 途中、そろそろ本を買おうと思って、LT の途中で行ってみたが、ジュンク堂の中の人がやる気がなさそうだったので、また人が多いときに出直すことにした。 初心者向けのグラフィックライブラリはいくつか作る人がいるけど、GUIライブラリと同じで大流行するものがなかなか出てこない気がする。 Debian の CDN は jp だけかと思っていたけど、なんかそうじゃなさそうな感じの話だった。 ActiveLdap は最近使いはじめようとしていて、バックエンドが Ruby/LDAP とか Net::LDAP とか複数あって、どれがおすすめなのか教えて欲しいと思った。

休憩の後は特別会議室(1F)。 どれもおもしろかった。 concov は chkbuild で動かすだけでいいのなら、データ提供に協力したいと思ったけど、この後 Beer bust や翌日も含めて mame さんに会うことができなかった。

Beer bust は懇親会のときよりも知り合い同士が固まっていて、他の人の話の輪に入り辛く感じたので、なんかあまり人と話ができずに終わった。 RejectKaigi はなんだかよくわからないけど、RejectKaigi っぽい感じで良かった。

本日のツッコミ(全1件) [ツッコミを入れる]

kou [できるならRuby/LDAP、(拡張ライブラリだからインストールが大変とかで)面倒ならNet::LDAPがおすすめで..]


2009年07月19日(Sun)

[rubykaigi2009] 三日目

夜にプレゼンの仕上げをしていて眠かったので、朝はできるだけ寝ていた。

朝はスピーカーなので当然、中会議場(2F)にいた。

昨日の mput さんのをみて akr さんや arton さんの発表をききながら、rabbirc を使おうとがんばってみたが、「rabbit RubyKaigi2009.rd.txt.utf8 --druby-uri=druby://localhost:10101 --public-level」で起動して、別途 irb から「@rabbit.append_comment("test")」のように送ってみてもうまくいかなかったのであきらめた。

画面は「xrandr --output VGA --auto」としたら LVDS の 1400x1050 のうち、左上の方だけプロジェクターに出てしまって、rabbit を最大化すると 1400x1050 の方に最大化されてしまってプロジェクターの方では右や下が切れしまうので、諦めて window のまま大きくした。

亀が速いのは全然気づいていなかった。この日記を書いていて思い出したので、原因を調べて報告しておいた。

自分ではまったネタは最初の2つぐらいしかなくて、直前までかなり困っていたけど、発表に応募したのが採用されてから、RubyKaigiまでの間に何か使えそうなネタはないかとブログなどから探していたのが後半使えて、質問などもいくつか出てくるようなものになって非常にほっとした。

早めに終わって、大量に余った時間で akr さんの話を聞けたのは良かった。

午後の最初は特別会議室(1F)で tDiary の話などをきいた。 その後は一橋記念講堂(2F)の話をずっときいていた。

[rubykaigi2009] プレゼン資料

http://www.n-z.jp/presen/RubyKaigi2009/ においた。 PDF の方は下の方が切れているので後で更新するかも。

本日のツッコミ(全1件) [ツッコミを入れる]

kou [Clutterバックエンドを使わないと想像した通りに動かないと思います。 (DrawingAreaバックエンドは想..]


2009年07月22日(Wed)

[ruby] ActiveLdap

できるならRuby/LDAP、(拡張ライブラリだからインストールが大変とかで)面倒ならNet::LDAPがおすすめ ということらしいので、以前 gem で入れたはずなのに使えなくてあきらめた Ruby/LDAP についてもうちょっと調べてみた。

activeldap-1.1.0/lib/active_ldap/connection.rb の中で

     def guess_available_adapter
       if Object.respond_to?(:java)
         "jndi"
       else
         ldap_ldif_path = $LOAD_PATH.find do |path|
           File.exist?(File.join(path, "ldap", "ldif.rb"))
         end
         if ldap_ldif_path
           "ldap"
         else
           "net-ldap"
         end
       end
     end

ということをしていて、有効にしていない gem の lib は $LOAD_PATH に入っていないからだとわかったので、ActiveLdap で接続される部分 (User.find とか) より前で「gem "ruby-ldap"」としてみると Ruby/LDAP が使われるようになった。

[ruby] ActiveSambaLdap

上の「gem "ruby-ldap"」という方法は ActiveSambaLdap の asl-なんとかというコマンドには使えないので困った。

activesambaldap-0.0.7/rails_generators/scaffold_active_samba_ldap/templates/ の中にあるファイルが html.erb ではなく rhtml になっているのも気になった。

[ruby] ActiveSambaLdap

もう一点、ActiveSambaLdap の挙動を調べていて、下のような例外にはまった。

% ruby -rubygems -e 'require "active_samba_ldap";p ActiveSambaLdap::Base.method(:setup_connection)'
/home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/connection.rb:118:in `retrieve_connection': ActiveLdap::ConnectionNotSetup (ActiveLdap::ConnectionNotSetup)
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/connection.rb:71:in `connection'
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/connection.rb:165:in `schema'
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/object_class.rb:10:in `classes'
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/object_class.rb:9:in `collect'
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/object_class.rb:9:in `classes'
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/base.rb:479:in `inspect'
        from -e:1:in `p'
        from -e:1
% ruby -rubygems -e 'require "active_samba_ldap";p ActiveSambaLdap::Base'
/home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/connection.rb:118:in `retrieve_connection': ActiveLdap::ConnectionNotSetup (ActiveLdap::ConnectionNotSetup)
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/connection.rb:71:in `connection'
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/connection.rb:165:in `schema'
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/object_class.rb:10:in `classes'
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/object_class.rb:9:in `collect'
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/object_class.rb:9:in `classes'
        from /home/kazu/.gem/ruby/1.8/gems/activeldap-1.1.0/lib/active_ldap/base.rb:479:in `inspect'
        from -e:1:in `p'
        from -e:1
%

クラスが inspect 出来ないから Method オブジェクトも inspect 出来なくなってしまうと言う罠。


2009年07月24日(Fri)

[debian] lxpanel を隠す

狭い画面をできるだけ有効に使いたいのに、 LXDE の lxpanel は自動で隠す設定にできないので、 devilspie で最背面にするようにしてみた。

LXDE だと自動設定の設定がどこにあるのかわからなかったので、 http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html の desktop ファイルを直接作成してログイン時に自動起動するようにした。

% cat ~/.devilspie/lxpanel.ds
(if (is (window_class) "lxpanel")
  (below))
% cat ~/.config/autostart/devilspie.desktop
[Desktop Entry]
Type=Application
Encoding=UTF-8
Version=1.0
Name=devilspie
Exec=/usr/bin/devilspie
%

2009年07月26日(Sun)

キーサインパーティの後処理

遅くなってしまったけど、サインしてキーサーバに送って、キーサーバに送ったという情報をメールで送った。

今回実行したキーサインの手順は以下の通り。

  1. まず gpg --import で最初に yugui さんから送られてきていたキーリングを取り込んだ。
  2. gpg --refresh-keys でキーサーバにすでにサインなどがあれば取り込んだ。
  3. gpg --check-sigs CB28285B などですでにあるサインの確認。(CB28285B は最近作成して今回のキーサインパーティで使用した私の鍵の ID)
  4. gpg --edit-key CB28285B などで鍵の編集に入る。メールアドレスなどではなく鍵 ID で指定しているのは古い鍵と新しい鍵がある場合にどっちが選ばれるかはっきりさせるため。
    1. trust コマンドで信用度を設定。運転免許証で確認したので 4 にしておいた。
    2. fpr コマンドで fingerprint の確認。
    3. list コマンドや gpg --edit-key 直後に出てきたユーザー ID がキーサインパーティの時の ID (名前 (コメント) <メールアドレス>) と同じかどうか確認。
      1. すべてのユーザー ID がキーサインパーティの時に書いていたものならそのまま次の sign コマンドへ。
      2. キーサインパーティの時に書いていなかったものがある場合は list コマンドで出てくる数字で書いていたものだけ選択していく。
    4. sign コマンドで鍵に署名。
    5. save コマンドで保存して終了。
  5. gpg --keyserver hkp://keys.gnupg.net --send-key CB28285B でキーサーバに送信。
  6. キーサーバに送ったことをメールで連絡。

2009年07月27日(Mon)

udev

昔の udev の rules は条件も設定も「=」で書いていてわかりにくかったが、最近の udev (たぶん udev 098 以降) では条件が「==」と「!=」で、設定が「=」と「+=」と「:=」のようにはっきりわかれているように見える。(詳細は udev(7) などを参照)

BUS="usb" などとかいてあるのが古い書き方のようで、USBRH driver for Linuxの 0.0.7 に入っている util/10usbrh.rules が古い書き方になっていて、インストールされてしまうとちゃんと使われなくて困る。


2009年07月28日(Tue)

肉の日リリース

IRC で事前にささださんに OK をもらっていたので、いいタイミングと言うことで肉の日リリースでnadoka-0.7.1 をリリースしてみた。

RubyForge の自分が管理者になっているプロジェクトで「ファイル」、「Admin」あたりからファイルをリリースした。 今は画面が変わってしまったけど最初はいきなり「quick-release a file」というリンクの先と同じ画面だった気がする。

「quick-release a file」相当画面で以下のような感じで埋めていった。

  • Package ID: nadoka (を選択)
  • Release Name: 0.7.1 (今回のバージョン)
  • Release Date: 2009-07-29 00:00 (きりがいいように 00:00 に変更した)
  • File Name: 事前に作っておいたアーカイブを選択
  • File Type: .tar.gz はないので .gz を選択した。そのまま使うものなので Source .gz でもなさそうだし。
  • Processor Type: どれでも OK だから Universal を最初選んでいたけど、この記事を書くのに選択肢を確認していたら Any の方が良さそうだったので、Any に変更した。 Universal はたぶん Mac OS X の Universal Binary ではないかと。
  • Release Notes: 英語っぽいなにかで適当に箇条書き。
  • Change Log: 「svn cp svn+ssh://rubyforge.org/var/svn/nadoka/{trunk,tags/0.7.1}」してその中の ChangeLog の URL を書いただけ。
  • Preserve my pre-formatted text: チェックを入れないと Release Notes に書いた箇条書きが全部一行になって悲しいことになったのでチェックを入れた。

そのほか、以下の手順でリリース前にあらかじめ preview リリースとしてアーカイブを作って IRC でアナウンス。誰も試していなかったかもしれない。

  • svn export svn+ssh://rubyforge.org/var/svn/nadoka/trunk nadoka-0.7.1
  • tar --owner=root --group=root -zcvf nadoka-0.7.1.tar.gz nadoka-0.7.1
  • scp -p nadoka-0.7.1.tar.gz rubyforge.org:/var/www/gforge-projects/nadoka/nadoka-0.7.1-rc1.tar.gz
  • nadoka.rubyforge.org/nadoka-0.7.1-rc1.tar.gz を IRC にアナウンス

ファイルリリース後。

  • Change Log のところでやってしまったけどタグうち。
  • ruby-list にリリースアナウンスメール。IRC で事前に文面をチェックしてもらった。
  • ndk/version.rb のバージョン番号を更新。

2009年07月29日(Wed)

正規表現ネタ

IRC での話題からいくつか。

[ruby-dev:38831] Re: [Bug #1787] URI ライブラリの正規表現パターン の「一般に、\d が [0-9] ではなくなった事態にどう対処するのが正しいでしょうか。」という話。

ML では話が続いていなかったので、IRC で話題を振ってみたら「\dのままにすべきか[0-9]に置き換えるべきか、個別具体的に検討」と言われたので、1とかにマッチしたくなければ\wの代わりに[A-Za-z0-9_]を使っていたのと同じように\dの代わりに[0-9]を使うことにする予定。

http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt の NEL とは何かという話。 http://hisashim.livejournal.com/134298.html 参照。

さらにこの記事から文字クラスの差集合の話。鬼車なら RE.ja.txt に

例. [a-w&&[^c-g]z] ==> ([a-w] and ([^c-g] or z)) ==> [abh-w]

と書いているように「A-Z&&[^P-R]]」で出来る。

文字クラスの中で文字を重ねる話から Ruby 1.9 - Feature #1831: Suggestion: warn on repeated character in character class - Ruby Issue Tracking System の話に。 「/[:lower:]/」のような間違いは気づきにくいので警告が出るとうれしい。 ちなみに「[:lower:]」は

/[[:lower:]]/

のように文字クラスの中で使う。


2009年07月30日(Thu)

http://d.hatena.ne.jp/ku-ma-me/20090729 を見て concov を VMware の中の Debian sid で試してみた。

% cd /home
% sudo mkdir concov
% sudo chown $(id -u):$(id -g) concov
% cd concov
% git cvsimport -v -d :pserver:anonymous@cvs.m17n.org:/cvs/ruby -C chkbuild chkbuild
(しばらく時間がかかる)
% wget -N http://dame.dyndns.org/misc/misc/chkbuild-coverage-date.patch
(略)
% cd chkbuild
% git checkout -b concov
Switched to a new branch 'concov'
% patch -p0 -i ../chkbuild-coverage-date.patch
patching file rbcoverage.rb
patching file chkbuild/build.rb
patching file chkbuild/main.rb
patching file chkbuild/ruby.rb
patching file chkbuild/svn.rb
patching file sample/build-ruby-coverage
% git commit -a -m 'apply http://dame.dyndns.org/misc/misc/chkbuild-coverage-date.patch'
[concov 297f680] apply http://dame.dyndns.org/misc/misc/chkbuild-coverage-date.patch 4 files changed, 12 insertions(+), 3 deletions(-)
% sudo adduser --disabled-login --no-create-home --shell /bin/false chkbuild
Adding user `chkbuild' ...
Adding new group `chkbuild' (1001) ...
Adding new user `chkbuild' (1001) with group `chkbuild' ...
Not creating home directory `/home/chkbuild'.
Changing the user information for chkbuild
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]
% sudo adduser $(id -un) chkbuild
(略)
% cd /home
% sudo mkdir chkbuild
% sudo chown $(id -un):chkbuild chkbuild
% sudo chmod 2750 chkbuild
% cd chkbuild
% mkdir build public_html
% chgrp chkbuild build public_html
% chmod 2775 build public_html

drwxrwsr-x ではなく drwxrwxr-x になってしまったので、一旦抜けて入り直して補助グループに chkbuild グループ権限がある状態になってから再実行。 chmod の前の chgrp が出来ないと思っていたから、ちょっと意外だった。

% chmod 2775 build public_html
% cd /home/concov/chkbuild
% ln -s /home/chkbuild tmp

concov で使うものをインストール。

% gem-1.9.1 install --no-rdoc --no-ri ramaze sequel amalgalite thin
============================================================

Thank you for installing Ramaze!
You can now do create a new project:
# ramaze create yourproject

============================================================
Successfully installed rack-1.0.0
Successfully installed innate-2009.07
Successfully installed ramaze-2009.07
Successfully installed sequel-3.2.0
Building native extensions.  This could take a while...
Successfully installed arrayfields-4.7.4
Successfully installed amalgalite-0.10.0
Building native extensions.  This could take a while...
Building native extensions.  This could take a while...
Successfully installed eventmachine-0.12.8
Successfully installed daemons-1.0.10
Successfully installed thin-1.2.2
9 gems installed

%

concov のインストール。

% cd /home/concov
% git clone 'git://github.com/mame/concov.git'
Initialized empty Git repository in /home/concov/concov/.git/
remote: Counting objects: 121, done.
remote: Compressing objects: 100% (89/89), done.
remote: Total 121 (delta 31), reused 109 (delta 26)
Receiving objects: 100% (121/121), 148.41 KiB | 154 KiB/s, done.
Resolving deltas: 100% (31/31), done.
% cd concov
% git checkout -b local
Switched to a new branch 'local'
% vi bin/concov
% vi concov.conf
% mkdir /home/chkbuild/concov-data
% chmod 2775 /home/chkbuild/concov-data
% sudo -u chkbuild bin/concov init
% ramaze start

http://localhost:7000/ で「concov error: no data found; please register first」を確認。(都合により本当は localhost じゃなかったけど) thin は必要なかった。

% git commit -a -m "setup shebang"
[local 0e36d8f] setup shebang
 1 files changed, 1 insertions(+), 1 deletions(-)
% vi update.rb
% chmod +x update.rb
% git add update.rb
% git commit -m "add update.rb" update.rb
[local 5608b10] add update.rb
 1 files changed, 30 insertions(+), 0 deletions(-)
 create mode 100755 update.rb
% time sudo -u chkbuild /home/concov/concov/update.rb
/home/concov/chkbuild/start-build:5:in `require': no such file to load -- chkbuild (LoadError)
        from /home/concov/chkbuild/start-build:5
%

カレントディレクトリが /home/concov/chkbuild ではなかったのが原因だった。 git add し忘れに気づいたので、ついでに git commit --amend した。 「load "sample/build-ruby-coverage"」にしないといけないという話も聞いたので変更。

% cd /home/concov/chkbuild
% git add rbcoverage.rb sample/build-ruby-coverage
% git commit --amend
apply chkbuild-coverage-date.patch

http://dame.dyndns.org/misc/misc/chkbuild-coverage-date.patch
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch concov
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
#       modified:   chkbuild/build.rb
#       modified:   chkbuild/main.rb
#       modified:   chkbuild/ruby.rb
#       modified:   chkbuild/svn.rb
#       new file:   rbcoverage.rb
#       new file:   sample/build-ruby-coverage
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       tmp
"COMMIT_EDITMSG" [変換済] 20L, 620C 書込み
[concov 7401884] apply chkbuild-coverage-date.patch
 6 files changed, 83 insertions(+), 3 deletions(-)
 create mode 100644 rbcoverage.rb
 create mode 100644 sample/build-ruby-coverage
% git commit -av
use build-ruby-coverage
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch concov
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   start-build
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       tmp
diff --git a/start-build b/start-build
index 7cb2d10..e716822 100755
--- a/start-build
+++ b/start-build
@@ -2,11 +2,13 @@

 #ENV['PATH'] = "/usr/local/bin:#{ENV['PATH']}"

+Dir.chdir(File.dirname(__FILE__))
+
 require 'chkbuild'

 #ChkBuild.rsync_ssh_upload_target("akr@boron.rubyist.net::upload")

-load "sample/build-ruby"
+load "sample/build-ruby-coverage"

 #load "sample/build-gcc-ruby"

"COMMIT_EDITMSG" [変換済] 32L, 777C 書込み
[concov 64a2eaf] use build-ruby-coverage
 1 files changed, 3 insertions(+), 1 deletions(-)
%

再実行。

% time sudo -u chkbuild /home/concov/concov/update.rb
(略)      1293.62s user 191.08s system 50% cpu 49:11.04 total
%

build log (chkbuild) のリンクをたどったときに invalid view format と出ていたので IRC で対処方法を教えてもらって

% ln -s /home/chkbuild/public_html/ruby-trunk-coverage public/chkbuild

とした。


copyright © 2001-2013 ZnZ
Key fingerprint = 6E14 2C9C DBD7 874D 8B3C CAA8 9B58 5538 ED7E 1B73