Project

General

Profile

Feature #5053

ruby コマンドと libruby の食い違いチェック

Added by Makoto Kishimoto about 5 years ago. Updated 9 months ago.

Status:
Rejected
Priority:
Normal
[ruby-dev:44156]

Description

ビルドした ruby を、インストールせずに、ビルドディレクトリで ./ruby のように実行すると、実行する ruby コマンドと、ロードされる libruby でバージョンが食い違うことがありますが、その警告というのは(バイナリライブラリに互換性がないバージョンだったりしなければ)特に出たりしません
たまにはまることがあるので、main.c 中で RUBY_DESCRIPTION マクロと、グローバル変数 ruby_description で一致するかどうかを調べて、違うようならウォーニングを出す、というパッチです
(※基本的なアイディアはえぐちさんによるものです)

patch-revisioncheck.txt View (1.23 KB) Makoto Kishimoto, 07/19/2011 02:20 PM

No5053.pdf - [ruby-dev:45708] コンペ向けの資料 (17.5 KB) Makoto Kishimoto, 06/24/2012 05:10 PM

0001-revision-check.patch View (4.97 KB) Nobuyoshi Nakada, 07/21/2012 08:34 PM

Associated revisions

Revision 50412
Added by Nobuyoshi Nakada over 1 year ago

dln.c: check incompatible libruby

  • dln.c (dln_load): check if a different libruby is loaded by the extension library, and then bail out to get rid of very frequent reported stale bug reports.

History

#1 [ruby-dev:44163] Updated by Anonymous about 5 years ago

ビルドした ruby を、インストールせずに、ビルドディレクトリで ./ruby のように実行すると、実行する ruby コマンドと、ロードされる libruby でバージョンが食い違うことがありますが、その警告というのは(バイナリライブラリに互換性がないバージョンだったりしなければ)特に出たりしません
たまにはまることがあるので、main.c 中で RUBY_DESCRIPTION マクロと、グローバル変数 ruby_description で一致するかどうかを調べて、違うようならウォーニングを出す、というパッチです
(※基本的なアイディアはえぐちさんによるものです)

./configure --program-suffix=hogehoge とかしても librubyは上書きされて消えてしまうので、
以前すごくイライラした記憶があるんですけど、そもそもlibrubyにバージョン番号か、
program suffixをつけるべきな気がしてるんですよね。

衝突を検知するよりも、衝突しない方向に頑張る方が前向きな気がするんですよ。はずしてるかなぁ

#2 [ruby-dev:44163] Updated by Anonymous about 5 years ago

ビルドした ruby を、インストールせずに、ビルドディレクトリで ./ruby のように実行すると、実行する ruby コマンドと、ロードされる libruby でバージョンが食い違うことがありますが、その警告というのは(バイナリライブラリに互換性がないバージョンだったりしなければ)特に出たりしません
たまにはまることがあるので、main.c 中で RUBY_DESCRIPTION マクロと、グローバル変数 ruby_description で一致するかどうかを調べて、違うようならウォーニングを出す、というパッチです
(※基本的なアイディアはえぐちさんによるものです)

./configure --program-suffix=hogehoge とかしても librubyは上書きされて消えてしまうので、
以前すごくイライラした記憶があるんですけど、そもそもlibrubyにバージョン番号か、
program suffixをつけるべきな気がしてるんですよね。

衝突を検知するよりも、衝突しない方向に頑張る方が前向きな気がするんですよ。はずしてるかなぁ

#3 [ruby-dev:44165] Updated by Makoto Kishimoto about 5 years ago

きしもとです

./configure --program-suffix=hogehoge とかしても librubyは上書きされて消えてしまうので、
以前すごくイライラした記憶があるんですけど、そもそもlibrubyにバージョン番号か、
program suffixをつけるべきな気がしてるんですよね。

衝突を検知するよりも、衝突しない方向に頑張る方が前向きな気がするんですよ。はずしてるかなぁ

