[和訳] 事後報告: ohaiと-mixlib-shellout gemのリリース問題 #opschef_ja #getchef_ja
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本項は Postmortem: ohai & mixlib-shellout gem release issues (2014/12/02) の和訳です。
シェフのみなさん、こんにちは。
2014/12/01に、来たるChef Client 12.0.0リリースの準備として、いくつかのgemをリリースしました。このリリースにおいて、2つの問題を起こしてしまいました。
- 古いバージョンのrubygemsを使っている場合、ohai 7.6.0リリースはchef 11.16.4のgemインストールが行えません。
- バージョンを指しているGemfile.lockファイルを持つプロジェクトで問題を引き起こすため、rubygems.orgからmixlib-shellout 1.6.0リリースの取り下げ。
1つ目の問題は、ohai 7.6.0をrubygems.orgから取り下げたことで解決しました。2つ目の問題は、bundle update mixlib-shelloutを実行してmixlib-shelloutをバージョン1.6.1に更新することで解決できます。
本稿はこれらの問題の詳細と実施した修正を要約します。今後の予防メカニズムと修正措置を決定するための公開事後報告を2014/12/03 at 13:00 PTに行います。開始時にみなさんの参加や視聴のためのハングアウトとYouTubeライブストリームへのリンクをツイートします。
「gem install chef」でバージョン11.16.4が一時的に行えない
この問題を報告してくれたmigurskiに大変感謝しています。問題の詳細はこちらで確認できます。migurskiが指摘したchef、ohai、mixlib-shelloutの最近のリリースのgem依存関係は次のようになっています。
chef 11.16.4 depends on mixlib-shellout ~> 1.4
chef 11.16.4 depends on ohai ~> 7.4
ohai 7.4.0 depends on mixlib-shellout ~> 1.2
ohai 7.6.0 depends on mixlib-shellout < 3.0, >= 2.0.0.rc.0
これに加えて、mixlib-shellout 2.0.0は環境変数のエンコーディングに関する変更のため、chef 11.16.4と後方互換ではありません。
以前のrubygemsバージョンではohai 7.4.0とmixlib-shellout 1.6.1を用いているものについての依存関係の解決が行えないため、これらのバージョン指定はgem install chefコマンドを失敗させてしまいます。この問題はrubygemsの新しいバージョンでは起こりません。
この問題を解決する多くの可能性のうち、rubygems.orgからohai 7.6.0を取り下げることを選択し、chef 12.0.0と同時にohai 8.0.0をリリースすることを決定しました。これを選択した理由は、古いrubygemsの依存関係解決に関する問題を引き起こす可能性のあるgemのあらゆるバージョンを残しておきたくなかったからです。
この解決方法はまた、chefリリースのメジャーバージョン間の依存関係を明確にします。chef 12.Xはohai 8.Xとmixlib-shellout 2.Xに依存し、chef 11.Xはohai 7.Xとmixlib-shellout 1.Xに依存します。
この解決方法で残っている手順は次の通りです。
- ohai 8.0.0のリリース
- mixlib-shellout ~> 2.0とohai ~> 8.0という依存関係であるchef 12.0.0のリリース
既存のリリースであるchef 11.16.4は、既存のohai 7.4.0とmixlib-shellout 1.6.1で動作し続けます。
mixlib-shellout 1.6.0の壊れたGemfile.lockファイル
mixlib-shellout 1.6.0で頻繁に報告されていた問題の一つは、Ruby 1.8.7で壊れているという事実でした。この問題はmixlib-shelloutにRuby 1.8.7でサポートされない変更を加えたためでした。mixlib-shelloutにこのような変更を加えたにも関わらず、mixlib-shelloutのrequired_ruby_version設定を更新していませんでした。
この問題を解消するため、rubygems.orgからmixlib-shellout 1.6.0を取り下げ、mixlib-shelloutのgemspecにs.required_ruby_version = ">= 1.9.3"を含めるという変更だけのmixlib-shellout 1.6.1をリリースしました。この変更により、Ruby 1.8.7のロジックとの非互換によるmixlib-shelloutのあらゆる障害を将来にわたって防ぎます。
しかし、2014/10/07からしばらくの間mixlib-shellout 1.6.0が公開されてしまったので、多数のGemfile.lockファイルに入ってしまいました。このバージョンを取り下げたとしても、既存のGemfile.lockファイルを用いてmixlib-shelloutのバージョンをインストールしようとすれば失敗してしまいます。これはChef Software Incのすべてのビルドプロジェクトとおそらく外部プロジェクトにも影響があります。
rubygems.orgが既に取り下げたgemの再プッシュをもっともな理由で許可していないので、この問題を残しておけませんでした。この問題に対するワークアラウンドは、次のコマンドで影響を受けたプロジェクトのgem bundleにあるmixlib-shelloutのバージョンを更新することです。
$ bundle update mixlib-shellout
事後報告
将来この問題を繰り返さないための追加的な修正措置について話し合うための事後報告を2014/12/03 at 13:00 PTに行うので、参加してください。開始時にみなさんの参加や視聴のためのハングアウトとYouTubeライブストリームへのリンクをツイートします。
この問題を解決するための協力と解決されるまでの辛抱に感謝します。この問題に関する質問などあればメーリングリストchefとchef-devやGithubにお知らせください。