Vagrant+VirtualBox6.1.0+CentOS7な環境でyum updateするとカーネルパニックが発生する(ことがある)件


はじめに

初めての方もそうでない方もご無沙汰しております。
気がつけば前回の投稿から2年半が経ち、しがないSIerだった私も気付けばフリーランスのエンジニアとしてどうにかそれなりにもっともらしく生きております。

今日はVagrant+VirtualBox6.1.0+CentOS7な環境でyum updateした際に(カーネルのバージョンが上がったことによる)カーネルパニックが発生しちゃった時のお話です。

本文

久々にお仕事でWindowsを触ることになり、Vagrant+VirtualBoxでローカル検証用の環境を作成することに。
サクッとvagrant upして検証用の環境コンテナを作成して、既に他の人が用意してくれたVagrantFileを使って、vagrant provisionしてミドルウェアのアップデートとかまで済ませて、ここまでは非常にサクサク進んでVagrant便利だなーとか呑気に考えていました。

ところがprovisionした内容を反映させようと思ってコンテナを再起動してからどうもおかしい。
いつまで経ってもコンテナが立ち上がらなかったのでVirtualBoxの子ウィンドウを覗いたらカーネルパニックが発生orz

カーネルパニックのログをよく見るとspec_ctrl_cpu_initうんたらかんたらみたいなメッセージが出ており、「CPU??????」と思いながらググってみるとVirtualBoxのフォーラムに同様な事例の報告例が数件。
https://forums.virtualbox.org/viewtopic.php?f=3&t=93990

さっくりまとめると

どうもVirtualBoxの不具合っぽいらしく、VirtualBox6.0.6より新しいバージョンでyum updateなどでカーネルのバージョンを上げた際に、次回起動時にアップデートしたカーネルで起動させようとするとカーネルパニックが発生しちゃう模様。(問題なのはこれが必ず起こるわけではなく、古いCPUのマシンだと同じような手順を踏んでも同じ症状が起こらないことがあるらしい)

回避策ですが、2020/2/5現在の6.0/6.1系の最新Verでも発生するとのことなので、以下のような手順を取るしかなさそう。

  1. VirtualBoxを6.0.6にダウングレードする
  2. yum updateの際に"--exclude=kernel*"オプションを付けてkernelをアップデートさせないようにする
  3. 毎回手動で古いカーネルを選択する

最後に

取り急ぎ雑な記事ですみません。そのうちちゃんと推敲してもうちょい読める文章にします。(するとは言っていない)