CentOS
Yum
vagrant
VirtualBox
vi

vagrant upでエラー 「command failed! setup」


突然のエラー

ある日、突然前回まで普通に動いていたvagrantがvagrant upでエラーが出るようになってしまった。


環境

環境は以下。

ホストOS: Windows7 Professional 64bit

仮想化ソフト: VirtualBox 6.0.4

BOX: bento/centos-7.5


エラーの内容

エラー内容は以下のような感じ


cmd.exe

C:\vagrant>vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'bento/centos-7.5' version '201808.24.0' is up to date...
==> 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: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
[default] GuestAdditions seems to be installed (6.0.4) correctly, but not running.
==> default: 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!

setup

Stdout from the command:

Stderr from the command:

C:\vagrant>


Linux自体は起動しているが、ローカルディレクトリのマウントが出来ていない。

そのため仮想サーバを立ててWindows上でWebの開発というのが出来なくなってしまった。


やったこと

上記のエラーをWebで調べると、


VirtualBoxをバージョンアップしたことにより、GuestAdditionsのバージョンとの不整合が起こっている

 メッセージを見る限りでは不整合は起こっていないので違う。

 というか、最初は起こっていたのでGuestAdditionsのバージョンをVirtualBoxと合わせる作業は手動で行った。

 この項目を調べていると、vagrant-vbguestプラグインをインストールすると自動でやってくれるよ、とかがたくさん出てくるが、今回の私のケースではプラグインをインストールしてもエラーのためアップデートが行われなかったので手動で行った。


ssh

[root@localhost ~]# wget http://download.virtualbox.org/virtualbox/6.0.4/VBoxGuestAdditions_6.0.4.iso

[root@localhost ~] mkdir vbguest
[root@localhost ~] mount -rt iso9660 ./VBoxGuestAdditions_6.0.4.iso ./vbguest
[root@localhost ~] sh ./vbguest/VBoxLinuxAdditions.run
          ・・・ インストールメッセージ ・・・
[root@localhost ~] umount ./vbguest
[root@localhost ~] rm ./VBoxGuestAdditions_6.0.4.iso
[root@localhost ~] rmdir ./vbguest

 これで、バージョンは合うようになったものの、上の方で書いたvagrant up時のメッセージは消えなかった。

本項目と同じような記事リンク

 ・VagrantのboxのGuest Additionsのアップデート方法

 ・vagrant up するとGuestAdditions エラーが発生


カーネルのバージョンアップ

 カーネルのバージョンアップをすることでエラーが起こらなくなる、というのを見てそのようにやってみた。

 これは、ここの記事を全面的に参考にさせてもらった。

 ・CentOS 7 最新安定版カーネルインストール、及び切り替え

 結果、無駄に(?)カーネルが最新バージョンになった。

 この時に気づいたが、色々動かしてみるとvagrant haltとかreloadもまともに動いていない様子・・・。まじで困った・・・。


ログを見て調べる

 かなり手詰まってしまったので仕方なくログレベルをdebugにしてログを見ることに。

 Windowsの環境変数(コンピュータアイコン右クリック→プロパティ→システムの詳細設定→環境変数、で、システムの詳細設定を表示し、システムの環境変数にVAGRANT_LOGを追加し、値をdebugに。

コマンドプロンプトを開き直して再びvagurant upを実行すると大量のログが出力される。

ログが出力された後、チマチマとログを見ていくと以下のような出力があった。


cmd.exe

C:\vagrant> vagrant up

     ・・・ 中略 ・・・
DEBUG ssh: Exit status: 127
DEBUG ssh: Re-using SSH connection.
INFO ssh: Execute: setup (sudo=true)
DEBUG ssh: stderr: bash: sudo: command not found
     ・・・ 中略 ・・・

sudo: command not found?。sudoないの?

sshの方で調べてみる。


ssh

[root@localhost ~]# find / -name sudo -print

/etc/selinux/targeted/active/modules/100/sudo
/usr/libexec/sudo

一応見つかったことは見つかったものの、selinux関係ないし/usr/libexec/sudoの中身は空っぽだった。なんでsudoが無くなってしまったかはものすごく不明。首をかしげながらsudoをインストール。

(実は最初にGuestAdditionsをインストールするときにrootで作業しているが、最初sudoでやろうと思ったらnot foundが出たのでエラー時にパスかマウントが不足して見えてなくなったと思い、めんどくさかったのでsuして作業していた・・・。ちゃんと調べてたらsudoがない事はもっと早く分かっていたかもしれない)


ssh

[root@localhost ~]# yum -y install sudo                                                                                               

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* elrepo: ftp.ne.jp
* epel: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* remi: ftp.riken.jp
* remi-php72: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp.iij.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package sudo.x86_64 0:1.8.23-3.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================================================================================
Package Arch Version Repository Size
======================================================================================================================================
Installing:
sudo x86_64 1.8.23-3.el7 base 841 k

Transaction Summary
======================================================================================================================================
Install 1 Package

Total download size: 841 k
Installed size: 3.0 M
Downloading packages:
sudo-1.8.23-3.el7.x86_64.rpm | 841 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : sudo-1.8.23-3.el7.x86_64 1/1
Verifying : sudo-1.8.23-3.el7.x86_64 1/1

Installed:
sudo.x86_64 0:1.8.23-3.el7

Complete!
[root@localhost ~]#


そして一旦シャットダウン


ssh

[root@localhost ~]# shutdown -h now


大量のログが出るとわかりにくいので、Windowsの環境変数VAGRANT_LOGは一旦外しておき、

vagrant upをしなおす。


cmd.exe

C:\vagrant>vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'bento/centos-7.5' version '201808.24.0' is up to date...
==> 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: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
[default] GuestAdditions 6.0.4 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => C:/vagrant
default: /var/www/html => C:/src/html
default: /home/vagrant/data => C:/vagrant/data
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

C:\vagrant>


今度はローカルディレクトリのマウントも出来ているよう。

とりあえずsudoがなくなったのは気持ち悪いけど直って良かった・。


※2019/02/19追記

 どうやら原因が判明。

この件の前にvimを7から8に上げたのだけど、その時にyum removeしてyum installした、気がする。

これがダメでsudoが消えたっぽい・・・。「sudo 消えた」とかで検索するとチョロチョロ引っ掛かる・・・お恥ずかしいorz

 参考記事

 ・CentOS7にvim8をインストールして簡単連番作成(後半の追記部分)