0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Vagrantで遭遇した色々なエラーまとめてみた

Last updated at Posted at 2022-05-09

背景

業務だけでなく個人開発でも、vagrantを使うことが増えたことなど、ここらで備忘録的に遭遇したエラーなどをまとめておこうと思う。
皆様ご存知のように、PC環境やらvirtualboxのバージョンやらで都度新しいエラーに遭遇します。
同じような憎しみ悩みを抱えてる人の助けになればと思います。

基本

一応、基本の使い方も書いておく
詳しい構築はいつか書く…と思う(多分)

cmd
# boxファイル取得
vagrant box add [box名]

# vagrant初期化
vagrant init [box名]

# vagrant起動
vagrant up

余談ですがvagrant box add必ずしも必要ではないです。

初回vagrant up時、事前にboxを取得していればそれを元にVMを構築し、
取得していなければ取得してくるという動作をします。
(しかも自動でaddされる)
なのでぶっちゃけしなくてもOK

vagrant initすることで初期化されますが、ここでVMを構築しているわけではありません。
vagrant initはあくまでVagrantfileを作っているだけです。
実際に構築されるのは初回vagrant up時です


Vagrantfile
config.vm.box = "[box名]"

その証拠にVagrantfile内のこの部分を別のbox名に書き換えてから
初回vagrant upすると書き換えたboxで起動するかと思います。

error: VT-x is disabled in the BIOS for all CPU modes

初めてVagrant触る人に出がちなエラー

cmd
Stderr: VBoxManage.exe: error: Not in a hypervisor partition (HVP=0) (VERR_NEM_NOT_AVAILABLE).
VBoxManage.exe: error: VT-x is disabled in the BIOS for all CPU modes (VERR_VMX_MSR_ALL_VMX_DISABLED)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

対処方法

BIOS/UEFI設定からVirtulization Technologyを有効にする

(Windows画面)
スタートメニュー > 設定(歯車アイコン) > 更新とセキュリティ
左側メニューから [回復] を選択 > 右側 PCの起動をカスタマイズする の [今すぐ再起動する]

(オプションの選択画面)
トラブルシューティング > UEFIファームウェアの設定 > 再起動

(start up menu画面)
[BIOS Setup] を選択

(BIOS/UEFI画面)
System Configuration > Virtulization Technology

Enterキーで切り替え[Enabled]にする

Exit > Exit Saving Changes
Exit Saving Changes? と聞かれるので [yes]を選択
再起動したら完了です

error: Context: "enum RTEXITCODE __cdecl handleImportAppliance(struct HandlerArg *)"

これも初めてVagrant触る人に出がちなエラー。

Vagrantが設定ファイルやらを読み込もうとした際に
そこまでのパスに日本語が含まれていてうまく読み込めず起きるエラー。
あるあるだが、Windowsユーザー名が日本語の場合起こる。
業務PCだとこういうトラップあるよね_(:3 」∠)_

対処方法

.vagrant.dフォルダの移動と環境変数の設定

■boxファイルの削除
*多分やらなくても行ける気はしますが念のため

cmd
# boxの確認
vagrant box list

# boxの削除
vagrant box remove [box名]

■.vagrant.dフォルダの移動
vagrantインストール時、インストール場所を特に変えていなければ
C:\Users\[ユーザー名]\.vagrant.d
というパスになっているはずなので

.vagrant.dフォルダをまるっと、日本語の含まれないパスに移動します。
迷ったらC直下で。C:\.vagrant.d

■環境変数の設定
スタートメニュー > 設定(歯車アイコン) > システム
左側メニューから [詳細情報] を選択 > 右側(右端) 関連設定 の [システムの詳細設定]

システムのプロパティが表示されるので
[詳細設定]タブの[環境変数]を選択

上側(ユーザーの環境変数)の[新規]
変数名VAGRANT_HOME
変数値C:\.vagrant.d(先程移動したパスを設定して下さい)を設定

それぞれの画面で[OK]を押してすべて閉じたら完了です。
*環境変数の変更はコマンドプロンプトを新しく立ち上げ直さないと反映されないので注意。

