MacPortsのport:ruby22, ruby21, ruby20を更新
あたらしいバージョンがリリースされていたので対応しました。今回のバージョンはセキュリティ修正(CVE-2015-7551: Fiddle と DL における tainted 文字列使用時の脆弱性について)が含まれています。
- port:ruby22: 2.2.4
- port:ruby21: 2.1.8
- port:ruby20: 2.0.0-p648
以下自分ようのメモ。
2.2 Leopard以前にlibunwind.hがない?
2.2.3が古いOS X(10.5 Leopard以前)でコンパイルエラーがあるらしくパッチが当てられていたけれど、2.2.4ではupstreamで対応された(Bug #11591)ので削除。
2.2, 2.1 仮想マシン上のtest/ruby/test_io.rbでTypeError
先週ようやく10.11に上げたので、10.10の検証(インストールの確認とtest-all流す)はVMWare上の仮想マシンでやった。
2.2.4と2.1のtest-allでTestIOでエラーが4件出る。
1) Error: TestIO#test_close_on_exec: TypeError: no implicit conversion from nil to integer
rubyciではOS X上の2.2/2.1はtest-allのエラーはないので、環境かMacPortsのビルドの問題かなあと考えて調べてみる。
まずはport使わずにふつーにconfigure && make。再現することを確認。2.2.3ではテストをパスすることも確認。
2.2.3と2.2.4でconfig.hを比較、上述のlibunwind.hの件だけで関係なさそう。
--- .ext/include/x86_64-darwin14/ruby/config.h 2015-12-20 01:34:06.000000000 +0900 +++ ../ruby-2.2.4/.ext/include/x86_64-darwin14/ruby/config.h 2015-12-20 01:07:06.000000000 +0900 @@ -332,6 +332,7 @@ #define SET_THREAD_NAME(name) pthread_setname_np(name) #define DEFINE_MCONTEXT_PTR(mc, uc) mcontext_t mc = (uc)->uc_mcontext #define HAVE_EXECINFO_H 1 +#define HAVE_LIBUNWIND_H 1 #define HAVE_BACKTRACE 1 #define BROKEN_BACKTRACE 1 #define DLEXT_MAXLEN 7
次にテストスクリプトを比較、RLIMITまわりの設定が追加されてるね。
--- ../ruby-2.2.3/test/ruby/test_io.rb 2015-08-14 00:53:27.000000000 +0900 +++ test/ruby/test_io.rb 2015-12-20 10:51:14.000000000 +0900 @@ -1065,7 +1065,9 @@ def ruby(*args) args = ['-e', '$>.write($<.read)'] if args.empty? ruby = EnvUtil.rubybin - f = IO.popen([ruby] + args, 'r+') + opts = {} + opts[:rlimit_nproc] = 1024 if defined?(Process::RLIMIT_NPROC) + f = IO.popen([ruby] + args, 'r+', opts) pid = f.pid yield(f) ensure @@ -1120,6 +1122,10 @@ def test_dup_many ruby('-e', <<-'End') {|f| + if defined?(Process::RLIMIT_NOFILE) + lim = Process.getrlimit(Process::RLIMIT_NOFILE)[0] + Process.setrlimit(Process::RLIMIT_NOFILE, [lim, 1024].min) + end ok = 0 a = [] begin
試してみた感じだと
opts[:rlimit_nproc] = 1024 if defined?(Process::RLIMIT_NPROC)
ここの"1024"が環境の最大値を超えてるとだめっぽい。
# OS X 10.11.2 実機 % ruby2.2 -e 'p Process.getrlimit(Process::RLIMIT_NPROC)' [709, 1064] # OS X 10.10.5 VMWare fusion % ruby2.2 -e 'p Process.getrlimit(Process::RLIMIT_NPROC)' [266, 532]
仮想のほうで1024を532にするとテストをパスするようになる。533だとエラーになる。
ruby本体の問題ではなさそうなのでとりあえず無視することに。ちゃんと調べたらbugs.r-l.oにレポートだそう。
(2015-12-22 追記)Bug #11852として報告して、送ったパッチもマージされた。ありがとうございます!
2.0.0 rubygems/test_gem_remote_fetcher.rbで"dh key too small"
例によってopensslのバージョンが上がったことで要求されるサイズが増えたみたい。
test_gem_remote_fetcher.rbの`OpenSSL::PKey::DH.new(128)`を256にしてみたけど、test-allで流すとエラーのぜんぶは解消できなくってめんどうになってあきらめた。