事象
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 ファイルに問題があるようです。
対応
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 ファイルがいつ更新されるのか分かりませんが、早く改善するといいなと思います。