ちなみにこの.vagrant.dのフォルダの中身を見てみるとわかりますが
とってきたboxファイルだったり、defaultの秘密鍵insecure_private_keyなんかがあります。
(insecure_private_keyはvagrant upする時、
結局新しい秘密鍵へと置き換えられるようなので、ぶっちゃけ昔の名残でいるような感じだと思います)

なのでVagrant initするフォルダに日本語が含まれていなければ良いというわけではなく
VMを構築するのに必要な.vagrant.dまでのパスにも日本語が含まれないようにする必要があるわけです。

default: Warning: Authentication failure. Retrying...と
vagrant sshできない問題 と 常にパスワード聞かれる問題...

もう見たくない
そう思うほど無限沸きするAuthエラー。
そしていきなりずっとパスワードを問われる問題。
ひどい場合はvagrant sshできなくなるケース。

原因

①host側(windows)秘密鍵とguest側(vagrant)公開鍵の不一致
②それぞれの鍵へアクセスする権限がない

①については少しググると出てくるので試した人も多いかと思います。
問題は②ですね
vagrant側のパーミッション設定ミスなら楽なのですが
windows側のパーミッションだとめんどくさいです。。

対処方法

Case①

まず①からです。
鍵認証についてですが、ここでは細かい仕組みは省略します(エラー解決が本題なので)
よーわからんて人は、ひとまず秘密鍵公開鍵ってのを使って認証してるんだーと思っといてください。

それぞれの鍵がどこにあるのかというと

秘密鍵(windows)
[Vagrantfileがある場所]\.vagrant\machines\default\virtualbox\private_key
公開鍵(vagrant)
/home/vagrant/.ssh/authorized_keys

です

この二つのファイルがかみ合わなくなってしまったことで表題のエラーが起こったり
あるいはvagrant sshできなくなってしまうわけです。

直す方法はいろいろありますがここでは手っ取り早く作り直す方法で行きます。

と、その前に
windows - vagrant間でファイル共有設定をしてない人は下記手順で設定しましょう。

■プラグインvbguestの追加

プラグインの確認(cmd)
>vagrant plugin list
vagrant-vbguest (0.30.0, global)

もしまだ入っていなければ

vbguestのインストール(cmd)
vagrant plugin install vagrant-vbguest

■Vagrantfile書き換え

Vagrantfile
-  # config.vm.synced_folder "../data", "/vagrant_data"
+    config.vm.synced_folder "./share", "/home/vagrant/share"

こうすることでwindows側でVagrantfileのあるフォルダにshareというフォルダを作成すれば
shareフォルダとvagrant側の/home/vagrant/shareが共有されます。
ようするに、windows - vagrant間でファイルの受け渡しが可能になります。

設定したらvagrant reload
vagrant halt > vagrant upで読み込みなおしましょう。
後者の方が確実です。
shareフォルダを作るのを忘れてると起動しないので注意。。

■秘密鍵/公開鍵の作成~設定

cmd
vagrant ssh

もし上記ができない時はVirtual box、もしくはTeraTermなどから接続

vagrant
cd ~/.ssh
ssh-keygen

ssh-keygenをすると対話モードになり、本来はパスフレーズを決めたりするのですが
今回は面倒なのですっ飛ばします
プロンプト(元の状態)に戻ってくるまでEnterを押します(多分3回)

vagrant
ls

authorized_keys  id_rsa  id_rsa.pub

多分、こんな感じになっているはず
id_rsaが秘密鍵、id_rsa.pubが公開鍵です
これをそれぞれ置き換えていきます

vagrant
mv id_rsa.pub authorized_keys

これでvagrant側の公開鍵はできました。
次はwindows側に秘密鍵を渡してあげましょう。
共有フォルダの設定は先程やったので、そこに名前を変えて移動してあげるだけです。

vagrant
mv id_rsa ~/share/private_key
ls ~/share/

private_key

こんな感じになってればOKです
一度、vagrantを抜けます

vagrant
exit

今度はwindows側です。秘密鍵を移動しましょう。

windows
[Vagrantfileのあるフォルダ]\share\private_key

