FreeBSD+rubyについて私が書いている時点で「またruby disかよ」と思われるかもしれませんが、今回の主犯はFreeBSDのports管理と脆弱性情報管理のズレだと考えています。
問題となる現象
FreeBSD において Ruby 2.0 系列をインストールしていると
$ portmaster -d lang/ruby20
で本来はできるはずの更新ができません。
というのも Ruby の脆弱性 が FreeBSD のデータベースに登録されており、更新時にそれを見てこんな感じで止まってしまいます。
===> ruby20-2.0_4,1 has known vulnerabilities:
ruby20-2.0_4,1 is vulnerable:
ruby -- Heap Overflow in Floating Point Parsing
CVE: CVE-2013-4164
WWW: http://portaudit.FreeBSD.org/cc9043cf-7f7a-426e-b2cc-8d1980618113.html
=> Please update your ports tree and try again.
*** [check-vulnerable] Error code 1
解決方法
portsをmakeするときに DISABLE_VULNERABILITIES=yes
オプションを渡してあげましょう。portmasterを使っているならば
$ portmaster -m DISABLE_VULNERABILITIES=yes -d lang/ruby20
これで更新できます。
原因の推定
Ruby には浮動小数点関係の脆弱性があり修正版 2.0.0.353 がリリースされました。FreeBSDではそれを受けて脆弱性情報データベースに登録しました。そこには ruby20 については 2.0.0.353,1 未満のバージョンにはこの問題があるよ、と書かれています。
Affects:
- ruby19 < 1.9.3.484,1
- ruby20 < 2.0.0.353,1
しかし ports 上でのバージョン表記はさっきの出力例からわかるように 2.0_4,1
となっています。なんだか表記のルールがズレていそうです。そのために 2.0_4,1
< 2.0.0.353,1
と判断して止まっているのでしょう。これは悲しい。
なお ports の ruby20 の 2.0_4,1 の中身は Ruby 本家の 2.0.0.353 相当であり、この脆弱性についてはきちんと解消されているので、無視して更新しても大丈夫だと考えられます。
2014/04/05 11:40 追記
オプション名に誤りがありましたので訂正しました。
正: DISABLE_VULNERABILITIES=y
誤: DISABLE_VULNERABILITY=y