VirtualBox + Vagrant で最新版RockyLinuxがエラーになるときの対処

事象

VirtualBpx + Vagrant な環境で、Vagrantfile に config.vm.box = "rockylinux/8" と記述して Rocky Linux仮想マシンを起動させようとすると、以下のようなエラーが出力されて起動しませんでした。 box.ovf というファイルが見つからない様子。

==> ansible: Importing base box 'rockylinux/8'...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["import", "-n", "\\\\?\\C:\\Users\\XXXXX\\.vagrant.d\\boxes\\rockylinux-VAGRANTSLASH-8\\7.0.0\\virtualbox\\box.ovf"]

Stderr: 0%...VBOX_E_OBJECT_NOT_FOUND
VBoxManage.exe: error: Appliance read failed
VBoxManage.exe: error: Failed to open OVF file '\\?\C:\Users\XXXXX\.vagrant.d\boxes\rockylinux-VAGRANTSLASH-8\7.0.0\virtualbox\box.ovf' (VERR_FILE_NOT_FOUND)
VBoxManage.exe: error: Details: code VBOX_E_OBJECT_NOT_FOUND (0x80bb0001), component ApplianceWrap, interface IAppliance
VBoxManage.exe: error: Context: "enum RTEXITCODE __cdecl handleImportAppliance(struct HandlerArg *)" at line 510 of file VBoxManageAppliance.cp

Rocky Linux のフォーラムでも同じエラーが報告されていて、Vagrant Cloud からダウンロードできる Box ファイルに問題があるようです。

forums.rockylinux.org

対応

Rocky Linux 公式の Box ファイルを使う

作業ディレクトリに以下の box-metadata.json といった名前(ファイル名はなんでもOK)で Rocky Linux 公式 Box のカタログ情報を記載しておきます。

{
  "name" : "rockylinux/8",
  "description" : "Rocky Linux 8 7.0.0 Bugfix",
  "versions" : [
    {
      "version" : "7.0.1-20221213.0",
      "providers" : [
        {
          "name" : "virtualbox",
          "url" : "http://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-Vagrant-Vbox-8.7-20221213.0.x86_64.box"
        }
      ]
    }
  ]
}

カタログファイルを作成したら、box add します。

$ vagrant box add box-metadata.json
==> box: Loading metadata for box 'box-metadata.json'
    box: URL: file://C:/Vagrant/box-metadata.json
==> box: Adding box 'rockylinux/8' (v7.0.1-20221213.0) for provider: virtualbox
The box you're attempting to add already exists. Remove it before
adding it again or add it with the `--force` flag.

Vagrantfile に UEFI の設定を追加する

Rocky Linux 公式の Box は UEFI が有効になっているので、Vagrantfile に UEFI の設定を追加します。 最小限の設定は、以下のようになります。

Vagrant.configure("2") do |config|
  config.vm.box = "rockylinux/8"
  config.vm.provider "virtualbox" do |domain|
    domain.customize ["modifyvm", :id, "--firmware", "efi"]
  end
end

Vagrant up

上記の2つの対処を行ったら vagrant up しましょう。

 vagrant up
Bringing machine 'ansible' up with 'virtualbox' provider...
==> ansible: Importing base box 'rockylinux/8'...
==> ansible: Matching MAC address for NAT networking...
==> ansible: Checking if box 'rockylinux/8' version '7.0.1-20221213.0' is up to date...
==> ansible: Setting the name of the VM: vagrant_ansible_1676276361763_59207
(省略)

仮想マシンが起動したら、OS のバージョンを確認しておきましょう。

$ vagrant ssh -- "sudo cat /etc/rocky-release"
Rocky Linux release 8.7 (Green Obsidian)

いい感じですね。

まとめ

VirtualBox + Vagrant 環境で Rocky Linux仮想マシンを作ろうとすると、Vagrant Cloud にある Box ファイルの問題でうまくいきません。 Rocky Linux 公式の Box ファイルなら問題ありませんが、これはまあまあ不便だなーと思いました。

Vagrant Cloud の Box ファイルがいつ更新されるのか分かりませんが、早く改善するといいなと思います。