skip to content
barorin&

Vagrant+VirtualBox実践メモ|基本コマンドとエラー6つの対処

/ 6 min read

Table of Contents

はじめに

VagrantとVirtualBoxで仮想環境を作るときによく使うコマンドと、実際に踏んだエラーの対処法を1本にまとめました。

エラーの節は独立しているので、詰まっている症状から直接読んでもらって大丈夫です。

基本コマンド

Boxの取得とVagrantfileの生成

Terminal window
# Boxのダウンロード
$ vagrant box add Box名
# Vagrantfileの生成
$ vagrant init Box名

仮想マシンの操作

操作 コマンド
起動 vagrant up
終了 vagrant halt
サスペンド vagrant suspend
再起動 vagrant reload
SSH接続 vagrant ssh
一覧表示 vagrant global-status
破棄 vagrant destroy 仮想マシン

ゲストOSの初期パスワードは vagrant です。

Vagrantfileの設定

割当メモリを変える

config.vm.provider "virtualbox" do |vb|
# VirtualBoxのGUIを表示したい場合
# vb.gui = true
# メモリ割当
vb.memory = "4096"
end

ディスク容量を増やす

vagrant-disksize プラグインを入れてから、config.vm.box = "xxxx" の下に設定を追加します。

Terminal window
$ vagrant plugin install vagrant-disksize
config.disksize.size = '30GB'

Guest Additionsを自動インストールする

Terminal window
$ vagrant plugin install vagrant-vbguest

このプラグインは後述のエラー対処にも出てきます。基本的に入れておくと楽です。

よく出るエラーと対処

1. Guest Additionsのバージョンが合っていない

vagrant up で以下が出るケースです。

Terminal window
Got different reports about installed GuestAdditions version:
Virtualbox on your host claims: 5.2.18
VBoxService inside the vm claims: 6.1.14

ホスト側のVirtualBoxと、ゲスト側のGuest Additionsのバージョンがずれています。vagrant-vbguest を入れると解消されます。

Terminal window
$ vagrant plugin install vagrant-vbguest

2. GuestAdditions seems to be installed ... but not running.

Terminal window
[default] GuestAdditions seems to be installed (6.1.14) correctly, but not running.

1と逆に、vagrant-vbguest の自動更新が邪魔をしているパターンです。Vagrantfileに以下を追加して、自動更新を止めます。

if Vagrant.has_plugin?("vagrant-vbguest")
config.vbguest.auto_update = false
end

3. カーネルヘッダが無くてGuest Additionsがビルドできない

Terminal window
VirtualBox Guest Additions: Kernel headers not found for target kernel
5.4.0-73-generic. Please install them and execute
/sbin/rcvboxadd setup

カーネルヘッダを入れます。

Terminal window
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y linux-headers-generic

この後 vagrant reload すると、今度はビルドツールが無いと言われることがあります。

Terminal window
VirtualBox Guest Additions: Building the modules for kernel 5.4.0-77-generic.
This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.

不足分をまとめて入れれば解消します。

Terminal window
$ sudo apt install -y gcc make perl

参考:Vagrantで構築したUbuntu20.04へsynced_folderを設定した際に発生するマウントエラーの対処

4. ゲストOS上で docker pull がタイムアウトする

bento/ubuntu18.04 ベースの環境でDockerを入れたときに踏みました。

Terminal window
$ docker pull ubuntu:18.04
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

ゲストOS側の名前解決が通っていないのが原因でした。DNSを書き換えると解消します。

Terminal window
$ sudo vim /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8
Terminal window
$ sudo systemctl restart systemd-resolved

5. Encoding::InvalidByteSequenceError(Windows)

Windows上の vagrant up で突然出るようになりました。

Terminal window
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.6/lib/vagrant/util/io.rb:32:in `encode':
incomplete "\x98" on Windows-31J (Encoding::InvalidByteSequenceError)

io.rb の32行目、encode("UTF-8", ...)encode("Windows-31J", ...) に変更すれば通ります。

ただし根本原因はスナップショット名に日本語を使ったことでした。名前を英語に戻したら、io.rb を触らなくてもエラーが出なくなりました。Vagrant本体のファイルを書き換えるのはアップデートで消えるので、まずスナップショット名を疑うほうが確実です。

参考:Vagrantコマンドで Encoding::InvalidByteSequenceError - Qiita

6. VirtualBoxの画面からカーソルが戻らない

キーボード右側の Ctrl を押します。これがホストキーの初期設定です。

なお、メニューバーが消えてしまった場合は、VirtualBoxマネージャーの 仮想マシン > 設定 を開きます。

VirtualBoxマネージャーで対象の仮想マシンを選び、設定メニューを開いているところ

ユーザーインターフェース の項目で、メニューバー右側のチェックを入れれば元に戻ります。

VirtualBoxの設定画面のユーザーインターフェース項目。メニューバーのチェックボックスを有効にしているところ

おわりに

Vagrant周りのエラーは、Guest Additionsのバージョン整合で起きるものが大半でした。

vagrant-vbguest を入れる/その自動更新を止める、のどちらかでたいてい片付きます。同じエラーメッセージで検索してたどり着いた方の役に立てば幸いです。

この記事を書いた人

barorinのプロフィール画像

barorin公認会計士

会計とITの二足のわらじで働く公認会計士です。Pythonを中心に、会計・監査の実務で実際に使っているコードや、Ubuntu・Raspberry Piの設定メモを書いています。