FreeBSD だと ruby18 と ruby19 という ports になってますが、1.8.?
では "libruby18.so" 、1.9.? では "libruby.so" という名前になるので
たまたま /usr/local/lib に共存できてたりしてます。

r23368 より前では、configure.in で RUBY_SO_NAME='$(RUBY_INSTALL_NAME)'
となっているので、program suffixが影響するわけですね。r23368 の変更は
からの議論の結果によるもののようです。

#4 [ruby-dev:44165] Updated by Makoto Kishimoto about 5 years ago

きしもとです

./configure --program-suffix=hogehoge とかしても librubyは上書きされて消えてしまうので、
以前すごくイライラした記憶があるんですけど、そもそもlibrubyにバージョン番号か、
program suffixをつけるべきな気がしてるんですよね。

衝突を検知するよりも、衝突しない方向に頑張る方が前向きな気がするんですよ。はずしてるかなぁ

FreeBSD だと ruby18 と ruby19 という ports になってますが、1.8.?
では "libruby18.so" 、1.9.? では "libruby.so" という名前になるので
たまたま /usr/local/lib に共存できてたりしてます。

r23368 より前では、configure.in で RUBY_SO_NAME='$(RUBY_INSTALL_NAME)'
となっているので、program suffixが影響するわけですね。r23368 の変更は
からの議論の結果によるもののようです。

#5 [ruby-dev:44166] Updated by Usaku NAKAMURA about 5 years ago

パッチがこれでいいかどうかは確認してませんが、このチェックを入れることには
賛成します。

個人的には警告でなくエラーでいいと思う。

回避の努力自体はもうそれなりに入ってるので、それはそれ、これはこれ、
ということで。

#6 [ruby-dev:44168] Updated by Makoto Kishimoto about 5 years ago

コンパイルした時刻のunix timeを埋め込んで、とかいうのも考えましたが、
そうするとちょっとオーバーキルかな、と思いました

#7 [ruby-dev:44169] Updated by Takahiro Kambe about 5 years ago

In message redmine.journal-19373.20110720134723@ruby-lang.org
on Wed, 20 Jul 2011 13:47:24 +0900,
Makoto Kishimoto redmine@ruby-lang.org wrote:

Issue #5053 has been updated by Makoto Kishimoto.

コンパイルした時刻のunix timeを埋め込んで、とかいうのも考えましたが、
そうするとちょっとオーバーキルかな、と思いました
同じソースコードから作成される限り、コンパイルした日時に関わらず同じ
実行ファイルとなった方が嬉しいと思います。

--
神戸 隆博 (かんべ たかひろ) at 仕事場

#8 [ruby-dev:44169] Updated by Takahiro Kambe about 5 years ago

In message redmine.journal-19373.20110720134723@ruby-lang.org
on Wed, 20 Jul 2011 13:47:24 +0900,
Makoto Kishimoto redmine@ruby-lang.org wrote:

Issue #5053 has been updated by Makoto Kishimoto.

コンパイルした時刻のunix timeを埋め込んで、とかいうのも考えましたが、
そうするとちょっとオーバーキルかな、と思いました
同じソースコードから作成される限り、コンパイルした日時に関わらず同じ
実行ファイルとなった方が嬉しいと思います。

--
神戸 隆博 (かんべ たかひろ) at 仕事場

#9 [ruby-dev:44170] Updated by Makoto Kishimoto about 5 years ago

同じソースでも違うバイナリになることも問題かと思いますが、一種の個体追跡
(CPUの個体IDのような)のようなことに使えるのも問題かなと思いました。

ソースコードのとバイナリの同一性を重視するのであれば、指定したファイルの
ハッシュ値とかになるでしょうかね?

#10 [ruby-dev:45205] Updated by Kenta Murata over 4 years ago

同じソースでもコンパイルオプションを変えれば異なるバイナリが生成される可能性は十分ありますから、ソースの同一性だけでは判定できない気がします。

