読者です 読者をやめる 読者になる 読者になる

時と場合によりけり

日々のアップデートとイノベーションに翻弄され彷徨える IT エンジニアの覚書

vagrant up で CentOS 6.8 を起動するとエラーが出たときの対処法

Mac Vagrant CentOS

概要

Vagrant で入れておくと便利なプラグイン vagrant-vbguest をインストールしていると、VirtualBox Guest Additions 絡みのエラーに出くわすことがあります。今回は、その対処方法を記します。vagrant-vbguest については、以下のエントリーをご参照ください。

stangler.hatenablog.com

ハードウェア

  • マシン: Macbook Pro Early 2011
  • OS: macOS 10.12 Sierra
  • メモリ: 16 GB
  • ストレージ: SSD 512 GB

ソフトウェア

エラー

vagrant up で CentOS 6.8 の仮想マシンを起動したところ以下のようなエラーが表示されました。ここでは、db というホスト名の仮想マシンを起動しています。

% vagrant up db
Bringing machine 'db' up with 'virtualbox' provider...
==> db: Clearing any previously set forwarded ports...
==> db: Fixed port collision for 22 => 2222. Now on port 2200.
==> db: Clearing any previously set network interfaces...
==> db: Preparing network interfaces based on configuration...
    db: Adapter 1: nat
    db: Adapter 2: hostonly
==> db: Forwarding ports...
    db: 22 (guest) => 2200 (host) (adapter 1)
==> db: Running 'pre-boot' VM customizations...
==> db: Booting VM...
==> db: Waiting for machine to boot. This may take a few minutes...
    db: SSH address: 127.0.0.1:2200
    db: SSH username: vagrant
    db: SSH auth method: private key
    db: Warning: Remote connection disconnect. Retrying...
==> db: Machine booted and ready!
[db] GuestAdditions seems to be installed (5.1.6) correctly, but not running.
vboxadd.sh: Starting the VirtualBox Guest Additions.
vboxadd.sh: Building Guest Additions kernel modules.
vboxadd.sh: failed: Look at /var/log/vboxadd-install.log to find out what went wrong.
vboxadd.sh: failed: Please check that you have gcc, make, the header files for your Linux kernel and possibly perl installed..
vboxadd.sh: failed: modprobe vboxguest failed.
vboxadd.sh: Building Guest Additions kernel modules.
vboxadd.sh: failed: Look at /var/log/vboxadd-install.log to find out what went wrong.
vboxadd.sh: failed: Please check that you have gcc, make, the header files for your Linux kernel and possibly perl installed..
==> db: Checking for guest additions in VM...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

/usr/lib64/VBoxGuestAdditions/vboxadd setup

Stdout from the command:

vboxadd.sh: Building Guest Additions kernel modules.


Stderr from the command:

vboxadd.sh: failed: Look at /var/log/vboxadd-install.log to find out what went wrong.
vboxadd.sh: failed: Please check that you have gcc, make, the header files for your Linux kernel and possibly perl installed..

GuestAddtions のバージョンは、vagrant-vbguest プラグインがうまく調整してくれているので、正しいようです。ここで問題なのは、GuestAddtions 自体ではなく、それを動かすために必要な依存パッケージが正しくないようです。

一応、ログも確認してみます。

% vagrant ssh db
$ cat /var/log/vboxadd-install.log
/tmp/vbox.0/Makefile.include.header:97: *** Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR=<directory> and run Make again.  中止.
Creating user for the Guest Additions.
Creating udev rule for the Guest Additions kernel module.

カーネルのソースが見つからないらしいです。

対処方法

依存パッケージのインストール その1

まずは、gcc などをアップデートします。

$ sudo yum install -y kernel-headers dkms gcc gcc-c++
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: mirror.vastspace.net
パッケージ dkms は利用できません。
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package gcc.x86_64 0:4.4.7-17.el6 will be インストール
--> 依存性の処理をしています: cpp = 4.4.7-17.el6 のパッケージ: gcc-4.4.7-17.el6.x86_64
--> 依存性の処理をしています: glibc-devel >= 2.2.90-12 のパッケージ: gcc-4.4.7-17.el6.x86_64
---> Package gcc-c++.x86_64 0:4.4.7-17.el6 will be インストール
--> 依存性の処理をしています: libstdc++-devel = 4.4.7-17.el6 のパッケージ: gcc-c++-4.4.7-17.el6.x86_64
--> 依存性の処理をしています: libmpfr.so.1()(64bit) のパッケージ: gcc-c++-4.4.7-17.el6.x86_64
---> Package kernel-headers.x86_64 0:2.6.32-642.6.1.el6 will be インストール
--> トランザクションの確認を実行しています。
---> Package cpp.x86_64 0:4.4.7-17.el6 will be インストール
---> Package glibc-devel.x86_64 0:2.12-1.192.el6 will be インストール
--> 依存性の処理をしています: glibc-headers = 2.12-1.192.el6 のパッケージ: glibc-devel-2.12-1.192.el6.x86_64
--> 依存性の処理をしています: glibc-headers のパッケージ: glibc-devel-2.12-1.192.el6.x86_64
---> Package libstdc++-devel.x86_64 0:4.4.7-17.el6 will be インストール
---> Package mpfr.x86_64 0:2.4.1-6.el6 will be インストール
--> トランザクションの確認を実行しています。
---> Package glibc-headers.x86_64 0:2.12-1.192.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 パッケージ           アーキテクチャ
                                  バージョン                 リポジトリー  容量
