きりかノート 3冊め

おあそびプログラミング

MacPortsのport:ruby21, ruby20, ruby19を更新(セキュリティ修正あり)

あたらしいバージョンがリリースされていたので対応しました。

  • port:ruby21: 2.1.4
  • port:ruby20: 2.0.0-p594
  • port:ruby19: 1.9.4-p550

今回のリリースはセキュリティ修正を含みます。詳細は公式の情報をごらんください。

また、今回のリリースからPOODLE対応として安全でないとわかっているSSL/TLSオプションが無効になっています。こちらも公式ページに説明があります。

MacPortsrubyとしては、この変更を取り消すvariantは用意しません。

OS X 10.7と10.8でコンパイルが終了しない対策

buildbotの進捗をながめてたら、10.7と10.8のビルドがタイムアウトで失敗していた。手元の10.7環境で試してみたところ、minirubyでrbconfig.rbを生成するところで止まってることが確認できた。どうもminirubyがおかしいみたい。`./miniruby sample/test.rb`を実行してみてもうんともすんとも言わない。

このレベルで動かないのはconfig.hがおかしいことが多いので、正常に動作した10.9環境と比べてみる。

   % diff -u config.h-10.9 .ext/include/x86_64-darwin11.0/ruby/config.h
   --- config.h-10.9	2014-10-28 02:38:10.000000000 +0900
   +++ .ext/include/x86_64-darwin11.0/ruby/config.h	2014-10-28 22:09:09.000000000 +0900
   @@ -272,7 +272,6 @@
    #define HAVE_UTIMES 1
    #define HAVE_WAIT4 1
    #define HAVE_WAITPID 1
   -#define HAVE_BUILTIN___BUILTIN_BSWAP16 1
    #define HAVE_BUILTIN___BUILTIN_BSWAP32 1
    #define HAVE_BUILTIN___BUILTIN_BSWAP64 1
    #define HAVE_BUILTIN___BUILTIN_CLZ 1
   @@ -316,9 +315,9 @@
    #define DLEXT_MAXLEN 7
    #define DLEXT ".bundle"
    #define LIBDIR_BASENAME "lib"
   -#define RUBY_SETJMP(env) _setjmp((env))
   -#define RUBY_LONGJMP(env,val) _longjmp((env),val)
   +#define RUBY_SETJMP(env) __builtin_setjmp((void **)(env))
   +#define RUBY_LONGJMP(env,val) __builtin_longjmp((void **)(env),val)
    #define RUBY_JMP_BUF jmp_buf
    #define HAVE_PTHREAD_H 1
   -#define RUBY_PLATFORM "x86_64-darwin13.0"
   +#define RUBY_PLATFORM "x86_64-darwin11.0"
    #endif /* INCLUDE_RUBY_CONFIG_H */

まー、RUBY_SETJMP()やRUBY_LONGJMP()あたりがあやしいよね。configureのオプションで--with-setjmp-type=_setjmpとして強制的に指定してやればminirubyは動くようになって解消した。とりあえず、MacPortsのPortfileにはこれを入れて対処することに。

抜本的な対応は、rubyのupstreamのほうでどうにかしよう。

(10/29 追記)trunkに修正が入り、この問題は解消しました。はやすぎる!