[Vagrantfileのあるフォルダ]\.vagrant\machines\default\virtualbox\private_key

と差し替えます

差し替えができたら完了です

■動作確認
vagrantを再起動してvagrant sshしてみます

cmd
vagrant reload
vagrant ssh

無事につながった方、お疲れさまでした
つながってない方は次の②も試してみましょう

Case②

Vagrantの.sshディレクトリのパーミッションを見直していきましょう
defaultの設定に合わせます

vagrant
cd ~

# 所有者/グループ変更
sudo chown vagrant:root .ssh/

# .sshパーミッション変更
sudo chmod 700 .ssh/

# 秘密鍵所有者/グループ変更
sudo chown vagrant:vagrant .ssh/authorized_keys

# 秘密鍵パーミッション変更
sudo chmod 600 .ssh/authorized_keys

設定出来たら①の時と同様vagrant reloadしてvagrant sshしてみてください

それでもダメなレアケースはwindows側も怪しいかもしれません

Case②'

windows側の所有者情報を設定します

本来、初回のvagrant upをすると
windowsのユーザーが所有者兼、実行ユーザーとして割り当てられるのですが
vagrant sshもとい鍵認証に失敗すると、自分だけでなく他のwindowsユーザーが割り当てられることがあるようです
秘密鍵は本来、複数ユーザーが扱えるようにしてはいけないというものの為
こいつが原因でコケているケースに遭遇しました。。
(Azure ADとかGroupPolicyとかやってる稀有な例かもしれませんががが)

先程の
[Vagrantfileのあるフォルダ]\.vagrant\machines\default\virtualbox\private_key
を右クリックします

プロパティ > [セキュリティ]タブ > 詳細設定

アクセス許可エントリに複数ユーザー(SYSTEMやAuthenticated Users含む)がいたらビンゴです

継承の無効化 > 現在継承されているアクセス許可で実行する処理のポップアップが表示されるので
[継承されたアクセス許可をこのオブジェクトの明示的なアクセス許可に変換します。]を選択

自分のユーザー以外を全て削除

ここまで出来たらコマンドプロンプトを立ち上げ直して
再度vagrant sshしてみます

これでもダメなら作り直した方が早いです(白目)

2022/5/12追記
もし自windowsユーザーが表示されない時は、Vagrantfileのあるフォルダを
[右クリック]→[アクセスを許可する]→[特定のユーザー]
でユーザー一覧が出てくるので追加しましょう
これでprivate_keyでも出てくるはず。

/sbin/mount.vboxsf: mounting failed with the error: No such device

割かしよくあるエラー
ちょっと前のバージョンのOS(box)を使おうとするとでてくる

原因

yum updateした際にkernelが上がることで
virtual boxで管理しているkernelの設定と差異がでることで起きるエラー

対処方法

プラグインvbguestのインストール

上記別のエラーでも入れましたが、またもこいつの出番。

cmd
vagrant plugin install vagrant-vbguest

vbguestを入れた後はvagrant up or vagrant reload
基本自動で解決してくれる。
自動でやってくれない時はやむなし

cmd
vagrant vbguest

Vagrant box addできない&vagrant upできない...つまり
外部ダウンロードできない

原因

このケースは大体においてセキュリティソフトが原因のことがほとんどです
自分の使ってるセキュリティソフト + vagrantとかで検索かけると出てくるはず…はず…

NUROで無料でついてくる諸悪の根源Kasperskyさんの設定を備忘録がてら書いておきます

設定 > ネットワーク設定
監視対象のポートの [選択したネットワークポートを監視する] にチェックを入れ
[選択]をクリック

44380ポートを無効にして保存

暗号化された接続のスキャンの [暗号化された接続をスキャンしない]を選択
(そもそも暗号化された通信をなぜお前が見るんだKasperskyさんよ…)

上記の設定で行けると思います。保存を忘れずに。。

あとがき

殴り書きに近い感じで忘れないように書いているので
変なところあるかもしれません。。

暇な時を見つけて修正とか、違った記事書くかもしれません。
気ままに書くので期待はせずにで…

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?