================================================================================
インストールしています:
 gcc                  x86_64      4.4.7-17.el6               base          10 M
 gcc-c++              x86_64      4.4.7-17.el6               base         4.7 M
 kernel-headers       x86_64      2.6.32-642.6.1.el6         updates      4.4 M
依存性関連でのインストールをします。:
 cpp                  x86_64      4.4.7-17.el6               base         3.7 M
 glibc-devel          x86_64      2.12-1.192.el6             base         988 k
 glibc-headers        x86_64      2.12-1.192.el6             base         617 k
 libstdc++-devel      x86_64      4.4.7-17.el6               base         1.6 M
 mpfr                 x86_64      2.4.1-6.el6                base         157 k

トランザクションの要約
================================================================================
インストール         8 パッケージ

総ダウンロード容量: 26 M
インストール済み容量: 54 M
パッケージをダウンロードしています:
(1/8): cpp-4.4.7-17.el6.x86_64.rpm                       | 3.7 MB     00:01
(2/8): gcc-4.4.7-17.el6.x86_64.rpm                       |  10 MB     00:02
(3/8): gcc-c++-4.4.7-17.el6.x86_64.rpm                   | 4.7 MB     00:00
(4/8): glibc-devel-2.12-1.192.el6.x86_64.rpm             | 988 kB     00:00
(5/8): glibc-headers-2.12-1.192.el6.x86_64.rpm           | 617 kB     00:00
(6/8): kernel-headers-2.6.32-642.6.1.el6.x86_64.rpm      | 4.4 MB     00:00
(7/8): libstdc++-devel-4.4.7-17.el6.x86_64.rpm           | 1.6 MB     00:00
(8/8): mpfr-2.4.1-6.el6.x86_64.rpm                       | 157 kB     00:00
--------------------------------------------------------------------------------
合計                                            2.3 MB/s |  26 MB     00:11
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : mpfr-2.4.1-6.el6.x86_64                         1/8
  インストールしています  : cpp-4.4.7-17.el6.x86_64                         2/8
  インストールしています  : libstdc++-devel-4.4.7-17.el6.x86_64             3/8
  インストールしています  : kernel-headers-2.6.32-642.6.1.el6.x86_64        4/8
  インストールしています  : glibc-headers-2.12-1.192.el6.x86_64             5/8
  インストールしています  : glibc-devel-2.12-1.192.el6.x86_64               6/8
  インストールしています  : gcc-4.4.7-17.el6.x86_64                         7/8
  インストールしています  : gcc-c++-4.4.7-17.el6.x86_64                     8/8
  Verifying               : glibc-devel-2.12-1.192.el6.x86_64               1/8
  Verifying               : glibc-headers-2.12-1.192.el6.x86_64             2/8
  Verifying               : kernel-headers-2.6.32-642.6.1.el6.x86_64        3/8
  Verifying               : mpfr-2.4.1-6.el6.x86_64                         4/8
  Verifying               : libstdc++-devel-4.4.7-17.el6.x86_64             5/8
  Verifying               : gcc-c++-4.4.7-17.el6.x86_64                     6/8
  Verifying               : gcc-4.4.7-17.el6.x86_64                         7/8
  Verifying               : cpp-4.4.7-17.el6.x86_64                         8/8

インストール:
  gcc.x86_64 0:4.4.7-17.el6                     gcc-c++.x86_64 0:4.4.7-17.el6
  kernel-headers.x86_64 0:2.6.32-642.6.1.el6

依存性関連をインストールしました:
  cpp.x86_64 0:4.4.7-17.el6              glibc-devel.x86_64 0:2.12-1.192.el6
  glibc-headers.x86_64 0:2.12-1.192.el6  libstdc++-devel.x86_64 0:4.4.7-17.el6
  mpfr.x86_64 0:2.4.1-6.el6

完了しました!

依存パッケージのインストール その2

次に、kernel-devel をインストールします。

$ sudo yum install -y kernel-devel
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: mirror.vastspace.net
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package kernel-devel.x86_64 0:2.6.32-642.6.1.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 パッケージ         アーキテクチャ
                                 バージョン                 リポジトリー   容量
================================================================================
インストールしています:
 kernel-devel       x86_64       2.6.32-642.6.1.el6         updates        11 M

トランザクションの要約
================================================================================
インストール         1 パッケージ

総ダウンロード容量: 11 M
インストール済み容量: 26 M
パッケージをダウンロードしています:
kernel-devel-2.6.32-642.6.1.el6.x86_64.rpm               |  11 MB     00:08
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : kernel-devel-2.6.32-642.6.1.el6.x86_64          1/1
  Verifying               : kernel-devel-2.6.32-642.6.1.el6.x86_64          1/1

インストール:
  kernel-devel.x86_64 0:2.6.32-642.6.1.el6

完了しました!

vbox セットアップ

以下のコマンドで vbox を初期化します。

$ sudo /etc/init.d/vboxadd setup
vboxadd.sh: Building Guest Additions kernel modules.
vboxadd.sh: Starting the VirtualBox Guest Additions.

Could not find the X.Org or XFree86 Window System, skipping.

仮想マシンの再起動

Vagrant をリロードします。

% vagrant reload db

確認

ステータスを確認して、以下のように表示されれば解決です。

% vagrant status db
Current machine states:

db                        running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.