#11 [ruby-dev:45437] Updated by Yusuke Endoh over 4 years ago

  • Assignee set to Masaya Tarui
  • Status changed from Open to Assigned

#12 [ruby-dev:45797] Updated by Makoto Kishimoto about 4 years ago

コンペ向けの資料を添付

#13 [ruby-dev:45881] Updated by Yusuke Endoh about 4 years ago

資料受け取りました。
(よく読んでませんが) これ、まつもとさんの認可が必要な内容なんですかね。
なかださんか誰かが勝手にやってしまえばいいレベルの話な気も。
まあ一応聞いてみます。

#14 [ruby-dev:45898] Updated by Nobuyoshi Nakada about 4 years ago

正直なところ何が嬉しいのかさっぱりだったので放っておいたのですが…。

バージョンが一致しないlibrubyがロードされると嬉しくないのは同感なのですが、このチェックによって ./ruby が実行できなくなるとそのストレスは解消するものなんでしょうか。

#15 [ruby-dev:45990] Updated by Nobuyoshi Nakada about 4 years ago

  • Status changed from Assigned to Feedback
  • File 0001-revision-check.patch added

ちょっと前(r36277)に、Makefileにrunnableというターゲットを追加しました。
今のところLinuxとMac OS Xしか対応していませんが、--enable-load-relativeを指定しておくと./bin/rubyでビルドしたバイナリが実行できるはずです。
こういったものではまずいでしょうか。

一応、RUBY_REVISIONとconfig.hのチェックサムで一致しない場合にエラーになるようにするパッチも作ったは作ったので、置いておきます。

ちなみに、私は https://github.com/nobu/build-files/blob/master/ruby.rb のようなラッパーで実行しています。

#16 Updated by Nobuyoshi Nakada about 4 years ago

  • File deleted (0001-revision-check.patch)

#17 [ruby-dev:45991] Updated by Nobuyoshi Nakada about 4 years ago

テスト用にconfigureオプションを消していたのを忘れてました。

#18 [ruby-dev:45998] Updated by Yusuke Endoh about 4 years ago

  • Assignee changed from Masaya Tarui to Nobuyoshi Nakada

きしもとさん

これはなかださんに一任となりました。
まつもとさんの意見は以下の 2 点です。

  • fail early の観点で、よい実装方法があるなら取り込みたい

  • ただし RUBY_DESCRIPTION を使うのはよい実装方法と思わない

--
Yusuke Endoh mame@tsg.ne.jp

#19 [ruby-dev:46570] Updated by Yusuke Endoh almost 4 years ago

  • Status changed from Feedback to Assigned

なかださん、いかがお過ごしでしょうか

--
Yusuke Endoh mame@tsg.ne.jp

#20 [ruby-dev:46573] Updated by Yusuke Endoh almost 4 years ago

  • Status changed from Assigned to Rejected

2012年11月20日 23:30 Nobuyoshi Nakada nobu@ruby-lang.org:

(12/11/20 23:18), mame (Yusuke Endoh) wrote:

なかださん、いかがお過ごしでしょうか

いい具合でゴキゲンですが、でも書いたように解決の方針がそもそも明後日ではないかと思います。

一任されたなかださんがその意見なら、このチケットは rejected でよろしいかと思います。

--
Yusuke Endoh mame@tsg.ne.jp

#21 [ruby-dev:46572] Updated by Nobuyoshi Nakada almost 4 years ago

(12/11/20 23:18), mame (Yusuke Endoh) wrote:

なかださん、いかがお過ごしでしょうか

いい具合でゴキゲンですが、でも書いたように解決の方針がそもそも明後日ではないかと思います。

--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦

#22 [ruby-dev:49429] Updated by Yui NARUSE 9 months ago

  • Status changed from Rejected to Closed

#23 [ruby-dev:49430] Updated by Yui NARUSE 9 months ago

  • Status changed from Closed to Rejected

Also available in: Atom PDF