shiba-hiro’s 備忘録

技術ブログの皮を被ったただの備忘録

Ubuntuでvagrant upした際にフリーズしてしまう事象の解消

Ubuntu 16.04上でvagrant upした際にPC(ホストOS)がフリーズしてしまう問題が起きていました。

# vagrantを利用すると、ここで止まってしまう
==> default: Booting VM...

代替案としてDockerを利用していたものの、どうも使いづらく感じることが多かったので、やはりvagrantを復旧したいと思い、情報を漁っていました。
寄り道も多かったのですが、復旧できたのでその方法を記載します。

なお結局起こっていた問題としては、(vagrant経由であるなしに関わらず)VirtualBoxでゲストOSをブートするタイミングでフリーズする、というものです。
バージョン確認などのvagrantコマンドが全く使えなくなるとかではないし、VirtualBoxGUIで操作してゲストOSを起動しようとする際にもフリーズは発生しました。

VMWareを使う方法もあったんですが、スムーズにいかなかったので諦めました。
ここでは、引き続きVirtualBoxを使う形で復旧します。

解決方針の決定

とりあえずキーワードでググったところ次の記事が見つかりました。

Ubuntu 16.04 freezes on vagrant up - Ask Ubuntu

事象としては全く同じだったので、ここに記載されているよう、
Vagrantのバージョンを2.0.1へ、
VirtualBoxのバージョンを5.2へ、
それぞれ上げる方向で解決します。

なお、トラブル発生時点、修正前の各ソフトのバージョンは次の通り。

$ vagrant -v
Vagrant 1.8.1

$ vboxmanage -v
5.0.40_Ubuntur115130

インストールをやり直す

ここでは、一度アンインストールを行ってから再度インストールを行います。

何はともあれ、いまのバージョンをいったん捨てます。

$ sudo apt purge -y vagrant

が、実行したところ、「/var/lib/dpkg/lockが取得できないよ」と怒られてしまいました。。。
自分のケースでは裏側でVirtualBoxが起動していたのが原因だったので、これを止めてアンインストールを進めます。

# VirtualBoxの起動状況を確認し、必要なら停止させる
$ sudo service virtualbox status
$ sudo service virtualbox stop

# まずVagrantをアンインストール
$ sudo apt purge -y vagrant
$ rm -r ~/.vagrant.d

# 続いてVirtualBoxもアンインストール
$ sudo apt purge -y virtualbox

続いて、それぞれをバージョン指定しつつインストールします。

# まずはVirtualBox更新のための諸々を進める
$ sudo add-apt-repository "deb http://download.virtualbox.org/virtualbox/debian xenial contrib"
$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

$ sudo apt update
$ sudo apt install -y virtualbox-5.2 dkms

# VirtualBoxインストールの成功を確認
$ vboxmanage -v
5.2.6r120293


# 続いてVagrant
$ wget https://releases.hashicorp.com/vagrant/2.0.1/vagrant_2.0.1_x86_64.deb
$ sudo apt install -y ./vagrant_2.0.1_x86_64.deb

# Vagrantインストールの成功を確認
$ vagrant -v
Vagrant 2.0.1

ドライバの設定をリフレッシュする

上記までで、希望していたバージョンのソフトウェアをインストールできました。
では適当なディレクトリを作成して早速起動、と思ったところでまた問題が。。。

$ vagrant init ubuntu/trusty64
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/trusty64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'ubuntu/trusty64'
    default: URL: https://vagrantcloud.com/ubuntu/trusty64
==> default: Adding box 'ubuntu/trusty64' (v20180206.0.0) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20180206.0.0/providers/virtualbox.box
==> default: Successfully added box 'ubuntu/trusty64' (v20180206.0.0) for 'virtualbox'!
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: for-ubuntu_default_1518682274211_45707
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "ad479413-2179-4177-a944-be0ca8a8e145", "--type", "headless"]

Stderr: VBoxManage: error: The virtual machine 'for-ubuntu_default_1518682274211_45707' has terminated unexpectedly during startup with exit code 1 (0x1)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine

再度調べてみたところ、どうやらドライバーのバージョンが更新されていないらしい・・・?

virtualbox - VBoxManage is unable to start vm code NS_ERROR_FAILURE ubuntu 16.04 - Ask Ubuntu

実際にmodinfo vboxdrvというコマンドを叩いてみると、versionの値が5.2系であることを期待していたものの、5.0系のようでした。
上記記事の回答では設定ファイルを削除(!)して再起動、再インストールするというアグレッシブな解決が提示されています。
さすがに怖すぎるので、再設定系のコマンドを見つけてきて実行することにしました。

$ sudo dpkg-reconfigure virtualbox-dkms
$ sudo dpkg-reconfigure virtualbox-5.2

$ modinfo vboxdrv
version:        5.2.6

そして一度ホストOSを再起動し、Vagrant実験用のディレクトリも丸ごと作成し直しました。
すると、無事に起動することを確認できました。

# PCの再起動後、Vagrantfile含むテスト用ディレクトリも作り直し
$ rm -r for-ubuntu
$ mkdir for-ubuntu
$ cd for-ubuntu

# ようやく成功。。。
$ vagrant init ubuntu/trusty64
$ vagrant up

結構時間をかけてしまったので、同じ苦労を踏む人が減ればなーって感じです。